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 9c82392..c5ab7d1 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md @@ -19,10 +19,11 @@ WSL2 Ubuntu: exec/resume/`-o`/фоновый Bash — весь конвейер) проверки. Песочница: диагностика из [codex-sandbox-apparmor.md](codex-sandbox-apparmor.md) (сигнатура поломки и лечение — там же). Вывод доходит до файла: `codex --version > f; - wc -c f` — 18 байт значит, что рецепты ниже работают как написаны. Ноль - байт: среда теряет унаследованный файловый дескриптор (известный случай — - T3 Code, [lessons.md](lessons.md) 2026-08-06), и тогда каждый поток идёт - своим каналом в свой файл, а код возврата держит `pipefail`: + wc -c f` — непусто значит, что рецепты ниже работают как написаны. Пусто: + среда теряет унаследованный файловый дескриптор, и на входе, и на выходе + (известный случай — T3 Code, [lessons.md](lessons.md) 2026-08-06); тогда + каждый поток идёт своим каналом в свой файл, а код возврата держит + `pipefail`: ```bash set -o pipefail @@ -33,10 +34,13 @@ WSL2 Ubuntu: exec/resume/`-o`/фоновый Bash — весь конвейер) Без `pipefail` статус вернёт `cat`, и отказ Кодекса прочтётся успехом. Подстановка процесса дописывает stderr асинхронно: читаешь этот файл тем же вызовом — поставь `wait`. -- **Промпт — файлом, шум — в файлы.** Промпт подавай через stdin (`-`): вход - этого вызова занят промптом и должен оставаться открытым — правило - `< /dev/null` для фоновых команд сюда не относится (закроешь — получишь - `No prompt provided via stdin`). stdout/stderr — редиректами в `$SCRATCH`. +- **Промпт — файлом через канал, шум — в файлы.** Промпт подавай каналом: + `cat "$D/prompt.md" | codex exec … -`. Канал читается в любой среде, а + редирект из файла (`- < prompt.md`) в среде из предполёта отвечает + `No prompt provided via stdin`. Вход этого вызова занят промптом и должен + оставаться открытым — правило `< /dev/null` для фоновых команд сюда не + относится. stdout/stderr — редиректами в `$SCRATCH`, а если предполёт + показал пусто — каналами оттуда же. В контекст оркестратора читается ровно один файл — финальный отчёт из `-o`. Промпт **собирай конкатенацией, а не переписывай**: скелеты — в [prompt-templates.md](prompt-templates.md), Write'ом пиши только