Dokumentasi
Crush
Crush adalah agen pengodean terminal milik Charm — bukan shell Rust dengan nama yang sama. Konfigurasinya menggunakan Bash, jadi untuk mengarahkannya ke endpoint lain, cukup tambahkan satu penyedia dengan jenis, URL dasar, dan kunci.
Konfigurasi Crush berbasis Bash — satu `provider add kunavo --type openai-compat --base-url "https://api.kunavo.com/v1"` dalam crushrc menempatkan agen terminal Charm pada Claude dan GPT.
# A crushrc is Bash, not a settings file. Everything here is executed.
provider add kunavo \
--type openai-compat \
--base-url "https://api.kunavo.com/v1" \
--api-key "${KUNAVO_API_KEY:?set KUNAVO_API_KEY}"
model add kunavo/claude-sonnet-5 \
--name "Claude Sonnet 5" \
--context-window 1000000 \
--default-max-tokens 32000 \
--price-input 1.4 \
--price-output 7
model add kunavo/claude-haiku-4-5 \
--name "Claude Haiku 4.5" \
--context-window 200000 \
--default-max-tokens 16000 \
--price-input 0.7 \
--price-output 3.5
model large kunavo/claude-sonnet-5
model small kunavo/claude-haiku-4-5/v1. Contoh OpenAI-kompatibel yang didokumentasikan Crush sendiri adalah --base-url "https://api.deepseek.com/v1", dan contoh Anthropic-kompatibelnya juga berakhiran sama — jadi akhiran ini merupakan konvensi klien, bukan tebakan. Jika akhiran dihilangkan, kesalahan yang muncul adalah 404, bukan kesalahan autentikasi.--type openai-compat, bukan openai. README membedakan keduanya dengan jelas: openai digunakan untuk memproksikan atau merutekan permintaan melalui OpenAI, sedangkan openai-compat digunakan untuk penyedia non-OpenAI dengan API yang kompatibel dengan OpenAI. Kunavo termasuk kasus kedua.crushrc adalah Bash dengan fungsi bawaan Crush, dan Crush memperingatkan bahwa kode tersebut tepercaya — kode berjalan dalam shell penuh. Ini juga yang membuat --api-key "$(op read ...)" dapat menyimpan kunci di luar file. crush.json yang lebih lama masih dapat dimuat, tetapi README menyebutnya usang, jadi gunakan crushrc.sk-kn-) dan tambahkan kredit mulai dari $10 — panggilan dibayar dari saldo tersebut, dan panggilan yang gagal tidak ditagihkan. Dasbor kemudian terbuka pada penyiapan Crush.Langkah demi langkah
- Buat kunci di
/app/keyslalu salin — kunci hanya ditampilkan sekali. Ekspor sebagaiKUNAVO_API_KEY, atau ambil dari pengelola kata sandi langsung di dalam konfigurasi. - Masukkan blok di atas ke
~/.config/crush/crushrc. Crush membaca./.crushrc, lalu./crushrc, lalu konfigurasi global, sehingga proyek dapat mengesampingkan pengaturan mesin — dan repositori yang Anda kloning dapat menyertakan file konfigurasinya sendiri. - Mulai
crushlalu tekanctrl+luntuk membuka pemilih model. Barismodel largedanmodel smalldi atas sudah menentukan kedua slot, sehingga pemilih digunakan untuk beralih, bukan untuk menyiapkan konfigurasi. - Jika Anda tidak ingin mendaftarkan ID secara manual: penemuan otomatis berjalan ketika daftar model untuk penyedia
openai-compatkosong, atau saat Anda memberikan--discover-models true. Kunavo meresponsGET /v1/models, sehingga daftar terisi otomatis, dan nilai kolommodel addAnda sendiri akan diutamakan jika terjadi konflik. - Jalankan satu tugas dengan cakupan terbatas, lalu periksa biaya yang tercatat di akun Anda pada
/app/billing. Angka di terminal merupakan hasil perhitungan berdasarkan nilai--price-*yang Anda masukkan; buku besar mencatat tagihannya.
Diperiksa terhadap bagian Penyedia Khusus Crush 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.
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 Crush.
# 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 model | Kunavo masuk / keluar | Kegunaannya di Crush |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | slot model besar — model pengodean dan pengeditan sehari-hari |
claude-haiku-4-5 | $0.70 / $3.50 | slot model kecil, yang terus-menerus digunakan Crush untuk judul dan ringkasan |
claude-opus-5 | $3.50 / $17.50 | beralih ke model besar untuk refaktor ketika rencana yang salah akan menimbulkan biaya tinggi |
gpt-5-6-terra | $0.70 / $4.20 | keluarga model kedua dengan kunci yang sama, hanya perlu menambahkan satu model lagi |
Pertanyaan umum
Bagaimana cara menambahkan penyedia API khusus ke Crush CLI?
Tuliskan ke dalam crushrc, yaitu Bash dengan builtin Crush. Satu baris mendaftarkan endpoint — provider add kunavo --type openai-compat --base-url "https://api.kunavo.com/v1" --api-key "$KUNAVO_API_KEY" — dan perintah model add untuk setiap ID mendaftarkan model yang ingin Anda panggil, beserta nama tampilan, jendela konteks, dan harga per sejuta token yang digunakan Crush untuk perkiraan di layar. Crush membaca ./.crushrc, lalu ./crushrc, kemudian ~/.config/crush/crushrc, sehingga blok yang sama berfungsi untuk setiap proyek atau mesin.
Apakah URL dasar Crush harus diakhiri dengan /v1?
Ya. Contoh penyedia kustom Crush sendiri menuliskan sufiks tersebut untuk kedua jenis: https://api.deepseek.com/v1 untuk kasus yang kompatibel dengan OpenAI dan https://api.anthropic.com/v1 untuk yang kompatibel dengan Anthropic. Untuk kunci Kunavo, nilainya adalah https://api.kunavo.com/v1. Ini kebalikan dari Claude Code, yang menggunakan origin tanpa tambahan apa pun untuk ANTHROPIC_BASE_URL karena klien itu menambahkan path sendiri — gateway yang sama, dua penulisan, dan /v1 yang hilang akan menghasilkan 404, bukan 401.
Sebaiknya saya menggunakan --type openai atau --type openai-compat?
openai-compat, untuk gateway pihak ketiga mana pun. README Crush menetapkan openai untuk mem-proxy atau merutekan permintaan melalui OpenAI sendiri, dan mengarahkan penyedia non-OpenAI dengan API yang kompatibel dengan OpenAI ke openai-compat. Jenis ini juga menentukan perilaku di luar format wire: penemuan model otomatis berjalan untuk penyedia openai-compat yang daftar modelnya kosong. Crush juga mendukung --type anthropic untuk endpoint yang kompatibel dengan Anthropic, yang menggunakan --extra-header anthropic-version 2023-06-01.
Apakah crush.json masih merupakan tempat yang tepat untuk konfigurasi ini?
Tidak. crush.json adalah format lama, dan dokumentasi Crush sendiri kini menyebutnya usang serta tidak akan mendapat fitur baru; format saat ini adalah crushrc. Perhatikan bahwa keduanya dieksekusi, bukan diuraikan — crushrc berjalan di shell penuh, dan apa pun di dalam $(...) pada crush.json diperluas saat dimuat — itulah sebabnya dokumentasi memperingatkan agar tidak menjalankan Crush di direktori yang konfigurasinya belum Anda baca, dan mengapa mengambil kunci dari pengelola kata sandi di dalam konfigurasi bisa dilakukan.
Mengapa biaya yang ditampilkan Crush berbeda dari biaya yang ditagihkan kepada saya?
Karena keduanya adalah angka berbeda dari sumber yang berbeda. Perkiraan di layar untuk penyedia yang didaftarkan secara manual dihitung dari nilai --price-input dan --price-output yang Anda masukkan ke model add; untuk penyedia bawaan, nilainya berasal dari Catwalk, katalog penyedia eksternal milik Crush. Keduanya tidak membaca akun Anda. Kesalahan ketik pada flag --price-* menghasilkan angka yang keliru di layar, bukan tagihan yang keliru. Cocokkan dengan buku besar di /app/billing.
Bisakah Crush menggunakan model Claude atau GPT melalui penyedia kustom?
Ya, dan tidak ada batasan di Crush yang melarangnya. Charm Hyper adalah penyedia resmi yang diarahkan oleh proses penyiapan, tetapi penyedia kustom merupakan cara yang didukung penuh dan terdokumentasi tanpa pembatasan paket, dan ID model ditentukan di endpoint, bukan di klien. Jadi, ID Claude pada penyedia openai-compat adalah kombinasi yang memang dimaksudkan: jenisnya menunjukkan protokol wire, bukan vendor.