| name | codex-plan-review |
| description | Независимое cross-model ревью планов реализации. Отправляет план на проверку через codex в headless-режиме, получает структурированные замечания, верифицирует их по кодовой базе и итеративно правит план до одобрения. |
| disable-model-invocation | true |
Codex Plan Review
Независимое ревью планов реализации через Codex: план отправляется на проверку, Codex исследует кодовую базу и возвращает структурированные замечания, ты исправляешь план, и цикл повторяется до одобрения или лимита итераций.
Формат вызова
/codex-plan-review путь/к/плану.md [максимум N итераций]
Если путь не указан — спроси у пользователя.
Если максимум итераций не указан — по умолчанию 5.
Алгоритм
1. Подготовка
- Прочитай файл плана через Read
- Создай папку
.codex-plan-review/ в корне проекта — в неё будут писаться промпты, лог запусков и лог ревью
- Инициализируй лог ревью: файл
.codex-plan-review/<имя-плана>-codex-review-log.md
- Собери контекст правил проекта (подробности в разделе «Сборка контекста правил»)
2. Сборка контекста правил
Codex не читает .claude/rules/ и CLAUDE.md автоматически — контекст нужно передать явно в промпте.
- Прочитай все файлы из
~/.claude/rules/*.md (глобальные правила пользователя)
- Прочитай
~/.claude/CLAUDE.md (глобальный CLAUDE.md пользователя, если существует)
- Найди и прочитай все файлы из
.claude/rules/*.md в корне текущего проекта (проектные правила, если каталог существует)
- Найди и прочитай
CLAUDE.md в корне текущего проекта (если существует). Также проверь наличие CLAUDE.md в текущем рабочем каталоге, если он отличается от корня проекта
- Прочитай файл
references/review-system-prompt.md относительно этого скилла — используй абсолютный путь
- Объедини правила (без system prompt) в переменную
RULES_CONTEXT в формате:
--- Файл: имя_файла_правил.md ---
содержимое файла
--- Файл: ~/.claude/CLAUDE.md ---
содержимое глобального CLAUDE.md
--- Файл: CLAUDE.md ---
содержимое проектного CLAUDE.md
Если какие-то файлы не найдены — просто пропусти их, это не ошибка.
3. Цикл ревью
Повторяй до тех пор, пока Codex не вернёт "status": "approved" или не исчерпан лимит итераций:
a) Собери промпт для Codex:
Промпт строится из трёх блоков — system instructions, rules, задание:
<system_instructions>
СОДЕРЖИМОЕ_REVIEW_SYSTEM_PROMPT_MD
</system_instructions>
<project_rules>
RULES_CONTEXT
</project_rules>
ПРОМПТ_ИТЕРАЦИИ
Промпт первой итерации:
Проведи ревью плана реализации. Файл: АБСОЛЮТНЫЙ_ПУТЬ_К_ПЛАНУ
Промпт последующих итераций:
Проведи ревью плана реализации. Файл: АБСОЛЮТНЫЙ_ПУТЬ_К_ПЛАНУ
Следующие замечания приняты и исправлены — не повторяй их:
<accepted_issues>
НАКОПЛЕННЫЙ_СПИСОК_ПРИНЯТЫХ_ЗАМЕЧАНИЙ
</accepted_issues>
<rejected_issues>
Следующие замечания были отклонены. Прочитай аргументы — если они убедительны, не повторяй замечание. Если аргументы ошибочны, объясни почему проблема всё ещё существует.
НАКОПЛЕННЫЙ_СПИСОК_ОТКЛОНЁННЫХ_ЗАМЕЧАНИЙ_С_АРГУМЕНТАМИ
</rejected_issues>
Сосредоточься на новых проблемах. Если считаешь что отклонённое замечание всё же валидно — аргументируй, почему приведённые аргументы ошибочны.
НАКОПЛЕННЫЙ_СПИСОК_ПРИНЯТЫХ_ЗАМЕЧАНИЙ — компактный список всех CONFIRMED замечаний за все итерации, по одной строке: [Секция]: суть в 5-7 словах. Например:
[Шаг 2]: РежимЗавершения в структуре результата
[Шаг 3]: ЭтоОбработкаPostMessage в сигнатуре функции
[Шаг 4]: убран ДокументЭДО, заменён НетДокументаЭДО+Данные1С
НАКОПЛЕННЫЙ_СПИСОК_ОТКЛОНЁННЫХ_ЗАМЕЧАНИЙ_С_АРГУМЕНТАМИ — для каждого FALSE POSITIVE замечания: суть + развёрнутый аргумент Claude (2-3 предложения с указанием конкретных мест в коде). Формат:
[Секция]: суть замечания
Аргумент: Полное объяснение почему отклонено. Ссылки на конкретный код, логическое обоснование.
[Секция]: суть замечания
Аргумент: Полное объяснение почему отклонено.
Если отклонённых замечаний нет — блок <rejected_issues> можно опустить.
b) Запусти codex:
Запиши полный промпт в файл .codex-plan-review/prompt-iter<N>.txt через Write, затем передай через stdin:
RESULT=$(codex exec \
-s read-only \
-c model_reasoning_effort=xhigh \
-c stream_idle_timeout_ms=1800000 \
- < ".codex-plan-review/prompt-iter<N>.txt" \
2>".codex-plan-review/run.log") \
|| (echo "codex failed:"; cat ".codex-plan-review/run.log")
echo "$RESULT"
- Передача через файл+stdin надёжнее прямого аргумента: промпт содержит теги, кавычки и другие спецсимволы
- stderr (лог сессии) идёт в
.codex-plan-review/run.log — не засоряет контекст
- Финальный ответ агента codex пишет в stdout — читай из
$RESULT
- Установи таймаут Bash-вызова в 1800000 мс (30 минут)
c) Распарси ответ:
JSON читай из переменной $RESULT (stdout bash). Если обёрнут в markdown-блок (```json ... ```), извлеки содержимое между маркерами.
Структура ответа Codex:
{
"status": "approved" | "has_issues",
"issues": [
{
"severity": "critical" | "important",
"confidence": 75,
"section": "Секция плана",
"problem": "Описание проблемы",
"impact": "Как это повлияет: runtime failures, потеря данных, некорректное поведение и т.п.",
"suggestion": "Предложение по исправлению",
"evidence": "Подтверждение из кода или логическое обоснование"
}
],
"summary": "Общая оценка"
}
d) Если status == "approved" или issues пуст — выйди из цикла.
e) Stalemate detection: если замечания текущей итерации по сути повторяют предыдущие (те же секции, те же проблемы) — прерви цикл и сообщи пользователю о расхождении мнений. Без этой проверки цикл будет тратить итерации впустую, когда Codex и Claude не сходятся во мнении.
f) Если есть новые замечания:
- Верифицируй каждое замечание — прочитай упомянутый код, проверь факты. Используй свои знания и контекст проекта, не копируй слепо предложения Codex. Классифицируй: CONFIRMED / FALSE POSITIVE
- Исправь план по подтверждённым замечаниям (используй Edit для файла плана)
- Добавь CONFIRMED замечания в накопленный список
accepted_issues ([Секция]: суть)
- Добавь FALSE POSITIVE замечания в накопленный список
rejected_issues с развёрнутым аргументом:
[Секция]: суть замечания
Аргумент: Почему отклонено — 2-3 предложения со ссылками на конкретный код.
Аргумент должен быть убедительным для Codex — это не формальность, а диалог между моделями. Codex прочитает аргумент и решит: принять отклонение или настоять на своём с новыми доказательствами.
- Допиши итерацию в лог-файл
- Перейди к следующей итерации
Между итерациями не показывай пользователю промежуточные результаты — работай молча до завершения. Промежуточные замечания без контекста итогового результата только засоряют диалог; пользователь увидит полную картину в итоговом отчёте и лог-файле.
4. Итоговый отчёт
После завершения цикла выведи пользователю:
## Результат ревью (Codex)
- Итераций: N из M (максимум)
- Найдено проблем: X (критических: Y, важных: Z)
- Статус: план одобрен / лимит итераций достигнут / stalemate
- Лог ревью: путь/к/лог-файлу.md
Если лимит итераций достигнут:
- Все замечания последней итерации были CONFIRMED и исправлены → завершить, написать "лимит достигнут, все найденные проблемы исправлены"
- Есть неисправленные замечания (FALSE POSITIVE или stalemate) → показать что осталось и спросить пользователя что делать дальше
Формат лога
Файл .codex-plan-review/<имя-плана>-codex-review-log.md:
# Лог ревью (Codex): <имя файла плана>
Дата: <дата>
Максимум итераций: N
## Итерация 1
### Замечания Codex
- [critical, 95] Секция: ... — Проблема → Предложение
- [important, 80] Секция: ... — Проблема → Предложение
### Верификация
- CONFIRMED: описание → исправлено
- FALSE POSITIVE: описание → причина отклонения
### Принято / Отклонено
- ПРИНЯТО: [Секция]: суть
- ОТКЛОНЕНО: [Секция]: суть — причина
## Итерация 2
...
## Итог
- Всего итераций: N
- Всего найдено проблем: M (подтверждено: K, отклонено: L)
- Статус: одобрен / лимит достигнут / stalemate
Обработка ошибок
$RESULT пустой или не валидный JSON: повтори вызов один раз. Если снова ошибка — покажи содержимое .codex-plan-review/run.log пользователю
- Файл плана не найден: сообщи пользователю, предложи указать путь
- codex не найден в PATH: сообщи пользователю, что команда
codex не найдена