知識ベースのセクション ▾

ナビゲーション

▸ ここから始める 役割別

カテゴリー

ツール 52
用語集 12

ツール

Crush + JoinGonka Gateway: Gonkaネットワークモデル上のCharmエージェント

CrushはCharmによるターミナルコーディングエージェントです。Charmは数万のプログラムで採用されているコンソールインターフェースライブラリの開発チームです。プロジェクトファイルの読み書き、コマンド実行、言語サーバーからのコンテキスト取得(LSP)、MCP経由での外部ツール接続、セッション途中のモデル切り替え(コンテキスト維持)に対応しています。macOS、Linux、Windows、Android、BSDで動作し、ライセンスはFSL-1.1-MITです。プロジェクトの背景は明確で、アーカイブされた opencode-ai/opencode リポジトリはCrushに直結しており、最初の作者とCharmチームがプロジェクトを引き継ぎました。

CrushはOpenAI互換とAnthropic互換の2種類のサードパーティプロバイダーを受け入れます。JoinGonka Gatewayは openai-compat として接続可能です。インストーラーコマンドを実行するか、設定ファイルを数行記述するだけで済みます。これにより、DeepSeek V4 Flash、GLM-5.3 Flash、MiniMax M2.7といったGonkaの分散ネットワークモデルを、入力100万トークンあたり$0.0069という均一価格で利用できます。

Crushを初めて使う前に知っておくべき2つの特徴があります。モデルはlargeとsmallの2つのスロットに配置されること、そしてインターフェースで選択したモデルは設定よりも優先される別の状態ファイルに保存されることです。これらについては別のセクションで詳しく説明します。以下のコマンドとメッセージは、2026年9月23日にゲートウェイ経由でCrush 0.96.1を実際に実行して検証済みです。アドレスを確認すると、3Mの無料トークンがアカウントに付与されます。これを使えば、すべて自分で試すことができます。

クイックスタート:インストールとコマンド実行

ステップ1:Crushをインストールする。公式の方法はプロジェクトのREADMEに記載されています:

# 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

同じページにはDebian、Ubuntu、Fedora、RHEL、Nix、Scoop用のパッケージリポジトリの説明もあり、リリースページにはビルド済みバイナリが用意されています。確認はcrush --versionで、crush version v0.96.1のような文字列が返ってきます。

ステップ2:キーを取得する。gate.joingonka.ai/registerで登録し、アドレスを確認して、「APIキー」セクションでjg-プレフィックスのキーを作成します。1つのキーと1つの残高が、ネットワーク上のすべてのモデルで有効です。

ステップ3:インストーラーを実行する。

npx @joingonka/setup --tool crush

インストーラーはキーの入力を求めます — シェル履歴に残らないよう、コマンドライン引数では渡しません — そして4つの処理を行います:

  • プロバイダーjoingonkaを~/.config/crush/crush.jsonに書き込みます:タイプはopenai-compat、ゲートウェイのアドレス、リテラル形式のキー、そしてコンテキストウィンドウ・応答上限・100万トークンあたりの価格を持つ3つのネットワークモデル。これらの価格はインストール時にゲートウェイからリアルタイムで取得し、Crushはそれに基づいてセッションのコストを計算します。ファイルのパーミッションは600になります。
  • モデルを割り当てます:largeスロットにはDeepSeek V4 Flash、smallにはMiniMax M2.7、GLM-5.3 Flashは手動選択用のリストに残ります。これはlargeスロットが空か、ネットワークから外れた当社のモデルを指している場合にのみ実行されます。他の選択はそのまま残り、出力に切り替え方法のヒントが表示されます。
  • 選択が有効になることを確認します:Crushのインターフェースで選んだモデルは状態ファイルに保持され、それが設定を上書きするためです — これについてはlargeとsmallのセクションで説明しています。
  • バックアップを作成し、他のプロバイダーと設定はそのままにして、ゲートウェイへの実際のリクエストで終了します。これにより、キー・アドレス・モデルをすぐに検証できます。

別のモデルは--modelフラグで指定します。省略形はdeepseek、glm、minimaxです。明示的に指定されたモデルは常に書き込まれます。非標準のディレクトリは、Crush本体と同じようにインストーラーも考慮します:設定にはCRUSH_GLOBAL_CONFIG、状態ファイルにはCRUSH_GLOBAL_DATA、さらにXDG_CONFIG_HOMEとXDG_DATA_HOMEです。サーバーやスクリプト向けに対話なしモードがあり、そこではキーを環境変数から取得します:

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

Crushの主要フォーマットは現在crushrcになりましたが、インストーラーはcrush.jsonを書き込みます:これはすべてのバージョンで認識されます。crushrcがすでにある場合、Crushは両方のファイルをマージし、キーが重複する場合はcrushrcが優先されますが、インストーラー自体はそれに触れません。

手動設定: crush.json または crushrc

インストーラーがやっていることは、すべて手書きで再現できます。以下が実際に動作する ~/.config/crush/crush.json です — このファイルを私たちはゲートウェイ経由で実行しました:

{
  "$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" }
  }
}
フィールド値押さえておきたい点
typeopenai-compatOpenAI互換APIを提供する外部サービス向けのタイプ。Crushのドキュメントでは、openai タイプはOpenAI本体経由のリクエスト用とされています
base_urlhttps://gate.joingonka.ai/v1末尾に /v1 を付ける:/chat/completions のパスはCrushが自動で補います
api_keyあなたのキー jg-…Crushは値をシェル置換に通すため、キーの代わりに $JOINGONKA_API_KEY と書くこともできます。その場合はCrushを起動する環境で変数をエクスポートしておく必要があります
context_windowモデルのコンテキストウィンドウCrushはこれを使ってコンテキストの使用率を表示し、履歴を圧縮するタイミングを判断します
default_max_tokens応答の上限各リクエストに max_tokens として送信されます。推論モデルの場合、この予算には推論も含まれます

Crushは厳格なJSONのみを受け付けます。コメントや末尾のカンマが1つあるだけで起動しません。価格フィールド(cost_per_1m_in、cost_per_1m_out、およびキャッシュ用の2フィールド)はコストカウンター専用です。インストーラーはそこにゲートウェイの実際の価格を書き込みますが、これらがなくてもCrushは動作し、ゼロと表示されます — $schema のスキーマを持つエディタだけが、これらを必須としてハイライトするでしょう。

同じプロバイダーを crushrc 形式で書くとこうなります。これはCrushの組み込みコマンドが使える通常のBashです。ファイル ~/.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

ここでモデルは provider/model-id の形式で指定します。最初のスラッシュより前がプロバイダー名、それ以降はネットワーク上のIDをそのまま書きます。${JOINGONKA_API_KEY:?…} の形式ならキーをファイルの外に置けますが、変数がエクスポートされていないとCrushは起動しません — 空のキーでリクエストを送るより、起動時にエラーになるほうがましです。

largeおよびsmallモデルと状態ファイル

Crushのモデルは全体で1つではなく、以下の2つのスロットに対してそれぞれ選択されます:

スロット実行内容インストーラーのデフォルト設定変更方法
largeメインエージェント:ファイルの読み書き、編集、コマンド実行を伴うすべての動作DeepSeek V4 Flash: 380Kのコンテキストウィンドウと、ネットワーク上で最大の応答上限32768インターフェースで ctrl+l、crush run に -m、設定ファイルで models.large
small補助タスク:セッション名作成、ウェブ検索やウェブページ閲覧を行うサブエージェント。もし小規模モデルがセッション名作成に失敗した場合、Crushは大規模モデルに対して再度リクエストを行いますMiniMax M2.7: ネットワーク上で最大のキャパシティを持つcrush run に --small-model、設定ファイルで models.small、crushrc で model small

推論モデルであるGLM-5.3 Flashは、複雑なロジックのために選択されます。ただし、応答上限が8192であり、その一部が推論プロセスに使用される点に注意してください。詳細はモデルの概要を参照してください。1回の実行に対してモデルを指定する場合は、完全な名前を使用します:crush run -m joingonka/zai-org/GLM-5.3-Flash "…"。利用可能なすべての名前は crush models joingonka で表示されます。

状態ファイル。 インターフェースで ctrl+l を使用して選択されたモデルは、crush.json ではなく、マシン固有の状態ファイル(~/.local/share/crush/crush.json、Windowsの場合は %LOCALAPPDATA%\crush\crush.json)に書き込まれます。このファイルはユーザー設定や crushrc よりも優先されます。Crushは /etc/crush/crush.json → ~/.config/crush/crush.json → ~/.config/crush/crushrc → 状態ファイル の順に読み込み、後続の設定が以前の設定を上書きします。プロジェクトディレクトリ内の crush.json または crushrc が最も高い優先順位を持ちます。ご自身のマシン上のファイル配置は crush dirs で確認できます。

今回の実行では、モデル選択画面を開き、「JoinGonka (Gonka)」プロバイダーが「✓ Configured」とマークされていることを確認した上で、MiniMax M2.7を選択しました。Crushは「Large model changed to MiniMax M2.7 (Gonka)」と応答し、状態ファイルに以下のように書き込みました:

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

現在、このモデルは crush.json に記述されている内容よりも優先されます。インストーラーはこの状況を認識し、次のように動作します:

  • --model を指定しない場合: 状態ファイルには変更を加えません(ユーザーの選択を尊重するため)。ただし、Crushが実際にどのモデルで起動されるかを警告します:Heads-up: Crush will still start with joingonka/MiniMaxAI/MiniMax-M2.7, not joingonka/deepseek-ai/DeepSeek-V4-Flash-0731。インターフェースでGLM-5.3 Flashや他のプロバイダーのモデルが選択されている場合も同様です。
  • --model を明示的に指定した場合: 状態ファイル内の models.large エントリのみを修正し、事前にバックアップを保存した上で、変更前後の状態を出力します。そうしないと、フラグが反映されないためです。この実行後、Crushはフラグで指定されたモデルで起動しました。

検証:期待される挙動

まず、Crushがプロバイダーを認識しているか確認します:

crush models joingonka

応答は3行です:

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

次に、インターフェースなしで一度実行してみます。プロジェクトのディレクトリに明らかなバグを含むファイルを置き、それを見つけるよう指示します:

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

エージェントは自分でファイル読み取りツールを呼び出し、行番号を挙げて本質的に答えるはずです。私たちの実行では、ネットワーク上の3つのモデルすべてがバグを見つけ、タスクにかかった時間は20〜40秒でした。-qフラグは待機インジケーターを非表示にします。crush runモードではすべてのツール呼び出しが自動承認されるため、自分のプロジェクトで実行してください。通常のインターフェース(crushコマンド)では、アクティブなモデルがステータス行に表示されます:◇ DeepSeek V4 Flash (Gonka) via JoinGonka (Gonka)。セッションとログはCrushがプロジェクトの.crushディレクトリに保存し、専用の.gitignoreでgitから保護されています。ログはcrush logsで表示できます。ゲートウェイ側では、リクエストは管理画面で確認できます:「使用状況」セクションの「モデル別」と「キー別」の内訳です。

何か問題が発生した場合、診断は通常メッセージから直接読み取れます:

表示される内容意味対処法
unauthorized: Invalid API key.ゲートウェイがキーを受け付けなかったapi_keyを確認してください:キー全体を、空白なしで。変数への参照の場合、その変数がこのシェルでエクスポートされている必要があります
invalid JSON in config file …/crush.jsonファイルにコメント、末尾のカンマ、またはタイポがあるCrushは厳密なJSONのみ受け付けます:ファイルを修正してください。インストーラーはコメントを自動で除去しませんが警告を出し、まったく解析できないファイルには手を付けず原因を報告します
failed to load shell config …/crushrc: … exit status 1crushrcのエラー。多くは${…:?}形式のキー変数が設定されていない起動前に変数をエクスポートするか、スクリプトが失敗する行を修正してください
Failed to override models: large model "…" not found-mフラグのモデル名のタイポcrush models joingonkaの出力から名前をコピーしてください
too many requests: Model "…" is currently overloaded in the Gonka network (rate limit)ピーク時にモデルのネットワーク容量が不足したCrushは増加する間隔でリクエストを再試行し(私たちの実行では約1分)、それからようやく諦めます。ctrl+lまたは-mで別のモデルに切り替えるか、待ってください。状態はステータスページで確認できます
Crushがインストーラーが通知したのとは違うモデルで開いたインターフェースからの選択は状態ファイルに保存され、設定を上書きするctrl+lでモデルを選択するか、--modelを付けてインストールをやり直してください
402残高が不足している「請求」セクションでチャージしてください。キー自体は有効です

コストについて

エージェントはチャットとは異なるトークン消費をします。Crushはすべての入力にシステムプロンプトとツール記述を追加し、タスクには通常複数回のやり取りが必要です。今回のテストでは、モデルへの各リクエストで約11,500入力トークンを消費し、「ファイルを読んでエラーを探す」タスクには2〜3のリクエストで23,000〜35,000トークンを要しました(ほとんどが入力)。そのため、ここでのトークン単価が重要になります。

JoinGonka Gatewayを通じたトークン料金は、入力100万トークンあたり$0.0069、出力100万トークンあたり$0.021です。この価格はネットワーク内のすべてのモデルで共通で、このページではライブソースから動的に取得されます。

シナリオ消費量Gateway経由の料金
ワンショットタスク:ファイル読み込み、エラー特定23-35K トークン1セントの数分の一
1日のアクティブな作業3-7M トークン数セント
1ヶ月のアクティブな開発~150M トークン約1ドル

右側の推定値は2026年9月時点の価格に基づいています。比較として、Crushでの一般的な支払い方法は以下の通りです:

方法課金モデル制限事項
Hyper — Charm公式プロバイダーサブスクリプション(無料枠あり)Charm側の料金条件に準拠
ベンダーのキーを直接利用ベンダーの価格表に基づくトークン課金セッションの長さに応じて請求額が増加;モデルにより価格が異なる
JoinGonka Gatewayプリペイド残高によるトークン課金ダッシュボードで使用状況を監視可能;サブスクリプションや月間クォータなし

Crushインターフェース内のコストカウンターは、設定ファイル内の価格フィールドに基づいています。ここにはインストール時点のゲートウェイ価格が格納されますが、ネットワーク内のドル単価はGNKレートに応じて変動するため、カウンターはあくまで目安です。正確な消費量と残高は、ダッシュボードの「使用状況」および「課金」セクションで確認してください。デフォルトでlargeスロットにDeepSeek V4 Flashが設定される理由は、モデルの概要で詳しく解説しています。

作業時の注意点

パーミッション。Crushのインターフェースでは、デフォルトでツール呼び出しの前に許可を求めます。フラグ--yoloはすべての確認を一括で無効にし、個別に信頼するツールは設定ファイルで指定します:

# crushrc
permissions allow view ls grep

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

なお、crush runはすべてを自動承認します。これはCrush側の仕様であり、モデルプロバイダーには依存しません。

リクエストタイムアウト。Crushは、モデルから応答の断片が長時間届かない場合にリクエストを切断します。バージョン0.96.1では2分間の無応答が基準です(ドキュメントには60秒と記載されていますが、コードおよび当社の検証では2分です)。ゲートウェイが接続を維持するために送るキープアライブpingはこのカウンターをリセットしません — ローカル環境で確認済みです。また、ゲートウェイは負荷の高い時間帯にはネットワークからの最初のトークンを最大150秒待つため、余裕を持たせるべきです:

# crushrc
option request-timeout 300

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

コミットの署名。Crushが作成するコミットとプルリクエストには、デフォルトでAssisted-by: Crush:<model>という行と「Generated with Crush」という注記が付きます。不要な場合:

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

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

メトリクス。Crushは開発者に仮名化された利用統計を送信します — メタデータのみで、プロンプトや応答は含まれません。CRUSH_DISABLE_METRICS=1またはDO_NOT_TRACK=1で無効化できます。ゲートウェイ側もプロンプトや応答の内容を保存せず、統計には消費量の集計値のみが残ります。

設定はコードである。crushrcとcrush.jsonの両方をCrushはあなたのシェルの権限で実行します。キーフィールド内の$(…)は読み込み時に実行され、プロジェクトのcrushrcはそのディレクトリでCrushを開いた時点で作動します。他人のリポジトリで設定を読まずにエージェントを実行しないでください。

Crushはnpx @joingonka/setup --tool crushという1つのコマンド、または~/.config/crush/crush.json内のproviders.joingonkaブロックでJoinGonka Gatewayに接続できます。タイプはopenai-compat、アドレスはhttps://gate.joingonka.ai/v1、キーはjg-…、モデルには正確なcontext_windowとdefault_max_tokensを指定します。同様の設定をcrushrc内のprovider addおよびmodel addコマンドで複数行で記述することも可能です。largeスロットにはDeepSeek V4 Flash、smallスロットにはMiniMax M2.7、複雑なロジックにはGLM-5.3 Flashが割り当てられています。最大の落とし穴は状態ファイルです。ctrl+lで選択されたモデルが設定ファイルよりも優先されるため、明示的な--modelフラグを指定したインストーラーはそれも修正します。確認にはcrush models joingonkaおよびcrush runを使用してください。リクエストタイムアウトは300秒に引き上げることを推奨します。

もっと知りたいですか?

他のセクションを探索するか、Gonkaを今すぐ獲得し始めましょう。

キーと無料トークンを取得 →