Подключение Crush
Добавьте QCode.cc как пользовательский провайдер в Charm Crush: type=anthropic и base_url в crush.json, чтобы использовать Claude из терминала
Подключение Crush¶
Crush — терминальный AI-агент для программирования от Charm (на Go). Он поддерживает пользовательские провайдеры, поэтому QCode.cc можно указать как источник моделей.
О названии: изначально Crush назывался «Open Code» и был переименован, чтобы не путать его с OpenCode. Это разные проекты.
Какой протокол выбрать¶
Пользовательские провайдеры Crush принимают type со значениями anthropic и openai-compat. Для Claude нужен anthropic — точка OpenAI у QCode не принимает модели Claude (см. Точки доступа и форматы API).
| Нужная модель | type |
base_url |
|---|---|---|
| Claude | anthropic |
https://api.qcode.cc/api |
| GPT / четыре китайских семейства | 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 в корне проекта (можно и в пользовательском каталоге конфигурации; путь — по официальной документации):
{
"$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
},
{
"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
}
]
}
}
}
Ключ передавайте через переменную окружения, а не в файле:
export QCODE_KEY="cr_ваш_ключ_QCode"
| Поле | Значение |
|---|---|
type |
anthropic — нативный протокол Messages |
base_url |
До /api — Crush сам добавляет /v1/messages |
api_key |
Поддерживает подстановку $ПЕРЕМЕННАЯ |
extra_headers |
Протоколу Anthropic нужен anthropic-version |
models[] |
Модели перечисляются явно; каждый id должен совпадать с qcode.cc/models символ в символ |
Из материкового Китая замените хост на
https://asia.qcode.cc/api(узел в Гонконге); ключ тот же.cost_per_1m_*влияет только на оценку расхода в интерфейсе Crush, но не на фактическое списание.
Проверка¶
crush run "reply with exactly: OK"
Ответ OK означает, что связь есть.
Чтобы доказать, что трафик действительно идёт в QCode, намеренно укажите в base_url несуществующий путь и запустите снова. Вы должны увидеть явную ошибку 404 с полным URL:
404 Not Found {"error":"Not Found","message":"Route /api/xxx/v1/messages not found"}
Эта ошибка доказывает, что Crush собирает base_url + /v1/messages и что конфигурация применилась. (Это отрицательный контроль: один только успех не доказывает, что использовался ваш провайдер — Crush мог переключиться на другой.)
Повседневное использование¶
# интерактивно
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 показывает только модели, явно перечисленные в models[]. Добавьте запись и перезапустите.
Смежные документы¶
- Точки доступа и форматы API — таблица «протокол × семейство моделей»
- Интеграция с OpenCode — другой терминальный агент (не тот же проект)
- Китайские модели — GLM / Kimi / DeepSeek / Qwen