From pr-review-fix-loop
Runs iterative PR review and autofix loop: reviews code, fixes issues above criticality threshold with auto-detected test/lint commands, repeats until clean. Supports Ruby, Node, Python, Go, Rust.
npx claudepluginhub dapi/claude-code-marketplace --plugin pr-review-fix-loop[--max-iterations N] [--aspects ASPECTS] [--min-criticality N] [--lint] [--codex] [--base BRANCH]# PR Review Fix Loop Итеративный цикл: запустить PR review, исправить критические и важные замечания, повторить до чистого отчёта. ## Парсинг аргументов Разобрать `$ARGUMENTS`: - `--max-iterations N` — максимум итераций (по умолчанию 20) - `--aspects ASPECTS` — аспекты ревью (по умолчанию `code errors tests`) - `--min-criticality N` — минимальный уровень criticality для исправления, 1-10 (по умолчанию 5) - `--lint` — запускать линтер с автофиксом после исправлений (по умолчанию выключен). Линтер определяется автоматически по типу проекта - `--codex` — параллельно запускать ревью через Co...
/review-loopRuns iterative LLM code review loop: reviews issues with codex/gemini/ollama, fixes them, verifies via build/test/lint, repeats until clean or max passes.
/fix-prApplies fixes to a PR based on /review-program findings or GitHub review comments. Specify PR number or title; supports --local mode.
/review-prReviews GitHub PR by number or URL using multi-agent verification across changes, posting structured feedback. Supports --no-interactive mode.
/fixprcAutonomously fixes PR comments, review feedback, merge-blocking issues, and CI problems using iterative genesis and copilot until PR is mergeable (max 7 iterations).
/review-prOrchestrates multi-agent GitHub PR reviews in modes like review, re-review, self-review, address-feedback. Gathers metadata, diff, prior feedback for subagent analysis.
/pr-feedbackClassifies PR review comments by priority (must/imo/nits/q), analyzes CI errors with 3-step root cause method, generates ordered response plans, and verifies fix quality.
Share bugs, ideas, or general feedback.
Итеративный цикл: запустить PR review, исправить критические и важные замечания, повторить до чистого отчёта.
Разобрать $ARGUMENTS:
--max-iterations N — максимум итераций (по умолчанию 20)--aspects ASPECTS — аспекты ревью (по умолчанию code errors tests)--min-criticality N — минимальный уровень criticality для исправления, 1-10 (по умолчанию 5)--lint — запускать линтер с автофиксом после исправлений (по умолчанию выключен). Линтер определяется автоматически по типу проекта--codex — параллельно запускать ревью через Codex CLI (по умолчанию выключен)--base BRANCH — base branch для Codex diff (по умолчанию: автодетект из PR или main branch из CLAUDE.md)Доступные аспекты: code, errors, tests, comments, types, simplify, all
--max-iterations должен быть целым числом >= 1. Если значение невалидно — сообщить пользователю ошибку и прекратить.--min-criticality должен быть целым числом от 1 до 10 включительно. Если меньше 1 — установить 1, если больше 10 — установить 10, сообщить пользователю об автокоррекции.--aspects — каждый указанный аспект должен входить в список доступных. Если найден неизвестный аспект — сообщить пользователю ошибку со списком доступных аспектов и прекратить. При парсинге убрать обрамляющие кавычки, если они есть.--base указан без --codex — предупредить пользователю что --base используется только вместе с --codex и будет проигнорирован.Перед всеми остальными проверками запустить "${CLAUDE_PLUGIN_ROOT}/scripts/check-gitignore.sh". Если action_needed равно true, добавить отсутствующие файлы в .gitignore немедленно. Продолжить с остальными проверками.
Получить версию и параметры проекта одним вызовом:
VERSION=$(jq -r '.version' "${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json") && PROJECT_JSON=$("${CLAUDE_PLUGIN_ROOT}/scripts/detect-project.sh") && echo "pr-review-fix-loop v${VERSION}" && echo "$PROJECT_JSON"
Из вывода извлечь:
pr-review-fix-loop v{version})STACK, ENV_EXEC, TEST_CMD, LINT_CMD (через jq -r)Если PROJECT_JSON пуст или скрипт вернул ненулевой exit code — вывести ошибку и прекратить выполнение.
Если STACK пустой — записать предупреждение "Тип проекта не определён, TDD и тесты будут в generic-режиме" в отчёт и продолжить.
Если --lint указан но LINT_CMD пустой — записать предупреждение "Линтер не найден для стека $STACK" и продолжить без линтера.
Если --codex указан:
BASE=$("${CLAUDE_PLUGIN_ROOT}/scripts/detect-base-branch.sh" --base "${user_base:-}" --env-exec "$ENV_EXEC")
Если скрипт вернул ошибку — сообщить пользователю и прекратить выполнение.
Также проверить что codex CLI установлен:
${ENV_EXEC:+$ENV_EXEC }which codex
Если не установлен — сообщить пользователю и прекратить выполнение.
Файл .claude/pr-review-loop-report.local.md создаётся автоматически скриптом setup-loop.sh (через --report-params). НЕ создавать его вручную.
Ожидаемая структура секций для каждой итерации:
Запустить assemble-prompt.sh с параметрами:
PROMPT=$("${CLAUDE_PLUGIN_ROOT}/scripts/assemble-prompt.sh" \
--aspects "$ASPECTS" \
--min-criticality "$MIN_CRITICALITY" \
${CODEX:+--codex} \
${LINT:+--lint} \
${BASE:+--base "$BASE"} \
${TEST_CMD:+--test-cmd "$TEST_CMD"} \
${LINT_CMD:+--lint-cmd "$LINT_CMD"} \
${ENV_EXEC:+--env-exec "$ENV_EXEC"})
Передать собранный промпт в setup-loop.sh через heredoc:
"${CLAUDE_PLUGIN_ROOT}/scripts/setup-loop.sh" --max-iterations $MAX_ITERATIONS --completion-promise "REVIEW CLEAN" --completion-promise "REVIEW STAGNANT" --report-params "aspects=$ASPECTS, min-criticality=$MIN_CRITICALITY, lint=${LINT:-no}, codex=${CODEX:-no}" <<'LOOP_PROMPT'
$PROMPT
LOOP_PROMPT
После запуска setup-loop.sh выполнить шаги из промпта. Stop hook автоматически подаст тот же промпт при завершении каждой итерации.
NOTE: Post-loop шаги (сводка, анализ, коммит/push) теперь выполняются автоматически через block response из stop-hook (
scripts/post-loop-prompt.sh). Инструкции ниже служат справочником для промптов, генерируемых этим скриптом.
Когда loop завершился:
Прочитать .claude/pr-review-loop-report.local.md и определить причину завершения по маркерам:
| Маркеры в отчёте | Причина | Действие |
|---|---|---|
[OK] [EXIT:SUCCESS] | REVIEW CLEAN | Продолжить с шагом 1 |
[!!] [EXIT:STAGNANT] | Issues не уменьшаются 5+ итераций | Перейти к шагу 4a |
[!!] [EXIT:LIMIT] | Лимит итераций исчерпан | Перейти к шагу 4 |
[XX] [EXIT:ERROR] с описанием | Ошибка iteration engine | Сообщить ошибку из маркера |
Последняя итерация имеет START но нет COMPLETED и нет [EXIT:*] | ПРЕРВАНО на итерации N | Сообщить: loop прерван, вероятная причина - переполнение контекста |
| Нет маркеров | ОШИБКА СТАРТА | Сообщить: loop не запустился |
Вывести пользователю строку диагноза: причина завершения, номер последней итерации, количество завершённых итераций.
НЕ выводить полный файл отчёта. Вместо этого извлечь из .claude/pr-review-loop-report.local.md данные и вывести пользователю компактную сводку.
Версию получить: jq -r '.version' "${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json"
Время — разница между started_at из .claude/pr-review-fix-loop.local.md (или Дата: из report) и текущим временем, в целых минутах.
Формат сводки по статусам:
REVIEW CLEAN:
---
## PR Review Fix Loop v{VERSION} — **REVIEW CLEAN** ✅
Итераций: **{N}**
Время: **{M} мин**
Найдено issues: **{total}** (выше порога: **{above_threshold}**)
Исправлено: **{fixed}**
REVIEW STAGNANT:
---
## PR Review Fix Loop v{VERSION} — **REVIEW STAGNANT** ⚠️
Итераций: **{N}**
Время: **{M} мин**
Найдено issues: **{total}** (выше порога: **{above_threshold}**)
Исправлено: **{fixed}**
Тренд issues: {последние 5 значений через →}
LIMIT REACHED:
---
## PR Review Fix Loop v{VERSION} — **LIMIT REACHED** ❌
Итераций: **{N}**
Время: **{M} мин**
Найдено issues: **{total}** (выше порога: **{above_threshold}**)
Исправлено: **{fixed}**
Оставшиеся issues:
- {criticality} {source}: {описание} ({файл})
- ...
INTERRUPTED:
---
## PR Review Fix Loop v{VERSION} — **INTERRUPTED** ⚠️
Итераций: **{N}** (последняя не завершена)
Время: **{M} мин**
Найдено issues: **{total}** (выше порога: **{above_threshold}**)
Исправлено: **{fixed}**
При LIMIT REACHED список оставшихся issues извлечь из последней итерации отчёта — каждый issue с его criticality, источником (review-pr/codex), описанием и файлом.
После завершения loop (независимо от результата) запустить агент feature-dev:code-reviewer через Task tool (subagent_type: "feature-dev:code-reviewer") для финальной валидации всех сделанных исправлений против CLAUDE.md и coding standards проекта. Этот reviewer использует confidence scoring и сообщает только issues с confidence >= 80, что снижает ложные срабатывания. Это одноразовая проверка, не итеративная. Результат вывести пользователю и дописать в .claude/pr-review-loop-report.local.md секцию "Финальная проверка (code-reviewer)".
Если feature-dev:code-reviewer недоступен (subagent_type не найден) — записать в отчёт "Финальная проверка: пропущена (code-reviewer недоступен)" и продолжить с шагом 3. Если code-reviewer запустился, но завершился с ошибкой — записать в отчёт "Финальная проверка: code-reviewer завершился с ошибкой" с текстом ошибки и продолжить с шагом 3.
Коммиты создаются внутри каждой итерации (шаг 4.5 в промпте). После завершения loop:
${ENV_EXEC:+$ENV_EXEC }git diff --name-only и ${ENV_EXEC:+$ENV_EXEC }git diff --cached --name-only*.local.md) — создать финальный коммит с сообщением fix: address PR review issues (final) и Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>Запустить тесты для файлов, изменённых в ходе loop:
${ENV_EXEC:+$ENV_EXEC }git diff --name-only $(${ENV_EXEC:+$ENV_EXEC }git merge-base HEAD origin/$(${ENV_EXEC:+$ENV_EXEC }git rev-parse --abbrev-ref HEAD@{upstream} 2>/dev/null | sed 's|origin/||' || echo master))..HEADTEST_CMD определён — запустить его для затронутых файлов (или полный suite если тест-раннер не поддерживает фильтр по файлам)${ENV_EXEC:+$ENV_EXEC }git stash && ${ENV_EXEC:+$ENV_EXEC }git stash pop не поможет — вместо этого посмотреть какие тест-файлы упали и связаны ли они с нашими изменёнными файлами${ENV_EXEC:+$ENV_EXEC }git push--set-upstream или есть конфликт с remote)После push дождаться результатов CI:
${ENV_EXEC:+$ENV_EXEC }gh pr view --json url -q .url${ENV_EXEC:+$ENV_EXEC }gh pr checks --watch --fail-fast${ENV_EXEC:+$ENV_EXEC }gh pr merge --squash --delete-branch${ENV_EXEC:+$ENV_EXEC }gh pr checksgh недоступен или нет PR — пропустить CI ожидание, сообщить пользователю что push выполнен, CI проверить вручнуюПри STAGNANT или LIMIT — НЕ пушить (не все issues решены).
Временные файлы (.codex-review.md, .codex-review.stderr, старый отчёт) удаляются автоматически при старте loop в setup-loop.sh.
Файл .claude/pr-review-loop-report.local.md НЕ удалять после завершения — это артефакт для пользователя.
| Параметр | По умолчанию |
|---|---|
| max-iterations | 20 |
| aspects | code errors tests |
| min-criticality | 5 |
| lint | выключен |
| codex | выключен |
| base | автодетект / main branch из CLAUDE.md |
/pr-review-fix-loop
/pr-review-fix-loop --max-iterations 5
/pr-review-fix-loop --aspects "code errors"
/pr-review-fix-loop --min-criticality 7
/pr-review-fix-loop --lint
/pr-review-fix-loop --codex
/pr-review-fix-loop --codex --base develop
/pr-review-fix-loop --codex --lint --aspects all
/pr-review-fix-loop --max-iterations 15 --aspects "code errors" --min-criticality 3 --codex --lint