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 3279197..18a8399 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md @@ -84,9 +84,13 @@ из файла рецептов (`!`-префикс в чат), после применения профиля напомни убрать `use_legacy_landlock`. Перед первым прогоном конвейера на новой Linux-машине прогони диагностику из файла рецептов превентивно. -- **Блок классификатора — решение пользователя.** Если запуск не прошёл - permission-гейт, дай пользователю готовую команду с префиксом `!` в чат - или попроси сменить режим разрешений. Сработавший путь — прямой exec; +- **Блок классификатора — сначала сузь песочницу, потом зови + пользователя.** Первая проверка: нет ли в команде `-s + danger-full-access` — классификатор его блокирует, и он не нужен: + docker и сеть проходят эскалацией под штатной связкой из рецепта ниже + (боевой прогон 2026-07-30, тикет #12 v2). Если блок не из-за + песочницы — дай пользователю готовую команду с префиксом `!` в чат или + попроси сменить режим разрешений. Сработавший путь — прямой exec; companion с `--write` блокируется и напрямую, и через раннера. ## Ветка «исполнитель» (пишет код) @@ -108,7 +112,10 @@ cat "$D/task-prompt.md" | codex exec --json --strict-config \ `approval_policy="on-request"` отработала боевой прогон 2026-07-09). - Право записи + авто-ревьюер аппрувов. Скоуп ограничивай промптом («коммит не делай», границы из файла задачи), не песочницей — жёсткий read-only - лишает исполнителя тестов и поиска. + лишает исполнителя тестов и поиска. Шире тоже не бери: `-s + danger-full-access` блокируется классификатором авторежима и не + нужен — docker-сокет (`make up`) и сеть (`docker manifest inspect`) + прошли эскалацией в боевом прогоне 2026-07-30 (тикет #12 v2). - Промпт: путь к файлу задачи; мандат — в этапе 3 SKILL.md. - До старта сними baseline `git status --porcelain`; после — сверь отчёт Кодекса с деревом: правок, которых он не называл, быть не должно. @@ -123,9 +130,12 @@ cat "$D/task-prompt.md" | codex exec --json --strict-config \ [prompt-templates.md](prompt-templates.md)); Codex держит его надёжно (практика пользователя, 2026-07-10). Дешёвая подстраховка: `git status --porcelain` до ревью и сверка после — дерево должно остаться -нетронутым. Кавеат: сеть под workspace-write по умолчанию закрыта; что -поиск/документация проходят эскалацией через авто-аппрув — рабочая -гипотеза, боем не обкатана (см. +нетронутым. Кавеат снят 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)). `-o`-файл вердикта — и есть обменный артефакт: на триаже он уходит в diff --git a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md index 63727da..c19e969 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md @@ -406,3 +406,40 @@ Opus 5 по отдаче ближе к прежнему `xhigh`, а `medium` — Workflow», либо для каждой роли карты заводится определение с пришитым эффортом (и фолбэк «скептический general-purpose» из этапа 4 уходит). До проверки карту не переписывать — вопрос механики, не решения. + +### 2026-07-30: классификатор авторежима блокирует `-s danger-full-access` + +На запуске Codex-исполнителя (прогон тикета #12, кластер ClickHouse) +классификатор авторежима Claude Code заблокировал команду с +`-s danger-full-access`. Рабочая замена — не полный доступ, а песочница +с поштучной эскалацией: + +``` +-s workspace-write \ + -c 'approval_policy="on-request"' \ + -c 'approvals_reviewer="auto_review"' +``` + +Команда, которую песочница не пустила (docker и т.п.), эскалируется, и +авто-ревьюер Codex её одобряет — запуск уходит мимо песочницы штатно. + +Почему это лучше, а не просто обход: привилегия меньше («всё разрешено +заранее» → «поштучно и в логе»), и на приёмке можно посмотреть, какие +именно команды прошли мимо песочницы, — с полным доступом такого списка +не существует. Оговорка: `auto_review` делает песочницу совещательной — +эскалации одобряет автоматика самого Codex, поэтому мандат «исходники +вне ветки не трогать, окружение не ломать» по-прежнему держится на +промпте, не на песочнице (см. правило в SKILL.md). + +Классификатор при этом не враг: по отзывам сообщества, именно он в +авторежиме иногда спасает данные от разрушительных команд. Считать его +подсказкой «сузь привилегию», а не препятствием, которое надо обойти. + +Дополнение по итогам прогона (тот же день): рецепт исполнителя в +`codex-exec.md` штатную связку уже содержал — `danger-full-access` был +отступлением сессии-оркестратора «на всякий случай» под docker. Прогон +подтвердил, что запас не нужен: под штатной связкой у Codex прошли и +сеть (`docker manifest inspect`), и docker-сокет (`make up`, `docker +compose down`); отдельных событий эскалации в `--json`-логе нет — +успешные команды выглядят обычными `completed`. Кавеаты в +`codex-exec.md` обновлены, пометка «боем не обкатано» снята.