# Oh My Pi (omp): настройка coding-агента через RouterAI (Claude, GPT, DeepSeek)

## Oh My Pi (omp)

[Oh My Pi](https://omp.sh), он же `omp`, — open-source (MIT) coding-агент для терминала от Stencil Labs, репозиторий [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi). Разработчики описывают его как «coding agent with the IDE wired in»: агент работает с LSP, умеет подключать отладчик (DAP), запускать субагентов в изолированных worktree, делать code review и коммиты. Проект активно развивается: на момент написания последний релиз — v18.12.6.

omp — форк [Pi](https://github.com/badlogic/pi-mono) Марио Цехнера. Если вы уже настраивали минималистичный Pi по статье [Вайб-кодинг в Pi](/pages/vibe-coding-pi), логика та же: провайдер описывается в конфигурационном файле, но у omp это `models.yml`, а не `models.json`, и в комплекте больше встроенных инструментов.

Через RouterAI omp получает Claude, GPT, DeepSeek, Gemini и другие модели из [каталога](/models) по одному ключу: работа из России без VPN, оплата в рублях, один баланс на все модели.

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

- macOS, Linux или Windows
- Bun 1.3.14 или новее — только для установки через `bun install -g`; установщик `omp.sh` без подходящего Bun скачивает готовый бинарник
- API-ключ из [личного кабинета](/settings/keys)

## Установка

macOS и Linux:

```bash
curl -fsSL https://omp.sh/install | sh
```

Windows (PowerShell):

```powershell
irm https://omp.sh/install.ps1 | iex
```

Альтернативы — Homebrew или Bun:

```bash
brew install can1357/tap/omp
bun install -g @oh-my-pi/pi-coding-agent
```

Проверьте установку командой `omp --version`. Если после установщика команда не находится, добавьте `~/.local/bin` в `PATH`.

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

omp умеет работать с любым OpenAI- и Anthropic-совместимым endpoint. Он описывается в файле `~/.omp/agent/models.yml`. Каждый ключ под `providers` — это имя провайдера, которое вы выбираете сами; оно же становится первой частью селектора модели `провайдер/id-модели`.

1. Сохраните ключ в переменную окружения (например, в `~/.bashrc` или `~/.zshrc`) и перезапустите терминал:

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

    Замените значение на ключ из [личного кабинета](/settings/keys). Вместо профиля оболочки можно положить строку `ROUTERAI_API_KEY=...` в файл `~/.omp/agent/.env` — omp читает его при запуске.

2. Создайте файл `~/.omp/agent/models.yml`:

    ```yaml
    providers:
      routerai:
        baseUrl: https://routerai.ru/api/v1
        api: openai-completions
        apiKey: ROUTERAI_API_KEY
        discovery:
          type: openai-models-list
      routerai-anthropic:
        baseUrl: https://routerai.ru/api
        api: anthropic-messages
        apiKey: ROUTERAI_API_KEY
        models:
          - id: anthropic/claude-sonnet-5.5
            name: Claude Sonnet 5.5 (Messages)
            contextWindow: 1000000
            maxTokens: 32000
    ```

    ![Файл ~/.omp/agent/models.yml с провайдерами routerai и routerai-anthropic и вывод omp models routerai-anthropic](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/70009ad3825e672c8cfc7536db1631c2.png)

3. Проверьте, что omp загрузил файл и видит модели:

    ```bash
    omp models routerai
    omp models routerai-anthropic
    ```

Что означают поля:

| Поле | Значение для RouterAI |
| --- | --- |
| `baseUrl` | `https://routerai.ru/api/v1` для `openai-completions`; `https://routerai.ru/api` (без `/v1`) для `anthropic-messages` |
| `api` | `openai-completions` — Chat Completions; `anthropic-messages` — Anthropic Messages API. Есть и `openai-responses`, если нужен Responses API |
| `apiKey` | имя переменной окружения. Если переменной с таким именем нет, omp использует значение как литеральный ключ; значение с `!` в начале запускается как команда и берёт ключ из её вывода |
| `discovery.type` | `openai-models-list` — omp сам запрашивает список моделей у `GET /v1/models`, вручную перечислять их не нужно; `omp models refresh routerai` принудительно обновляет список |
| `models[].id` | точный id модели из [каталога RouterAI](/models), например `anthropic/claude-sonnet-5.5` |
| `contextWindow`, `maxTokens` | для вручную описанных моделей omp по умолчанию считает 128 000 токенов контекста и 16 384 токена ответа — для моделей с большим контекстом задайте значения из каталога |

Если нужен небольшой фиксированный набор, а не весь каталог, вместо `discovery` перечислите модели списком `models` — как для `routerai-anthropic` выше.

### Выбор модели по умолчанию

При первом запуске `omp` показывает мастер настройки (Setup). Первый шаг — вход через аккаунты провайдеров — для RouterAI не нужен, его можно пропустить клавишей Esc. На втором шаге «Choose your default model» найдите модель провайдера `routerai`, например `routerai/anthropic/claude-sonnet-5.5`, и нажмите Enter.

![Мастер настройки omp, шаг 2: выбор модели по умолчанию из списка routerai](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/9ded409676118def411c08077444d4d2.png)

Остальные шаги мастера (вид значков в терминале и прочее) можно пройти клавишей Enter. После них откроется основной экран: в строке состояния видны модель и текущий каталог.

![Главный экран omp: модель Sonnet 5.5 в строке состояния и каталог проекта](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/3dc469c76c25393036d37f41a0b19577.png)

Модель по умолчанию можно задать и без мастера — в `~/.omp/agent/config.yml`:

```yaml
modelRoles:
  default: routerai/anthropic/claude-sonnet-5.5
  smol: routerai/deepseek/deepseek-v4-flash
```

Роль `default` — основная модель сессии, `smol` — лёгкие и быстрые задачи (например, субагенты), `slow` — сложные рассуждения, `plan` — режим планирования. Во время сессии модель меняет команда `/model`, а при запуске — флаг `--model`.

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

Все модели ниже есть в [каталоге RouterAI](/models); актуальные цены смотрите там же.

| Модель | Для чего |
| --- | --- |
| `anthropic/claude-sonnet-5.5` | основная модель для кода и многошаговых задач агента (`default`) |
| `anthropic/claude-haiku-5.5` | быстрые и недорогие правки, мелкие вопросы |
| `anthropic/claude-opus-5.5` | сложные задачи, архитектура, ревью (`slow`, `plan`) |
| `openai/gpt-5.5` | альтернатива Claude, контекст около 1M токенов |
| `deepseek/deepseek-v4-flash` | дешёвая модель для рутины и субагентов (`smol`) |

Для агентной работы нужна модель с поддержкой tool calling — иначе она сможет только отвечать текстом. Поддержку конкретной модели смотрите в каталоге.

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

Быстрый способ — разовый запрос в неинтерактивном режиме (`-p`): omp напечатает ответ и завершится.

```bash
omp -p --model routerai/anthropic/claude-sonnet-5.5 "Ответь одним словом: привет"
```

Если ответ пришёл — endpoint, ключ и модель настроены верно. Так же проверьте протокол Anthropic: `omp -p --model routerai-anthropic/anthropic/claude-sonnet-5.5 "Привет"`.

Затем запустите `omp` в каталоге проекта и дайте задачу, например: «В invoices.js добавь функцию averageInvoice(invoices) и кратко опиши, что изменил». omp сам прочитает файл, внесёт правку, проверит её и покажет итог.

![Сессия omp: задача про averageInvoice, вызовы инструментов, проверка результата и модель Sonnet 5.5](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/04bac6c4eccf25630c7c45a7eac3fb99.png)

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

### 401 Unauthorized

Ключ не принят. Проверьте, что `echo $ROUTERAI_API_KEY` в том же терминале выводит ваш ключ. Если в `apiKey` указано имя переменной, которой нет в окружении, omp не сообщает об этом, а отправляет само имя как литеральный ключ — отсюда 401. Ключ можно разово передать флагом `--api-key`.

### Model not found

Сообщение вида `Model "routerai/…" not found` значит, что omp не знает такую модель. Проверьте id командой `omp models find <часть-названия>`: id должен совпадать с каталогом, включая префикс `anthropic/`, `openai/` и т. д., а в `--model` провайдер идёт первым: `routerai/anthropic/claude-sonnet-5.5`. Модели не загружаются и при неверном `baseUrl` — для `openai-completions` нужен ровно `https://routerai.ru/api/v1`, для `anthropic-messages` — `https://routerai.ru/api`.

### models.yml validation failed

Если в файле ошибка схемы (например, `models` — не список), omp пишет `models.yml validation failed — custom providers disabled` и указывает поле, а модели RouterAI пропадают. Исправьте поле и снова выполните `omp models routerai`. Корневой объект файла принимает только ключ `providers`.

### Контекст «обрезается» раньше времени

Для вручную описанных моделей omp по умолчанию считает контекст 128 000 токенов и ответ 16 384 токена. Задайте `contextWindow` и `maxTokens` по данным каталога.

### omp setup requires an interactive TTY

Мастер настройки работает только в интерактивном терминале. В CI и скриптах пропустите его: пропишите `modelRoles` в `config.yml` и передавайте `--model`.

## Pi и Oh My Pi: в чём разница

| | Pi | Oh My Pi |
| --- | --- | --- |
| Файл провайдеров | `~/.pi/agent/models.json` | `~/.omp/agent/models.yml` |
| Ключ из окружения | `"apiKey": "$ROUTERAI_API_KEY"` | `apiKey: ROUTERAI_API_KEY` (имя без `$`) |
| Субагенты и plan mode | намеренно нет, собираются расширениями | есть из коробки |
| Встроенный упор | минимализм | LSP, отладчик, review, коммиты, память |

Протоколы и Base URL для RouterAI одинаковы. Если Pi уже настроен, перенесите провайдера в `models.yml` по примеру выше.

## Что дальше

- [Каталог моделей](/models) — выберите модель под задачу
- [Вайб-кодинг в Pi](/pages/vibe-coding-pi) — исходный Pi с RouterAI
- [Вайб-кодинг в Claude Code](/pages/vibe-coding-claude-code) — другой CLI-агент
- [Аутентификация](/docs/guides/overview/authentication) — управление API-ключами и безопасность
- [Документация omp: Custom models & providers](https://omp.sh/docs/custom-models) — расширенные настройки провайдера
