# Review Loop

> 当用户要求评审循环、自评审工作流、planner/reviewer/coder/code-reviewer 协作、先方案后编码、多轮 Agent 评审，或要求稳定的子 Agent 工作流依次产出方案、等待用户确认、实现代码、评审差异并保留修订记录时，使用此 Skill。此 Skill 必须使用真实子 Agent，不得退化为单 Agent 角色扮演。

- Skill: `didi/review-loop` (Agent Skill, multi-file: 29 files)
- Install (CLI): `npx skillmds@latest add didi/review-loop`
- Raw SKILL.md: https://api.skillmd.com/api/skills/didi/review-loop/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: didi (https://skillmd.com/u/didi)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/didi/review-loop

---


# 评审循环

使用此 Skill 执行两个阶段的工作流：

1. 方案循环：`planner` 编写或修订 `plan.md`，`plan-reviewer` 对其进行评审。
2. 代码循环：用户确认方案后，`coder` 实施已确认方案，`code-reviewer` 评审产生的差异。

该工作流必须使用真实的 planner、reviewer 和 coder 子 Agent。如果当前环境无法创建新的原生子 Agent，停止并告知用户本次会话无法运行 `review-loop`。Codex 和 Claude Code 的四个角色都使用宿主原生子 Agent。

## 必需准备

开始任务前：

1. 读取 `references/protocol.md`、`references/state-machine.md` 和 `references/role-contracts.md`。
2. 根据当前平台读取 `references/codex.md` 或 `references/claude-code.md`。
3. 创建任务 ID。
4. 运行 `scripts/init-workspace.js`，创建 `.agent-workflows/review-loop/<task-id>/`。
5. 运行 `scripts/prepare-agent-roles.js`，准备当前平台的真实子 Agent 角色。
6. 在推进流程前运行 `scripts/validate-state.js`。

`maxRounds` 默认为 `3`。如果用户指定最大循环轮数，将其传给 `init-workspace.js`。

## 强制规则

- 在方案循环结束且用户明确确认方案前，不得实现代码。
- 所有面向用户或需要用户确认的自然语言中间产物必须使用中文，包括技术方案、评审摘要与结论、问题说明与修改建议、方案修订记录、代码执行记录、角色日志、验证结果说明、剩余风险，以及确认节点的汇总和提问。命令、路径、代码符号、Markdown 固定字段名、协议枚举值和工具原始输出可保留原文。
- 不得让 reviewer 角色修改仓库文件。Reviewer 只返回一份符合固定格式的 Markdown 文档；编排者通过 `scripts/review-manager.js --finalize` 解析、持久化并校验该文档。
- `plan-reviewer` 和 `code-reviewer` 的每一轮评审都必须创建全新、独立的原生子 Agent 实例；即使角色和评审类型相同，也不得恢复或复用任何之前轮次创建的 reviewer，且不得继承父级会话、planner 或 coder 的任何上下文。`review-manager.js --finalize` 会拒绝与历史 reviewer-run 重复的 `--agent-id`。
- `planner` 和 `coder` 可以跨轮复用各自之前创建的子 Agent 实例，以保留方案修订或代码实现上下文；二者不得相互复用实例。
- 在 Codex 或 Claude Code 中，运行 `scripts/review-manager.js --prepare`，将返回的仅含路径的提示词交给新的原生 reviewer 子 Agent，把其唯一纯 Markdown 响应保存到仓库外的临时文件，再运行 `scripts/review-manager.js --finalize --input <file> --agent-id <id>`。Prepare 会绑定全部输入和 Git 树；finalize 会拒绝漂移、直接校验 Markdown、写入不可变的 reviewer-run 并将规范评审持久化为 `reviews/*-review-N.md`。不得直接调用 `scripts/persist-review-markdown.js`。
- 后续只读复验使用 `scripts/validate-review-markdown.js`，该命令直接解析和校验 `.md` 文档。
- 每轮代码实现和验证完成后直接执行 `coder-complete`。该转换只校验初始基线与当前工作树可以安全重建，不生成差异文件或轮次范围文件。
- Prepare 会把初始基线到绑定工作树的完整 diff 写入 `diffs/code-diff-N.patch`，作为代码 reviewer 与人工共同使用的评审交接产物，并将其内容摘要绑定到 reviewer 请求。
- 不得生成、传递或记录相邻代码轮次间的增量 patch；`code-diff-N.patch` 始终表示初始基线到当前评审版本的差异。
- Prepare 会在 reviewer-run 中绑定当前工作树摘要；评审期间代码发生变化时 finalize 会拒绝结果，必须重新开始当前评审轮次。
- 所有状态转换都使用 `scripts/advance-state.js`，不得手动编辑 `state.json`。
- reviewer 返回 `approved` 或循环达到 `state.json.maxRounds` 时停止当前循环。
- 因达到 `maxRounds` 而停止时，用中文汇总剩余问题，并询问用户要继续、接受还是修订。
- 在确认节点等待期间，如果已评审的方案或代码发生变化，优先开启新一轮评审。只有用户当前消息明确接受变化时才可覆盖，并传入 `--accept-changed-inputs true` 和非空的 `--override-reason`。转换会把接受的漂移记录到 `state.json.confirmationOverrides`。
- 只能在 `max_rounds_reached` 确认节点增加 `maxRounds`；在该节点拒绝结果后，必须由用户当前消息明确给出更高上限，才能恢复起草。传入 `--user-confirmed true`；不得复用更早的笼统指令绕过已配置上限。
- 在 `plan.md` 中保留每轮修订记录，并以中文书写记录内容。

## 工作流角色

四个必需角色是：

- `planner`
- `plan-reviewer`
- `coder`
- `code-reviewer`

使用 `templates/roles/` 下的模板作为角色定义。在 Codex 和 Claude Code 中，四个角色都必须是原生子 Agent。Planner/coder 后续轮次可以继续使用各自已有实例；plan-reviewer/code-reviewer 每一轮必须新建实例，并禁用父级会话上下文继承。

## 用户确认节点

方案循环结束后，用中文向用户展示：

- `plan.md` 路径
- 方案循环终止原因
- 按轮次整理的评审摘要
- 未接受的问题及理由

用中文询问是否进入代码循环。只有用户明确确认后，才运行 `advance-state.js --event confirm-plan`。

代码循环结束后，用中文向用户展示：

- `plan.md` 路径
- 差异摘要
- 代码循环终止原因
- 验证命令及结果
- 剩余风险

用中文询问是否接受最终结果。只有用户明确确认后，才运行 `advance-state.js --event confirm-final`。

