fix(skills): claude-subagent-playbook — правила запуска Кодекса по месту

- Зачем:
  - два отказа вызова из прогона #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.
This commit is contained in:
Dmitry Dementiev committed 2026-08-03 21:48:29 +03:00
1 parent 36fc76ff90
commit 9642910194
3 files changed
+28 -14

No files matched your search

@@ -241,10 +241,11 @@ description: >-
**своими глазами** (счётчик тестов, картинки, прогон CLI) — ревью не
заменяет твою приёмку. Команды нового приёмочного сценария проверь на
живом объекте до полного прогона; сложные вставки собирай файлами, не
экранированием; фоновому запуску закрывай stdin (`< /dev/null`) —
команда, дочитывающая ввод, из терминала зелёная, а в фоне виснет
навсегда. Чекбоксы, статус и выжимку резолюций в тикет
переносит fast-worker из файла отчёта исполнителя (не твой Write).
экранированием; фоновой команде, которой нечего читать со входа,
закрывай stdin (`< /dev/null`) — команда, дочитывающая ввод, из
терминала зелёная, а в фоне виснет навсегда. Чекбоксы, статус и
выжимку резолюций в тикет переносит fast-worker из файла отчёта
исполнителя (не твой Write).
Коммит — по `/conventional-commits`, пользователю — выжимка: вердикты,
что принято/отклонено, что осталось — плюс короткая саморефлексия: что
больше всего потратило контекст и что в следующий раз направить файлом
@@ -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 <thread-id> \
-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.
- Промпт — индекс находок **дословно** + «закрой перечисленное, больше
ничего не меняй; отклонение — только аргументированно».
@@ -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.