Dokumentasi

Dokumentasi

Jan Agent

Jan Agent tidak menyertakan mesin inferensi, jadi selalu memanggil endpoint yang Anda tentukan. Satu baris perintah jan config set menambahkan Kunavo ke ~/.jan/config.toml, dan agen terminal tersebut menjalankan Claude dan GPT menggunakan satu key.

Satu baris `jan config set --base-url https://api.kunavo.com/v1` menulis Kunavo ke ~/.jan/config.toml, dan CLI pratinjau Jan Agent — yang tidak menyertakan mesin inferensi — berjalan dengan key tersebut.

jan config set — menulis ~/.jan/config.toml
# Jan Agent is a preview on a nightly channel — check your build first.
jan --version

jan config set \
  --provider kunavo \
  --api-key sk-kn-... \
  --base-url https://api.kunavo.com/v1 \
  --model claude-sonnet-5 \
  --model claude-haiku-4-5 \
  --api-type openai

jan config list   # configured providers as JSON, keys redacted
Base URL tetap menyertakan /v1, untuk kedua jenis wire. Jan hanya menambahkan route: halaman penambahan provider menyatakan bahwa proses masuk “memvalidasi key terhadap GET {base_url}/models”, dan halaman provider menyebutkan bahwa entri yang dikonfigurasi akan ditanyakan GET /models saat Anda pertama kali membuka /model dalam sesi. Semua base URL yang tercetak dalam dokumentasi tersebut diakhiri dengan /v1 — termasuk contoh Anthropic di jan cli models list. Jadi, --api-type anthropic juga menggunakan https://api.kunavo.com/v1, kebalikan dari Claude Code dan SDK Anthropic resmi, tempat akhiran yang sama menghasilkan /v1/v1/messages dan 404. Path ganda dalam error menunjukkan konvensi mana yang Anda gunakan.
Jan Agent masih dalam pratinjau, dan dokumentasinya menyatakan demikian. Panduan mulai cepat memperingatkan bahwa installer di dev mengambil dari kanal agent-nightly — “expect nightly-quality builds”. Tidak ada rilis bertag yang dapat dirujuk, jadi jalankan jan --version dan catat string tersebut di samping konfigurasi ini: flag di bawah dirujuk dari dokumentasi pada tanggal di bagian bawah halaman ini, dan versi nightly dapat mengganti namanya. Build dari source (scripts/install-jan-agent.sh --source) tidak memperbarui dirinya secara otomatis, sehingga menjadi salah satu cara untuk mempertahankan versi.
Konfigurasi ini dirujuk dari dokumentasi Jan sendiri. Kunavo belum menjalankan Jan Agent ke endpoint-nya — belum ada sesi, giliran streaming, ataupun round-trip tool; hal yang sama berlaku untuk setiap klien dalam keluarga ini. Halaman penyiapan yang dipublikasikan bukanlah pengujian kompatibilitas. Pastikan rute yang saat ini berfungsi tetap tersedia saat Anda mencoba rute ini, dan ingat bahwa jan config unset --provider kunavo adalah seluruh langkah untuk membatalkannya.
Kunavo tidak menyediakan model embedding, text-to-speech, ataupun speech-to-text, jadi entri provider Kunavo hanya merespons chat. Jan Agent tidak memerlukan yang lain: memorinya berupa file biasa di <project>/.jan/agent/memory/, bukan penyimpanan vektor, jadi alur kerja agen itu sendiri tidak memerlukan jenis model lain.
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 Jan Agent.

Langkah demi langkah

  1. Buat key di /app/keys dan salin — key hanya ditampilkan sekali.
  2. Pastikan yang Anda konfigurasi adalah jan --version. Jan Desktop juga menyediakan CLI yang dijalankan dengan jan, tetapi perintahnya berbeda. Jadi, pastikan jan config set --help mencantumkan --base-url sebelum Anda mengetik sisanya.
  3. Jalankan baris jan config set di atas. --provider adalah ID yang Anda pilih sendiri, bukan nama dari daftar tetap — contoh perangkat keras lokal dalam dokumentasi mereka menggunakan --provider local — dan --model dapat diulang, serta mengganti daftar yang sudah ada alih-alih menambahkannya.
  4. Pastikan konfigurasi berhasil diterapkan dengan jan config list (key disamarkan) atau jan config path untuk file itu sendiri, lalu jalankan jan cli models list untuk melihat semua model yang ditawarkan setiap provider. ID model yang diketik sendiri akan tetap ada meskipun endpoint berhenti mencantumkannya; jan cli models refresh --provider kunavo menggunakan daftar dari endpoint sebagai acuan.
  5. Masuk ke direktori proyek dan jalankan jan, lalu pilih model dengan /model. Untuk uji coba pertama, pilih jan --plan: mode baca saja, sehingga ketidakcocokan protokol terlihat sebelum ada apa pun yang ditulis ke disk.
  6. Berikan tugas yang mengedit file. Jan Agent adalah agen, jadi uji coba pertama sebaiknya menguji pemanggilan tool dan streaming — hal-hal inilah yang pertama kali gagal jika endpoint hanya cocok sebagian, sementara sapaan tidak menguji keduanya.

Diperiksa terhadap Halaman Providers Jan Agent pada 21 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.

Ini versi singkatnya. Panduan lengkap — pilihan model, biaya sesi nyata, dan mode kegagalan — ada di panduan biaya API dan model Jan, yang juga membahas Jan Desktop.

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 Jan Agent.

# 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 Jan Agent
claude-sonnet-5$1.40 / $7.00model kerja default — ID yang harus dicantumkan pertama di bawah --model
claude-opus-5$3.50 / $17.50rencana yang akan mahal jika salah; pasangkan dengan jan --plan
claude-haiku-4-5$0.70 / $3.50giliran murah: triase, ringkasan, proses berulang yang berjalan sepanjang hari
gpt-5-6-sol$2.00 / $12.00pendapat kedua dari keluarga model lain, dengan kunci dan base URL yang sama
gpt-5-6-terra$0.70 / $4.20membaca konteks panjang, tetap menggunakan jenis API openai
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.

Ada dua hal berbeda yang disebut key API Jan

Keduanya berada di file yang sama tetapi memiliki arti yang berlawanan. Karena itu, jan config list dapat tampak keliru bagi orang yang mengharapkan jenis lainnya.

ApaAsalnyaYang diautentikasi
jan loginMasuk ke Tokamak, backend yang dihosting sendiri, dari shell atau dengan /login di konsolDeployment Tokamak Anda sendiri. Jan Agent menuliskan kunci yang diterimanya ke ~/.jan/config.toml untuk Anda
jan config set --api-keyKredensial yang sudah Anda miliki untuk suatu endpoint — dalam hal ini, kunci sk-kn- KunavoEndpoint tersebut, yang dikenai biaya per permintaan. Inilah baris yang dibahas di halaman ini

Jan Desktop tidak menerbitkan keduanya: aplikasi ini tidak memiliki akun, jadi tidak ada yang dapat dibuat di sana. Server API lokalnya menerima kunci yang Anda buat sendiri, yang merupakan makna ketiga dan digunakan pada host yang berbeda.

Apa yang diwariskan Jan Desktop, dan batas pewarisan tersebut

Jan Agent membaca empat sumber untuk pengaturan penyedia, masing-masing mengungguli sumber di atasnya, dan sumber kedua biasanya mengejutkan pengguna.

  1. ~/.jan/config.toml — dasar konfigurasi, dan satu-satunya file yang ditulis oleh jan config set.
  2. settings.json milik Jan Desktop — hanya diwarisi. Sumber ini menambahkan penyedia yang belum Anda konfigurasikan di Agent, tidak pernah menimpa penyedia yang sudah Anda konfigurasikan, dan tidak pernah ditulis kembali.
  3. Blok [provider] dalam agent.toml sebuah proyek — pilihan eksplisit per proyek, sehingga mengungguli keduanya. File tersebut biasanya masuk ke commit, jadi jangan sertakan api_key di dalamnya.
  4. --provider / --api-key pada baris perintah, atau JAN_API_KEY / <PROVIDER>_API_KEY — yang paling eksplisit dan paling sementara.

Ada dua konsekuensi yang perlu diketahui sebelum Anda men-debug hal yang salah. jan config list dapat melaporkan tidak ada penyedia, sementara jan cli models list mengembalikan banyak penyedia — yang kedua menyertakan penyedia yang diwarisi dari Desktop, yang tidak disimpan dalam ~/.jan/config.toml. Selain itu, penyedia yang diwarisi tidak pernah diperbarui karena tidak ada entri di sini untuk ditulis ulang: jika Anda ingin daftar model Kunavo selalu mutakhir, penyedia tersebut harus memiliki entri jan config set tersendiri, yang dibuat oleh blok di atas.

Ketika dua penyedia menawarkan ID model yang sama

Kunavo menyediakan ID seperti claude-sonnet-5, begitu pula entri penyedia yang diarahkan langsung ke vendor. Jan Agent harus memilih salah satunya, dan urutan yang didokumentasikan adalah: pertama, kecocokan persis dalam daftar models penyedia, lalu awalan <provider>/<model> yang menyebutkan penyedia yang telah dikonfigurasikan, dan ketika beberapa penyedia menawarkan ID yang sama, penyedia dengan kredensial mengungguli penyedia serupa tanpa kunci. Jadi, kunavo/claude-sonnet-5 adalah cara Anda menyatakan penyedia yang dimaksud. Penanda penyedia tersebut hanya digunakan oleh Jan — penanda ini dihapus sebelum permintaan dikirim, karena layanan upstream menolak ID yang menyertakan penanda penyedia.

Entri yang sama, dari dalam konsol

Jika Anda lebih memilih tidak mengetik flag: /settings > providers mengelola entri ~/.jan/config.toml yang sama, dan a membuka formulir penambahan dengan kolom name, base url, api key, dan models yang dipisahkan dengan spasi. Ada dua hal yang dilakukan formulir ini tetapi tidak dilakukan oleh flag: URL dasar harus menggunakan https:// (atau http:// untuk endpoint localhost), sehingga kunci tidak pernah dikirim melalui koneksi jarak jauh tanpa enkripsi — Kunavo menggunakan https://, jadi ini bukan kendala — dan saat mengedit, kolom kunci API menampilkan (unchanged) serta mempertahankan nilai yang tersimpan kecuali Anda mengetik di dalamnya. Mengosongkan kolom tersebut menghapus kunci, bukan membiarkannya tetap tersimpan.

Pertanyaan umum

Bagaimana cara mengarahkan Jan Agent ke endpoint API khusus?

Dengan satu perintah: jan config set --provider <id> --api-key <key> --base-url <url> --model <model> --api-type openai. ID penyedia Anda tentukan sendiri, bukan nama dari daftar tetap; --model dapat digunakan berulang kali dan menggantikan daftar yang sudah ada; dan --api-type secara default menggunakan format yang kompatibel dengan OpenAI, sehingga dapat dihilangkan untuk endpoint berformat OpenAI. Entri ditulis ke ~/.jan/config.toml, yang juga dapat Anda edit melalui /settings > providers di dalam konsol. Halaman Jan tentang kontribusi penyedia menyatakan bahwa endpoint biasa yang kompatibel dengan OpenAI sama sekali tidak memerlukan kode, hanya sarana konfigurasi ini.

Apakah URL dasar Jan Agent perlu diakhiri dengan /v1?

Ya, termasuk untuk jenis protokol Anthropic. Jan hanya menambahkan rute: halaman tentang kontribusi penyedia menyatakan bahwa proses masuk memvalidasi kunci melalui GET {base_url}/models, dan halaman penyedia menyatakan bahwa entri yang telah dikonfigurasikan akan dikueri melalui GET /models saat Anda pertama kali membuka /model dalam sebuah sesi. Karena jalur yang ditambahkan adalah /models, bukan /v1/models, URL dasar yang disimpan harus sudah berupa akar /v1 — https://api.kunavo.com/v1 untuk Kunavo. Setiap URL dasar yang dicantumkan dalam dokumentasi Jan berakhir dengan cara yang sama, termasuk entri Anthropic dalam contoh daftar jan cli models list. Ini kebalikan dari Claude Code dan SDK resmi Anthropic, yang akan menghasilkan /v1/v1/messages dan 404 jika Anda menambahkan /v1.

Apa perbedaan antara jan login dan jan config set --api-key?

Keduanya mengautentikasi hal yang berbeda. jan login masuk ke Tokamak, backend yang dihosting sendiri, dan menyimpan kunci yang diterima ke ~/.jan/config.toml — ini adalah proses masuk ke deployment Anda sendiri. jan config set --api-key menyimpan kredensial yang sudah Anda miliki untuk suatu endpoint, dan inilah yang digunakan untuk penyedia pihak ketiga seperti Kunavo. Jan Desktop sendiri tidak menerbitkan keduanya karena tidak memiliki akun untuk menerbitkan kunci; kunci yang diminta server API lokalnya adalah string yang Anda buat sendiri, yang merupakan makna ketiga dari istilah tersebut.

Mengapa jan config list tidak menampilkan apa pun ketika jan cli models list menampilkan model?

Karena kedua perintah membaca kumpulan yang berbeda. jan config list hanya melaporkan apa yang disimpan dalam ~/.jan/config.toml, sedangkan jan cli models list juga menyertakan penyedia yang diwarisi dari Jan Desktop, yang tidak disimpan di sana. Dokumentasi Jan menyebutkan hal ini secara langsung. Konsekuensi praktisnya adalah penyedia yang diwarisi tidak pernah diperbarui — tidak ada entri untuk ditulis ulang — jadi jika Anda ingin daftar model penyedia selalu mutakhir, tambahkan penyedia tersebut terlebih dahulu dengan jan config set.

Bisakah Jan Agent menjalankan model Claude tanpa akun Anthropic?

Ya. Jan Agent tidak menyertakan mesin inferensi, jadi model selalu berjalan di endpoint yang Anda konfigurasikan, dan --api-type menyebutkan protokol komunikasi, bukan vendor. ID Claude diresolusikan pada URL dasar yang Anda tetapkan, yang berarti kredensial yang Anda miliki adalah kredensial endpoint tersebut. Kunavo menyediakan ID Claude dan GPT melalui antarmukanya yang kompatibel dengan OpenAI menggunakan satu kunci. Konfigurasi ini dipublikasikan berdasarkan dokumentasi Jan sendiri, bukan berdasarkan pengujian pada klien, dan Jan Agent sendiri merupakan versi pratinjau di kanal nightly, jadi anggap flag tersebut berlaku untuk build yang Anda periksa dengan jan --version.

Jan Agent mengembalikan 404 pada setiap permintaan. Apa yang salah?

Hampir selalu URL dasarnya. Tanpa /v1, Jan meminta /models dan /chat/completions pada origin, yang menghasilkan 404, bukan kegagalan autentikasi; /v1/v1 yang berulang dalam pesan kesalahan berarti akhiran tersebut ditambahkan ke URL dasar yang sudah memilikinya. Pastikan terlebih dahulu di luar klien dengan memanggil GET /v1/models pada endpoint menggunakan curl biasa dan kunci yang sama: respons JSON berarti endpoint dan kunci berfungsi baik dan masalahnya terletak pada entri yang dikonfigurasikan, 401 berarti masalah pada kunci, dan 404 berarti masalah pada URL. Lalu periksa jan config path dan baca base_url yang tersimpan secara langsung.