docs(skill): claude-subagent-playbook — write-ревьюер Codex и уборка

- Зачем:
  - read-only-конфайн обеднял ревью Codex (без тестов, поиска,
    первоисточников), а плотность SKILL.md и дефолты модели/усилия
    из config.toml накопили риски по итогам трёх прогонов.
- Что:
  - ветка «ревьюер» в codex-exec.md переведена на запись + авто-аппрув,
    защита — мандат промптом; в рецепты добавлены --strict-config и
    явные -m / model_reasoning_effort.
  - SKILL.md: правило «мандат промптом» для обоих ревьюеров, правило
    моделей субагентов (Опус/Sonnet, не Fable), /tdd и /research +
    Context7 в этапе 1, таймер-подстраховка ScheduleWakeup; уборка
    плотности и инлайн-дат.
  - handoffs 07-06/07-07/07-09 поглощены запиской 2026-07-10; в lessons.md
    добавлены правило дистилляции и блок 2026-07-10; правки прошли слепое
    ревью Опусом, все находки закрыты.
- Проверка:
  - оверрайды -m/-c проверены живым codex exec --strict-config;
    перекрёстные ссылки и команды сверены ревьюером с codex --help.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Dmitriy DementievandClaude Fable 5 committed 2026-07-10 12:41:09 +03:00
1 parent 4e496a1548
commit 89ebd1d327
8 files changed
+163 -215

No files matched your search

@@ -20,9 +20,9 @@ description: >-
**Не разворачивай конвейер на мелочь.** Косметика, пара часов работы, один
файл — сделай сам: накладные расходы процесса многократно превысят цену
работы (эмпирика 2026-07-06: на полировку ноутбука чуть не завели несколько
issue; пользователь справедливо остановил). Очередь зависимых issue с
автономным прогоном — это `/coordinator-loop`, не этот плейбук.
работы (эмпирика: на полировку ноутбука чуть не завели несколько issue —
пользователь остановил). Очередь зависимых issue с автономным прогоном —
это `/coordinator-loop`, не этот плейбук.
## Роли
@@ -35,13 +35,13 @@ issue; пользователь справедливо остановил). Оч
декомпозиция и постановка остаются у тебя. Механика вызова —
[references/codex-exec.md](references/codex-exec.md).
- **Ревьюеры** — два, **разных родословных**, слепые друг к другу:
Claude-субагент (adversarial-reviewer, **на Опусе** — экономия лимитов) и
Codex **свежим тредом** (не тем, что писал код). Разные родословные ловят
непересекающиеся классы находок — это центральная находка и
`/coordinator-loop` (кросс-линия), и прогона 2026-07-06 (Клод подтвердил
математику и краевые случаи, Кодекс нашёл дыры в тестах). Нет типа
`adversarial-reviewer` в среде — возьми `general-purpose` со скептическим
промптом и запретом менять репозиторий (мандат промптом, не урезанием).
Claude-субагент (`adversarial-reviewer`; нет в среде — скептический
`general-purpose`) и Codex **свежим тредом**, не тем, что писал код.
Разные родословные ловят непересекающиеся классы находок (пересечение в
прогонах — стабильно ~ноль). Обоим — руки: тесты, гипотезы, поиск,
документация, первоисточники; запрет менять исходники и окружение —
**мандатом в промпте, не урезанием песочницы** (рецепт и подстраховка —
[references/codex-exec.md](references/codex-exec.md)).
- **Свежесть**: ревьюеров запускай свежими сессиями, без форка своей истории
(форк тратит токены и убивает независимость). Повторную проверку точечных
правок — **тем же** ревьюером узким вопросом «закрывают ли правки твои
@@ -50,6 +50,10 @@ issue; пользователь справедливо остановил). Оч
рассуждение — `deep-reasoner`, механика с шумным выводом — `fast-worker`.
Они репо-локальные; нет в репозитории — определения для создания в
[references/claude-agents.md](references/claude-agents.md).
- **Модель Claude-субагентов задавай явно**: Опус — рассуждения и ревью,
Sonnet — механика. Без явной модели субагент наследует Fable, чьи лимиты
самые дорогие — держи их для оркестрации (у `deep-reasoner`/`fast-worker`
модели пришиты в определениях).
## Конвейер
@@ -57,8 +61,12 @@ issue; пользователь справедливо остановил). Оч
контекста; всё нужное — в файле: цель, критерии приёмки чекбоксами,
границы («что трогать нельзя»), «сначала прочитать» (спека, ADR, README с
командами), команды проверки. Формат и место — по конвенции репозитория
(например, `.scratch/<feature>/issues/`). Готово, когда исполнитель может
сделать задачу, не задав тебе ни одного вопроса.
(например, `.scratch/<feature>/issues/`). Не хватает фактуры по внешним
библиотекам/API — сначала `/research` и Context7 MCP, выжимку — в
«сначала прочитать». Задача просится под test-first — сошлись в ней на
`/tdd` (скиллы у Codex те же — общий каталог), ключевые требования
продублируй текстом. Готово, когда исполнитель может сделать задачу,
не задав тебе ни одного вопроса.
2. **Свежий взгляд на постановку — до реализации.** Адверсарный ревьюер без
твоего контекста проверяет задачу против кода: фактические ошибки, скрытые
решения-«однострочники», недостающие критерии. Окупается: ловит блокеры,
@@ -77,9 +85,13 @@ issue; пользователь справедливо остановил). Оч
4. **Два слепых ревью параллельно.** Каждому: путь к задаче-файлу + фокус
(математика/краевые случаи, соответствие критериям, честность тестов,
артефакты). Друг про друга не знают, твои выводы им не пересказывай.
Клод-ревьюеру можно поручить смотреть артефакты (картинки из ноутбука).
Этап закрыт, когда оба вердикта у тебя индексами; вердикт без единой
находки засчитывай только после проверки его лога — работа, не отписка
Обоим поощряй безопасные эмпирические проверки (воспроизвести краевой
случай вне репо, сходить в документацию) — вердикт заметно твёрже;
менять исходники и окружение нельзя, после ревью сверь дерево
(`git status`). Клод-ревьюеру можно поручить смотреть артефакты
(картинки из ноутбука). Этап закрыт, когда оба вердикта у тебя индексами
и дерево нетронуто; вердикт без единой находки засчитывай только после
проверки его лога — работа, не отписка
(приём — в [references/codex-exec.md](references/codex-exec.md)).
5. **Синтез и триаж.** Сведи вердикты по индексам: пересечения, противоречия.
Пофиндинговый триаж — у **исполнителя**, не у тебя (правило
@@ -103,14 +115,22 @@ issue; пользователь справедливо остановил). Оч
вердикты сведены), решения по скоупу оставляй ему. Фоновые этапы будят тебя
сами — не поллинг вручную, а отслеживаемые фоновые процессы + уведомления
(механика — [references/codex-exec.md](references/codex-exec.md)).
Подстраховка от молчаливой смерти агента — ScheduleWakeup сроком дольше
ожидаемой длительности: по пробуждению смотри логи сам, по приходу
результата таймер снимай.
## Соседние скиллы
- `/coordinator-loop` — автономный цикл очереди issue на стороне Codex
(координатор в Codex, worker'ы — его субагенты). Выстрадан и отлажен;
словарь (индекс, свежие сессии, две ручки стоимости) — общий.
- `/claude-team-review` — ревью-петля, где лид сам чинит код.
- `/claude-team-review` — ревью-петля, где лид сам чинит код (живёт
отдельным репозиторием, в среде может быть не подключён).
- `/adversarial-review` — разовое адверсарное ревью Кодексом.
- `/tdd` — дисциплина test-first: для задач-мелочей, которые делаешь сам,
и как словарь для test-first-постановки (этап 1).
- `/research` — фоновое исследование первоисточников с выжимкой-файлом;
кормит «сначала прочитать» постановки (этап 1).
- `/conventional-commits` — формат коммита на финале.
## Подробнее
@@ -1,64 +0,0 @@
# Handoff: рождение скилла claude-subagent-playbook и что в нём не проверено
Дата: 2026-07-06. Для сессии, которая будет развивать сам скилл (не МЛ-задачу).
## Состояние
- Скилл собран и готов к вызову: источник —
`~/dotfiles/agents/.agents/skills/claude-subagent-playbook/` (в git dotfiles
ещё не закоммичен), зеркало — `~/.claude/skills/claude-subagent-playbook/`.
Состав: SKILL.md + references/{codex-companion,lessons,claude-agents}.md.
- Собран по итогам одного боевого прогона (задача 05 «полировка витрины» в
`~/sources/t2-ml-forecast`, коммит 880d506) — но сам прогон шёл ДО оформления
скилла. **Скилл ни разу не исполнялся по своему письменному тексту.**
- Эмпирика прогона — в references/lessons.md (файл накопительный, дописывать
после каждого прогона). Память проекта t2-ml-forecast тоже знает о скилле:
`~/.claude/projects/-home-ddmitry-sources-t2-ml-forecast/memory/`.
## Дизайн-решения и их источники (не пересказ — только происхождение)
- Форма «набор знаний, не жёсткий каркас» — явное требование пользователя;
жёсткий каркас уже есть у `/coordinator-loop` (очередь issue, сторона Codex).
- Структура и словарь выверены по `/writing-great-skills`: user-invoked,
короткий description, completion criteria на шагах, ведущие слова общие с
coordinator-loop (индекс, родословная, свежесть).
- Раннер-паттерн для вызова Codex — из `/adversarial-review`
(references/runner.md там — самый проработанный образец: двухканальный
протокол, результат файлом, ретраи). Добавлен по предложению пользователя.
- Триаж находок исполнителем — из `/claude-team-review` и coordinator-loop
(«судит тот, у кого контекст кода»). Тоже добавлен по замечанию пользователя.
## Не проверено боем — проверять в следующих прогонах
1. **Раннер с `task --wait`** — в прогоне 05 использовался `--background` +
bash-монитор, раннер не пробовали. Открытый риск: у Bash-вызова внутри
субагента потолок 10 минут (timeout max 600000 мс), а реализация у Codex
шла ~15 минут. Раннеру, видимо, нужна инструкция «по таймауту не падать, а
опрашивать `$CC status`/`result` до завершения». Обкатать и вписать в
references/codex-companion.md то, что реально сработало.
2. **Триаж исполнителем** — в прогоне 05 триаж делал оркестратор (обе находки
принял сам). Формулировка «перешли индекс дословно, Codex чинит или
аргументированно отклоняет» — теория из соседних скиллов, не наша эмпирика.
3. **Фолбэк ревьюера** (general-purpose со скептическим промптом при
отсутствии adversarial-reviewer) — не обкатан.
4. **Порог «мелочь vs конвейер»** откалиброван по одному случаю — уточнять.
5. **Чего в скилле осознанно нет** (кандидаты при развитии, не тащить без
нужды): журнала прогона (след живёт в задаче-файле — хватит ли на длинной
задаче?); узкого rerun-а ревьюера продолжением той же сессии (SendMessage —
в 05 не понадобился); ролей deep-reasoner в синтезе.
## Ближайший боевой тест
Регламент переобучения («выживаемость») в t2-ml-forecast — единственный
незакрытый пункт Этапа 1 пилота, калибр подходящий. Вызвать
`/claude-subagent-playbook` в свежей сессии и смотреть, где текст скилла
расходится с практикой; расхождения — в lessons.md и правки SKILL.md.
## Suggested skills
- `/claude-subagent-playbook` — предмет работы; прогнать как написано.
- `/writing-great-skills` — перед любыми правками структуры скилла.
- `/adversarial-review` — образец раннера (references/runner.md) при обкатке
пункта 1.
- `/handoff` — по завершении сессии развития обновить эту записку (или
положить рядом новую; старую можно удалить, если полностью поглощена).
@@ -1,62 +0,0 @@
# Handoff: уроки прогона 2026-07-07 для доработки скилла
Дата: 2026-07-07 22:34. Прогон: проверка пути менти + диагноз флаки-гейта
в репозитории clickstream-ch-kafka-superset-demo (Claude — оркестратор,
два Claude-субагента, Codex-диагност через плагин).
## Что сработало
- Пара «читатель-скептик (Opus) + прогонщик-механик (Sonnet)» параллельно:
читатель нашёл 4 доковых находки, прогонщик — реальное падение гейта.
- «Шум в файлы» окупился дважды: когда прогонщик умер без отчёта, вердикт
собрался из его логов; когда форвардер Codex соврал «finished», результат
забрался из output-файла фонового задания.
- Перепроверка ключевого факта диагноза своими глазами (grep по коду) —
дёшево и поймала бы подмену анализа (bug #158 плагина).
## Находки для SKILL.md / references/lessons.md
1. **Таймер-подстраховка для фоновых субагентов** (совет пользователя):
субагенты молча останавливаются («жду уведомления», которого не будет;
«закончил и умер без отчёта»). Ставить ScheduleWakeup сроком больше
ожидаемой длительности, при пробуждении смотреть логи агента самому,
снимать таймер по приходу результата. Экономика: кэш мастер-сессии живёт
~1 час — пробуждение в пределах часа тёплое (~0,1×); таймер — страховка,
не поллинг.
2. **Прямой `codex exec` вместо плагина** (веб-ресёрч, первоисточники):
обёртка codex-companion.mjs — багованная машина фоновых задач
(openai/codex-plugin-cc issues #279, #158, #49, #277; #158 — молчаливая
подмена Codex своим анализом, ломает слепое ревью разных родословных).
Рекомендация: CLI в собственном run_in_background Bash оркестратора
(pid/код выхода/лог у нас), `codex exec resume <session-id>` для раундов.
3. **Поправки пользователя к флагам CLI** (важно, расходится с ресёрчем):
НЕ дефолтить `-s read-only -c approval_policy=never`. Рабочая практика:
сессия с правом записи, ограниченная промтом (иначе Codex не гоняет тесты
и не гуглит), плюс авто-режим аппрува, где отдельная модель оценивает
безопасность действий. `timeout 600` мал — сессии запросто длиннее,
таймаут подбирать под задачу. В скилле развести два режима: «ревьюер»
(можно жёстко read-only) и «исполнитель/диагност» (запись + авто-аппрув).
4. **Идея пользователя для форвардера:** субагент-обёртка мог бы читать
историю сессии Codex (JSONL / resume) и отвечать на поллинг оркестратора,
вместо «выстрелил и умер». Казус прогона: codex-rescue отказался проверять
статус своего же вызова, сославшись на мандат «только один проброс».
5. **Казус «умер без отчёта»:** правильный ход — не воскрешать агента ради
отчёта, а собрать вердикт из его логов (дополнение к приёму «шум в файлы»).
6. **Правильный паттерн ожидания у субагента** (это реально разбудило
заснувшего прогонщика): долгий шаг ждать через отслеживаемый харнесом
фоновый Bash (`run_in_background`) с командой-ожидателем под `timeout` —
`until grep -q '<маркер>' <лог>; do sleep 30; done` — тогда харнес
переинвоцирует агента по выходу процесса. Самодельные «фоновые мониторы»
и «жду уведомления» без отслеживаемого процесса не будят никогда.
Вписывать этот паттерн в промпт раннера сразу, а не после двух побудок.
## Открытое
- ~~Механику references/codex-companion.md стоит пересмотреть в пользу прямого
CLI (пункты 2–3); плагин оставить для интерактива.~~ Сделано 2026-07-09:
файл заменён на references/codex-exec.md (три ветки: исполнитель/ревьюер/
триаж; пункты 2–3 и 6 поглощены), companion — абзац «для интерактива».
- Определения deep-reasoner/fast-worker из references/claude-agents.md
созданы в репозитории демо (закоммичены); фрагмент «Orchestration
workflow» в CLAUDE.md демо-репозитория НЕ добавлен — пользователь решил
не засорять учебный контракт, вопрос «куда класть» открыт.
@@ -1,57 +0,0 @@
# Handoff: прогон 2026-07-09 (Windows) и переход на прямой codex exec
Дата: 2026-07-09. Для сессии, которая будет развивать скилл или гонять
конвейер (на Linux — см. «Открытое»).
## Состояние
- Скилл прошёл **первый прогон по своему письменному тексту** и первый под
Windows (local-transcriber, SendTo-меню; фича закоммичена f18ad6e).
Эмпирика прогона — в references/lessons.md, блок 2026-07-09; здесь не
дублируется.
- По итогам + урокам handoff 07-07 механика Codex переведена на прямой CLI:
references/codex-companion.md **удалён**, вместо него —
references/codex-exec.md (три ветки: исполнитель/ревьюер/триаж; сквозные
правила: шум в файлы, thread_id из первой строки, resume только по id,
проверка «отписки» логом, блок классификатора → решение пользователя).
SKILL.md: этап 3 — прямой exec фоновым Bash оркестратора; этап 4 —
критерий «вердикт без находок засчитывай после проверки лога».
- Правки прошли свежий взгляд (Опус, с оптикой /writing-great-skills,
сверял команды с реальным `codex --help`): 2 major исправлены
(resume принимает `-m`; кавеат про недокументированный
`approvals_reviewer`), sediment companion-эры сжат до строки, дубль
промпта исполнителя схлопнут в указатель на этап 3.
## Решения и их источники
- Раннер-субагент понижен из «пути запуска» в «переваривание шумного
результата» (самодостаточный абзац в codex-exec.md, без ссылок на другие
скиллы — они могут быть недоступны). Причина: файл-редиректы дают чистоту
контекста без раннера, а 10-минутный потолок Bash бьёт именно по
синхронному раннеру, не по фоновому Bash оркестратора.
- `approvals_reviewer="auto_review"`: в `--help` отсутствует, но
`--strict-config` принимает (проверено 2026-07-09), связка с
`approval_policy="on-request"` отработала боевой write-прогон. Следить:
если в новой версии CLI ключ отвалится — падение будет громким только
со `--strict-config`.
## Открытое / не проверено боем
1. **Linux-прогон рецептов codex-exec.md** — файл написан по
Windows-эмпирике + старым companion-урокам; первый линукс-прогон должен
подтвердить рецепты (особенно пути `$SCRATCH` и поведение классификатора).
2. **Раннер-«переваривание»** в новой формулировке не обкатан (сегодня не
понадобился — вердикты были короткими).
3. **Порог «мелочь vs конвейер»** — по-прежнему калиброван парой случаев.
4. **deep-reasoner/fast-worker** в прогонах плейбука пока не участвовали;
вопрос «куда класть фрагмент Orchestration workflow» из handoff 07-07
так и открыт.
5. Идея «эмпирического ревьюера» (безопасные проверки вне репо — сегодня
Опус сам воспроизводил краевые случаи) вписана в lessons, но в промпт
ревьюера в SKILL.md не поднята — решить при следующей правке, стоит ли.
## Suggested skills
- `/claude-subagent-playbook` — прогнать на Linux, расхождения — в lessons.
- `/writing-great-skills` — оптика перед любыми правками структуры.
- `/handoff` — обновить/заменить эту записку по итогам следующей сессии.
@@ -0,0 +1,71 @@
# Handoff: Codex-ревьюер переведён на write+авто-аппрув; хендоффы слиты
Дата: 2026-07-10. Для сессии, которая будет развивать скилл или гонять
конвейер. Заменяет записки 07-06, 07-07 и 07-09 — их непроверенные пункты
перенесены сюда, остальное поглощено SKILL.md / references.
## Состояние
- По указанию пользователя ветка «ревьюер» в references/codex-exec.md
переведена с `-s read-only` на тот же вызов, что у исполнителя (запись +
авто-аппрув). Мотив: read-only отнимал у ревьюера руки — тесты, гипотезы,
поиск, документацию, первоисточники. Защита — мандат промптом
«исходники/окружение не менять» (Codex держит его надёжно — практика
пользователя), подстраховка — сверка `git status --porcelain` до/после.
Провенанс — lessons.md, блок 2026-07-10.
- SKILL.md: правило «мандат промптом, не урезанием» распространено на обоих
ревьюеров (Роли); в этап 4 подняты эмпирические проверки ревьюером (закрыт
открытый пункт 5 записки 07-09) и сверка дерева; в «Пользователь в петле»
добавлена таймер-подстраховка ScheduleWakeup (поглощён пункт 1 записки
07-07); в этап 1 и «Соседние скиллы» добавлены `/tdd` (в задаче можно
ссылаться прямо: у Codex тот же набор скиллов — общий каталог
`.agents/skills`; ключевые требования всё равно дублировать текстом) и
`/research` + Context7 MCP (исследование до постановки, выжимка — в
«сначала прочитать»).
- В «Роли» добавлено правило моделей: Claude-субагентам модель задавать
явно (Опус — рассуждения/ревью, Sonnet — механика), не наследовать Fable —
его лимиты держать для оркестрации.
- SKILL.md прошёл уборку плотности: сжаты «Ревьюеры» (детали write-мандата —
только в codex-exec.md), этап 1 (research/tdd — по фразе со ссылкой),
буллет моделей и «Пользователь в петле»; инлайн-даты эмпирики убраны —
провенанс живёт в lessons.md. В шапку lessons.md добавлено правило
дистилляции (урок поглощён → запись сжимается до строки-факта).
- Правки прошли свежее ревью (Опус, скептический general-purpose;
NEEDS-ATTENTION → всё закрыто): в рецепт исполнителя добавлены
`--strict-config` (опечатки в `-c`-ключах падают громко) и явные
`-m` + `model_reasoning_effort` (новое сквозное правило: дефолты из
`~/.codex/config.toml` плавают за интерактивными сессиями пользователя;
оверрайды проверены живым вызовом 2026-07-10); в ветку ревьюера вписан
кавеат про сеть (гипотеза, не эмпирика); раннер — `fast-worker` с
фолбэком general-purpose (было противоречие со SKILL.md); починена
висячая ссылка на удалённую записку в lessons.md; в claude-agents.md
оговорено намеренное отсутствие определения adversarial-reviewer;
`/claude-team-review` помечен как внешний (в `.agents/skills/` его нет).
## Открытое / не проверено боем
1. **Write-ревьюер Codex не обкатан** — все прежние прогоны шли read-only
ревью-тредом. Проверить: (а) дерево действительно нетронуто; (б) хватает
ли связки `approval_policy="on-request"` + `approvals_reviewer=
"auto_review"` для сетевых действий (поиск, документация) — песочница
workspace-write сеть по умолчанию режет, рабочая гипотеза — эскалация
через авто-аппрув.
2. **Linux-прогон рецептов codex-exec.md** — вся эмпирика прямого exec
Windows-ная (Git Bash); особенно пути `$SCRATCH` и поведение
классификатора авторежима.
3. **Раннер-«переваривание шумного результата»** в новой формулировке не
обкатан (пока не понадобился — вердикты были короткими).
4. **Порог «мелочь vs конвейер»** — калиброван парой случаев, уточнять.
5. **deep-reasoner/fast-worker** в прогонах плейбука не участвовали; вопрос
«куда класть фрагмент Orchestration workflow из claude-agents.md» открыт
(в демо-репо решили не засорять учебный CLAUDE.md).
6. **Test-first-постановка** (ссылка на `/tdd` в задаче + дублирование
ключевых требований текстом) — теория, в прогоне не проверялась; в т.ч.
действительно ли Codex подхватывает скилл по ссылке из файла задачи.
## Suggested skills
- `/claude-subagent-playbook` — прогнать с write-ревьюером; расхождения — в
lessons.md.
- `/writing-great-skills` — оптика перед правками структуры скилла.
- `/handoff` — заменить эту записку по итогам следующей сессии.
@@ -3,6 +3,9 @@
`deep-reasoner` и `fast-worker` — субагенты уровня репозитория
(`.claude/agents/*.md`), не глобальные. В новом репозитории их нет — проверь
`ls .claude/agents/` и при отсутствии создай файлы ниже как есть.
У ревьюера `adversarial-reviewer` репо-локального определения намеренно
нет: рабочий фолбэк — `general-purpose` со скептическим промптом
(см. «Роли» в SKILL.md).
## Конструкция оркестрации (фрагмент CLAUDE.md репозитория)
@@ -13,6 +13,12 @@
- **Промпт — файлом, шум — в файлы.** Промпт пиши Write'ом в `$SCRATCH` и
подавай через stdin (`-`); stdout/stderr — редиректами туда же. В контекст
оркестратора читается ровно один файл — финальный отчёт из `-o`.
- **Модель и глубину рассуждения задавай явно** (`-m`,
`-c 'model_reasoning_effort="..."'`): дефолты берутся из
`~/.codex/config.toml` и плавают за последней интерактивной сессией
пользователя. Для реализации и ревью — high; текущую боевую модель сверь
с конфигом (2026-07-10: `gpt-5.5`). Оверрайды проверены под
`--strict-config`.
- **Запуск — собственным фоновым Bash оркестратора** (`run_in_background`):
фоновый процесс детачится, живёт сквозь ходы и будит оркестратора по
выходу. Потолок 10 минут — только у фронтграундного Bash; фоновому таймаут
@@ -21,8 +27,8 @@
Забирай сразу после старта: это страховка — если процесс умер или его
прибил хост, тред жив: `codex exec resume <id> «дай финальный отчёт»`.
- **resume — только по явному id.** Безадресный resume цепляет последний тред
сессии — при параллельных тредах подхватит чужой (например, read-only
ревью-тред вместо write-треда реализации).
сессии — при параллельных тредах подхватит чужой (например, ревью-тред
вместо треда реализации).
- **Вердикт без находок — проверь лог: работа или отписка.** Дёшево:
`grep -c '"command_execution"' stdout.jsonl` (счётчик выполненных команд)
или промежуточные сообщения —
@@ -40,27 +46,42 @@
## Ветка «исполнитель» (пишет код)
```bash
cat "$SCRATCH/task-prompt.md" | codex exec --json \
-s workspace-write \
cat "$SCRATCH/task-prompt.md" | codex exec --json --strict-config \
-s workspace-write -m gpt-5.5 \
-c 'model_reasoning_effort="high"' \
-c 'approval_policy="on-request"' -c 'approvals_reviewer="auto_review"' \
-o "$SCRATCH/task-result.md" - \
> "$SCRATCH/task-stdout.jsonl" 2> "$SCRATCH/task-stderr.txt"
```
- Право записи + авто-ревьюер аппрувов (`approvals_reviewer` в `--help` не
документирован, но `--strict-config` его принимает — проверено 2026-07-09;
связка отработала боевой прогон). Скоуп ограничивай промптом («коммит не
делай», границы из файла задачи), не песочницей — жёсткий read-only лишает
исполнителя тестов и поиска.
- `--strict-config` — обязателен: опечатка в `-c`-ключе упадёт громко, а не
проглотится молча (важно для `approvals_reviewer` — в `--help` он не
документирован, но strict-config его принимает; связка с
`approval_policy="on-request"` отработала боевой прогон 2026-07-09).
- Право записи + авто-ревьюер аппрувов. Скоуп ограничивай промптом («коммит
не делай», границы из файла задачи), не песочницей — жёсткий read-only
лишает исполнителя тестов и поиска.
- Промпт: путь к файлу задачи; мандат — в этапе 3 SKILL.md.
- До старта сними baseline `git status --porcelain`; после — сверь отчёт
Кодекса с деревом: правок, которых он не называл, быть не должно.
## Ветка «ревьюер» (свежий тред, только чтение)
## Ветка «ревьюер» (свежий тред, мандат промптом)
Тот же вызов, но `-s read-only` и без approvals-флагов. Свежий тред, не тот,
что писал код. В промпте — формат «только индекс находок» (SEVERITY,
файл:строка, суть, как проверить) и явная строка VERDICT.
Тот же вызов, что у исполнителя — запись + авто-аппрув, — но **свежим
тредом**, не тем, что писал код. Read-only-песочницей ревьюера не режь: она
отнимает у него руки — тесты, проверку гипотез, поиск, документацию,
первоисточники. Защита — мандат в промпте: «исходники и окружение не менять,
правок не вносить — только находки»; Codex держит его надёжно (практика
пользователя, 2026-07-10). Дешёвая подстраховка: `git status --porcelain`
до ревью и сверка после — дерево должно остаться нетронутым. Кавеат: сеть
под workspace-write по умолчанию закрыта; что поиск/документация проходят
эскалацией через авто-аппрув — рабочая гипотеза, боем не обкатана
(см. handoff 2026-07-10).
В промпте — формат «только индекс находок» (SEVERITY, файл:строка, суть,
как проверить), явная строка VERDICT и поощрение безопасных эмпирических
проверок вне репо (воспроизвести краевой случай, свериться с
первоисточником) — вердикт заметно твёрже (эмпирика 2026-07-09).
## Ветка «триаж/починка» (тем же тредом, что писал код)
@@ -80,7 +101,8 @@ cat "$SCRATCH/fix-prompt.md" | codex exec resume --json <thread-id> \
Для запуска раннер не нужен (см. сквозные правила) — он нужен, когда сырой
результат шумный и его стоит провалидировать или сжать до индекса, прежде
чем показывать оркестратору. Тогда general-purpose-субагенту отдай
чем показывать оркестратору. Тогда раннеру (`fast-worker`; нет в
репозитории — `general-purpose`) отдай
**готовую команду** и правила разбора — не постановку задачи: тонкий агент,
получив постановку, реализует её сам (казус форвардера, lessons 2026-07-06).
Свой 10-минутный потолок на синхронный Bash раннер обходит отслеживаемым
@@ -2,7 +2,9 @@
Датированные факты: что поймал каждый этап конвейера, казусы, цифры.
Дописывай после каждого прогона — это и есть «выжимка опыта», ради которой
скилл существует.
скилл существует. Журнал накопительный, поэтому дистиллируй: когда урок
поглощён SKILL.md или references, сжимай его запись здесь до строки-факта
(дата, что случилось, куда поглощено) — иначе файл растёт бесконечно.
## 2026-07-06 — t2-ml-forecast, задача 05 «полировка витрины под демо»
@@ -126,7 +128,8 @@ JSONL (19 command_execution: полный pytest, узкий прогон, usage
работу. Приём «вердикт без находок — проверь лог» вписан в SKILL.md
(этап 4) и codex-exec.md.
**Закрыты пункты «не проверено боем» из handoff 06:** фолбэк-ревьюер
**Закрыты давние пункты «не проверено боем» (записка 2026-07-06, ныне
поглощена):** фолбэк-ревьюер
general-purpose на Опусе — обкатан дважды (постановка и код), работает;
триаж исполнителем — `codex exec resume` по явному id закрыл 3/3 находки,
лишнего не тронул; узкий rerun ревьюера — SendMessage поднял того же
@@ -139,3 +142,15 @@ general-purpose на Опусе — обкатан дважды (постано
**Цифры:** ревью постановки ~57k токенов, ревью кода ~48k, перепроверка
~45k (тот же агент из транскрипта); триаж-раунд Codex — одна resume-команда.
## 2026-07-10 — правка по практике пользователя: Codex-ревьюер без read-only
Ветка «ревьюер» в codex-exec.md была записана как `-s read-only` — по
осторожности, не по эмпирике. Пользователь поправил: read-only-конфайн
обедняет ревью — с записью и авто-аппрувом ревьюер гоняет тесты, проверяет
гипотезы, гуглит, читает документацию и первоисточники. Инструкцию
«исходники/окружение не менять» Codex держит надёжно (многократная практика
пользователя). Итог: обе ветки (исполнитель и ревьюер) ходят одним вызовом,
различие — мандат промптом; подстраховка — сверка `git status --porcelain`
до/после ревью. Непроверенное — в handoff 2026-07-10 (сеть под
workspace-write-песочницей для поиска).