# Crush 接続

> **最終確認**：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](https://github.com/charmbracelet/crush)
[Crush](https://github.com/charmbracelet/crush) は Charm 製のターミナル優先 AI コーディングエージェント（Go 製）です。**カスタム provider** に対応しており、QCode.cc を上流にできます。

> **名称について**：リポジトリの旧名は `charmbracelet/opencode`、現行は `crush`（旧 URL は 301 リダイレクト。改名理由の公式説明なし）。[OpenCode](/docs/ide/opencode)（opencode.ai）とは**別プロジェクト**です。なお Crush 内部には `opencode` という別上流プロバイダー名も存在しますが、これもまた別物です。

## どのプロトコルを使うか

Crush のカスタム provider は `type` に `anthropic` と `openai-compat` を受け付けます。**Claude を使うなら `anthropic`** です —— QCode の OpenAI エンドポイントは Claude モデルを受け付けません（[エンドポイントと API パス](/docs/getting-started/endpoints-and-api-paths)）。

| 使いたいモデル | `type` | `base_url` |
|---|---|---|
| Claude | `anthropic` | `https://api.qcode.cc/api` |
| GPT 系 / 中国系 4 ファミリー | `openai-compat` | `https://api.qcode.cc/openai/v1` |

## インストール

```bash
# Homebrew
brew install charmbracelet/tap/crush

# または Releases からビルド済みバイナリを取得
# https://github.com/charmbracelet/crush/releases
```

確認（**文書中のバージョン数字ではなく実際の出力を信頼してください**）：

```bash
crush --version
```

## 設定

プロジェクト直下に `crush.json`、またはユーザー単位で `~/.config/crush/crush.json`（= `$XDG_CONFIG_HOME/crush/crush.json`）に作成。`~/.local/share/crush/` 配下はステータスファイルで、公式に「手編集するな」と明記されています。新しめの公式は `crushrc`（Bash DSL）形式を推していますが、JSON 設定も引き続き読み込まれます：

```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
        }
      ]
    }
  }
}
```

キーは設定ファイルに書かず環境変数で注入します：

```bash
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://qcode.cc/models) と一字一句一致させる |

> **中国本土**からはホストを `https://asia.qcode.cc/api`（アジアノード、韓国 / 台湾 / 香港の近い方）に変えるだけ。キーは共通です。
> `cost_per_1m_*`（公式 schema が必須とする `*_cached` 2 キーを含む）は Crush 側の使用量表示にのみ影響し、実際の課金には影響しません。サンプル値は一般的なキャッシュ比率に置いてあるため、[qcode.cc/models](https://qcode.cc/models) の実キャッシュ価格に合わせてください。

## 検証

```bash
crush run "reply with exactly: OK"
```

`OK` が返れば接続できています。

**本当に QCode へ流れているかの確認**：`base_url` をわざと存在しないパスに変えて再実行してください。完全な URL を含む明確な 404 が出るはずです：

```text
404 Not Found {"error":"Not Found","message":"Route /api/xxx/v1/messages not found"}
```

このエラーが出れば、Crush が `base_url + /v1/messages` を組み立てており、設定が効いている証拠です。（これは陰性対照です。成功しただけでは設定が効いた証明にはなりません——別の provider にフォールバックしている可能性があります。）

## よく使う操作

```bash
# 対話モード
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 パス](/docs/getting-started/endpoints-and-api-paths) — プロトコル × モデルファミリー対応表
- [OpenCode 連携](/docs/ide/opencode) — 別のターミナルエージェント（Crush とは別プロジェクト）
- [中国系モデル連携](/docs/usage/cn-models) — GLM / Kimi / DeepSeek / Qwen