# Настройка Command Code через RouterAI

Command Code (`cmd`) — терминальный coding-агент, который по умолчанию работает через собственный сервис Command Code. Режим BYOK (Bring Your Own Key, сейчас в beta) позволяет подключить любой OpenAI- или Anthropic-совместимый endpoint со своим ключом. Запросы к такому провайдеру идут напрямую с вашей машины, минуя серверы Command Code. Через RouterAI вы получаете Claude, GPT, DeepSeek и GLM под одним ключом, без VPN и с оплатой в рублях.

> Не путайте BYOK с Provider API самого Command Code: здесь вы подключаете RouterAI как внешнего провайдера, а не используете модели и тариф Command Code.

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

- Node.js 22 или новее (на Node 20 и ниже CLI не запускается).
- Аккаунт на [RouterAI](/) с положительным балансом и API-ключ из раздела «Ключи API».
- Аккаунт Command Code: при первом запуске CLI просит войти (`cmd login`).

## Установка

```bash
npm i -g command-code@latest
cmd --version
```

CLI доступен под именами `command-code` и `cmd` (в нативном Windows — `cmdc`). Войдите в аккаунт и запустите агента в папке проекта:

```bash
cmd login
cd my-project
cmd
```

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

Провайдеров можно добавить двумя способами: через меню `/connect` или правкой файла `~/.commandcode/providers.json`.

### Через команду /connect

В сессии `cmd` введите `/connect`. Меню показывает Command Code, GitHub Copilot, OpenAI ChatGPT/Codex и пункт **(BYOK) Add your own provider**; уже добавленные провайдеры отображаются в этом же списке с числом моделей.

![Меню /connect в Command Code: Command Code, GitHub Copilot, OpenAI ChatGPT/Codex, RouterAI и RouterAI (Anthropic) с зелёными галочками, пункт (BYOK) Add your own provider](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/81daaa16adfbce030fdc9f92211e5d00.png)

1. Выберите **(BYOK) Add your own provider**. Откроется форма **Add a provider**.
2. **provider id** — короткое имя провайдера латиницей: введите `routerai` (можно выбрать и из списка известных провайдеров). Оно станет именем записи в `providers.json` и префиксом моделей (`routerai/anthropic/claude-sonnet-5.5`).
3. **What does the endpoint speak?** — тип протокола (клавиши ↑/↓ и Enter):

| Wire в меню | Значение в `providers.json` | Когда выбирать | Endpoint RouterAI |
|---|---|---|---|
| OpenAI-compatible (по умолчанию) | `openai-completions` | модели через `/chat/completions` | `https://routerai.ru/api/v1` |
| OpenAI Responses | `openai-responses` | модели через `/responses` | `https://routerai.ru/api/v1` |
| Anthropic wire | `anthropic-messages` | Claude через Messages API | `https://routerai.ru/api` |

4. **base URL** — корень API из таблицы. Если вставить адрес с хвостом (`…/v1/chat/completions`), CLI сам обрежет его до корня.
5. **key** — ваш ключ RouterAI (`sk-xxxxxxxxxxxxxxxx`). Вводимые символы скрыты звёздочками, ключ сохраняется в `~/.commandcode/auth.json`, а не в `providers.json`.

![Форма Add a provider · routerai: поле key со скрытым значением](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/71eae079fd9def41714acb5e69bba308.png)

6. **models** — меню запрашивает список у endpoint (`/models`). Если автоматически получить его не удалось, введите точные id через запятую, например `anthropic/claude-sonnet-5.5, openai/gpt-5.5, deepseek/deepseek-v4-flash, z-ai/glm-5.3`, и нажмите Enter. Список можно поправить и позже в `providers.json`.

После этого модели провайдера появятся в `/model` рядом с моделями Command Code.

### Ручная правка providers.json

Файл `~/.commandcode/providers.json` можно править руками, изменения подхватываются сразу (откройте `/connect` или `/model` заново). Пример с двумя провайдерами — OpenAI-совместимым и Anthropic:

```json
{
  "provider": {
    "routerai": {
      "name": "RouterAI",
      "baseURL": "https://routerai.ru/api/v1",
      "apiKey": "$ROUTERAI_API_KEY",
      "models": {
        "anthropic/claude-sonnet-5.5": { "name": "Claude Sonnet 5.5" },
        "openai/gpt-5.5": { "name": "GPT-5.5" },
        "deepseek/deepseek-v4-flash": { "name": "DeepSeek V4 Flash" },
        "z-ai/glm-5.3": { "name": "GLM 5.3" }
      }
    },
    "routerai-claude": {
      "name": "RouterAI (Anthropic)",
      "api": "anthropic-messages",
      "baseURL": "https://routerai.ru/api",
      "apiKey": "$ROUTERAI_API_KEY",
      "models": {
        "anthropic/claude-haiku-5.5": { "name": "Claude Haiku 5.5" }
      }
    }
  }
}
```

Что важно:

- `baseURL` и `models` обязательны; без корректного URL или без единой модели провайдер пропускается.
- В `apiKey` пишется ссылка на ключ, а не сам ключ: `"$ROUTERAI_API_KEY"` читает переменную окружения, `"!команда"` берёт ключ из вывода команды. Ключ, сохранённый через `/connect`, имеет приоритет над этим полем (в карточке провайдера это видно по надписи «overrides $ROUTERAI_API_KEY»). Сырой ключ в этом поле CLI отвергает.
- Для `contextWindow` (по умолчанию 200K), `maxOutput` и `reasoningEfforts` (`low`, `medium`, `high`, `xhigh`, `max`) задавайте значения из карточки модели в [каталоге](/models).
- Один провайдер может обслуживать модели по разным протоколам: у отдельной модели можно указать `"api": "openai-responses"` или `"api": "anthropic-messages"`.

Экспортируйте ключ в окружение (или сохраните его через `/connect`):

```bash
export ROUTERAI_API_KEY=sk-xxxxxxxxxxxxxxxx
```

## Выбор модели

Откройте `/model` и выберите модель в секции провайдера RouterAI (помечена `(byok)`): список можно отфильтровать, набрав «RouterAI». Id берите из [каталога моделей](/models).

![Меню /model: модели провайдеров RouterAI (byok) и RouterAI (Anthropic) (byok)](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/01da544add7095a1da960d70894fd694.png)

| Модель | Для чего |
|---|---|
| `anthropic/claude-sonnet-5.5` | основная модель для кода и агентных задач |
| `anthropic/claude-haiku-5.5` | быстрые и дешёвые правки, объяснения |
| `openai/gpt-5.5` | сложные задачи, рефакторинг |
| `deepseek/deepseek-v4-flash` | недорогой вариант для повседневной работы |
| `z-ai/glm-5.3` | кодинг с большим контекстом |

Модель на один запуск можно задать флагом: `cmd -m routerai/anthropic/claude-sonnet-5.5`.

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

1. В `/connect` строка провайдера должна быть с зелёной галочкой ✓ и числом моделей.
2. Выберите модель RouterAI в `/model` и отправьте короткий запрос, например «Кратко объясни, что делает invoices.js». В строке состояния вверху видна выбранная модель (`routerai/anthropic/claude-sonnet-5.5 · routerai (byok)`), а ниже — ответ.

![Сессия Command Code с моделью routerai/anthropic/claude-sonnet-5.5: агент читает invoices.js и отвечает](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/dfc9ad0eef4827492ea67a898dfa9c02.png)

3. Можно проверить ключ отдельно:

```bash
curl -s https://routerai.ru/api/v1/models -H "Authorization: Bearer $ROUTERAI_API_KEY" | head -c 200
```

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

- **Провайдера нет в `/model`.** Скорее всего, `baseURL` пропущен или неверен, либо в `models` нет ни одной модели. Проверьте JSON и используйте `https://routerai.ru/api/v1` (для Anthropic wire — `https://routerai.ru/api`).
- **Провайдер пропущен из-за `api`.** Допустимы только `openai-completions`, `openai-responses`, `anthropic-messages`; любое другое значение пропускает провайдер.
- **Ошибка 401 («rejected your API key»).** Ключ неверен: сохранённый через `/connect` ключ перекрывает переменную `ROUTERAI_API_KEY`. Откройте `/connect`, выберите провайдера RouterAI и в карточке нажмите `r` (заменить ключ) или `c` (очистить сохранённый ключ, тогда снова действует `apiKey` из `providers.json`).
- **Ключ в `apiKey` отвергнут.** В этом поле хранится только ссылка (`$VAR`, `!команда`); сам ключ вводится через `/connect`.
- **Ошибка модели (404/400).** Id не совпадает с каталогом. Сверьтесь с [каталогом](/models) и обновите список клавишей `u` в карточке провайдера.
- **Лишний `/v1` в Anthropic-провайдере.** Для Anthropic wire указывайте корень `https://routerai.ru/api`, CLI сам добавит `/v1`.
- **«'routerai' is already declared in providers.json».** Провайдер с таким id уже есть в файле: управляйте им из `/connect` (карточка провайдера: `enter` — сохранить, `r` — заменить ключ, `c` — очистить, `u` — обновить модели, `d` — удалить) или правьте файл.

## Что дальше

- [Factory Droid через RouterAI](/pages/factory-droid-routerai) — похожая настройка собственных моделей (BYOK).
- [Kimi Code CLI через RouterAI](/pages/kimi-code-routerai) и [Codewhale через RouterAI](/pages/codewhale-routerai) — другие терминальные агенты.
- [Каталог моделей RouterAI](/models) — id, контекст и цены.
- Документация: [BYOK Providers](https://commandcode.ai/docs/byok).

Инструкция проверена на Command Code 1.88.5.
