Dokumentasi

Dokumentasi

opencode

opencode membangun penyedianya di atas Vercel AI SDK, jadi untuk mengarahkannya ke endpoint baru cukup tambahkan satu blok yang menyebut paket npm dan baseURL. Paket yang Anda sebutkan menentukan format protokol yang digunakan.

Satu blok provider di opencode.json — @ai-sdk/openai-compatible untuk chat completions, @ai-sdk/openai saat Anda menginginkan permukaan /v1/responses.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "kunavo": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Kunavo",
      "options": {
        "baseURL": "https://api.kunavo.com/v1",
        "apiKey": "{env:KUNAVO_API_KEY}"
      },
      "models": {
        "claude-sonnet-5": {
          "name": "Claude Sonnet 5",
          "limit": { "context": 200000, "output": 64000 }
        },
        "claude-haiku-4-5": { "name": "Claude Haiku 4.5" }
      }
    }
  }
}
Diuji pada 2026-10-10 dengan opencode 1.18.35: satu tugas pemrograman nyata selesai dari awal sampai akhir dengan claude-sonnet-5 dan blok provider di atas. Model GPT belum bisa diandalkan di opencode — opencode mengirim batas output di setiap permintaan, dan dengan batas itu, penyedia di balik model GPT kami kadang menghilangkan panggilan alat model dari balasannya, sehingga satu giliran berakhir tanpa perubahan yang dimaksud. Gunakan model Claude di opencode sampai catatan ini dihapus.
Field npm menentukan format protokol. @ai-sdk/openai-compatible menggunakan /v1/chat/completions; @ai-sdk/openai menggunakan /v1/responses. Kunavo menyediakan keduanya, jadi Anda dapat menggunakan salah satunya — gunakan paket Responses jika ingin item penalaran diteruskan pada keluarga GPT, dan paket chat-completions untuk kebutuhan lainnya.
"apiKey": "{env:KUNAVO_API_KEY}" membaca kunci dari lingkungan saat konfigurasi dimuat. opencode.json adalah file yang akhirnya masuk ke repositori; kunci literal di dalamnya tidak akan tetap rahasia.
Tetapkan limit.context dan limit.output untuk setiap model. opencode melacak sisa konteks berdasarkan angka tersebut, jadi model yang tidak mencantumkannya akan dihitung berdasarkan nilai default yang bukan miliknya.
Belum punya kunci? Buat akun Kunavo, buat kunci (diawali sk-kn-) dan tambahkan kredit mulai dari $10 — panggilan dibayar dari saldo tersebut, dan panggilan yang gagal tidak ditagihkan. Dasbor kemudian terbuka pada penyiapan opencode.

Langkah demi langkah

  1. Buat key di /app/keys dan salin — key hanya ditampilkan sekali.
  2. Ekspor: export KUNAVO_API_KEY=sk-kn-...
  3. Tambahkan blok penyedia ke opencode.json — file global di ~/.config/opencode/opencode.json untuk semua proyek, atau file di root proyek yang hanya berlaku untuk repositori ini.
  4. Jalankan opencode dan pilih model dari daftar model; penyedia akan muncul di bawah name yang Anda berikan.
  5. Untuk menambahkan model nanti, tambahkan kunci lain di bawah models — ID adalah nilai yang dikirim melalui protokol, sedangkan name hanya label.

Diperiksa terhadap dokumentasi penyedia opencode pada 6 September 2026. Pengaturan pihak ketiga dapat berubah; jika nama bidang di sini tidak lagi sama dengan yang Anda lihat, halaman tersebut adalah acuan, bukan halaman ini.

Verifikasi sebelum men-debug klien

Satu permintaan menentukan apakah masalahnya ada pada endpoint, kunci, atau berkas konfigurasi. Jika ini mengembalikan JSON, base URL dan kunci yang sama berfungsi di opencode.

# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
  -H "Authorization: Bearer sk-kn-..."

ID model yang harus dimasukkan ke bidang

Setiap model teks dapat diakses melalui ID model — daftar terkininya ada di GET /v1/models, dan katalog beserta harga ada di halaman model. Tarif dalam USD per 1 juta token, input / output.

ID modelKunavo masuk / keluarKegunaannya di opencode
claude-sonnet-5$1.40 / $7.00model build default
claude-opus-5$3.50 / $17.50mode perencanaan, saat rencana menentukan semua langkah setelahnya
claude-haiku-4-5$0.70 / $3.50pekerjaan sub-agen dan pencarian, saat jumlah permintaan tinggi
gpt-5-6-sol$2.00 / $12.00gunakan dengan @ai-sdk/openai agar item penalaran tetap utuh selama proses bolak-balik
Penagihan dilakukan per token dari saldo prabayar tanpa biaya bulanan — lihat penagihan. Pada konteks berulang — yang merupakan sebagian besar kiriman editor atau klien obrolan — caching prompt lebih memengaruhi tagihan daripada pilihan model.

Pertanyaan umum

Bagaimana cara menambahkan penyedia kustom ke opencode?

Tambahkan blok di bawah "provider" dalam opencode.json dengan nama paket npm, nama tampilan, options.baseURL, options.apiKey, dan peta models. Gunakan @ai-sdk/openai-compatible untuk endpoint yang menyediakan /v1/chat/completions dan @ai-sdk/openai untuk endpoint yang menyediakan /v1/responses. Penyedia kemudian akan muncul dalam daftar model opencode dengan nama yang Anda berikan.

Bagaimana cara menjaga agar kunci API tidak tersimpan di opencode.json?

Gunakan sintaks interpolasi {env:VAR_NAME} di options.apiKey — misalnya, "apiKey": "{env:KUNAVO_API_KEY}" — lalu ekspor variabel tersebut di shell. opencode menyelesaikannya saat memuat konfigurasi, sehingga file tetap aman untuk di-commit bersama proyek yang dikonfigurasikannya.

Apa perbedaan @ai-sdk/openai dan @ai-sdk/openai-compatible di opencode?

Keduanya memilih endpoint yang berbeda pada URL dasar yang sama. @ai-sdk/openai-compatible memanggil /chat/completions, yang diimplementasikan oleh hampir semua gateway; @ai-sdk/openai memanggil /responses, permukaan OpenAI yang lebih baru. Pilih paket yang benar-benar disediakan endpoint Anda — menggunakan paket yang salah akan menghasilkan 404 dari URL dasar yang sebenarnya sudah benar.

Mengapa opencode kehabisan konteks lebih cepat dari perkiraan?

Karena entri model tidak memiliki blok limit, sehingga opencode menghitung berdasarkan nilai default alih-alih jendela sebenarnya milik model. Tambahkan "limit": { "context": <window>, "output": <max output> } ke model tersebut di opencode.json dengan menggunakan angka dari katalog penyedia, maka indikator konteks dan titik pemadatan akan sesuai dengan kondisi sebenarnya.