From abc00a06be6cead2f2f68b9107cee9eca8c319f0 Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Mon, 3 Aug 2026 23:15:31 +0300 Subject: [PATCH] =?UTF-8?q?refactor(skills):=20codex-exec=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D1=80=D0=B0=D0=B7=D0=BE=D0=B1=D1=80=D0=B0=D0=BD,?= =?UTF-8?q?=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=B5=D1=80=D0=B4?= =?UTF-8?q?=D0=B8=D0=BA=D1=82=D0=BE=D0=B2=20=D0=BF=D0=BE=20=D1=8D=D1=82?= =?UTF-8?q?=D0=B0=D0=BF=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - рецепт Кодекса читают в момент сборки команды; пересказы, хеджи и копии уроков внутри него дают место для импровизации — прогон 2026-07-30 взял `danger-full-access` «на всякий случай» при верном рецепте. - вердикты звались по семейству (`review-codex.md`), а Codex ревьюирует и постановку, и код в одном `$D` — упавший этап 4 оставлял файл этапа 2, и триаж молча чинил по чужому вердикту. - Что: - codex-exec.md: удалены копия урока про эффорт (экономика xray, казус `.dgst`), причинная механика bwrap, повтор про companion и битая ссылка «в уроках ниже»; три пересказа эскалации сведены в один; ветка ревьюера стала полноценным рецептом; правила одной ветки переехали в свои ветки. - codex-exec.md: сторож зависшего треда — признак жизни это рост stdout.jsonl, а не статус (урок 2026-07-07 в рецепт не доезжал). - prompt-templates.md: имена вердиктов и параметров несут этап — `review--.md`, `review-<этап>-params.md`. - model-matrix.md: критерий «цена тихой ошибки этапа» стал единым источником, claude-agents.md и codex-exec.md на него ссылаются. - lessons-archive.md: датированное уточнение — ключи `resume` сверены на 0.145.0, `-m`/`-o`/`--json` доступны вопреки записи 2026-07-21. - Проверка: - сверка 51 клаузы по инвентарю (scratchpad), 24 ключевые — grep'ом; все markdown-ссылки скилла резолвятся. - сторож прогнан на симуляции трёх исходов: штатное завершение, зависание на середине, смерть без отчёта. Co-Authored-By: Claude Opus 5 --- .../references/claude-agents.md | 5 +- .../references/codex-exec.md | 247 ++++++++++-------- .../references/lessons-archive.md | 4 +- .../references/model-matrix.md | 6 + .../references/prompt-templates.md | 35 ++- 5 files changed, 171 insertions(+), 126 deletions(-) diff --git a/agents/.agents/skills/claude-subagent-playbook/references/claude-agents.md b/agents/.agents/skills/claude-subagent-playbook/references/claude-agents.md index 6d69761..42231e7 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/claude-agents.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/claude-agents.md @@ -15,8 +15,9 @@ ## Карта «роль → модель и ступень» -По цене *тихой* ошибки этапа, не по сложности (решение пользователя -2026-07-26 под Opus 5; `xhigh` не дефолтить): +По цене *тихой* ошибки этапа ([model-matrix.md](model-matrix.md)), не по +сложности (решение пользователя 2026-07-26 под Opus 5; `xhigh` не +дефолтить): - `high` — ревью постановок и планов: `deep-reasoner`. Дефект каскадирует — отравляет реализацию, оба ревью и триаж. diff --git a/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md b/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md index 16206bb..eb6fb57 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md @@ -1,15 +1,17 @@ # Codex через прямой `codex exec`: рецепты и ловушки -Проверено 2026-07-09 (codex-cli 0.142.5, Windows + Git Bash) и 2026-07-12 -(0.144.1, WSL2 Ubuntu: exec/resume/`-o`/фоновый Bash — весь конвейер); -ключи `resume` перепроверены 2026-08-03 на 0.145.0; -линукс-эмпирика 07-06/07-07 шла через companion-обёртку и отражена в уроках -ниже. -Прямой CLI надёжнее обёртки: её фоновая машина глючит (молчаливая подмена -анализа Кодекса своим — issue #158, ломает слепое ревью; зависшие статусы), -и её `--write`-запуски режет классификатор авторежима. Далее `$D` = -подпапка задачи в обменном каталоге прогона (определение и конвенция — -[prompt-templates.md](prompt-templates.md)). +Проверено 2026-07-09 (0.142.5, Windows + Git Bash) и 2026-07-12 (0.144.1, +WSL2 Ubuntu: exec/resume/`-o`/фоновый Bash — весь конвейер); ключи `exec` +и `resume` сверены 2026-08-03 на 0.145.0. + +Конвейер ходит **прямым exec**, не плагином-обёрткой: у обёртки глючит +фоновая машина — молчаливая подмена анализа Кодекса своим (issue #158, +ломает слепое ревью) и зависшие статусы, — а её `--write`-запуски режет +классификатор авторежима. Сама обёртка (`codex-companion.mjs` в кэше +плагинов) остаётся для ручного интерактива: `status`, `result `. + +Далее `$D` = подпапка задачи в обменном каталоге прогона (определение и +конвенция имён — [prompt-templates.md](prompt-templates.md)). ## Сквозные правила (любая ветка) @@ -22,78 +24,86 @@ [prompt-templates.md](prompt-templates.md), Write'ом пиши только параметрический блок задачи; чужой контент (вердикты ревью, отчёты) в промпт попадает через `cat a.md b.md > prompt.md` — дословно и без - повторного прохода через твой контекст (ретро 2026-07-10: переписывание - гоняло находки через оркестратора до шести раз). + повторного прохода через твой контекст (2026-07-10: переписывание гоняло + находки через оркестратора до шести раз). - **Модель и глубину рассуждения задавай явно** (`-m`, `-c 'model_reasoning_effort="..."'`): дефолты берутся из `~/.codex/config.toml` и плавают за последней интерактивной сессией пользователя — из конфига не наследовать, при расхождении с правилом — спроси пользователя. Боевая модель — **`gpt-5.6-sol`** (решение пользователя 2026-07-12), она хороша и для анализа/ревью, не только для - кода. Эффорт по сложности (решение пользователя 2026-07-19): `medium` — - дефолт для обычных задач (типовая реализация, механика, узкие починки по - готовому диагнозу); `high` — для более сложных: нетривиальная или - рискованная реализация, ревью кода, диагноз; `xhigh` — не дефолтить: - расход удваивается, а выигрыш мал — только по явному запросу пользователя. - Оверрайды проверены под `--strict-config`. - Уточнение по эксперименту xray-proxy 03/04 (решение пользователя - 2026-07-21): реализация по отревьюированному самодостаточному тикету на - `medium` допустима и для нетривиальных задач — конвейер (саморевью + два - слепых ревью + триаж) ловит просадку (03: 4 MAJOR-гонки найдены и - починены; 04: 1 «чистый» MAJOR — на уровне high-baseline 06). Но экономию - считай по всему конвейеру, не по этапу: в 04 medium вышел дороже - high-baseline (~822k+135k против ~735k+97k свежих) — сэкономленное на - реализации съел триаж находок. Критерий выбора — цена *тихой* ошибки - этапа: ревью/постановка/диагноз остаются high (там модель — последняя - линия обороны). И предел: high на ревью постановки не страхует от - уверенной выдумки внешних фактов (04: несуществующий однострочный формат - `.dgst`) — форматы артефактов и версии проверяй реальным запросом или - фикстурой из первоисточника. Попутная эмпирика: смена - `model_reasoning_effort` при `resume` кэш треда НЕ сбрасывает (доля кэша - держалась ~93–94% при high→medium в 06/03/04) — дорогое ревью на high и - дешёвая перепроверка на medium в одном треде работают как задумано. + кода. Ступень — по цене *тихой* ошибки этапа + ([model-matrix.md](model-matrix.md)), не по сложности: `medium` — дефолт + для обычных задач (типовая реализация, механика, узкие починки по готовому + диагнозу); `high` — ревью кода, диагноз, нетривиальная или рискованная + реализация; `xhigh` не дефолтить: расход удваивается, а выигрыш мал — + только по явному запросу пользователя. Реализация по отревьюированному + самодостаточному тикету идёт на `medium` и при нетривиальной задаче — + просадку ловит конвейер (решение пользователя 2026-07-21); но экономию + считай по конвейеру целиком, а не по этапу: триаж лишних находок съедает + её без остатка. Оверрайды проверены под `--strict-config`. - **Запуск — собственным фоновым Bash оркестратора** (`run_in_background`): фоновый процесс детачится, живёт сквозь ходы и будит оркестратора по выходу. Потолок 10 минут — только у фронтграундного Bash; фоновому таймаут не нужен, `timeout NNN` вокруг codex не ставь. **`&` внутрь команды не добавляй** — фон даёт харнесс; с `&` уведомление придёт от обёртки при - живом codex (эмпирика 2026-07-12). Спасение осиротевшего процесса: - ожидатель `while kill -0 ; do sleep 10; done` под - `run_in_background` будит по его реальному выходу. + живом codex (2026-07-12). Осиротевший процесс подбирает ожидатель: + `while kill -0 ; do sleep 10; done` под `run_in_background` будит по + его реальному выходу. +- **О зависании фоновый запуск молчит**: он будит по выходу, а повисший тред + не выходит — живой процесс и работающий процесс снаружи неразличимы. + Признак жизни — рост `stdout.jsonl`, а не статус (2026-07-07). Долгий + прогон страхуй сторожем — вторым фоновым Bash, который выходит либо когда + появился `-o`-отчёт, либо когда лог перестал расти. Сторож ходит по + артефактам, а не по pid: фоновый Bash отдаёт id задачи харнесса, а pid + процесса тебе неоткуда взять. + + ```bash + prev=-1 + while [ ! -s "$D/task-result.md" ]; do + sleep 300 + [ -s "$D/task-result.md" ] && break + cur=$(wc -c < "$D/task-stdout.jsonl" 2>/dev/null || echo 0) + [ "$cur" = "$prev" ] && { echo STALLED; break; } + prev=$cur + done + ``` + + Две ловушки, обе проверены на симуляции 2026-08-03. Выход проверяй **и + после `sleep`** — иначе сторож объявит застой ровно в тот тик, когда + Кодекс дописывал отчёт. И не переводи признак жизни на относительные + метки времени: `find -newermt '-10 minutes'` под `bfs` (подмена `find` в + части дистрибутивов) молча отдаёт пустой stdout — сторож закричит на + первом же тике. + + `STALLED` — повод посмотреть, а не вердикт: длинная команда внутри + песочницы (сборка, тесты) событий не пишет. Разбудил — прочти последнюю + строку JSONL и решай сам. - **thread_id — в первой строке stdout-JSONL** (`{"type":"thread.started",...}`). Забирай сразу после старта: это страховка — если процесс умер или его прибил хост, тред жив: `codex exec resume «дай финальный отчёт»`. - **resume — только по явному id.** Безадресный resume цепляет последний тред сессии — при параллельных тредах подхватит чужой (например, ревью-тред вместо треда реализации). -- **Вердикт без находок — проверь лог: работа или отписка.** Дёшево: - `grep -c '"command_execution"' stdout.jsonl` (счётчик выполненных команд) - или промежуточные сообщения — - `jq -r 'select(.item.type=="agent_message") | .item.text' stdout.jsonl`. - Одна строка APPROVED при пустом счётчике — отписка, перезапускай. -- **Кросс-платформенно.** Рецепты — POSIX под Git Bash (эмпирика 2026-07-09: - `codex`, `jq`, редиректы под Windows работают). `$SCRATCH` задавай +- **Кросс-платформенно.** Рецепты — POSIX под Git Bash (2026-07-09: `codex`, + `jq`, редиректы под Windows работают). `$SCRATCH` задавай forward-slash-путём (`/c/Users/...`), не `C:\...`; пути в аргументах кавычь; в выводах под Windows возможны `\r`. -- **Linux: sandbox может молча сломаться обновлением Codex.** CLI 0.144.1 - сменил backend на bwrap+userns; Ubuntu 24.04 с - `apparmor_restrict_unprivileged_userns=1` глушит любые команды до запуска - (`bwrap: loopback: Failed RTM_NEWADDR`). Сигнатура: web_search работает, - а `pwd` в sandbox — нет. Обход без sudo `use_legacy_landlock=true` чинит - только read-only (write-режим с ним паникует); полный фикс — AppArmor- - профиль. Диагностика и рецепты — - [codex-sandbox-apparmor.md](codex-sandbox-apparmor.md). - Фикс целиком под sudo — сам не применяй: дай пользователю готовые команды - из файла рецептов (`!`-префикс в чат), после применения профиля напомни - убрать `use_legacy_landlock`. Перед первым прогоном конвейера на новой - Linux-машине прогони диагностику из файла рецептов превентивно. -- **Блок классификатора — сначала сузь песочницу, потом зови - пользователя.** Первая проверка: нет ли в команде `-s - danger-full-access` — классификатор его блокирует, и он не нужен: - docker и сеть проходят эскалацией под штатной связкой из рецепта ниже - (боевой прогон 2026-07-30, тикет #12 v2). Если блок не из-за - песочницы — дай пользователю готовую команду с префиксом `!` в чат или - попроси сменить режим разрешений. Сработавший путь — прямой exec; +- **Linux: sandbox может молча сломаться обновлением Codex.** Сигнатура: + web_search работает, а `pwd` внутри песочницы — нет + (`bwrap: loopback: Failed RTM_NEWADDR`). Обход без sudo + `use_legacy_landlock=true` чинит только read-only, write-режим с ним + паникует; полный фикс — AppArmor-профиль, и он под sudo: сам не применяй, + дай пользователю готовые команды из + [codex-sandbox-apparmor.md](codex-sandbox-apparmor.md) (`!`-префикс в чат), + после применения профиля напомни убрать `use_legacy_landlock`. Перед первым + прогоном конвейера на новой Linux-машине прогони оттуда же диагностику + превентивно. +- **Блок классификатора — сначала сузь песочницу, потом зови пользователя.** + Первая проверка: нет ли в команде `-s danger-full-access` — классификатор + его блокирует, и он не нужен (почему — в ветке исполнителя). Если блок не + из-за песочницы — дай пользователю готовую команду с префиксом `!` в чат + или попроси сменить режим разрешений. Сработавший путь — прямой exec; companion с `--write` блокируется и напрямую, и через раннера. ## Ветка «исполнитель» (пишет код) @@ -107,48 +117,67 @@ cat "$D/task-prompt.md" | codex exec --json --strict-config \ > "$D/task-stdout.jsonl" 2> "$D/task-stderr.txt" ``` -- Эффорт в примере — `high` (сложная задача); обычной задаче ставь - `medium` по сквозному правилу выше. -- `--strict-config` — обязателен: опечатка в `-c`-ключе упадёт громко, а не - проглотится молча (важно для `approvals_reviewer` — в `--help` он не - документирован, но strict-config его принимает; связка с - `approval_policy="on-request"` отработала боевой прогон 2026-07-09). +- Эффорт в примере — `high` (сложная задача); обычной задаче ставь `medium` + по сквозному правилу выше. +- **`--strict-config` — не про песочницу, а про опечатку.** С ним + нераспознанный `-c`-ключ валит запуск громко; без него он проглатывается + молча, и ты едешь на дефолте вместо заданной ступени. Заодно strict-config + принимает `approvals_reviewer`, которого нет в `--help`: связка с + `approval_policy="on-request"` отработала боевой прогон 2026-07-09. - Право записи + авто-ревьюер аппрувов. Скоуп ограничивай промптом («коммит не делай», границы из файла задачи), не песочницей — жёсткий read-only - лишает исполнителя тестов и поиска. Шире тоже не бери: `-s - danger-full-access` блокируется классификатором авторежима и не - нужен — docker-сокет (`make up`) и сеть (`docker manifest inspect`) - прошли эскалацией в боевом прогоне 2026-07-30 (тикет #12 v2). + лишает исполнителя тестов и поиска. +- **Шире тоже не бери.** `-s danger-full-access` блокируется классификатором + авторежима и не нужен: под штатной связкой из рецепта у Codex прошли и + сеть (`docker manifest inspect`), и docker-сокет (`make up`, + `docker compose down`) — эскалацией через авто-аппрув (боевой прогон + 2026-07-30, тикет #12 v2). Отдельных событий эскалации в `--json`-логе при + этом нет: успешные команды выглядят обычными `completed` — не ищи их там + (история вопроса — + [../handoffs/20260710-codex-revyuer-write-i-sliyanie-handoffov.md](../handoffs/20260710-codex-revyuer-write-i-sliyanie-handoffov.md)). - Промпт: путь к файлу задачи; мандат — в этапе 3 SKILL.md. - До старта сними baseline `git status --porcelain`; после — сверь отчёт Кодекса с деревом: правок, которых он не называл, быть не должно. ## Ветка «ревьюер» (свежий тред, мандат промптом) -Тот же вызов, что у исполнителя — запись + авто-аппрув, — но **свежим -тредом**, не тем, что писал код. Read-only-песочницей ревьюера не режь: она -отнимает у него руки — тесты, проверку гипотез, поиск, документацию, -первоисточники. Защита — мандат в промпте, готовым файлом -[prompts/review-boilerplate.md](prompts/review-boilerplate.md) (сборка — -[prompt-templates.md](prompt-templates.md)); Codex держит его надёжно -(практика пользователя, 2026-07-10). Дешёвая подстраховка: -`git status --porcelain` до ревью и сверка после — дерево должно остаться -нетронутым. Кавеат снят 2026-07-30: сеть под workspace-write по -умолчанию закрыта, но эскалация через авто-аппрув её проходит — в -боевом прогоне тикета #12 (v2) у исполнителя прошли и сеть -(`docker manifest inspect`), и docker-сокет (`make up`, `docker compose -down`). Отдельных событий эскалации в `--json`-логе при этом нет — -успешные команды выглядят обычными `completed` (история вопроса — -[../handoffs/20260710-codex-revyuer-write-i-sliyanie-handoffov.md](../handoffs/20260710-codex-revyuer-write-i-sliyanie-handoffov.md)). +```bash +# линия кода; для постановки — тот же вызов, но +# review-prompt-task.md -> review-task-codex.md +cat "$D/review-prompt-code.md" | codex exec --json --strict-config \ + -s workspace-write -m gpt-5.6-sol \ + -c 'model_reasoning_effort="high"' \ + -c 'approval_policy="on-request"' -c 'approvals_reviewer="auto_review"' \ + -o "$D/review-code-codex.md" - \ + > "$D/review-stdout.jsonl" 2> "$D/review-stderr.txt" +``` -`-o`-файл вердикта — и есть обменный артефакт: на триаже он уходит в -fix-промпт конкатенацией, читай его один раз для синтеза и не пересказывай. +- **Свежим тредом**, не тем, что писал код. Вызов тот же, что у исполнителя: + запись + авто-аппрув. +- Эффорт `high` — дефолт ревью; ниже опускай только по явной просьбе + пользователя. +- Read-only-песочницей ревьюера не режь: она отнимает у него руки — тесты, + проверку гипотез, поиск, документацию, первоисточники. Защита — мандат в + промпте, готовым файлом + [prompts/review-boilerplate.md](prompts/review-boilerplate.md) (сборка — + [prompt-templates.md](prompt-templates.md)); Codex держит его надёжно + (практика пользователя, 2026-07-10). Дешёвая подстраховка: + `git status --porcelain` до ревью и сверка после — дерево должно остаться + нетронутым. +- **Вердикт без находок — проверь лог: работа или отписка.** Дёшево: + `grep -c '"command_execution"' "$D/review-stdout.jsonl"` (счётчик + выполненных команд) или промежуточные сообщения — + `jq -r 'select(.item.type=="agent_message") | .item.text' + "$D/review-stdout.jsonl"`. Одна строка APPROVED при пустом счётчике — + отписка, перезапускай. +- `-o`-файл вердикта — и есть обменный артефакт: на триаже он уходит в + fix-промпт конкатенацией, читай его один раз для синтеза и не пересказывай. ## Ветка «триаж/починка» (тем же тредом, что писал код) ```bash # resume продолжает тред: среда (-s, -C) задана при создании, не повторяй. -cat "$D/fix-prompt.md" | codex exec resume --json \ +cat "$D/fix-prompt.md" | codex exec resume --json --strict-config \ -o "$D/fix-result.md" - \ > "$D/fix-stdout.jsonl" 2> "$D/fix-stderr.txt" ``` @@ -157,10 +186,13 @@ cat "$D/fix-prompt.md" | codex exec resume --json \ не ходу.** Песочница и CWD заданы при создании и на продолжении не переуказываются: ключей `-s` и `-C` у `resume` просто нет, дописанные по образцу `exec` они дают `exit 2, unexpected argument`. Write-тред остаётся - write. Ручки хода остаются: `-m` (модель), `-c model_reasoning_effort=…` - (кэш треда не сбрасывает, см. выше), `-o`, `--json`. `-c sandbox_mode=…` - разбирается без ошибки, но среду продолжения не меняет — не рассчитывай - на него. Ключи сверены 2026-08-03 на codex-cli 0.145.0. + write. Ручки хода остаются: `-m` (модель), `-c model_reasoning_effort=…`, + `-o`, `--json`, `--strict-config`. `-c sandbox_mode=…` разбирается без + ошибки, но среду продолжения не меняет — не рассчитывай на него. Ключи + сверены 2026-08-03 на codex-cli 0.145.0. +- **Смена эффорта внутри треда кэш не сбрасывает** (доля кэша держалась + ~93–94% при high→medium, прогоны 06/03/04) — дорогое ревью на `high` и + дешёвая перепроверка на `medium` в одном треде работают как задумано. - Промпт — индекс находок **дословно** + «закрой перечисленное, больше ничего не меняй; отклонение — только аргументированно». @@ -169,18 +201,15 @@ cat "$D/fix-prompt.md" | codex exec resume --json \ Для запуска раннер не нужен (см. сквозные правила) — он нужен, когда сырой результат шумный и его стоит провалидировать или сжать до индекса, прежде чем показывать оркестратору. Тогда раннеру (`fast-worker`; нет в -репозитории — `general-purpose`) отдай -**готовую команду** и правила разбора — не постановку задачи: тонкий агент, -получив постановку, реализует её сам (казус форвардера, lessons-archive -2026-07-06). -Свой 10-минутный потолок на синхронный Bash раннер обходит отслеживаемым -ожиданием: команда запускается его собственным фоновым Bash, а ждёт он -процессом-ожидателем (`until grep -q '<маркер>' лог; do sleep 30; done` под -`run_in_background`) — харнесс переинвоцирует его по выходу процесса. -«Жду уведомления» без отслеживаемого процесса не будит никогда, а голый -поллер вне `run_in_background` умирает при смене хода (эмпирика -2026-07-07) — живучесть даёт именно фоновый запуск. +репозитории — `general-purpose`) отдай **готовую команду** и правила +разбора, не постановку задачи: тонкий агент, получив постановку, реализует +её сам (казус форвардера, lessons-archive 2026-07-06). -Companion-плагин (`codex-companion.mjs` в кэше плагинов) — только для -ручного интерактива (`status`, `result `); конвейер ходит прямым -exec. +Свой 10-минутный потолок на синхронный Bash раннер обходит тем же приёмом, +что и оркестратор, — отслеживаемым ожиданием: команда запускается его +собственным фоновым Bash, а ждёт он процессом-ожидателем +(`until grep -q '<маркер>' лог; do sleep 30; done` под `run_in_background`), +и харнесс переинвоцирует его по выходу процесса. «Жду уведомления» без +отслеживаемого процесса не будит никогда, а голый поллер вне +`run_in_background` умирает при смене хода (2026-07-07) — живучесть даёт +именно фоновый запуск. diff --git a/agents/.agents/skills/claude-subagent-playbook/references/lessons-archive.md b/agents/.agents/skills/claude-subagent-playbook/references/lessons-archive.md index ab0c734..7dedab9 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/lessons-archive.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/lessons-archive.md @@ -257,7 +257,9 @@ git (`git show HEAD:path`) + повторным наложением право `resume` кэш треда не сбрасывает (~93–94% кэша во всех трёх задачах). - Казусы харнеса: рестарт сессии дважды убивал фоновый codex — тред спасался по сохранённому thread_id; `codex exec resume` принимает - ТОЛЬКО `-c`-оверрайды (`-s`/`-m`/`-o` → exit 2); usage убитого хода + ТОЛЬКО `-c`-оверрайды (`-s`/`-m`/`-o` → exit 2) — **уточнено 2026-08-03**: + ключи сверены на 0.145.0 и не совпали, у `resume` есть `-m`, `-o`, + `--json`, `--strict-config`, нет только `-s` и `-C`; usage убитого хода теряется (нет `turn.completed`) — фиксировать с оговоркой из resume-хода. - Решения пользователя 2026-07-21 (поглощено: codex-exec.md — эффорт, SKILL.md — эффорт-карта Claude-субагентов): реализация по diff --git a/agents/.agents/skills/claude-subagent-playbook/references/model-matrix.md b/agents/.agents/skills/claude-subagent-playbook/references/model-matrix.md index 5570be0..f98c297 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/model-matrix.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/model-matrix.md @@ -39,6 +39,12 @@ Opus 5, оба заметно выросли в интеллекте, вкус Fable и Опуса на объёмную работу без суждения не тратить. - Fable держи для самого трудного: оркестрация, архитектура, задачи, где интеллект и вкус нужны одновременно. +- Ступень эффорта выбирают по цене *тихой* ошибки этапа, не по его + сложности: где ошибка уезжает дальше незамеченной (постановка, ревью, + диагноз) — ступень выше; где она падает громко и следующий этап её + ловит (реализация, механика) — ниже. Карты ступеней: + Claude-субагенты — [claude-agents.md](claude-agents.md), Codex — + [codex-exec.md](codex-exec.md). Механика вызова: Claude-модели — параметром `model` (Agent/Workflow) и определениями из [claude-agents.md](claude-agents.md); Codex — прямым diff --git a/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md b/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md index dcf2628..6e6a55f 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md @@ -45,17 +45,18 @@ ```bash cat "$D/task-body.md" "$P/runtime-language.md" > "$D/task-prompt.md" -cat "$D/review-params.md" "$P/line-task.md" "$P/line-taste.md" \ +cat "$D/review-task-params.md" "$P/line-task.md" "$P/line-taste.md" \ "$P/review-boilerplate.md" "$P/runtime-language.md" \ > "$D/review-prompt-task.md" -cat "$D/review-params.md" "$P/line-code.md" \ +cat "$D/review-code-params.md" "$P/line-code.md" \ "$P/review-boilerplate.md" "$P/runtime-language.md" \ > "$D/review-prompt-code.md" # одиночный ревьюер: line-rev.md (+ line-taste.md) -> review-prompt.md # line-taste.md едет с линией уместности — переставь, если её ведёт # другая линия (назначение линий — этап 4 SKILL.md) -cat "$P/triage-header.md" "$D/review-codex.md" "$D/review-claude.md" \ - "$D/notes.md" "$P/runtime-language.md" > "$D/fix-prompt.md" +cat "$P/triage-header.md" "$D/review-code-codex.md" \ + "$D/review-code-claude.md" "$D/notes.md" "$P/runtime-language.md" \ + > "$D/fix-prompt.md" # notes.md опционален — нет, так не включай cat "$P/recheck-header.md" "$D/recheck-params.md" \ "$P/runtime-language.md" > "$D/recheck-prompt.md" @@ -116,21 +117,27 @@ cat "$P/self-review.md" | codex exec resume ... ## 2. Ревью: общий блок + файл линии -Общий параметрический блок (`review-params.md`) один на обе линии и не -знает, кто его читает; линзу и префикс ID задаёт файл линии, поэтому -собранных промптов — по одному на линию, с разными путями. Куда класть -вердикт, задаёт обёртка вызова, и пути вердиктов у ревьюеров тоже разные -(иначе коллизия). Codex получает свой собранный файл через stdin (вердикт +Общий параметрический блок (`review-<этап>-params.md`) один на обе линии +этапа и не знает, кто его читает; линзу и префикс ID задаёт файл линии, +поэтому собранных промптов — по одному на линию, с разными путями. Куда +класть вердикт, задаёт обёртка вызова, и пути вердиктов у ревьюеров тоже +разные (иначе коллизия). **Имя несёт и этап** (`task`/`code`), не только +семейство: `$D` у задачи один на весь прогон, и с общим именем ревью кода +легло бы поверх ревью постановки — а упавшая линия этапа 4 оставила бы +файл этапа 2 на месте, и триаж молча ушёл бы чинить по чужому вердикту. +Разные имена делают такой отказ громким: сборка `fix-prompt.md` падает на +`cat`. Codex получает свой собранный файл через stdin (вердикт = его `-o`-отчёт); Клод-субагенту в prompt — короткая английская обёртка: ```text Read {{path to this line's review prompt}} and execute it. Working directory: {{repo root}}. Write the findings index to -{{$D/review-claude.md}} — it is outside the repo, so the mandate allows -it (via Write or a Bash heredoc, whichever you have). Append each finding -to that file as you go — incremental writing keeps a partial index alive -if the session dies. Keep the index strict: ONE line per finding and per -confirmation, as the boilerplate demands — no multi-line entries. Final +{{$D/review--claude.md}} — it is outside the repo, so the +mandate allows it (via Write or a Bash heredoc, whichever you have). +Append each finding to that file as you go — incremental writing keeps a +partial index alive if the session dies. Keep the index strict: ONE line +per finding and per confirmation, as the boilerplate demands — no +multi-line entries. Final message: ONLY the VERDICT line, severity counters and the file path. ```