Пересел на Oh My Pi как на основной кодинг-харнес. К этому моменту у меня уже был обжитый сетап Claude Code: плагины, скиллы в десятке проектов и MCP-серверы в ~/.claude.json. OMP умеет подхватывать всё это сам. Но обнаружить конфигурацию — ещё не значит корректно с ней работать. Ниже — что всплыло при аудите и как я собрал сетап, который больше не приходится постоянно перенастраивать.
Сначала аудит, потом настройка
Первое, что стоит сделать после установки — не крутить настройки, а посмотреть логи: ~/.omp/logs/omp.<дата>.log. Один прогон grep -E по "level":"(error|warn)" дал мне список проблем, о которых я бы иначе узнал через неделю в самый неудобный момент:
- три MCP-сервера (railway, sequential-thinking, mobile) падали на старте с «Transport closed». Причина оказалась вообще не в OMP: битый кэш npx (
ENOTEMPTYв~/.npm/_npx/...). Лечится удалением каталога кэша — все npx-серверы ожили; - OAuth-серверы из плагинов (Linear, Notion, Figma, Slack) молча отваливались с 401 — им нужен
/mcp reauth <name>, а ненужные лучше загасить черезdisabledServers, чтобы не шумели в логах; - одна slash-команда не парсилась: строгий YAML-парсер OMP споткнулся о незакавыченный
argument-hint: [...]во frontmatter. Claude Code это прощал, OMP — нет.
OMP совместим с чужими конфигами, но строже к ним относится. Всё, что молча сломалось, видно в логах за минуту.
Роли моделей: дорогое — в планирование, дешёвое — в фон
В OMP модель задаётся не одна: есть роли, и у каждой свой профиль работы. Моя раскладка в ~/.omp/agent/config.yml — только первая версия; модели и роли здесь каждый подбирает и настраивает под себя:
modelRoles:
# думают: планирование и «подумай как следует» — opus на максимуме
plan: anthropic/claude-opus-4-8:max
slow: anthropic/claude-opus-4-8:max
# работают: основная сессия — opus:high; max бережём для think-ролей
default: anthropic/claude-opus-4-8:high
vision: anthropic/claude-sonnet-5:high # скриншоты и картинки
designer: anthropic/claude-sonnet-5:high # UI-задачи
task: openai-codex/gpt-5.6-sol:high # сабагенты-исполнители
# каждый ход: адвайзер на fable — opus тут сжёг бы больше, чем сама работа
advisor: anthropic/claude-fable-5:max # надзиратель, о нём ниже
# фон: десятки срабатываний за сессию — самое дешёвое
smol: openai-codex/gpt-5.6-luna:low # мелкие подзадачи
commit: openai-codex/gpt-5.6-luna:low # сообщения коммитов
tiny: openai-codex/gpt-5.6-luna:min # заголовки сессий
Суффикс после двоеточия задаёт уровень рассуждений. Парсер понимает однозначные сокращения, поэтому :min равнозначен :minimal. Аудит показал, что даже заголовки сессий у меня генерировала модель класса Opus с xhigh — неоправданно дорогой режим для короткой фоновой задачи. После этого я развёл роли по характеру нагрузки: частые и простые tiny, commit и smol перевёл на самую дешёвую модель с минимальным уровнем рассуждений, а plan и slow, где глубина действительно важна, оставил на максимуме.
Проверить, что id модели существует, можно по кэшу провайдеров: ~/.omp/agent/models.db (sqlite, таблица model_cache).
Две подписки Claude: ручное переключение
У меня две подписки Claude — личная и командная. OMP работает внутри Орки, а нужный аккаунт я выбираю вручную в её статус-баре. Когда лимит на одной подписке почти закончился, переключаюсь на вторую. Если закончились обе — остаётся ждать сброса.
В паре с Оркой это особенно удобно: остаток лимитов на пять часов и неделю виден прямо в статус-баре под терминалом, поэтому момент переключения на вторую подписку не приходится угадывать.
Скиллы: один глобальный источник вместо копий по проектам
За полгода в десятке репозиториев накопилось 190 каталогов со скиллами. Многие дублировались, дизайн- и workflow-скиллы существовали в разных версиях, а у некоторых был повреждён frontmatter.
Решение — глобальная установка в ~/.omp/agent/skills/. Порядок приоритетов у OMP такой:
<проект>/.omp/skills > ~/.omp/agent/skills > .claude/skills (проект и плагины)
Если OMP находит несколько скиллов с одинаковым именем, он выбирает версию из источника с более высоким приоритетом. Поэтому глобальный скилл из .omp перекрывает одноимённые проектные копии из .claude: обновлять достаточно только его.
При миграции есть два нюанса:
- Скиллы из плагинов — исключение. Их переносить в
~/.omp/agent/skills/не нужно: глобальная копия получит более высокий приоритет, и OMP перестанет использовать версию из плагина. Плагин продолжит обновляться, но в работе останется старая глобальная копия. У меня так устроеныsuperpowersиswiftui-pro. - Версии. У скиллов с
metadata.versionесть апстримы на GitHub. Мои копииimpeccableотставали на четыре минорных версии (3.5.0 против 3.9.1), ui-ux-pro-max — почти на мажор. Проверяется быстро: frontmatter локального SKILL.md против raw-файла в репозитории.
Отдельный случай — скиллы openspec: они генерируются самим CLI. Обновил CLI с 1.4.1 до 1.6.0 и перегенерировал — бонусом в 1.6.0 появился нативный таргет для OMP: openspec init --tools oh-my-pi кладёт скиллы сразу в .omp/skills.
Итог: 38 скиллов глобально, 5.6 МБ, все frontmatter валидны, источник правды один.
Адвайзер: второй агент, который читает каждый ход
Самая недооценённая фича OMP. Включается двумя строками:
advisor:
enabled: true
# плюс modelRoles.advisor
Адвайзер — полноценный второй агент. После каждого хода основного агента он читает новую часть транскрипта, включая рассуждения, и при необходимости сам проверяет код read-only инструментами. Замечания делятся на три уровня: nit появляется тихой заметкой, а concern и blocker могут прервать работу основного агента прямо посреди хода. Чтобы прерывания не шли одно за другим, после каждого из них включается пауза на три хода: новые советы в это время отображаются как обычные заметки.
Ключ к полезности — файл WATCHDOG.md: инструкции, которые видит только адвайзер. Глобальный лежит в ~/.omp/agent/, проектный — в корне репозитория, они складываются. Туда пишутся не общие пожелания, а конкретные ловушки проекта: «миграции автоматически применяются на каждом деплое», «изоляция тенантов на уровне приложения, RLS нет — флагай любой запрос без скоупа», «пуш в main = прод».
Когда одного ревьюера мало, есть WATCHDOG.yml — ростер: несколько адвайзеров, у каждого своя модель, свои инструменты и своя специализация. Мне пока хватает одного.
Адвайзер проверяет не готовый дифф, а сам ход работы. Классическое ревью кода он не заменяет: его задача — заметить ошибочное направление на втором ходу, прежде чем агент потратит на него час. Цена — дополнительный расход токенов, особенно при максимальном уровне рассуждений. Точный расход показывает /advisor status.
Память сессий
Ещё один выключенный по умолчанию слой:
memory:
backend: local
Фоновый пайплайн на старте перечитывает отлежавшиеся сессии проекта — минимум 12 часов простоя и не старше 30 дней. Роль default извлекает из них решения и грабли, а более дешёвая smol объединяет результаты в MEMORY.md и компактную выжимку. Эта выжимка попадает в системный промпт каждой новой сессии проекта. Перед записью на диск пайплайн удаляет секреты.
Практический эффект: новая сессия начинает не с нуля, а со знанием «в этом проекте деплой только по просьбе владельца, тесты гоняются вот так, в прошлый раз споткнулись вот об это». Что именно память выучила, можно посмотреть: /memory view или обычный read по memory://root.
AGENTS.md на все проекты: параллельные скауты
Финальный слой — контекст проектов. У меня 13 активных репозиториев; писать руками 13 файлов контекста — тоска. Вместо этого — по одному read-only скауту на проект, параллельно, с жёстким контрактом ответа: identity, стек, команды, существующие агент-файлы, конвенции, риски для WATCHDOG. Тринадцать минут — тринадцать брифов, из них уже руками собираются файлы.
Схема на выходе для каждого проекта:
AGENTS.md— канонический контекст: что за проект, команды, архитектура, конвенции. OMP читает его нативно;WATCHDOG.md— риски для адвайзера;- старый
CLAUDE.mdне удаляется, а заменяется однострочником@AGENTS.md— Claude Code продолжает работать через импорт, а контекст не грузится дважды.
Жёсткие запреты вроде «не пушить без спроса» лучше хранить в RULES.md, а не в AGENTS.md. OMP загружает их как sticky-правила и возвращает ближе к текущему ходу, поэтому они не теряются в длинной сессии.
Побочный эффект аудита оказался не менее полезным: вместе с контекстом всплыли устаревшие команды запуска, конфликтующие инструкции и другие расхождения между документацией и реальными проектами.
Полезные возможности и неочевидное поведение
Полезные возможности:
omp stats— расход токенов и денег по проектам и сессиям, включая сабагентов и адвайзера. Отрезвляет./advisor dump— транскрипт советника в буфер обмена: видно, что он читал и почему ворчал.omp config get <ключ>— смерженное значение настройки со всех слоёв разом; экономит гадание «какой конфиг победил».memory://rootиskill://<имя>читаются обычнымread— внутренности харнеса смотрятся из самого харнеса.
Неочевидное поведение:
- массивы в настройках не мержатся, а заменяются: проектный
disabledProvidersмолча перекрывает глобальный целиком; googleиgemini— разные id в одном неймспейсе: первый гасит модельный бэкенд, второй — discovery-файлы Gemini CLI;- пустая папка
.omp/при поиске контекста пропускается — walk-up уходит к родителю, и проект живёт с чужим AGENTS.md; hide: trueу скилла убирает его из системного промпта, но не выключает — он по-прежнему доступен по имени.
Чек-лист
Глобально, один раз:
grep -E '"level":"(error|warn)"' ~/.omp/logs/omp.*.log— и починить найденное- Роли моделей: дешёвое на tiny/commit/smol, дорогое на plan/advisor
- Скиллы в
~/.omp/agent/skills, без дублей с плагинами, версии сверены с апстримом advisor.enabled: true+ глобальныйWATCHDOG.mdmemory.backend: local- Вторая подписка Claude, если есть: OMP работает внутри Орки, аккаунт выбираю вручную в её статус-баре
В каждом проекте, по 10 минут:
AGENTS.md(можно попросить агента: «изучи проект и создай AGENTS.md»)WATCHDOG.mdс конкретными ловушкамиCLAUDE.md→@AGENTS.md, если он былopenspec init --tools oh-my-pi, если фичи идут через спеки
Конфигурация читается на старте процесса, так что после правок — перезапуск. Дальше она просто работает.