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

## Crush

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

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

## Требования

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

## Установка

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

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

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

```bash
npm install -g @charmland/crush
```

Windows:

```powershell
winget install charmbracelet.crush
```

или через Scoop:

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

Другие способы (Arch, Nix, deb/rpm-пакеты, готовые бинарники, `go install`) перечислены в [README проекта](https://github.com/charmbracelet/crush#installation). Проверьте установку:

```bash
crush --version
```

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

```bash
cd /path/to/your/project
crush
```

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

![Первый запуск Crush: логотип с версией и диалог инициализации проекта с кнопками «Yep!» и «Nope»](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/68ffbbb26f75968830c271737ed69763.png)

## Подключение к 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` и добавьте провайдера и модель:

```bash
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
```

3. Запустите `crush` — внизу интерфейса появится выбранная модель «via routerai».

Тип `openai-compat` нужен для сторонних провайдеров с OpenAI-совместимым API; тип `openai` предназначен для проксирования самого OpenAI ([документация Crush](https://github.com/charmbracelet/crush#custom-providers)). Идентификатор модели в командах `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](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/e627f06a7872ddf00f0bd4421554e066.png)

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

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

```bash
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 считается устаревшим, но поддерживается. Эквивалентная конфигурация:

```json
{
  "$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 для вспомогательных. Нажмите <kbd>Ctrl+L</kbd>, выберите модель стрелками и подтвердите <kbd>Enter</kbd>; <kbd>Tab</kbd> переключает слот. Историю диалога Crush сохраняет, так что можно начать с дешёвой модели и перейти на более сильную, когда задача усложнилась.

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

```bash
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](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/71e02c4ee46a6012f118f01fed52a8a6.png)

## LSP и MCP

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

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

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

```bash
# локальный 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](/models) на момент написания; цены и актуальный список смотрите в каталоге.

| Модель | Для чего |
| --- | --- |
| `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` | Дешёвые массовые правки, быстрые ответы |

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

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

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

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

![Сессия Crush: правка в invoice.py с diff, проверка командой и итоговый ответ, модель Claude Sonnet 5.5 via routerai](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/6fc298a8fa4bd95fee687ec6bf4a54f8.png)

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

### 401 Unauthorized

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

### 404 Not Found

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

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

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

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

### 402 Payment Required

Недостаточно средств на балансе — пополните его в разделе [Биллинг](/settings/billing).

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

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

## Что дальше

- [Каталог моделей](/models) — подберите модель под задачу
- [Аутентификация](/docs/guides/overview/authentication) — управление API-ключами
- [Вайб-кодинг в Pi](/pages/vibe-coding-pi) и [Вайб-кодинг в Codex](/pages/vibe-coding-codex) — другие CLI-агенты через RouterAI
- [Документация Crush по конфигурации](https://github.com/charmbracelet/crush/blob/main/docs/config/README.md)
