Mga Seksyon ng Base ng Kaalaman ▾

Nabigasyon

▸ Magsimula rito Ayon sa papel

Mga Kategorya

Mga Gamit 52
Glosaryo 12

Mga Tool

Crush + JoinGonka Gateway: Charm agent sa mga modelo ng network ng Gonka

Crush — isang terminal coding-agent mula sa Charm, ang team na ang mga library para sa console interfaces ang pundasyon ng sampu-sampung libong programa. Binabasa at binabago nito ang mga project file, nagpapatakbo ng mga command, kumukuha ng context mula sa mga language server (LSP), nagkokonekta ng mga external tool sa pamamagitan ng MCP, at kaya nitong magpalit ng modelo sa gitna ng session nang hindi nawawala ang context. Gumagana ito sa macOS, Linux, at Windows terminals, pati na rin sa Android at BSD; ang lisensya ay FSL-1.1-MIT. Kapansin-pansin ang pinagmulan ng proyekto: ang archival repository na opencode-ai/opencode ay direktang tumutukoy sa Crush — ipinagpatuloy ito ng unang awtor nito at ng team ng Charm.

Tumatanggap ang Crush ng dalawang uri ng third-party providers — mga may OpenAI- at Anthropic-compatible API. Ang JoinGonka Gateway ay kumokonekta bilang openai-compat: sa pamamagitan ng isang installer command o sampung linya ng config. Pagkatapos nito, ang agent ay gagana sa mga modelo ng decentralized network na Gonka — DeepSeek V4 Flash, GLM-5.3 Flash, at MiniMax M2.7 — sa parehong presyo: $0.0069 bawat milyong input tokens.

May dalawang feature ng Crush na dapat malaman bago ang unang session: inilalagay nito ang mga modelo sa dalawang slot, large at small, at ang modelong pinili sa interface ay nakatago sa isang hiwalay na state file na mas mataas ang priyoridad kaysa sa config. May nakalaang hiwalay na seksyon para dito. Ang mga command at mensahe sa ibaba ay sinuri gamit ang live run ng Crush 0.96.1 sa pamamagitan ng gateway noong Setyembre 23, 2026. Pagkatapos kumpirmahin ang address, makakatanggap ng 3M na libreng tokens — sapat na ito para subukan ang lahat ng ito nang mag-isa.

Quick start: pag-install at isang command

Hakbang 1: i-install ang Crush. Ang mga opisyal na paraan mula sa README ng proyekto:

# 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

Nakalista rin doon ang mga package repository para sa Debian, Ubuntu, Fedora at RHEL, Nix at Scoop, at may mga ready-made binary sa releases page. Para i-verify — crush --version, sasagot ito ng linyang tulad ng crush version v0.96.1.

Hakbang 2: kumuha ng key. Magrehistro sa gate.joingonka.ai/register, kumpirmahin ang address at gumawa ng key na may prefix na jg- sa seksyong "API keys". Isang key at isang balance ang gumagana para sa lahat ng modelo sa network.

Hakbang 3: patakbuhin ang installer.

npx @joingonka/setup --tool crush

Tatanungin ng installer ang key — hindi ito ipinapasa sa command-line arguments para hindi ito maiwan sa shell history — at gagawin nito ang apat na bagay:

  • isusulat ang provider na joingonka sa ~/.config/crush/crush.json: uri na openai-compat, address ng gateway, ang key bilang literal at tatlong modelo ng network na may context windows, response ceilings at presyo kada milyong token, na kinukuha nito nang live mula sa gateway sa oras ng pag-install — ginagamit ng Crush ang mga ito para kalkulahin ang halaga ng session. Makakakuha ang file ng permissions na 600;
  • magtatalaga ng mga modelo: sa large slot — DeepSeek V4 Flash, sa small — MiniMax M2.7, at ang GLM-5.3 Flash ay mananatili sa listahan para sa manual na pagpili. Gagawin lang ito kung ang large slot ay walang laman o nakaturo sa aming modelo na umalis na sa network; ang pinili ng iba ay mananatili, at sa output ay may hint kung paano magpalit;
  • titiyakin na gagana ang pagpili: ang modelong mula sa Crush interface ay hawak sa state file, at nao-override nito ang config — ito ang seksyon tungkol sa large at small;
  • gagawa ng backup, iiwan ang ibang providers at settings na tulad ng dati at tatapusin ng live na request sa gateway para agad na masuri ang key, address at modelo.

Ang ibang modelo ay itinatakda ng --model flag na may abbreviation na deepseek, glm o minimax; ang tahasang tinukoy na modelo ay palaging isinusulat. Ang mga hindi karaniwang direktoryo ay isinasaalang-alang ng installer tulad ng ginagawa ng Crush mismo: CRUSH_GLOBAL_CONFIG para sa config, CRUSH_GLOBAL_DATA para sa state file, at gayundin ang XDG_CONFIG_HOME at XDG_DATA_HOME. Para sa mga server at script may non-interactive mode, at sa mode na ito ang key ay kinukuha mula sa environment variable:

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

Ang pangunahing format ng Crush ngayon ay crushrc, ngunit ang installer ay nagsusulat ng crush.json: nauunawaan ito ng lahat ng bersyon. Kung mayroon ka nang crushrc, pagsasamahin ng Crush ang dalawang file, kung magkatugma ang mga key ay crushrc ang mananaig, at hindi ito ginagalaw ng installer.

Manual na configuration: crush.json o crushrc

Lahat ng ginagawa ng installer ay maaari mong isulat nang manu-mano. Heto ang gumaganang ~/.config/crush/crush.json — pinadaan namin ang file na ito sa 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" }
  }
}
FieldValueMahalagang tandaan
typeopenai-compatUri para sa mga third-party na serbisyong may OpenAI-compatible na API. Ang uri na openai ay inilalaan ng dokumentasyon ng Crush para sa mga request sa OpenAI mismo
base_urlhttps://gate.joingonka.ai/v1May /v1 sa dulo: ang path na /chat/completions ay si Crush na ang nagdadagdag
api_keyang iyong key na jg-…Pinapadaan ng Crush ang value sa shell substitution, kaya sa halip na ang key ay maaari mong isulat ang $JOINGONKA_API_KEY — kailangang naka-export ang variable doon sa lugar kung saan pinapatakbo ang Crush
context_windowwindow ng modeloDito ipinapakita ng Crush ang kapunuan ng context at dito siya nagpapasya kung kailan iko-compress ang history
default_max_tokenstuktok ng sagotIpinapadala sa bawat request bilang max_tokens. Sa mga reasoning model, kasama rin sa budget na ito ang pag-iisip

Strict JSON lang ang tinatanggap ng Crush: isang comment o trailing comma — at hindi na ito magsisimula. Ang mga field ng presyo (cost_per_1m_in, cost_per_1m_out at dalawang field para sa cache) ay kailangan lang ng cost counter: isinusulat ng installer doon ang live na presyo ng gateway, at kahit wala ang mga ito ay gumagana ang Crush at nagpapakita ng zero — iha-highlight lang sila ng editor na may schema mula sa $schema bilang mandatory.

Ang parehong provider sa format na crushrc — ito ay ordinaryong Bash na may built-in na mga command ng Crush. Ang file na ~/.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

Dito tinatawag ang modelo sa anyong provider/model-id: bago ang unang slash — pangalan ng provider, pagkatapos — ang identifier ng network kung ano ito. Ang anyong ${JOINGONKA_API_KEY:?…} ay nagtatago ng key sa labas ng file, ngunit kung walang naka-export na variable ay hindi magsisimula ang Crush — mas mabuti nang mag-error sa simula kaysa sa mga request na walang laman ang key.

Mga modelong large at small at state file

Ang modelo sa Crush ay hindi isa lang para sa lahat, kundi pinipili para sa dalawang slot:

SlotAno ang ginagawa nitoAno ang inilalagay ng installerPaano baguhin
largePangunahing agent: lahat ng kilos na may pagbabasa at pag-edit ng files at mga commandDeepSeek V4 Flash: window na 380K at ang pinakamataas na limitasyon ng sagot sa network, 32768ctrl+l sa interface, -m sa crush run, models.large sa config
smallMga auxiliary task: pangalan ng session at sub-agent na naghahanap sa network at nagbabasa ng web pages. Kung hindi kinaya ng maliit na modelo ang pangalan, uulitin ng Crush ang request sa malaking modeloMiniMax M2.7: ito ang may pinakamalaking kapasidad sa network--small-model sa crush run, models.small sa config, model small sa crushrc

Ang ikatlong modelo ng network, ang reasoning model na GLM-5.3 Flash, ay pinipili para sa komplikadong lohika, tandaan na ang limitasyon ng sagot nito ay 8192 at bahagi nito ay napupunta sa pag-reason — mga detalye sa review ng modelo. Sa isang run, ang modelo ay tinutukoy sa pamamagitan ng buong pangalan: crush run -m joingonka/zai-org/GLM-5.3-Flash "…". Ang lahat ng available na pangalan ay ipinapakita ng crush models joingonka.

State file. Ang modelong pinili sa interface gamit ang ctrl+l ay hindi isinusulat ng Crush sa crush.json, kundi sa machine state file: ~/.local/share/crush/crush.json, sa Windows — %LOCALAPPDATA%\crush\crush.json. Ang file na ito ay mas prayoridad kaysa sa user config at crushrc: binabasa sila ng Crush sa pagkakasunod-sunod na /etc/crush/crush.json → ~/.config/crush/crush.json → ~/.config/crush/crushrc → state file, at ang bawat sumusunod ay ino-overwrite ang nauna. Ang mas mataas lamang ang priority ay ang settings ng project — crush.json o crushrc sa directory nito. Kung nasaan ang mga file sa iyong machine, ipapakita ng crush dirs.

Sa aming run, binuksan namin ang pagpili ng modelo — ang provider na «JoinGonka (Gonka)» ay naroon na may markang «✓ Configured» — at pinili ang MiniMax M2.7. Sumagot ang Crush ng «Large model changed to MiniMax M2.7 (Gonka)» at isinulat sa state file:

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

Ngayon, ang modelong ito ay mas prayoridad kaysa sa nakasulat sa crush.json. Kinikilala ng installer ang sitwasyong ito at kumikilos nang iba:

  • walang --model hindi nito ginagalaw ang state file — ito ang iyong working selection — ngunit direktang nagbabala kung anong modelo ang aktwal na bubuksan ng Crush: Heads-up: Crush will still start with joingonka/MiniMaxAI/MiniMax-M2.7, not joingonka/deepseek-ai/DeepSeek-V4-Flash-0731. Ganoon din ang gagawin nito kung GLM-5.3 Flash o modelo ng ibang provider ang napili sa interface;
  • may explicit na --model binabago nito sa state file ang eksaktong isang record — models.large — matapos i-save ang kopya, at isinusulat kung ano ang dati at kung ano ang bago. Kung hindi, hindi sana gumana ang flag nang tahimik. Pagkatapos ng ganitong run, ang Crush sa aming test ay bumukas gamit ang modelong tinukoy sa flag.

Pagsusuri: ano ang dapat mangyari

Una, tiyakin muna na nakikita ng Crush ang provider:

crush models joingonka

Sagot: tatlong linya:

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

Pagkatapos, isang beses na pagtakbo nang walang interface. Maglagay ng file na may malinaw na bug sa project directory at ipahanap ito:

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

Dapat mismo na tawagin ng agent ang tool sa pagbasa ng file at sumagot nang tuwiran, kasama ang numero ng linya. Sa aming pagtakbo, natagpuan ng lahat ng tatlong modelo sa network ang bug, tumagal ng 20-40 segundo ang gawain. Itinatago ng -q flag ang waiting indicator. Sa crush run mode, awtomatikong inaaprubahan ang lahat ng tool calls, kaya patakbuhin ito sa sarili mong project. Sa karaniwang interface (command na crush), makikita ang aktibong modelo sa status line: ◇ DeepSeek V4 Flash (Gonka) via JoinGonka (Gonka). Iniimbak ng Crush ang mga session at log sa .crush directory ng project, na sarado sa git ng sarili nitong .gitignore; ipinapakita ng crush logs ang log. Sa panig ng gateway, makikita ang request sa dashboard: seksyong «Paggamit», breakdown na «Ayon sa mga modelo» at «Ayon sa mga key».

Kung may nagkamali, karaniwang mababasa ang diagnosis diretso mula sa mensahe:

Ano ang nakikitaAno ang ibig sabihinAno ang gawin
unauthorized: Invalid API key.Hindi tinanggap ng gateway ang keySuriin ang api_key: buong key, walang espasyo. Kung may reference doon sa isang variable, dapat itong naka-export sa shell na ito
invalid JSON in config file …/crush.jsonMay comment, trailing comma, o typo sa fileStrict JSON lang ang tinatanggap ng Crush: ayusin ang file. Hindi mismo nililinis ng installer ang mga comment, pero nagbabala ito tungkol sa mga ito, at ang file na talagang hindi ma-parse ay hindi ginagalaw at sinasabi ang dahilan
failed to load shell config …/crushrc: … exit status 1May error sa crushrc, kadalasan hindi naka-set ang variable na may key sa form na ${…:?}I-export ang variable bago magpatakbo o ayusin ang linyang kinabagsakan ng script
Failed to override models: large model "…" not foundMay typo sa pangalan ng modelo sa -m flagKopyahin ang pangalan mula sa output ng crush models joingonka
too many requests: Model "…" is currently overloaded in the Gonka network (rate limit)Naubos ang libreng kapasidad ng modelo sa network sa peak hourKusang inuulit ng Crush ang request na may lumalaking paghinto — mga isang minuto sa aming pagtakbo — at saka lang sumusuko. Lumipat sa ibang modelo gamit ang ctrl+l o -m, o maghintay; makikita ang status sa status page
Nagbukas ang Crush sa maling modelo kaysa sa sinabi ng installerAng pinili mula sa interface ay nasa state file at nangingibabaw sa configPumili ng modelo gamit ang ctrl+l o ulitin ang installation gamit ang --model
402Naubos ang pondo sa balanceMag-top up sa seksyong «Billing»; gumagana pa rin ang key

Magkano ang halaga nito

Ang agent ay gumagastos ng tokens nang iba kaysa sa chat: sa bawat phrase mo, nagdaragdag ang Crush ng system prompt at deskripsyon ng mga tool nito, at ang gawain ay karaniwang tumatagal ng ilang steps. Sa aming run, ang bawat request sa model ay may dalang mga 11.5 libong input tokens, at ang gawaing "basahin ang file at hanapin ang error" ay tumagal ng dalawa hanggang tatlong requests at 23-35 libong tokens, halos lahat ay input. Kaya ang presyo kada token dito ang mahalaga.

Sa pamamagitan ng JoinGonka Gateway, ang tokens ay nagkakahalaga ng $0.0069 kada milyon para sa input at $0.021 kada milyon para sa output — ang presyo ay pareho para sa lahat ng models sa network at kinukuha sa pahinang ito mula sa live source.

ScenarioGastosSa pamamagitan ng Gateway
One-time task: magbasa ng file, humanap ng error23-35K tokensmga sentimo
Isang araw ng aktibong trabaho3-7M tokensilang sentimo
Isang buwan ng aktibong development~150M tokensmga isang dolyar

Ang mga estimate sa kanang column ay ayon sa presyo noong Setyembre 2026. Bilang paghahambing — paano posibleng magbayad para sa models sa Crush:

ParaanModel ng pagbabayadAno ang limitasyon
Hyper — opisyal na provider ng Charmsubscription, may libreng tiermga kondisyon ng tariff sa panig ng Charm
Direktang vendor keykada token ayon sa presyo ng vendorlumalaki ang bill kasabay ng haba ng sessions; ang presyo ay depende sa model
JoinGonka Gatewaykada token, prepaid balancekita ang gastos sa dashboard; walang subscriptions o buwanang quota

Ang cost counter sa interface ng Crush ay nagbibilang ayon sa presyo mula sa config. Doon pumapasok ang presyo ng gateway sa oras ng installation, at ang presyo sa dolyar sa network ay nagbabago kasabay ng GNK rate, kaya ang counter ay gabay lamang. Ang eksaktong gastos at balanse ay nasa dashboard, sa mga section na «Usage» at «Billing». Kung bakit ang DeepSeek V4 Flash ang default sa large slot, detalyadong tinalakay sa model overview.

Ano ang dapat isaalang-alang sa trabaho

Mga pahintulot. Sa default, nagtatanong muna ang interface ng Crush bago mag-call ng tool. Ang --yolo flag ay nagpapatay sa lahat ng tanong nang sabay, habang ang piling pinagkakatiwalaang tool ay inililista sa config:

# crushrc
permissions allow view ls grep

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

Paalala, ang crush run ay kusang nag-a-approve ng lahat. Katangian ito ng Crush, hindi ito nakadepende sa provider ng modelo.

Timeout ng request. Hinihiwalay ng Crush ang request kung matagal na walang pumapasok na kahit isang bahagi ng sagot mula sa modelo: sa bersyong 0.96.1, dalawang minuto itong katahimikan (sinasabi ng dokumentasyon na 60 segundo, pero sa code at sa aming sariling pagsubok — dalawang minuto). Hindi nire-reset ng mga service ping na ipinapadala ng gateway para mapanatili ang koneksyon ang counter na ito — sinubukan namin sa lokal na setup. Sa mga oras ng mabigat na load, hinihintay ng gateway ang unang token mula sa network hanggang 150 segundo, kaya mainam na taasan ang buffer:

# crushrc
option request-timeout 300

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

Mga lagda sa commit. Ang mga commit at pull request na ginagawa ng Crush ay awtomatikong may linyang Assisted-by: Crush:<model> at tatak na «Generated with Crush». Kung ayaw mo nito:

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

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

Mga metrics. Nagpapadala ang Crush sa mga developer ng pseudonymous na estadistika ng paggamit — metadata lamang, walang prompt at sagot. Pinapatay ito gamit ang variable na CRUSH_DISABLE_METRICS=1 o DO_NOT_TRACK=1. Sa panig naman ng gateway, hindi ito nag-iimbak ng nilalaman ng prompt at sagot — mga aggregate ng paggamit lang ang natitira sa estadistika.

Ang config ay code. Pareho ang crushrc at crush.json na ipinapatupad ng Crush gamit ang pribilehiyo ng iyong shell: ang $(…) sa key field ay tatakbo sa pag-load, at ang crushrc ng proyekto ay mag-a-activate sa sandaling buksan mo ang Crush sa direktoryong iyon. Huwag magpatakbo ng agent sa repositoryo ng iba nang hindi muna binabasa ang mga config nito.

Ang Crush ay kumokonekta sa JoinGonka Gateway sa pamamagitan ng isang command — npx @joingonka/setup --tool crush — o sa pamamagitan ng block na providers.joingonka sa ~/.config/crush/crush.json: uri na openai-compat, address na https://gate.joingonka.ai/v1, key na jg-…, mga model na may tamang context_window at default_max_tokens. Pareho lang ito kung gagamit ng ilang linya ng provider add at model add sa crushrc. Ang large slot ay para sa DeepSeek V4 Flash, ang small ay para sa MiniMax M2.7, at GLM-5.3 Flash para sa komplikadong lohika. Ang pangunahing bitag ay ang state file: ang model na pinili gamit ang ctrl+l ay mas matimbang kaysa sa config, kaya ang installer na may explicit na --model ay binabago rin ito. Para suriin — crush models joingonka at crush run; mainam na itaas ang request timeout sa 300 segundo.

Gusto mo pang matuto?

Galugarin ang iba pang mga seksyon o simulang kumita ng GNK ngayon.

Kumuha ng key at libreng tokens →