oh-my-pi (команда в терминале — omp) — открытый кодинг-агент для терминала под лицензией MIT. Он вырос из агента Pi Марио Цехнера и добавил к нему встроенные Python и Bun, языковые серверы, отладчик, субагентов и разбиение изменений на атомарные коммиты. На 24 сентября 2026 года у репозитория больше 33 тысяч звёзд на GitHub.
Агенту нужна языковая модель, и omp умеет работать с любым OpenAI-совместимым API. Ниже — как направить его на PlusVibe: два файла конфигурации, одна переменная окружения. Настройку мы проверили на omp 18.3.0 живыми запросами.
Установка
Linux и macOS — скрипт с официального сайта:
curl -fsSL https://omp.sh/install | sh
Другие варианты из README проекта:
brew install can1357/tap/omp # Homebrew
bun install -g @oh-my-pi/pi-coding-agent # Bun
irm https://omp.sh/install.ps1 | iex # Windows, PowerShell
Проверка: omp --version.
Шаг 1. Ключ PlusVibe
Зарегистрируйтесь на plusvibeapi.ru/register, создайте ключ вида sk-pv-… и положите его в переменную окружения:
echo 'export PLUSVIBE_API_KEY=sk-pv-ВАШ_КЛЮЧ' >> ~/.bashrc # или ~/.zshrc
source ~/.bashrc
Шаг 2. Провайдер в models.yml
Свои провайдеры omp читает из файла ~/.omp/agent/models.yml. Есть два рабочих варианта.
Вариант А: список моделей с сервера (рекомендуем)
providers:
plusvibe:
baseUrl: https://plusvibeapi.ru/v1
apiKey: PLUSVIBE_API_KEY
api: openai-completions
discovery:
type: openai-models-list
omp сам запросит /v1/models и покажет модели каталога. Если у ключа задан список разрешённых моделей, мы отдаём только их — агент не увидит того, что ваш ключ вызвать не может. Это защищает от главной ошибки из раздела ниже.
Вариант Б: модели вручную
providers:
plusvibe:
baseUrl: https://plusvibeapi.ru/v1
apiKey: PLUSVIBE_API_KEY
api: openai-completions
models:
- id: anthropic/claude-sonnet-5
name: Claude Sonnet 5
contextWindow: 1000000
maxTokens: 64000
- id: z-ai/glm-5.3-flash
name: GLM-5.3 Flash
contextWindow: 1048000
maxTokens: 128000
Что означают поля:
baseUrl— адрес PlusVibe вместе с/v1.apiKey— omp сначала ищет переменную окружения с таким именем и только если её нет, отправляет строку как есть. Поэтому здесь имя переменной, а не сам ключ.api: openai-completions— формат Chat Completions, в нём у нас работают все текстовые модели каталога.id— идентификатор модели ровно так, как он указан на /models. Размер контекста и лимит ответа тоже берите оттуда.
Проверьте, что провайдер виден:
omp models plusvibe
Шаг 3. Роли моделей в config.yml
Главная особенность omp — роли. Агент отправляет разные задачи разным моделям: default — обычные ходы, smol — дешёвые субагенты, slow — глубокие рассуждения, plan — режим планирования, commit — сообщения коммитов, tiny — фоновые мелочи вроде названия сессии. Роли задаются в ~/.omp/agent/config.yml, модель указывается как провайдер/id:
modelRoles:
default: plusvibe/anthropic/claude-sonnet-5
slow: plusvibe/anthropic/claude-sonnet-5
plan: plusvibe/anthropic/claude-sonnet-5
smol: plusvibe/z-ai/glm-5.3-flash
tiny: plusvibe/z-ai/glm-5.3-flash
commit: plusvibe/z-ai/glm-5.3-flash
Это важнее, чем кажется. Когда мы проверяли эту настройку, один вызов omp -p с коротким вопросом дал два запроса к API: основной ответ ушёл в claude-sonnet-5, а вспомогательный — в glm-5.3-flash, назначенную на фоновые роли. В выводе omp -p второго запроса не видно — он есть только в истории запросов в кабинете.
Шаг 4. Проверка
cd ~/my-project
omp -p "Ответь одним словом: работает?"
Флаг -p отвечает на один вопрос и завершает работу. Если ответ пришёл, запустите интерактивный режим командой omp. Сменить модель внутри сессии можно командой /model, там же в разделе ролей назначаются модели для smol, slow и остальных.
История запросов — в кабинете, в разделе «Использование»: там видно, какие модели на самом деле вызывает агент, включая запросы, завершившиеся ошибкой.
Цены на модели из примера
| Модель | Вход | Выход |
|---|---|---|
| claude-sonnet-5 | 44 ₽/1M | 220 ₽/1M |
| glm-5.3-flash | 9,51 ₽/1M | 31,7 ₽/1M |
| gpt-5.6-luna | 3,78 ₽/1M | 22,63 ₽/1M |
| claude-opus-4.8 | 151,99 ₽/1M | 758,7 ₽/1M |
Цены подставляются из каталога в момент открытия страницы. Все модели и варианты — на /models. Если нужна дешёвая модель для роли smol, кроме GLM-5.3 Flash подойдёт gpt-5.6-luna; для сложного рефакторинга роль slow можно отдать claude-opus-4.8.
Частые ошибки
403 «Модель недоступна для этого API-ключа»
Реальный случай нашего клиента: основная модель в omp работала, а в журнале ошибок раз за разом появлялись отказы по gpt-6-sol. У ключа был задан список разрешённых моделей, и агент использовал эту модель для вспомогательной роли, которой в списке не было.
Так получается, когда роль не назначена явно: omp сам выбирает для неё модель по встроенному списку приоритетов из тех, что знает. Мы воспроизвели это на ключе, которому разрешена только claude-sonnet-5: в config.yml задана лишь роль default, а в models.yml вручную перечислены две модели. Основной ответ пришёл, а фоновый запрос omp отправил в z-ai/glm-5.3-flash и получил 403. В выводе omp -p ошибки не было — она видна только в истории запросов в кабинете.
Как исправить — любой из трёх способов:
- Назначьте все роли явно в
config.yml— моделями, которые разрешены ключу, как в шаге 3. - Используйте вариант А из шага 2. Со списком моделей с сервера omp видит только разрешённые модели. На том же ограниченном ключе этот вариант прошёл без единого 403.
- Расширьте список ключа. В кабинете откройте ключ и добавьте нужную модель в поле «Разрешённые модели». Пустое поле — все модели разрешены.
401 «Отсутствует или неверный API-ключ»
Обычная причина — переменная PLUSVIBE_API_KEY не видна процессу omp: терминал открыт до того, как вы её добавили, или она записана не в тот файл профиля. Тогда omp отправляет вместо ключа саму строку PLUSVIBE_API_KEY. Проверьте echo $PLUSVIBE_API_KEY в том же терминале, где запускаете агента.
Модель не найдена
Если в id опечатка, API ответит «модель «…» не найдена» и подскажет правильный формат. В config.yml надёжнее указывать модель полностью, с именем провайдера впереди: plusvibe/anthropic/claude-sonnet-5. Точные идентификаторы для вашего ключа покажет omp models plusvibe — копируйте их оттуда.
Агент неверно оценивает размер контекста
В варианте А omp берёт лимиты из собственного справочника моделей, и они могут отличаться от наших. Реальные значения смотрите на странице модели в /models и при необходимости задайте их через modelOverrides в models.yml:
providers:
plusvibe:
# ... как в варианте А
modelOverrides:
anthropic/claude-opus-4.8:
contextWindow: 200000
Итог
omp подключается к PlusVibe штатным способом: провайдер в models.yml, роли в config.yml, ключ в переменной окружения. Главное, что стоит запомнить, — агент ходит не в одну модель, а в несколько. Назначьте все роли явно или берите список моделей с сервера, и ограничения ключа не будут мешать работе.
Если вы запускаете несколько агентов параллельно, посмотрите нашу настройку Orca — omp входит в список поддерживаемых там агентов. Сравнить с другими терминальными агентами можно по материалам про Claude Code и Hermes Agent.
oh-my-pi + PlusVibe: весь каталог в одном провайдере
Claude, GPT, GLM и другие модели для каждой роли агента. Оплата в рублях.
Получить ключ →


