← max_tokens

Настройка OMP за один вечер: роли моделей, глобальные скиллы, адвайзер и память

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

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

  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. Включается двумя строками:

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

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

Concern-карточка адвайзера: прерывание с диагнозом, почему скролл не работает во время стрима, и предложенным обходом

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

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

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

Карточка /advisor status: модель адвайзера, контекст 6% от миллиона, расход 1,4 млн токенов, $2.75 за сессию

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

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

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, если фичи идут через спеки

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

<|endoftext|> · 3 368 tok · finish_reason: stop

// top_k · nearest neighbors

  1. [0] 0.707 Graphify и MemPalace: агенту нужна не «память», а карта проекта и история решений
  2. [1] 0.668 Orca vs Herdr: изолировать задачи или держать сессии живыми
  3. [2] 0.660 Промпт — это 5% работы: контекст-инжиниринг LLM-агента в проде

cosine of embeddings · scale 0–1 absolute · computed at build

integrity: sha256 b8d46054…

tokens · o200k_base