Bagian Basis Pengetahuan ▾

Navigasi

▸ Mulai di sini Berdasarkan peran

Kategori

Alat 52
Glosarium 12

Alat

Crush + JoinGonka Gateway: agen Charm pada model jaringan Gonka

Crush — coding-agent terminal dari Charm, tim yang pustakanya untuk antarmuka konsol digunakan oleh puluhan ribu program. Ia membaca dan mengedit file proyek, menjalankan perintah, mengambil konteks dari server bahasa (LSP), menghubungkan alat eksternal melalui MCP, dan mampu mengganti model di tengah sesi tanpa kehilangan konteks. Bekerja di terminal macOS, Linux, dan Windows, serta di Android dan BSD; lisensi — FSL-1.1-MIT. Silsilah proyek ini terlihat jelas: repositori arsip opencode-ai/opencode merujuk langsung ke Crush — proyek ini dilanjutkan oleh penulis pertamanya dan tim Charm.

Crush menerima dua jenis penyedia pihak ketiga — dengan API yang kompatibel dengan OpenAI dan Anthropic. JoinGonka Gateway terhubung sebagai openai-compat: dengan satu perintah penginstal atau sepuluh baris konfigurasi. Setelah itu, agen bekerja pada model jaringan terdesentralisasi Gonka — DeepSeek V4 Flash, GLM-5.3 Flash, dan MiniMax M2.7 — dengan harga seragam: $0.0069 per juta token input.

Dua fitur Crush yang perlu diketahui sebelum sesi pertama: ia menempatkan model ke dalam dua slot, large dan small, dan model yang dipilih dalam antarmuka disimpan dalam file status terpisah, yang lebih utama daripada konfigurasi. Bagian khusus didedikasikan untuk hal ini. Perintah dan pesan di bawah ini telah diverifikasi melalui eksekusi langsung Crush 0.96.1 melalui gateway pada 23 September 2026. Setelah konfirmasi alamat, akun Anda akan menerima 3M token gratis — cukup untuk mengulangi semua ini sendiri.

Mulai cepat: instalasi dan satu perintah

Langkah 1: pasang Crush. Cara resmi dari README proyek:

# Homebrew
brew install charmbracelet/tap/crush

# npm
npm install -g @charmland/crush

# Arch Linux
yay -S crush-bin

# Windows
winget install charmbracelet.crush

# Go
go install github.com/charmbracelet/crush@latest

Di sana juga dijelaskan repositori paket untuk Debian, Ubuntu, Fedora dan RHEL, Nix dan Scoop, dan di halaman rilis tersedia binary siap pakai. Verifikasi — crush --version, sebagai balasan akan muncul baris seperti crush version v0.96.1.

Buka kunci akses. Daftar di gate.joingonka.ai/register, konfirmasi alamat email, lalu buat kunci dengan awalan jg- di bagian «Kunci API». Satu kunci dan satu saldo berlaku untuk semua model di jaringan.

Jalankan penginstal.

npx @joingonka/setup --tool crush

Penginstal akan menanyakan kunci Anda — kunci tidak diberikan sebagai argumen baris perintah agar tidak tersimpan di riwayat shell — lalu melakukan empat hal:

  • mendaftarkan penyedia joingonka ke ~/.config/crush/crush.json: tipe openai-compat, alamat gateway, kunci sebagai literal, dan tiga model jaringan dengan jendela konteks, batas atas respons, dan harga per juta token yang saat instalasi diambil langsung dari gateway — berdasarkan itu Crush menghitung biaya sesi. File akan mendapatkan izin 600;
  • menetapkan model: untuk slot large — DeepSeek V4 Flash, untuk small — MiniMax M2.7, sedangkan GLM-5.3 Flash tetap ada di daftar untuk pemilihan manual. Ini hanya dilakukan jika slot large kosong atau menunjuk ke model kita yang sudah tidak ada di jaringan; pilihan lain tetap dipertahankan, dan di output akan ada petunjuk cara beralih;
  • memeriksa bahwa pilihan tersebut berlaku: model dari antarmuka Crush disimpan di file status, dan file itu menimpa konfigurasi — hal ini dibahas di bagian tentang large dan small;
  • membuat cadangan, membiarkan penyedia dan pengaturan lain apa adanya, dan diakhiri dengan permintaan langsung ke gateway untuk segera menguji kunci, alamat, dan model.

Model lain ditentukan dengan flag --model dengan singkatan deepseek, glm, atau minimax; model yang ditentukan secara eksplisit selalu ditulis. Direktori non-standar ditangani penginstal sama seperti Crush sendiri: CRUSH_GLOBAL_CONFIG untuk konfigurasi, CRUSH_GLOBAL_DATA untuk file status, serta XDG_CONFIG_HOME dan XDG_DATA_HOME. Untuk server dan skrip tersedia mode tanpa pertanyaan, di mana kunci diambil dari variabel lingkungan:

JOINGONKA_API_KEY=jg-your-key npx @joingonka/setup --tool crush --model glm --non-interactive

Format utama Crush sekarang adalah crushrc, tetapi penginstal menulis crush.json: format itu dipahami semua versi. Jika Anda sudah memiliki crushrc, Crush akan menggabungkan kedua file, jika kunci sama maka crushrc yang menang, dan penginstal tidak menyentuhnya.

Konfigurasi manual: crush.json atau crushrc

Semua yang dilakukan installer bisa ditulis sendiri dengan tangan. Berikut ~/.config/crush/crush.json yang berfungsi — file ini sudah kami lewatkan melalui gateway:

{
  "$schema": "https://charm.land/crush.json",
  "providers": {
    "joingonka": {
      "name": "JoinGonka (Gonka)",
      "type": "openai-compat",
      "base_url": "https://gate.joingonka.ai/v1",
      "api_key": "jg-your-key",
      "models": [
        { "id": "deepseek-ai/DeepSeek-V4-Flash-0731", "name": "DeepSeek V4 Flash (Gonka)",
          "context_window": 380000, "default_max_tokens": 32768,
          "can_reason": true, "supports_attachments": false },
        { "id": "MiniMaxAI/MiniMax-M2.7", "name": "MiniMax M2.7 (Gonka)",
          "context_window": 200000, "default_max_tokens": 8192,
          "can_reason": false, "supports_attachments": false },
        { "id": "zai-org/GLM-5.3-Flash", "name": "GLM-5.3 Flash (Gonka)",
          "context_window": 390000, "default_max_tokens": 8192,
          "can_reason": true, "supports_attachments": false }
      ]
    }
  },
  "models": {
    "large": { "provider": "joingonka", "model": "deepseek-ai/DeepSeek-V4-Flash-0731" },
    "small": { "provider": "joingonka", "model": "MiniMaxAI/MiniMax-M2.7" }
  }
}
KolomNilaiYang penting
typeopenai-compatTipe untuk layanan pihak ketiga dengan API yang kompatibel dengan OpenAI. Tipe openai menurut dokumentasi Crush disediakan untuk permintaan lewat OpenAI sendiri
base_urlhttps://gate.joingonka.ai/v1Dengan /v1 di akhir: jalur /chat/completions ditambahkan sendiri oleh Crush
api_keykunci Anda jg-…Crush melewatkan nilai ini melalui substitusi shell, jadi alih-alih kunci Anda bisa menulis $JOINGONKA_API_KEY — variabel itu lalu harus diekspor di tempat Crush dijalankan
context_windowjendela modelDari sini Crush menampilkan seberapa penuh konteks dan memutuskan kapan riwayat perlu dipadatkan
default_max_tokensplafon balasanDikirim di setiap permintaan sebagai max_tokens. Pada model penalaran, budget ini juga mencakup proses penalarannya

Crush hanya menerima JSON yang ketat: satu komentar atau koma menggantung — dan ia tidak mau start. Kolom harga (cost_per_1m_in, cost_per_1m_out dan dua kolom untuk cache) hanya diperlukan oleh penghitung biaya: installer mengisi harga gateway yang berlaku di sana, dan tanpa kolom itu Crush tetap berjalan dan menampilkan nol — hanya editor dengan skema dari $schema yang akan menandainya sebagai wajib.

Provider yang sama dalam format crushrc — ini Bash biasa dengan perintah bawaan Crush. File ~/.config/crush/crushrc:

provider add joingonka \
  --name "JoinGonka (Gonka)" \
  --type openai-compat \
  --base-url "https://gate.joingonka.ai/v1" \
  --api-key "${JOINGONKA_API_KEY:?set JOINGONKA_API_KEY}"

model add joingonka/deepseek-ai/DeepSeek-V4-Flash-0731 \
  --name "DeepSeek V4 Flash (Gonka)" \
  --context-window 380000 --default-max-tokens 32768 --can-reason true

model add joingonka/MiniMaxAI/MiniMax-M2.7 \
  --name "MiniMax M2.7 (Gonka)" \
  --context-window 200000 --default-max-tokens 8192

model add joingonka/zai-org/GLM-5.3-Flash \
  --name "GLM-5.3 Flash (Gonka)" \
  --context-window 390000 --default-max-tokens 8192 --can-reason true

model large joingonka/deepseek-ai/DeepSeek-V4-Flash-0731
model small joingonka/MiniMaxAI/MiniMax-M2.7

Di sini model ditulis dalam bentuk provider/model-id: sebelum garis miring pertama adalah nama provider, setelahnya adalah pengenal jaringan apa adanya. Bentuk ${JOINGONKA_API_KEY:?…} menjaga kunci tetap di luar file, tetapi tanpa variabel yang diekspor Crush tidak akan start — lebih baik error saat start daripada permintaan dengan kunci kosong.

Model large dan small serta berkas status

Model di Crush tidak dipilih secara keseluruhan, melainkan untuk dua slot:

SlotApa yang dijalankanApa yang dipasang oleh installerCara mengubah
largeAgen utama: semua langkah termasuk membaca dan mengedit file serta perintahDeepSeek V4 Flash: jendela 380K dan batas respons tertinggi di jaringan, 32768ctrl+l di antarmuka, -m pada crush run, models.large di konfigurasi
smallTugas tambahan: nama sesi dan sub-agen yang mencari di web dan membaca halaman web. Jika model kecil gagal membuat nama, Crush mengulang permintaan ke model besarMiniMax M2.7: memiliki kapasitas paling banyak di jaringan--small-model pada crush run, models.small di konfigurasi, model small di crushrc

Model ketiga di jaringan, model penalaran GLM-5.3 Flash, dipilih untuk logika yang rumit, dengan catatan bahwa batas responsnya adalah 8192 dan sebagian digunakan untuk penalaran — detail lebih lanjut ada di tinjauan model. Untuk satu kali eksekusi, model ditentukan dengan nama lengkap: crush run -m joingonka/zai-org/GLM-5.3-Flash "…". Semua nama yang tersedia akan dicetak oleh crush models joingonka.

File status. Model yang dipilih di antarmuka melalui ctrl+l, tidak disimpan oleh Crush ke dalam crush.json, melainkan ke file status mesin: ~/.local/share/crush/crush.json, di Windows — %LOCALAPPDATA%\crush\crush.json. File ini lebih utama daripada konfigurasi pengguna dan crushrc: Crush membacanya secara berurutan /etc/crush/crush.json → ~/.config/crush/crush.json → ~/.config/crush/crushrc → file status, dan setiap file selanjutnya menimpa yang sebelumnya. Di atasnya hanya terdapat pengaturan proyek — crush.json atau crushrc di direktori proyek tersebut. Di mana lokasi file di mesin Anda akan ditunjukkan oleh crush dirs.

Dalam percobaan kami, kami membuka pemilihan model — penyedia «JoinGonka (Gonka)» ada di sana dengan tanda «✓ Configured» — dan memilih MiniMax M2.7. Crush menjawab «Large model changed to MiniMax M2.7 (Gonka)» dan menulis ke file status:

{"models":{"large":{"model":"MiniMaxAI/MiniMax-M2.7","provider":"joingonka","max_tokens":8192}}, …}

Sekarang model ini lebih utama daripada yang tertulis di crush.json. Installer mengenali situasi ini dan berperilaku berbeda:

  • tanpa --model ia tidak menyentuh file status — ini adalah pilihan kerja Anda — tetapi memberikan peringatan jelas dengan model apa Crush sebenarnya akan terbuka: Heads-up: Crush will still start with joingonka/MiniMaxAI/MiniMax-M2.7, not joingonka/deepseek-ai/DeepSeek-V4-Flash-0731. Hal yang sama terjadi jika GLM-5.3 Flash atau model penyedia lain dipilih di antarmuka;
  • dengan --model eksplisit ia mengubah tepat satu entri di file status — models.large — setelah menyimpan salinan terlebih dahulu, dan menulis apa yang terjadi sebelumnya dan sesudahnya. Jika tidak, flag tersebut tidak akan berpengaruh secara diam-diam. Setelah peluncuran tersebut, Crush dalam percobaan kami terbuka dengan model yang ditentukan dalam flag.

Verifikasi: apa yang seharusnya terjadi

Pertama-tama, pastikan Crush bisa melihat penyedianya:

crush models joingonka

Balasannya berupa tiga baris:

joingonka/MiniMaxAI/MiniMax-M2.7
joingonka/deepseek-ai/DeepSeek-V4-Flash-0731
joingonka/zai-org/GLM-5.3-Flash

Setelah itu, jalankan sekali tanpa antarmuka. Taruh file dengan bug yang jelas di direktori proyek dan minta ia menemukannya:

crush run -q "Read calc.py and tell me in one sentence whether it has a bug."

Agen harus memanggil sendiri alat pembaca file dan menjawab secara substantif, lengkap dengan nomor barisnya. Pada uji coba kami, ketiga model di jaringan berhasil menemukan bug tersebut, dan tugasnya selesai dalam 20-40 detik. Flag -q menyembunyikan indikator tunggu. Dalam mode crush run, semua pemanggilan alat disetujui otomatis, jadi jalankanlah di proyek Anda sendiri. Di antarmuka biasa (perintah crush), model aktif terlihat di baris status: ◇ DeepSeek V4 Flash (Gonka) via JoinGonka (Gonka). Crush menyimpan sesi dan log di direktori .crush proyek, yang dilindungi dari git oleh .gitignore-nya sendiri; log ditampilkan dengan crush logs. Dari sisi gateway, permintaan terlihat di dasbor: bagian "Penggunaan", rincian "Per model" dan "Per kunci".

Kalau ada yang tidak beres, diagnosisnya biasanya bisa dibaca langsung dari pesannya:

Yang terlihatArtinyaYang harus dilakukan
unauthorized: Invalid API key.Gateway menolak kunci tersebutPeriksa api_key: kunci secara utuh, tanpa spasi. Kalau isinya referensi ke variabel, variabel itu harus diekspor di shell ini
invalid JSON in config file …/crush.jsonFile berisi komentar, koma menggantung, atau salah ketikCrush hanya menerima JSON ketat: perbaiki filenya. Penginstal tidak membersihkan komentar sendiri, tetapi memberi peringatan tentangnya; file yang sama sekali tidak bisa diurai tidak akan disentuh dan penyebabnya akan disebutkan
failed to load shell config …/crushrc: … exit status 1Ada error di crushrc, paling sering karena variabel berisi kunci dalam bentuk ${…:?} tidak didefinisikanEkspor variabelnya sebelum menjalankan, atau perbaiki baris tempat skrip gagal
Failed to override models: large model "…" not foundSalah ketik nama model pada flag -mSalin nama dari keluaran crush models joingonka
too many requests: Model "…" is currently overloaded in the Gonka network (rate limit)Kapasitas model di jaringan habis saat jam sibukCrush mengulang sendiri permintaannya dengan jeda yang makin panjang — pada uji coba kami sekitar satu menit — dan baru menyerah setelah itu. Beralihlah ke model lain lewat ctrl+l atau -m, atau tunggu saja; statusnya bisa dilihat di halaman status
Crush terbuka bukan pada model yang diberitahukan penginstalPilihan dari antarmuka tersimpan di file status dan menimpa konfigurasiPilih model lewat ctrl+l atau ulangi instalasi dengan --model
402Saldo habisIsi ulang di bagian "Penagihan"; kuncinya sendiri tetap berfungsi

Berapa biayanya

Agen menghabiskan token secara berbeda dari obrolan: untuk setiap kalimat Anda, Crush menambahkan prompt sistem dan deskripsi alatnya, dan tugas biasanya memakan beberapa langkah. Dalam pengujian kami, setiap permintaan ke model membawa sekitar 11,5 ribu token input, dan tugas "membaca file dan mencari kesalahan" memakan dua-tiga permintaan dan 23-35 ribu token, hampir semuanya adalah input. Oleh karena itu, harga per token di sini sangat menentukan.

Melalui JoinGonka Gateway, token berharga $0.0069 per juta di input dan $0.021 per juta di output — harga sama untuk semua model jaringan dan diambil di halaman ini dari sumber langsung.

SkenarioPenggunaanMelalui Gateway
Tugas sekali jalan: baca file, cari kesalahan23-35K tokenseperseratus sen
Hari kerja aktif3-7M tokenbeberapa sen
Bulan pengembangan aktif~150M tokensekitar satu dolar

Estimasi di kolom kanan berdasarkan harga pada September 2026. Sebagai perbandingan — bagaimana cara membayar model di Crush:

CaraModel PembayaranApa yang membatasi
Hyper — penyedia resmi Charmlangganan, ada level gratisketentuan tarif di pihak Charm
Kunci vendor langsungper token sesuai harga vendortagihan meningkat seiring durasi sesi; harga tergantung model
JoinGonka Gatewayper token, saldo prabayarpenggunaan terlihat di akun; tidak ada langganan atau kuota bulanan

Penghitung biaya di antarmuka Crush menghitung berdasarkan bidang harga dari konfigurasi. Data yang masuk adalah harga gateway saat instalasi, dan harga dolar di jaringan berfluktuasi mengikuti kurs GNK, jadi penghitung hanya sebagai acuan. Penggunaan dan sisa saldo yang akurat ada di akun Anda, di bagian "Penggunaan" dan "Penagihan". Mengapa DeepSeek V4 Flash secara default berada di slot large dijelaskan secara rinci di ulasan model.

Hal yang perlu diperhatikan saat bekerja

Izin. Di antarmuka Crush secara default meminta izin sebelum memanggil alat. Flag --yolo mematikan semua pertanyaan sekaligus, sedangkan alat yang dipercaya secara spesifik didaftarkan di konfigurasi:

# crushrc
permissions allow view ls grep

# crush.json
"permissions": { "allowed_tools": ["view", "ls", "grep"] }

Perlu diingat bahwa crush run menyetujui semuanya sendiri. Ini adalah sifat Crush, tidak bergantung pada penyedia model.

Timeout permintaan. Crush memutus permintaan jika tidak ada satu pun fragmen respons yang datang dari model dalam waktu lama: di versi 0.96.1 batasnya dua menit hening (dokumentasi menyebut 60 detik, tetapi di kode dan pada pengujian kami — dua menit). Ping layanan yang digunakan gateway untuk menjaga koneksi tidak mereset penghitung ini — kami sudah memverifikasinya di lingkungan lokal. Gateway sendiri pada jam sibuk menunggu token pertama dari jaringan hingga 150 detik, jadi cadangannya sebaiknya dinaikkan:

# crushrc
option request-timeout 300

# crush.json
"options": { "request_timeout": 300 }

Tanda tangan di commit. Commit dan pull request yang dibuat Crush secara default mendapatkan baris Assisted-by: Crush:<model> dan keterangan Generated with Crush. Jika tidak diperlukan:

# crushrc
option attribution-trailer-style none
option attribution-generated-with false

# crush.json
"options": { "attribution": { "trailer_style": "none", "generated_with": false } }

Metrik. Crush mengirimkan statistik penggunaan pseudonim kepada pengembang — hanya metadata, tanpa prompt dan respons. Dinonaktifkan dengan variabel CRUSH_DISABLE_METRICS=1 atau DO_NOT_TRACK=1. Gateway, dari sisinya, tidak menyimpan isi prompt dan respons — dalam statistik hanya tersisa agregat pemakaian.

Konfigurasi adalah kode. Baik crushrc maupun crush.json dijalankan Crush dengan hak akses shell Anda: $(…) di kolom kunci akan dieksekusi saat pemuatan, dan crushrc proyek akan aktif begitu Anda membuka Crush di direktori tersebut. Jangan menjalankan agen di repositori orang lain tanpa membaca konfigurasinya.

Crush terhubung ke JoinGonka Gateway dengan satu perintah — npx @joingonka/setup --tool crush — atau melalui blok providers.joingonka di ~/.config/crush/crush.json: tipe openai-compat, alamat https://gate.joingonka.ai/v1, kunci jg-…, dengan model yang memiliki context_window dan default_max_tokens yang akurat. Hal yang sama dapat ditulis dengan beberapa baris provider add dan model add di crushrc. Slot large diberikan ke DeepSeek V4 Flash, slot small ke MiniMax M2.7, dan GLM-5.3 Flash untuk logika yang rumit. Jebakan utamanya adalah file status: model yang dipilih melalui ctrl+l lebih diutamakan daripada konfigurasi, sehingga penginstal dengan opsi eksplisit --model juga mengubahnya. Untuk verifikasi, gunakan crush models joingonka dan crush run; sebaiknya naikkan batas waktu permintaan hingga 300 detik.

Ingin tahu lebih banyak?

Jelajahi bagian lain atau mulai hasilkan GNK sekarang.

Dapatkan kunci dan token gratis →