# Подключение Crush

> **Последняя проверка**: 2026-09-18 · 📄 По официальной документации (Crush v0.95.0, выпуск 2026-09-16)

## Кратко

| Параметр | Описание |
|---|---|
| Доступные модели | Claude ✅ (`type: anthropic`) · GPT ✅ · китайские модели ✅ (`openai-compat`) · 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) — терминальный AI-агент для программирования от Charm (на Go). Он поддерживает **пользовательские провайдеры**, поэтому QCode.cc можно указать как источник моделей.

> **О названии**: репозиторий изначально назывался `charmbracelet/opencode`, теперь это `crush` (старый URL делает 301-редирект; причину переименования апстрим не называл). Это **другой проект**, чем [OpenCode](/docs/ide/opencode) (opencode.ai); у Crush есть также встроенный апстрим моделей с именем `opencode` — это вообще третья вещь на стороне Charm.

## Какой протокол выбрать

Пользовательские провайдеры Crush принимают `type` со значениями `anthropic` и `openai-compat`. **Для Claude нужен `anthropic`** — точка OpenAI у QCode не принимает модели Claude (см. [Точки доступа и форматы API](/docs/getting-started/endpoints-and-api-paths)).

| Нужная модель | `type` | `base_url` |
|---|---|---|
| Claude | `anthropic` | `https://api.qcode.cc/api` |
| GPT / четыре китайских семейства | `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` — нативный протокол 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_*` (включая два ключа `*_cached`, обязательных в официальной схеме) влияет только на оценку расхода в интерфейсе Crush, но не на списание; примеры цифр даны по типичному кэш- соотношению — подстройте под реальные кэш-цены на [qcode.cc/models](https://qcode.cc/models).

## Проверка

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

Ответ `OK` означает, что связь есть.

**Чтобы доказать, что трафик действительно идёт в QCode**, намеренно укажите в `base_url` несуществующий путь и запустите снова. Вы должны увидеть явную ошибку 404 с полным URL:

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

Эта ошибка доказывает, что Crush собирает `base_url + /v1/messages` и что конфигурация применилась. (Это отрицательный контроль: один только успех не доказывает, что использовался ваш провайдер — Crush мог переключиться на другой.)

## Повседневное использование

```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[]` приоритет у вашего списка. Если модели не видны — добавьте запись и перезапустите.

## Смежные документы

- [Точки доступа и форматы API](/docs/getting-started/endpoints-and-api-paths) — таблица «протокол × семейство моделей»
- [Интеграция с OpenCode](/docs/ide/opencode) — другой терминальный агент (не тот же проект)
- [Китайские модели](/docs/usage/cn-models) — GLM / Kimi / DeepSeek / Qwen