From 96429101948521b7eb19016396e21248a38fed6e Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Mon, 3 Aug 2026 21:48:29 +0300 Subject: [PATCH] =?UTF-8?q?fix(skills):=20claude-subagent-playbook=20?= =?UTF-8?q?=E2=80=94=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20=D0=9A=D0=BE=D0=B4=D0=B5?= =?UTF-8?q?=D0=BA=D1=81=D0=B0=20=D0=BF=D0=BE=20=D0=BC=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - два отказа вызова из прогона #39 повторялись оттого, что правило лежало не там, где собирают команду: -s дописывали в resume по образцу exec, а < /dev/null закрывал вход у вызова, который сам получает промпт через stdin. - Что: - в codex-exec рецепт resume снабжён строкой о том, что среда треда задана при создании, а перечень ручек хода уточнён по проверке на codex-cli 0.145.0. - к правилу «промпт через stdin» добавлено, что вход этого вызова должен оставаться открытым. - в SKILL.md этап 6 правило < /dev/null сужено условием «фоновой команде, которой нечего читать со входа». - в lessons исправлен неверный хвост записи #39 про смену песочницы ключом -c sandbox_mode. - Проверка: - codex exec resume <любой-id> -s workspace-write → exit 2. - echo "say hi" | codex exec - < /dev/null → No prompt provided via stdin. --- .../skills/claude-subagent-playbook/SKILL.md | 9 ++++---- .../references/codex-exec.md | 23 +++++++++++++------ .../references/lessons.md | 10 +++++--- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/agents/.agents/skills/claude-subagent-playbook/SKILL.md b/agents/.agents/skills/claude-subagent-playbook/SKILL.md index 6b86f9b..9b5783b 100644 --- a/agents/.agents/skills/claude-subagent-playbook/SKILL.md +++ b/agents/.agents/skills/claude-subagent-playbook/SKILL.md @@ -241,10 +241,11 @@ description: >- **своими глазами** (счётчик тестов, картинки, прогон CLI) — ревью не заменяет твою приёмку. Команды нового приёмочного сценария проверь на живом объекте до полного прогона; сложные вставки собирай файлами, не - экранированием; фоновому запуску закрывай stdin (`< /dev/null`) — - команда, дочитывающая ввод, из терминала зелёная, а в фоне виснет - навсегда. Чекбоксы, статус и выжимку резолюций в тикет - переносит fast-worker из файла отчёта исполнителя (не твой Write). + экранированием; фоновой команде, которой нечего читать со входа, + закрывай stdin (`< /dev/null`) — команда, дочитывающая ввод, из + терминала зелёная, а в фоне виснет навсегда. Чекбоксы, статус и + выжимку резолюций в тикет переносит fast-worker из файла отчёта + исполнителя (не твой Write). Коммит — по `/conventional-commits`, пользователю — выжимка: вердикты, что принято/отклонено, что осталось — плюс короткая саморефлексия: что больше всего потратило контекст и что в следующий раз направить файлом 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 18a8399..bcdf833 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md @@ -2,6 +2,7 @@ Проверено 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 надёжнее обёртки: её фоновая машина глючит (молчаливая подмена @@ -12,10 +13,12 @@ ## Сквозные правила (любая ветка) -- **Промпт — файлом, шум — в файлы.** Промпт подавай через stdin (`-`); - stdout/stderr — редиректами в `$SCRATCH`. В контекст оркестратора - читается ровно один файл — финальный отчёт из `-o`. Промпт **собирай - конкатенацией, а не переписывай**: скелеты — в +- **Промпт — файлом, шум — в файлы.** Промпт подавай через stdin (`-`): вход + этого вызова занят промптом и должен оставаться открытым — правило + `< /dev/null` для фоновых команд сюда не относится (закроешь — получишь + `No prompt provided via stdin`). stdout/stderr — редиректами в `$SCRATCH`. + В контекст оркестратора читается ровно один файл — финальный отчёт из + `-o`. Промпт **собирай конкатенацией, а не переписывай**: скелеты — в [prompt-templates.md](prompt-templates.md), Write'ом пиши только параметрический блок задачи; чужой контент (вердикты ревью, отчёты) в промпт попадает через `cat a.md b.md > prompt.md` — дословно и без @@ -144,14 +147,20 @@ fix-промпт конкатенацией, читай его один раз ## Ветка «триаж/починка» (тем же тредом, что писал код) ```bash +# resume продолжает тред: среда (-s, -C) задана при создании, не повторяй. cat "$D/fix-prompt.md" | codex exec resume --json \ -o "$D/fix-result.md" - \ > "$D/fix-stdout.jsonl" 2> "$D/fix-stderr.txt" ``` -- `resume` не принимает `-s`/`-C` — песочница и CWD наследуются от исходного - треда (write-тред остаётся write); модель наследуется, но переопределяется - `-m` при нужде. +- **`resume` продолжает тред, а не заводит новый — среда принадлежит треду, + не ходу.** Песочница и 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. - Промпт — индекс находок **дословно** + «закрой перечисленное, больше ничего не меняй; отклонение — только аргументированно». diff --git a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md index 36e8604..f18c008 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md @@ -671,9 +671,13 @@ compose down`); отдельных событий эскалации в `--json` - **Два отказа вызова Кодекса, оба от чтения правил без разбора.** `< /dev/null` по правилу «фоновому запуску закрывай stdin» убивает промпт, который сам идёт через stdin (`No prompt provided via stdin`), — правило не - про этот случай. И `codex exec resume` (0.145.0) не принимает `-s`: песочница - только через `-c sandbox_mode="workspace-write"`, остальные ключи (`-m`, `-c`, - `-o`, `--json`) те же, что у `exec`. + про этот случай. И `codex exec resume` (0.145.0) не принимает `-s`/`-C`: + среда треда задана при создании и на продолжении не переуказывается; + остальные ключи (`-m`, `-c`, `-o`, `--json`) те же, что у `exec`. Уточнено + 2026-08-03: хвост «песочница только через `-c sandbox_mode=…`» был неверен — + ключ разбирается, но среду продолжения не меняет. Оба отказа закрыты по + месту: `codex-exec.md` (рецепт resume и правило stdin), `SKILL.md` этап 6 + (правило `< /dev/null` сужено условием «нечего читать со входа»). - Цифры: два ревью — 58 и 36 команд/инструментов, 10 находок (1 MAJOR, 8 MINOR, 1 NIT); триаж — 10 FIXED; перепроверки на medium — 8 и 12; тесты 297 → 353.