Crush 接続
Charm Crush のカスタム provider に QCode.cc を設定:crush.json で type=anthropic と base_url を指定し、ターミナルで Claude を使う
目次
最終確認:2026-09-18 · 📄 公式ドキュメント準拠(Crush v0.95.0、2026-09-16 公開)
概要¶
| 項目 | 内容 |
|---|---|
| 利用できるモデル | Claude ✅(type: anthropic)· GPT ✅ · 中国系モデル ✅(openai-compat)· Gemini ❌(本ページは Gemini を扱わない) |
| プロトコルと Base URL | Anthropic:https://api.qcode.cc/api · OpenAI:https://api.qcode.cc/openai/v1 |
| 設定場所 | プロジェクト単位 crush.json / ユーザー単位 ~/.config/crush/crush.json |
| 公式ドキュメント | charmbracelet/crush |
| Crush は Charm 製のターミナル優先 AI コーディングエージェント(Go 製)です。カスタム provider に対応しており、QCode.cc を上流にできます。 |
名称について:リポジトリの旧名は
charmbracelet/opencode、現行はcrush(旧 URL は 301 リダイレクト。改名理由の公式説明なし)。OpenCode(opencode.ai)とは別プロジェクトです。なお Crush 内部にはopencodeという別上流プロバイダー名も存在しますが、これもまた別物です。
どのプロトコルを使うか¶
Crush のカスタム provider は type に anthropic と openai-compat を受け付けます。Claude を使うなら anthropic です —— QCode の OpenAI エンドポイントは Claude モデルを受け付けません(エンドポイントと API パス)。
| 使いたいモデル | type |
base_url |
|---|---|---|
| Claude | anthropic |
https://api.qcode.cc/api |
| GPT 系 / 中国系 4 ファミリー | openai-compat |
https://api.qcode.cc/openai/v1 |
インストール¶
# Homebrew
brew install charmbracelet/tap/crush
# または Releases からビルド済みバイナリを取得
# https://github.com/charmbracelet/crush/releases
確認(文書中のバージョン数字ではなく実際の出力を信頼してください):
crush --version
設定¶
プロジェクト直下に crush.json、またはユーザー単位で ~/.config/crush/crush.json(= $XDG_CONFIG_HOME/crush/crush.json)に作成。~/.local/share/crush/ 配下はステータスファイルで、公式に「手編集するな」と明記されています。新しめの公式は crushrc(Bash DSL)形式を推していますが、JSON 設定も引き続き読み込まれます:
{
"$schema": "https://charm.land/crush.json",
"providers": {
"qcode": {
"type": "anthropic",
"base_url": "https://api.qcode.cc/api",
"api_key": "$QCODE_KEY",
"extra_headers": { "anthropic-version": "2023-06-01" },
"models": [
{
"id": "claude-sonnet-5",
"name": "QCode Sonnet 5",
"cost_per_1m_in": 2,
"cost_per_1m_out": 10,
"context_window": 1000000,
"default_max_tokens": 8192,
"cost_per_1m_in_cached": 0.2,
"cost_per_1m_out_cached": 2.5,
"can_reason": true,
"supports_attachments": true
},
{
"id": "claude-haiku-4-5",
"name": "QCode Haiku 4.5",
"cost_per_1m_in": 1,
"cost_per_1m_out": 5,
"context_window": 200000,
"default_max_tokens": 4096,
"cost_per_1m_in_cached": 0.1,
"cost_per_1m_out_cached": 1.25,
"can_reason": true,
"supports_attachments": true
}
]
}
}
}
キーは設定ファイルに書かず環境変数で注入します:
export QCODE_KEY="cr_あなたのQCodeキー"
| フィールド | 説明 |
|---|---|
type |
anthropic = Anthropic ネイティブ Messages プロトコル |
base_url |
/api まで。Crush が /v1/messages を自分で連結します |
api_key |
$変数名 形式の環境変数展開に対応 |
extra_headers |
Anthropic プロトコルには anthropic-version が必要 |
models[] |
列挙するとコスト・コンテキスト等の値を上書きできます。省略した場合は Crush が <base>/v1/models を叩いて自動発見(discover_models は既定でオン)。id は qcode.cc/models と一字一句一致させる |
中国本土からはホストを
https://asia.qcode.cc/api(アジアノード、韓国 / 台湾 / 香港の近い方)に変えるだけ。キーは共通です。cost_per_1m_*(公式 schema が必須とする*_cached2 キーを含む)は Crush 側の使用量表示にのみ影響し、実際の課金には影響しません。サンプル値は一般的なキャッシュ比率に置いてあるため、qcode.cc/models の実キャッシュ価格に合わせてください。
検証¶
crush run "reply with exactly: OK"
OK が返れば接続できています。
本当に QCode へ流れているかの確認:base_url をわざと存在しないパスに変えて再実行してください。完全な URL を含む明確な 404 が出るはずです:
404 Not Found {"error":"Not Found","message":"Route /api/xxx/v1/messages not found"}
このエラーが出れば、Crush が base_url + /v1/messages を組み立てており、設定が効いている証拠です。(これは陰性対照です。成功しただけでは設定が効いた証明にはなりません——別の provider にフォールバックしている可能性があります。)
よく使う操作¶
# 対話モード
crush
# 非対話
crush run "この関数を非同期にして"
# パイプ
cat README.md | crush run "もっと分かりやすく" > README.new.md
# 作業ディレクトリ指定 + デバッグログ
crush --debug --cwd /path/to/project
# すべての権限を自動承認(注意して使用)
crush --yolo
よくある質問¶
model_not_available_on_endpoint¶
type が openai-compat なのにモデルが Claude です。type: "anthropic" に変更し、base_url を https://api.qcode.cc/api にしてください。
401 Invalid API key¶
環境変数が未注入か、キーに空白が混入しています。echo $QCODE_KEY の出力が cr_ で始まるか確認してください。
モデル選択に出てこない¶
無指定時、Crush は <base>/v1/models による自動発見を試みます(QCode の /api/v1/models と /openai/v1/models は在售リストを返す稼働経路)。明示列挙を指定した場合はその内容が優先されます。表示されない場合は models[] に 1 行足して再起動を。
関連ドキュメント¶
- エンドポイントと API パス — プロトコル × モデルファミリー対応表
- OpenCode 連携 — 別のターミナルエージェント(Crush とは別プロジェクト)
- 中国系モデル連携 — GLM / Kimi / DeepSeek / Qwen