---
title: "Настройка OMP за один вечер: роли моделей, глобальные скиллы, адвайзер и память"
canonical: https://maxtokens.ai/ru/posts/oh-my-pi-setup/
date: 2026-07-17
tags: [agents, terminal]
description: "Аудит логов, роли моделей, глобальные скиллы, адвайзер с WATCHDOG.md и память сессий — рабочая конфигурация OMP за один вечер."
---
Пересел на [Oh My Pi](https://github.com/can1357/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` — только первая версия; модели и роли здесь каждый подбирает и настраивает под себя:

```yaml
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`: обновлять достаточно только его.

При миграции есть два нюанса:

1. **Скиллы из плагинов — исключение.** Их переносить в `~/.omp/agent/skills/` не нужно: глобальная копия получит более высокий приоритет, и OMP перестанет использовать версию из плагина. Плагин продолжит обновляться, но в работе останется старая глобальная копия. У меня так устроены `superpowers` и `swiftui-pro`.
2. **Версии.** У скиллов с `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. Включается двумя строками:

```yaml
advisor:
  enabled: true
# плюс modelRoles.advisor
```

Адвайзер — полноценный второй агент. После каждого хода основного агента он читает новую часть транскрипта, включая рассуждения, и при необходимости сам проверяет код read-only инструментами. Замечания делятся на три уровня: `nit` появляется тихой заметкой, а `concern` и `blocker` могут прервать работу основного агента прямо посреди хода. Чтобы прерывания не шли одно за другим, после каждого из них включается пауза на три хода: новые советы в это время отображаются как обычные заметки.

<img src="/posts/oh-my-pi-setup/advisor-concern.png" alt="Concern-карточка адвайзера: прерывание с диагнозом, почему скролл не работает во время стрима, и предложенным обходом" width="760" height="117" loading="lazy" decoding="async" />

Ключ к полезности — файл `WATCHDOG.md`: инструкции, которые видит только адвайзер. Глобальный лежит в `~/.omp/agent/`, проектный — в корне репозитория, они складываются. Туда пишутся не общие пожелания, а конкретные ловушки проекта: «миграции автоматически применяются на каждом деплое», «изоляция тенантов на уровне приложения, RLS нет — флагай любой запрос без скоупа», «пуш в main = прод».

Когда одного ревьюера мало, есть `WATCHDOG.yml` — ростер: несколько адвайзеров, у каждого своя модель, свои инструменты и своя специализация. Мне пока хватает одного.

Адвайзер проверяет не готовый дифф, а сам ход работы. Классическое ревью кода он не заменяет: его задача — заметить ошибочное направление на втором ходу, прежде чем агент потратит на него час. Цена — дополнительный расход токенов, особенно при максимальном уровне рассуждений. Точный расход показывает `/advisor status`.

<img src="/posts/oh-my-pi-setup/advisor-status.png" alt="Карточка /advisor status: модель адвайзера, контекст 6% от миллиона, расход 1,4 млн токенов, $2.75 за сессию" width="760" height="393" loading="lazy" decoding="async" />

## Память сессий

Ещё один выключенный по умолчанию слой:

```yaml
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` у скилла убирает его из системного промпта, но не выключает — он по-прежнему доступен по имени.

## Чек-лист

Глобально, один раз:

1. `grep -E '"level":"(error|warn)"' ~/.omp/logs/omp.*.log` — и починить найденное
2. Роли моделей: дешёвое на tiny/commit/smol, дорогое на plan/advisor
3. Скиллы в `~/.omp/agent/skills`, без дублей с плагинами, версии сверены с апстримом
4. `advisor.enabled: true` + глобальный `WATCHDOG.md`
5. `memory.backend: local`
6. Вторая подписка Claude, если есть: OMP работает внутри Орки, аккаунт выбираю вручную в её статус-баре

В каждом проекте, по 10 минут:

1. `AGENTS.md` (можно попросить агента: «изучи проект и создай AGENTS.md»)
2. `WATCHDOG.md` с конкретными ловушками
3. `CLAUDE.md` → `@AGENTS.md`, если он был
4. `openspec init --tools oh-my-pi`, если фичи идут через спеки

Конфигурация читается на старте процесса, так что после правок — перезапуск. Дальше она просто работает.