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:
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; пользователь справедливо остановил). Очередь зависимых issue с
|
пользователь остановил). Очередь зависимых issue с автономным прогоном —
|
||||||
автономным прогоном — это `/coordinator-loop`, не этот плейбук.
|
это `/coordinator-loop`, не этот плейбук.
|
||||||
|
|
||||||
## Роли
|
## Роли
|
||||||
|
|
||||||
@@ -35,13 +35,13 @@ issue; пользователь справедливо остановил). Оч
|
|||||||
декомпозиция и постановка остаются у тебя. Механика вызова —
|
декомпозиция и постановка остаются у тебя. Механика вызова —
|
||||||
[references/codex-exec.md](references/codex-exec.md).
|
[references/codex-exec.md](references/codex-exec.md).
|
||||||
- **Ревьюеры** — два, **разных родословных**, слепые друг к другу:
|
- **Ревьюеры** — два, **разных родословных**, слепые друг к другу:
|
||||||
Claude-субагент (adversarial-reviewer, **на Опусе** — экономия лимитов) и
|
Claude-субагент (`adversarial-reviewer`; нет в среде — скептический
|
||||||
Codex **свежим тредом** (не тем, что писал код). Разные родословные ловят
|
`general-purpose`) и Codex **свежим тредом**, не тем, что писал код.
|
||||||
непересекающиеся классы находок — это центральная находка и
|
Разные родословные ловят непересекающиеся классы находок (пересечение в
|
||||||
`/coordinator-loop` (кросс-линия), и прогона 2026-07-06 (Клод подтвердил
|
прогонах — стабильно ~ноль). Обоим — руки: тесты, гипотезы, поиск,
|
||||||
математику и краевые случаи, Кодекс нашёл дыры в тестах). Нет типа
|
документация, первоисточники; запрет менять исходники и окружение —
|
||||||
`adversarial-reviewer` в среде — возьми `general-purpose` со скептическим
|
**мандатом в промпте, не урезанием песочницы** (рецепт и подстраховка —
|
||||||
промптом и запретом менять репозиторий (мандат промптом, не урезанием).
|
[references/codex-exec.md](references/codex-exec.md)).
|
||||||
- **Свежесть**: ревьюеров запускай свежими сессиями, без форка своей истории
|
- **Свежесть**: ревьюеров запускай свежими сессиями, без форка своей истории
|
||||||
(форк тратит токены и убивает независимость). Повторную проверку точечных
|
(форк тратит токены и убивает независимость). Повторную проверку точечных
|
||||||
правок — **тем же** ревьюером узким вопросом «закрывают ли правки твои
|
правок — **тем же** ревьюером узким вопросом «закрывают ли правки твои
|
||||||
@@ -50,6 +50,10 @@ issue; пользователь справедливо остановил). Оч
|
|||||||
рассуждение — `deep-reasoner`, механика с шумным выводом — `fast-worker`.
|
рассуждение — `deep-reasoner`, механика с шумным выводом — `fast-worker`.
|
||||||
Они репо-локальные; нет в репозитории — определения для создания в
|
Они репо-локальные; нет в репозитории — определения для создания в
|
||||||
[references/claude-agents.md](references/claude-agents.md).
|
[references/claude-agents.md](references/claude-agents.md).
|
||||||
|
- **Модель Claude-субагентов задавай явно**: Опус — рассуждения и ревью,
|
||||||
|
Sonnet — механика. Без явной модели субагент наследует Fable, чьи лимиты
|
||||||
|
самые дорогие — держи их для оркестрации (у `deep-reasoner`/`fast-worker`
|
||||||
|
модели пришиты в определениях).
|
||||||
|
|
||||||
## Конвейер
|
## Конвейер
|
||||||
|
|
||||||
@@ -57,8 +61,12 @@ issue; пользователь справедливо остановил). Оч
|
|||||||
контекста; всё нужное — в файле: цель, критерии приёмки чекбоксами,
|
контекста; всё нужное — в файле: цель, критерии приёмки чекбоксами,
|
||||||
границы («что трогать нельзя»), «сначала прочитать» (спека, ADR, README с
|
границы («что трогать нельзя»), «сначала прочитать» (спека, ADR, README с
|
||||||
командами), команды проверки. Формат и место — по конвенции репозитория
|
командами), команды проверки. Формат и место — по конвенции репозитория
|
||||||
(например, `.scratch/<feature>/issues/`). Готово, когда исполнитель может
|
(например, `.scratch/<feature>/issues/`). Не хватает фактуры по внешним
|
||||||
сделать задачу, не задав тебе ни одного вопроса.
|
библиотекам/API — сначала `/research` и Context7 MCP, выжимку — в
|
||||||
|
«сначала прочитать». Задача просится под test-first — сошлись в ней на
|
||||||
|
`/tdd` (скиллы у Codex те же — общий каталог), ключевые требования
|
||||||
|
продублируй текстом. Готово, когда исполнитель может сделать задачу,
|
||||||
|
не задав тебе ни одного вопроса.
|
||||||
2. **Свежий взгляд на постановку — до реализации.** Адверсарный ревьюер без
|
2. **Свежий взгляд на постановку — до реализации.** Адверсарный ревьюер без
|
||||||
твоего контекста проверяет задачу против кода: фактические ошибки, скрытые
|
твоего контекста проверяет задачу против кода: фактические ошибки, скрытые
|
||||||
решения-«однострочники», недостающие критерии. Окупается: ловит блокеры,
|
решения-«однострочники», недостающие критерии. Окупается: ловит блокеры,
|
||||||
@@ -77,9 +85,13 @@ issue; пользователь справедливо остановил). Оч
|
|||||||
4. **Два слепых ревью параллельно.** Каждому: путь к задаче-файлу + фокус
|
4. **Два слепых ревью параллельно.** Каждому: путь к задаче-файлу + фокус
|
||||||
(математика/краевые случаи, соответствие критериям, честность тестов,
|
(математика/краевые случаи, соответствие критериям, честность тестов,
|
||||||
артефакты). Друг про друга не знают, твои выводы им не пересказывай.
|
артефакты). Друг про друга не знают, твои выводы им не пересказывай.
|
||||||
Клод-ревьюеру можно поручить смотреть артефакты (картинки из ноутбука).
|
Обоим поощряй безопасные эмпирические проверки (воспроизвести краевой
|
||||||
Этап закрыт, когда оба вердикта у тебя индексами; вердикт без единой
|
случай вне репо, сходить в документацию) — вердикт заметно твёрже;
|
||||||
находки засчитывай только после проверки его лога — работа, не отписка
|
менять исходники и окружение нельзя, после ревью сверь дерево
|
||||||
|
(`git status`). Клод-ревьюеру можно поручить смотреть артефакты
|
||||||
|
(картинки из ноутбука). Этап закрыт, когда оба вердикта у тебя индексами
|
||||||
|
и дерево нетронуто; вердикт без единой находки засчитывай только после
|
||||||
|
проверки его лога — работа, не отписка
|
||||||
(приём — в [references/codex-exec.md](references/codex-exec.md)).
|
(приём — в [references/codex-exec.md](references/codex-exec.md)).
|
||||||
5. **Синтез и триаж.** Сведи вердикты по индексам: пересечения, противоречия.
|
5. **Синтез и триаж.** Сведи вердикты по индексам: пересечения, противоречия.
|
||||||
Пофиндинговый триаж — у **исполнителя**, не у тебя (правило
|
Пофиндинговый триаж — у **исполнителя**, не у тебя (правило
|
||||||
@@ -103,14 +115,22 @@ issue; пользователь справедливо остановил). Оч
|
|||||||
вердикты сведены), решения по скоупу оставляй ему. Фоновые этапы будят тебя
|
вердикты сведены), решения по скоупу оставляй ему. Фоновые этапы будят тебя
|
||||||
сами — не поллинг вручную, а отслеживаемые фоновые процессы + уведомления
|
сами — не поллинг вручную, а отслеживаемые фоновые процессы + уведомления
|
||||||
(механика — [references/codex-exec.md](references/codex-exec.md)).
|
(механика — [references/codex-exec.md](references/codex-exec.md)).
|
||||||
|
Подстраховка от молчаливой смерти агента — ScheduleWakeup сроком дольше
|
||||||
|
ожидаемой длительности: по пробуждению смотри логи сам, по приходу
|
||||||
|
результата таймер снимай.
|
||||||
|
|
||||||
## Соседние скиллы
|
## Соседние скиллы
|
||||||
|
|
||||||
- `/coordinator-loop` — автономный цикл очереди issue на стороне Codex
|
- `/coordinator-loop` — автономный цикл очереди issue на стороне Codex
|
||||||
(координатор в Codex, worker'ы — его субагенты). Выстрадан и отлажен;
|
(координатор в Codex, worker'ы — его субагенты). Выстрадан и отлажен;
|
||||||
словарь (индекс, свежие сессии, две ручки стоимости) — общий.
|
словарь (индекс, свежие сессии, две ручки стоимости) — общий.
|
||||||
- `/claude-team-review` — ревью-петля, где лид сам чинит код.
|
- `/claude-team-review` — ревью-петля, где лид сам чинит код (живёт
|
||||||
|
отдельным репозиторием, в среде может быть не подключён).
|
||||||
- `/adversarial-review` — разовое адверсарное ревью Кодексом.
|
- `/adversarial-review` — разовое адверсарное ревью Кодексом.
|
||||||
|
- `/tdd` — дисциплина test-first: для задач-мелочей, которые делаешь сам,
|
||||||
|
и как словарь для test-first-постановки (этап 1).
|
||||||
|
- `/research` — фоновое исследование первоисточников с выжимкой-файлом;
|
||||||
|
кормит «сначала прочитать» постановки (этап 1).
|
||||||
- `/conventional-commits` — формат коммита на финале.
|
- `/conventional-commits` — формат коммита на финале.
|
||||||
|
|
||||||
## Подробнее
|
## Подробнее
|
||||||
|
|||||||
-64
@@ -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` — по завершении сессии развития обновить эту записку (или
|
|
||||||
положить рядом новую; старую можно удалить, если полностью поглощена).
|
|
||||||
-62
@@ -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 демо-репозитория НЕ добавлен — пользователь решил
|
|
||||||
не засорять учебный контракт, вопрос «куда класть» открыт.
|
|
||||||
-57
@@ -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` — обновить/заменить эту записку по итогам следующей сессии.
|
|
||||||
+71
@@ -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` — субагенты уровня репозитория
|
`deep-reasoner` и `fast-worker` — субагенты уровня репозитория
|
||||||
(`.claude/agents/*.md`), не глобальные. В новом репозитории их нет — проверь
|
(`.claude/agents/*.md`), не глобальные. В новом репозитории их нет — проверь
|
||||||
`ls .claude/agents/` и при отсутствии создай файлы ниже как есть.
|
`ls .claude/agents/` и при отсутствии создай файлы ниже как есть.
|
||||||
|
У ревьюера `adversarial-reviewer` репо-локального определения намеренно
|
||||||
|
нет: рабочий фолбэк — `general-purpose` со скептическим промптом
|
||||||
|
(см. «Роли» в SKILL.md).
|
||||||
|
|
||||||
## Конструкция оркестрации (фрагмент CLAUDE.md репозитория)
|
## Конструкция оркестрации (фрагмент CLAUDE.md репозитория)
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,12 @@
|
|||||||
- **Промпт — файлом, шум — в файлы.** Промпт пиши Write'ом в `$SCRATCH` и
|
- **Промпт — файлом, шум — в файлы.** Промпт пиши Write'ом в `$SCRATCH` и
|
||||||
подавай через stdin (`-`); stdout/stderr — редиректами туда же. В контекст
|
подавай через stdin (`-`); stdout/stderr — редиректами туда же. В контекст
|
||||||
оркестратора читается ровно один файл — финальный отчёт из `-o`.
|
оркестратора читается ровно один файл — финальный отчёт из `-o`.
|
||||||
|
- **Модель и глубину рассуждения задавай явно** (`-m`,
|
||||||
|
`-c 'model_reasoning_effort="..."'`): дефолты берутся из
|
||||||
|
`~/.codex/config.toml` и плавают за последней интерактивной сессией
|
||||||
|
пользователя. Для реализации и ревью — high; текущую боевую модель сверь
|
||||||
|
с конфигом (2026-07-10: `gpt-5.5`). Оверрайды проверены под
|
||||||
|
`--strict-config`.
|
||||||
- **Запуск — собственным фоновым Bash оркестратора** (`run_in_background`):
|
- **Запуск — собственным фоновым Bash оркестратора** (`run_in_background`):
|
||||||
фоновый процесс детачится, живёт сквозь ходы и будит оркестратора по
|
фоновый процесс детачится, живёт сквозь ходы и будит оркестратора по
|
||||||
выходу. Потолок 10 минут — только у фронтграундного Bash; фоновому таймаут
|
выходу. Потолок 10 минут — только у фронтграундного Bash; фоновому таймаут
|
||||||
@@ -21,8 +27,8 @@
|
|||||||
Забирай сразу после старта: это страховка — если процесс умер или его
|
Забирай сразу после старта: это страховка — если процесс умер или его
|
||||||
прибил хост, тред жив: `codex exec resume <id> «дай финальный отчёт»`.
|
прибил хост, тред жив: `codex exec resume <id> «дай финальный отчёт»`.
|
||||||
- **resume — только по явному id.** Безадресный resume цепляет последний тред
|
- **resume — только по явному id.** Безадресный resume цепляет последний тред
|
||||||
сессии — при параллельных тредах подхватит чужой (например, read-only
|
сессии — при параллельных тредах подхватит чужой (например, ревью-тред
|
||||||
ревью-тред вместо write-треда реализации).
|
вместо треда реализации).
|
||||||
- **Вердикт без находок — проверь лог: работа или отписка.** Дёшево:
|
- **Вердикт без находок — проверь лог: работа или отписка.** Дёшево:
|
||||||
`grep -c '"command_execution"' stdout.jsonl` (счётчик выполненных команд)
|
`grep -c '"command_execution"' stdout.jsonl` (счётчик выполненных команд)
|
||||||
или промежуточные сообщения —
|
или промежуточные сообщения —
|
||||||
@@ -40,27 +46,42 @@
|
|||||||
## Ветка «исполнитель» (пишет код)
|
## Ветка «исполнитель» (пишет код)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat "$SCRATCH/task-prompt.md" | codex exec --json \
|
cat "$SCRATCH/task-prompt.md" | codex exec --json --strict-config \
|
||||||
-s workspace-write \
|
-s workspace-write -m gpt-5.5 \
|
||||||
|
-c 'model_reasoning_effort="high"' \
|
||||||
-c 'approval_policy="on-request"' -c 'approvals_reviewer="auto_review"' \
|
-c 'approval_policy="on-request"' -c 'approvals_reviewer="auto_review"' \
|
||||||
-o "$SCRATCH/task-result.md" - \
|
-o "$SCRATCH/task-result.md" - \
|
||||||
> "$SCRATCH/task-stdout.jsonl" 2> "$SCRATCH/task-stderr.txt"
|
> "$SCRATCH/task-stdout.jsonl" 2> "$SCRATCH/task-stderr.txt"
|
||||||
```
|
```
|
||||||
|
|
||||||
- Право записи + авто-ревьюер аппрувов (`approvals_reviewer` в `--help` не
|
- `--strict-config` — обязателен: опечатка в `-c`-ключе упадёт громко, а не
|
||||||
документирован, но `--strict-config` его принимает — проверено 2026-07-09;
|
проглотится молча (важно для `approvals_reviewer` — в `--help` он не
|
||||||
связка отработала боевой прогон). Скоуп ограничивай промптом («коммит не
|
документирован, но strict-config его принимает; связка с
|
||||||
делай», границы из файла задачи), не песочницей — жёсткий read-only лишает
|
`approval_policy="on-request"` отработала боевой прогон 2026-07-09).
|
||||||
исполнителя тестов и поиска.
|
- Право записи + авто-ревьюер аппрувов. Скоуп ограничивай промптом («коммит
|
||||||
|
не делай», границы из файла задачи), не песочницей — жёсткий read-only
|
||||||
|
лишает исполнителя тестов и поиска.
|
||||||
- Промпт: путь к файлу задачи; мандат — в этапе 3 SKILL.md.
|
- Промпт: путь к файлу задачи; мандат — в этапе 3 SKILL.md.
|
||||||
- До старта сними baseline `git status --porcelain`; после — сверь отчёт
|
- До старта сними baseline `git status --porcelain`; после — сверь отчёт
|
||||||
Кодекса с деревом: правок, которых он не называл, быть не должно.
|
Кодекса с деревом: правок, которых он не называл, быть не должно.
|
||||||
|
|
||||||
## Ветка «ревьюер» (свежий тред, только чтение)
|
## Ветка «ревьюер» (свежий тред, мандат промптом)
|
||||||
|
|
||||||
Тот же вызов, но `-s read-only` и без approvals-флагов. Свежий тред, не тот,
|
Тот же вызов, что у исполнителя — запись + авто-аппрув, — но **свежим
|
||||||
что писал код. В промпте — формат «только индекс находок» (SEVERITY,
|
тредом**, не тем, что писал код. Read-only-песочницей ревьюера не режь: она
|
||||||
файл:строка, суть, как проверить) и явная строка VERDICT.
|
отнимает у него руки — тесты, проверку гипотез, поиск, документацию,
|
||||||
|
первоисточники. Защита — мандат в промпте: «исходники и окружение не менять,
|
||||||
|
правок не вносить — только находки»; 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).
|
получив постановку, реализует её сам (казус форвардера, lessons 2026-07-06).
|
||||||
Свой 10-минутный потолок на синхронный Bash раннер обходит отслеживаемым
|
Свой 10-минутный потолок на синхронный Bash раннер обходит отслеживаемым
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
Датированные факты: что поймал каждый этап конвейера, казусы, цифры.
|
Датированные факты: что поймал каждый этап конвейера, казусы, цифры.
|
||||||
Дописывай после каждого прогона — это и есть «выжимка опыта», ради которой
|
Дописывай после каждого прогона — это и есть «выжимка опыта», ради которой
|
||||||
скилл существует.
|
скилл существует. Журнал накопительный, поэтому дистиллируй: когда урок
|
||||||
|
поглощён SKILL.md или references, сжимай его запись здесь до строки-факта
|
||||||
|
(дата, что случилось, куда поглощено) — иначе файл растёт бесконечно.
|
||||||
|
|
||||||
## 2026-07-06 — t2-ml-forecast, задача 05 «полировка витрины под демо»
|
## 2026-07-06 — t2-ml-forecast, задача 05 «полировка витрины под демо»
|
||||||
|
|
||||||
@@ -126,7 +128,8 @@ JSONL (19 command_execution: полный pytest, узкий прогон, usage
|
|||||||
работу. Приём «вердикт без находок — проверь лог» вписан в SKILL.md
|
работу. Приём «вердикт без находок — проверь лог» вписан в SKILL.md
|
||||||
(этап 4) и codex-exec.md.
|
(этап 4) и codex-exec.md.
|
||||||
|
|
||||||
**Закрыты пункты «не проверено боем» из handoff 06:** фолбэк-ревьюер
|
**Закрыты давние пункты «не проверено боем» (записка 2026-07-06, ныне
|
||||||
|
поглощена):** фолбэк-ревьюер
|
||||||
general-purpose на Опусе — обкатан дважды (постановка и код), работает;
|
general-purpose на Опусе — обкатан дважды (постановка и код), работает;
|
||||||
триаж исполнителем — `codex exec resume` по явному id закрыл 3/3 находки,
|
триаж исполнителем — `codex exec resume` по явному id закрыл 3/3 находки,
|
||||||
лишнего не тронул; узкий rerun ревьюера — SendMessage поднял того же
|
лишнего не тронул; узкий rerun ревьюера — SendMessage поднял того же
|
||||||
@@ -139,3 +142,15 @@ general-purpose на Опусе — обкатан дважды (постано
|
|||||||
|
|
||||||
**Цифры:** ревью постановки ~57k токенов, ревью кода ~48k, перепроверка
|
**Цифры:** ревью постановки ~57k токенов, ревью кода ~48k, перепроверка
|
||||||
~45k (тот же агент из транскрипта); триаж-раунд Codex — одна resume-команда.
|
~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-песочницей для поиска).
|
||||||
Reference in new issue
Block a user