From 6190fbaf08ffd463f4bff5f382ae1b70eaf53711 Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Tue, 31 Mar 2026 10:38:07 +0300 Subject: [PATCH] =?UTF-8?q?fix(skills):=20=D1=83=D0=BB=D1=83=D1=87=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=D0=B4=D1=91=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=B8=20UX=20=D1=81=D0=BA=D0=B8=D0=BB?= =?UTF-8?q?=D0=BB=D0=B0=20codex-review?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - скилл генерировал множество промежуточных bash-команд, каждая из которых требовала ручного подтверждения пользователя. - poll-loop (while/sleep) мог зависнуть навсегда при сбое Codex. - Что: - добавлены permissions для типовых команд скилла (timeout, rm/Write для /tmp). - uuidgen заменён на date +%s (меньше промптов). - codex exec обёрнут в timeout 600 (10 мин) вместо poll-loop. - resume оставлен как primary, свежий exec — fallback. - добавлен захват session ID в Шаг 4. - Проверка: - /codex-review при следующем использовании. Co-Authored-By: Claude Opus 4.6 (1M context) --- agents/.agents/skills/codex-review/SKILL.md | 41 +++++++++------------ claude/.claude/settings.local.json | 7 +++- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/agents/.agents/skills/codex-review/SKILL.md b/agents/.agents/skills/codex-review/SKILL.md index 4d6e2c6..31103e8 100644 --- a/agents/.agents/skills/codex-review/SKILL.md +++ b/agents/.agents/skills/codex-review/SKILL.md @@ -42,7 +42,7 @@ user_invocable: true ### Шаг 2: Сгенерировать Session ID ```bash -REVIEW_ID=$(uuidgen | tr '[:upper:]' '[:lower:]' | head -c 8) +REVIEW_ID=$(date +%s | tail -c 9) ``` ### Шаг 3: Подготовить материал для ревью @@ -129,7 +129,7 @@ If changes are needed, end with exactly: VERDICT: REVISE - `-o /tmp/codex-review-${REVIEW_ID}.md` — файл для записи ответа ```bash -codex exec \ +timeout 600 codex exec \ -m gpt-5.4 \ -c model_reasoning_effort=high \ -s read-only \ @@ -137,24 +137,16 @@ codex exec \ "ПРОМПТ" ``` -**Пример для режима plan** (план в файле `project/TODO.md`): - -```bash -codex exec \ - -m gpt-5.4 \ - -c model_reasoning_effort=high \ - -s read-only \ - -o /tmp/codex-review-${REVIEW_ID}.md \ - "Review the implementation plan in project/TODO.md. Focus on: -1. Correctness — will this plan achieve the stated goals? -... -If changes are needed, end with exactly: VERDICT: REVISE" -``` +**Важно:** +- Всегда оборачивай `codex exec` в `timeout 600` (10 минут). Если Codex зависнет — команда завершится с кодом 124. +- Используй параметр `timeout: 620000` в Bash tool для запаса. +- Команда **синхронная**: когда она вернулась, файл `-o` уже готов. **НЕ** используй poll-loop (`while/sleep`). +- Если exit code = 124 (таймаут) — сообщи пользователю и предложи повторить. **Пример для режима code** (diff в temp-файле): ```bash -codex exec \ +timeout 600 codex exec \ -m gpt-5.4 \ -c model_reasoning_effort=high \ -s read-only \ @@ -165,12 +157,12 @@ codex exec \ If changes are needed, end with exactly: VERDICT: REVISE" ``` -**После запуска:** сохрани Codex session ID из строки вывода `session id: ` → переменная `CODEX_SESSION_ID`. +**После запуска:** найди в выводе строку `session id: ` и сохрани значение как `CODEX_SESSION_ID` — оно нужно для `resume` в последующих раундах. **Примечания:** - Модель по умолчанию: `gpt-5.4` с `model_reasoning_effort=high`. Пользователь может переопределить через аргументы. - Всегда `-s read-only` — Codex не должен писать файлы. -- `-o` для захвата вывода в файл. +- `-o` для захвата вывода в файл. **НЕ** запускай в background — команда сама вернёт управление. ### Шаг 5: Прочитать ревью и проверить вердикт @@ -211,21 +203,24 @@ If changes are needed, end with exactly: VERDICT: REVISE" ### Шаг 7: Переотправить в Codex (Раунды 2-5) -Продолжить существующую сессию Codex: +**Предпочтительно: `resume`** — экономит токены, сохраняет контекст сессии: ```bash -codex exec resume ${CODEX_SESSION_ID} \ +timeout 600 codex exec resume ${CODEX_SESSION_ID} \ "I've revised based on your feedback. Here's what I changed: -[List the specific changes] +[Список правок] Please re-review. End with VERDICT: APPROVED or VERDICT: REVISE" 2>&1 | tail -200 ``` -**Примечание:** `codex exec resume` НЕ поддерживает `-o`. Вывод читается из stdout. `tail -200` отсекает служебные строки запуска, но сохраняет длинные ответы. +**Примечание:** `resume` не поддерживает `-o`. Вывод читается из stdout через `tail -200`. -Если resume не сработал (сессия истекла) — сделать свежий `codex exec` с контекстом предыдущих раундов в промпте. +**Fallback** — если `resume` не сработал (сессия истекла, session ID не захвачен): + +1. Пересобрать diff (аналогично Шагу 3). +2. Запустить свежий `codex exec -o` с описанием предыдущих раундов в промпте. Вернуться к **Шагу 5**. diff --git a/claude/.claude/settings.local.json b/claude/.claude/settings.local.json index 3cbf0a7..601e87d 100644 --- a/claude/.claude/settings.local.json +++ b/claude/.claude/settings.local.json @@ -104,9 +104,14 @@ "Bash(gh issue:*)", "Bash(gh repo:*)", "Bash(codex *)", + "Bash(timeout *)", + "Bash(rm -f /tmp/claude-*)", + "Bash(rm -f /tmp/codex-*)", "WebSearch", "mcp__claude_ai_Context7__resolve-library-id", - "Write(/tmp/claude-plan-*)" + "Write(/tmp/claude-plan-*)", + "Write(/tmp/claude-diff-*)", + "Write(/tmp/codex-review-*)" ] }, "statusLine": {