From ef09a7832b7270cbe68bd23fb6a40e32a5a25b21 Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Thu, 30 Jul 2026 20:54:36 +0300 Subject: [PATCH] =?UTF-8?q?docs(skills):=20=D0=BF=D0=BB=D0=B5=D0=B9=D0=B1?= =?UTF-8?q?=D1=83=D0=BA=20=E2=80=94=20=D1=83=D1=80=D0=BE=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B1=D0=BE=D0=B5=D0=B2=D0=BE=D0=B3=D0=BE=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=D0=BD=D0=B0=20=D1=82=D0=B8=D0=BA=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=20#12=20=D0=BF=D0=BE=20=D0=BF=D0=B5=D1=81=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D0=B8=D1=86=D0=B5=20Codex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - боевой прогон 2026-07-30 (тикет #12 v2) закрыл открытый вопрос: расширенный доступ Codex не нужен, штатной связки достаточно. - Что: - codex-exec.md: пункт про блок классификатора начинается с проверки песочницы; в рецепт исполнителя добавлено «шире не бери»; снят кавеат «боем не обкатано» — сеть и docker-сокет работают при штатной связке on-request + auto_review. - lessons.md: датированный урок 2026-07-30 с дополнением по итогам прогона. - Проверка: - чтение обновлённых разделов; факты — из JSONL-логов прогона тикета #12 (docker manifest inspect и make up завершились completed под workspace-write). Co-Authored-By: Claude Fable 5 --- .../references/codex-exec.md | 24 ++++++++---- .../references/lessons.md | 37 +++++++++++++++++++ 2 files changed, 54 insertions(+), 7 deletions(-) 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` обновлены, пометка «боем не обкатано» снята.