Dokumentasi

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.

~/.config/crush/crushrc
# 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
URL dasar tetap menggunakan akhiran /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.
Gunakan --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.
Kunavo belum menguji Crush saat dijalankan — baik klien ini maupun klien lain di halaman-halaman ini. Yang diperiksa di sini adalah konfigurasi Crush yang terdokumentasi terhadap endpoint yang dipublikasikan Kunavo; halaman penyiapan bukan hasil pengujian. Jalankan satu tugas dengan cakupan terbatas sebelum menjadikannya klien utama untuk penggunaan harian.
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 Crush.

Langkah demi langkah

  1. Buat kunci di /app/keys lalu salin — kunci hanya ditampilkan sekali. Ekspor sebagai KUNAVO_API_KEY, atau ambil dari pengelola kata sandi langsung di dalam konfigurasi.
  2. 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.
  3. Mulai crush lalu tekan ctrl+l untuk membuka pemilih model. Baris model large dan model small di atas sudah menentukan kedua slot, sehingga pemilih digunakan untuk beralih, bukan untuk menyiapkan konfigurasi.
  4. Jika Anda tidak ingin mendaftarkan ID secara manual: penemuan otomatis berjalan ketika daftar model untuk penyedia openai-compat kosong, atau saat Anda memberikan --discover-models true. Kunavo merespons GET /v1/models, sehingga daftar terisi otomatis, dan nilai kolom model add Anda sendiri akan diutamakan jika terjadi konflik.
  5. 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.

Ini versi singkatnya. Panduan lengkap — pilihan model, biaya sesi nyata, dan mode kegagalan — ada di Crush dibandingkan dengan OpenCode.

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 modelKunavo masuk / keluarKegunaannya di Crush
claude-sonnet-5$1.40 / $7.00slot model besar — model pengodean dan pengeditan sehari-hari
claude-haiku-4-5$0.70 / $3.50slot model kecil, yang terus-menerus digunakan Crush untuk judul dan ringkasan
claude-opus-5$3.50 / $17.50beralih ke model besar untuk refaktor ketika rencana yang salah akan menimbulkan biaya tinggi
gpt-5-6-terra$0.70 / $4.20keluarga model kedua dengan kunci yang sama, hanya perlu menambahkan satu model lagi
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 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.