Загрузка...

популярность в разделе «CLI агенты»

Вайб-кодинг в Crush: настройка TUI-агента Charm через RouterAI (Claude, GPT-6, DeepSeek)

Crush

Crush — терминальный coding-агент от Charm (репозиторий charmbracelet/crush). Он работает в TUI-интерфейсе прямо в терминале: читает и правит файлы, запускает команды, использует LSP для контекста и подключает MCP-серверы. Модель можно сменить посреди сессии, не теряя контекст.

Crush умеет работать с любым OpenAI- или Anthropic-совместимым API, поэтому RouterAI подключается как обычный кастомный провайдер. Вы получаете в одном агенте Claude, GPT, DeepSeek и GLM из каталога моделей, работу из России без VPN и оплату в рублях.

Требования

  • macOS, Linux или Windows (PowerShell или WSL)
  • Терминал с поддержкой цвета; Node.js нужен только для установки через npm
  • API-ключ из личного кабинета

Установка

Через Homebrew (macOS и Linux):

brew install charmbracelet/tap/crush

Через npm (macOS, Linux, Windows):

npm install -g @charmland/crush

Windows:

winget install charmbracelet.crush

или через Scoop:

scoop bucket add charm https://github.com/charmbracelet/scoop-bucket.git
scoop install crush

Другие способы (Arch, Nix, deb/rpm-пакеты, готовые бинарники, go install) перечислены в README проекта. Проверьте установку:

crush --version

Откройте проект и запустите агент:

cd /path/to/your/project
crush

На первом запуске Crush предлагает инициализировать проект: он изучит кодовую базу и сохранит контекст в файл AGENTS.md.

Первый запуск Crush: логотип с версией и диалог инициализации проекта с кнопками «Yep!» и «Nope»

Подключение к RouterAI

В Crush RouterAI добавляется как кастомный провайдер. Конфигурация — файл crushrc: это обычный Bash с командами provider, model, mcp, lsp. Глобальный файл лежит в ~/.config/crush/crushrc (в Windows — %USERPROFILE%\.config\crush\crushrc), проектный — ./.crushrc в корне проекта и имеет приоритет.

OpenAI-совместимый API

Подходит для всех моделей каталога — Claude, GPT, DeepSeek, GLM:

  1. Задайте ключ в переменной окружения (например, в ~/.zshrc): export ROUTERAI_API_KEY="sk-xxxxxxxxxxxxxxxx".
  2. Откройте ~/.config/crush/crushrc и добавьте провайдера и модель:
provider add routerai \
  --name "RouterAI" \
  --type openai-compat \
  --base-url "https://routerai.ru/api/v1" \
  --api-key "$ROUTERAI_API_KEY"

model add routerai/anthropic/claude-sonnet-5.5 \
  --name "Claude Sonnet 5.5" \
  --context-window 1000000 \
  --default-max-tokens 32000

model large routerai/anthropic/claude-sonnet-5.5
  1. Запустите crush — внизу интерфейса появится выбранная модель «via routerai».

Тип openai-compat нужен для сторонних провайдеров с OpenAI-совместимым API; тип openai предназначен для проксирования самого OpenAI (документация Crush). Идентификатор модели в командах model add и model large — это <id провайдера>/<id модели из каталога>, то есть routerai/anthropic/claude-sonnet-5.5.

Если список моделей у провайдера не задан, Crush сам запрашивает каталог у /v1/models, и в выборе моделей появляются все модели RouterAI. Тогда достаточно одной команды provider add.

Файл crushrc: провайдер routerai с Base URL https://routerai.ru/api/v1, API-ключом-заглушкой и моделью Claude Sonnet 5.5

Anthropic-совместимый API

Для моделей anthropic/* можно использовать нативный Messages API. Базовый адрес здесь https://routerai.ru/api — без /v1, Crush сам добавляет /v1/messages:

provider add routerai-claude \
  --name "RouterAI (Anthropic)" \
  --type anthropic \
  --base-url "https://routerai.ru/api" \
  --api-key "$ROUTERAI_API_KEY"

model add routerai-claude/anthropic/claude-opus-5.5 \
  --name "Claude Opus 5.5" \
  --context-window 1000000 \
  --default-max-tokens 32000 \
  --can-reason true

Старый формат crush.json

Формат ~/.config/crush/crush.json в Crush считается устаревшим, но поддерживается. Эквивалентная конфигурация:

{
  "$schema": "https://charm.land/crush.json",
  "providers": {
    "routerai": {
      "name": "RouterAI",
      "type": "openai-compat",
      "base_url": "https://routerai.ru/api/v1",
      "api_key": "$ROUTERAI_API_KEY",
      "models": [
        {
          "id": "anthropic/claude-sonnet-5.5",
          "name": "Claude Sonnet 5.5",
          "cost_per_1m_in": 0,
          "cost_per_1m_out": 0,
          "cost_per_1m_in_cached": 0,
          "cost_per_1m_out_cached": 0,
          "context_window": 1000000,
          "default_max_tokens": 32000,
          "can_reason": true,
          "supports_attachments": true
        }
      ]
    }
  },
  "models": {
    "large": { "provider": "routerai", "model": "anthropic/claude-sonnet-5.5" }
  }
}

Не храните ключ в конфиге, который попадёт в git: используйте $ROUTERAI_API_KEY. Конфиги Crush выполняют код (в crushrc — полноценный shell), поэтому не запускайте агент в папке с чужим непроверенным конфигом.

Переключение моделей

Crush держит два слота: Large Task для сложных задач и Small Task для вспомогательных. Нажмите Ctrl+L, выберите модель стрелками и подтвердите Enter; Tab переключает слот. Историю диалога Crush сохраняет, так что можно начать с дешёвой модели и перейти на более сильную, когда задача усложнилась.

Слоты можно задать и в crushrc:

model large routerai/anthropic/claude-sonnet-5.5
model small routerai/anthropic/claude-haiku-5.5

Окно Switch Model по Ctrl+L: вкладки Large Task и Small Task, модели Claude Sonnet 5.5 и Claude Haiku 5.5 провайдера routerai

LSP и MCP

Crush подтягивает контекст у языковых серверов, как это делает человек в редакторе. Добавляются они в crushrc:

lsp add go --command "gopls"
lsp add typescript --command "typescript-language-server" --args --stdio

MCP-серверы поддерживаются в трёх вариантах транспорта: stdio, http и sse:

# локальный stdio-сервер
mcp add filesystem --command node --args /path/to/mcp-server.js

# HTTP-сервер с токеном
mcp add github --type http --url "https://api.githubcopilot.com/mcp/" \
  --header Authorization "Bearer $GH_PAT"

# SSE-сервер
mcp add streaming-service --type sse --url "https://example.com/mcp/sse" \
  --header API-Key "$API_KEY"

По умолчанию Crush спрашивает разрешение на каждый вызов инструмента. Часто используемые безопасные инструменты можно разрешить заранее: permissions allow view ls grep.

Выбор модели

Идентификаторы проверены по каталогу RouterAI на момент написания; цены и актуальный список смотрите в каталоге.

Модель Для чего
anthropic/claude-sonnet-5.5 Основная модель для кода: фичи, отладка, рефакторинг среднего размера
anthropic/claude-opus-5.5 Сложные рефакторинги и архитектурные изменения
anthropic/claude-haiku-5.5 Слот Small Task, быстрые мелкие запросы
openai/gpt-6.1-sol, openai/gpt-5.6-sol Альтернатива Claude от OpenAI для тех же задач
deepseek/deepseek-v4.1-flash-1017 Дешёвые массовые правки и переименования
z-ai/glm-5.3-flash Дешёвые массовые правки, быстрые ответы

Проверка подключения

Быстрая проверка без запуска интерфейса:

crush run "Объясни одной фразой, что делает этот проект"

Команда выполняет один запрос и выводит ответ в терминал. Список моделей, которые видит Crush, показывает crush models. Для интерактивной проверки запустите crush и дайте агенту небольшую задачу.

Сессия Crush: правка в invoice.py с diff, проверка командой и итоговый ответ, модель Claude Sonnet 5.5 via routerai

Решение проблем

401 Unauthorized

Ключ не передан или неверный. Проверьте, что переменная ROUTERAI_API_KEY экспортирована в том же терминале, где запущен crush (echo $ROUTERAI_API_KEY), и что ключ скопирован из личного кабинета полностью.

404 Not Found

Почти всегда виноват базовый адрес:

  • для openai-compat нужен https://routerai.ru/api/v1 — с /v1;
  • для anthropic нужен https://routerai.ru/api — без /v1, иначе запрос уйдёт на /api/v1/v1/messages.

Модель не найдена

Проверьте, что id модели есть в каталоге и написан точно. В командах Crush перед ним стоит id провайдера: routerai/anthropic/claude-sonnet-5.5, а не anthropic/claude-sonnet-5.5.

402 Payment Required

Недостаточно средств на балансе — пополните его в разделе Биллинг.

Изменения в конфиге не применяются

Проектный ./.crushrc перекрывает глобальный. Перезапустите crush и проверьте, нет ли в папке проекта собственного конфига.

Что дальше