with one click
vibe-review-pr
// Use only in Claude Code environments with Agent Teams enabled when the user wants a comprehensive PR review using the multi-agent team workflow.
// Use only in Claude Code environments with Agent Teams enabled when the user wants a comprehensive PR review using the multi-agent team workflow.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | vibe-review-pr |
| description | Use only in Claude Code environments with Agent Teams enabled when the user wants a comprehensive PR review using the multi-agent team workflow. |
vibe-review-pr 是 Claude Code Agent Teams 专用入口。本文件定义生命周期、执行步骤、phase 契约、审查质量标准与硬边界。消息样例与恢复细节在 references/。
非 Claude team 环境(含 Codex)一律分流:docs-only PR → vibe-review-docs;其他 → vibe-review-code。
仅在以下条件全部满足时使用:
TMUX 已设置CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1任一缺失 → 立即停止,按文件范围回退到单 agent 审查。
tmux 机制说明:
TMUX已设置是前置条件,因为Agent(team_name=...)会由 Claude Code 运行时自动在当前 tmux session 中创建新 pane 来运行 teammate。team-lead 不需要手动执行 tmux 命令管理 pane——pane 的创建、复用、销毁全部由运行时处理。team-lead 只通过SendMessage和接收 teammate-message 与 teammates 通信。
启动前读取:
.claude/team-templates/pr-review-team.yaml.claude/agents/pr-*.mddocs/references/team-guide.md需要消息样例或恢复路径时再读 references/execution-reference.md / references/recovery-playbook.md。
问题:SendMessage 是 deferred tool,调用前必须先加载 schema,否则报 InputValidationError。
解决方案:所有 teammate agent 定义已配置自动加载:
ToolSearch(query="select:SendMessage")诊断(如 agent 未发送报告):
tmux capture-pane -t <pane-id> -p -S -1000 | grep -E "ToolSearch|SendMessage|InputValidationError"
详见:.claude/agents/pr-*.md 的 "Deferred Tools 初始化" 章节。
详见 references/debug-guide.md:
核心误解:把 Team 当成"PR-级"对象。事实上 Team 是"会话级"对象。
环境检查 → TeamCreate(一次) → PR #A → continue → PR #B → ... → end → TeamDelete(一次)
要点:
code-analyst。Team 名称固定为 pr-review-team(不要用 pr-review-713 这种 PR-编号命名,会强化错误心智模型)。
执行顺序:
auto-fix / comment-only / auto-decide / ask-each。state/merge-ready、改动小、base==main。.claude/team-templates/pr-review-team.yaml。shutdown_request,再 TeamDelete;恢复流程可例外。踩坑记录:TeamCreate 之前创建的 TaskCreate 不会关联到 team 的 task list,
TaskList返回空。必须先 TeamCreate 再 TaskCreate。
强制顺序:
TeamCreate → TaskCreate(Phase 1) → TaskUpdate(owner="team-lead") → Step 7
先为 Phase 1 创建 task,并用 TaskUpdate(owner="team-lead") 设置归属;Step 7 判定为 standard / refactor / security 后,再补建 Phase 2 / 2.5 / 3 / 4 的 task:
- tool: TaskCreate
params:
subject: "Phase 1: Context research"
description: "spawn context-researcher, collect PR background and save to metadata"
- tool: TaskUpdate
params:
taskId: "<phase-1-task-id>"
status: "in_progress"
owner: "team-lead"
# Phase 2 必须等待 Phase 1 完成并通过 task dependency 强制传递背景
- tool: TaskCreate
params:
subject: "Phase 2: Parallel review"
description: "spawn code-analyst + architect-reviewer + security-reviewer with Phase 1 background"
- tool: TaskUpdate
params:
taskId: "<phase-2-task-id>"
addBlockedBy: ["<phase-1-task-id>"] # 强制依赖 Phase 1
metadata:
requires_phase_1_output: true # 标记需要背景信息
- tool: TaskCreate
params:
subject: "Phase 2.5: Codex verification"
description: "(optional) bundle Phase 2 reports, call codex:rescue"
- tool: TaskCreate
params:
subject: "Phase 3: Synthesis"
description: "verify all reports, arbitrate conflicts, final decision"
- tool: TaskCreate
params:
subject: "Phase 4: Write back"
description: "ask-each mode; post PR comment; create follow-up issues"
关键步骤(Phase 1 完成后必须执行):
# Phase 1 完成时,必须将背景报告保存到 task metadata
- tool: TaskUpdate
params:
taskId: "<phase-1-task-id>"
status: "completed"
metadata:
phase_1_output: |
## PR #<number> 背景报告
[完整的 context-researcher 报告内容,包括所有章节]
Phase 2 启动前检查:
# Phase 2 开始前,必须从 Phase 1 task 获取背景信息
- tool: TaskGet
params:
taskId: "<phase-1-task-id>"
# 从 metadata.phase_1_output 提取完整背景报告
# 然后嵌入 Phase 2 agents 的 prompt 中
TaskList 可随时用于确认进度,避免重复创建。
踩坑记录:跨 PR 审查时,旧 PR 的 task 会累积在 task list 中,造成视觉混乱和状态不一致。
每个 PR 开始审查前:
TaskList,如有上一轮 PR 的未完成 task,标记为 completed(附带说明:上一 PR 遗留)completed每个 Phase 执行时:
TaskUpdate(status="in_progress")TaskUpdate(status="completed")会话结束时(Step 10):
常见错误:看到"文档改动"就归类
simple。这是错的。
simple 必须同时满足全部 4 项:
security/* 标签任一不满足 → 不是 simple。
分类规则:
simple:上述 4 项全满足。处理方式是仅 Phase 1,由 team-lead 调用 vibe-review-docs 或 vibe-review-code。security:涉及认证 / 授权 / 数据 / 凭据 / 输入验证。处理方式是 Phase 1+2,且必须含 security-reviewer。refactor:≥ 5 文件或大规模重构。处理方式是 Phase 1+2。standard:不属于上述。处理方式是 Phase 1+2。反例(issue #742 真实踩坑):PR #713 改 6 文件、+11/-10、含 manager.py 代码改动 + 文档 → 错误归类 simple → 实际应按 standard 处理。只要包含代码改动或多文件,就不是 simple。
| Phase | 强制要求 | 易错点 |
|---|---|---|
| 1 背景调研 | 必须先于 Phase 2 完成;产出 phase_1_output 并回传 team-lead | 只打印到终端、未保存为变量、未通过 SendMessage 回传 |
| 2 专项审查 | 多 agent 同一响应内并行 spawn;fresh spawn 时在 prompt 中直接内嵌 phase_1_output;复用 teammate 或补发上下文时才用 SendMessage | 与 Phase 1 并行启动(issue #742 真实踩坑);fresh spawn 仍要求额外 SendMessage 才开始,或让复用语义和首轮语义混在一起 |
| 2.5 Codex验证(可选) | 触发条件:安全PR、大型PR(>500行)、冲突仲裁;执行时机:Phase 2完成后收集所有报告;通过 codex:rescue skill 调用;第一阶段满足且 Phase 2 完整 → Phase 2.5 保持可选;第一阶段满足且 Phase 2 不完整 → Phase 2.5 升级为强制 | 与 Phase 2 并行执行;未收集完整 Phase 2 报告就调用;把”可选触发”误写成”只有不完整才触发” |
| 3 综合判断 | 检查 required - received 缺失;冲突必须仲裁;缺失只能标”审查不完整”;如有 Phase 2.5 报告作为补充材料 | 替缺失 agent 脑补 / 用错误 teammate-message 内容继续 |
| 4 写回 | 模式决定路径;仅 auto-fix 可 spawn pr-fix-executor;范围外问题转 follow-up issue | 把范围外技术债塞进当前 PR comment |
没有 Phase 5。完成 Phase 4 直接回 Step 9。teammates 的 idle / pane / inbox 由运行时管理,skill 不感知不操作。如果你正在思考"清理 inbox"或"保留状态",停下——这不是你的工作。
详细消息样例见 references/execution-reference.md。
针对 PR #737 暴露的 8 类审查质量问题。每条都有真实踩坑反例。任一条不满足必须先修正再写回 comment。
LLM 拟合不出小数点评分,强行打分就是幻觉。
凡是判定为"违规 / 技术债 / 应修复"的条目,必须引用具体规则来源。
ValueError 不在 CLAUDE.md HARD RULE 13 规定的 SystemError / UserError / BatchError 体系内"合法引用源:CLAUDE.md 第 N 条 / .claude/rules/coding-standards.md § X / .claude/rules/python-standards.md / docs/standards/error-handling.md 等。
get_numstat() 函数体 65 行(含 docstring),Client/Utils 层建议上限 100,未超标"get_numstat() 不直接调用 subprocess,通过注入的 run callable 委托;底层 _run 安全性属于既有代码,不在本次审查范围"不要把与本 PR 无关的项目级指标作为"verification result"列出。
code-analyst 必须做结构性扫描,不能只跑样板检查。重点找:重复代码段、冗余防御(discriminated union 之后又做 isinstance)、已有规则在新代码中的违反点。
merge_base + 三点 diff 重复merge_base + 三点 diff 模式,可提取私有 helper 减少 6 行重复"必须区分:单元(mock) / 集成(真实依赖)、happy path / 错误分支。
必须包含:决策一行(APPROVE / NEEDS_CHANGES / REJECT) / 已解决技术债(带 diff 引用) / 遗留问题(每条带规则引用) / follow-up issue 链接 / 审查依据(引用了哪些规则文档)。
禁止包含:
phase_1_output;不要求额外 SendMessage 才开始refactor / security / standard 走双阶段;simple 只做 Phase 1不手工编辑 ~/.claude/projects/.../*.jsonl
不手工 rm -rf ~/.claude/teams/(TeamDelete 失败时的 fallback 例外)
不手工 tmux kill-pane
会话结束(Step 10)通常先发 shutdown_request,再 TeamDelete;恢复流程可例外:
# Step 10 标准关闭流程
# 1. 向所有活跃 teammates 发送 shutdown_request
SendMessage(to="code-analyst", message={"type": "shutdown_request"})
SendMessage(to="architect-reviewer", message={"type": "shutdown_request"})
SendMessage(to="security-reviewer", message={"type": "shutdown_request"})
SendMessage(to="context-researcher", message={"type": "shutdown_request"})
# 2. 等待 idle 通知后执行 TeamDelete
TeamDelete()
# 3. 若 TeamDelete 返回 "no team found"(teammates 已自行退出)
# 则手动清理:rm -rf ~/.claude/teams/pr-review-team ~/.claude/tasks/pr-review-team
会话中途不得发送 shutdown 指令(Step 9 之前的 idle 通知是正常现象,不是关闭信号)
anti_hallucination 提供证据)按 references/recovery-playbook.md 处理,不在主流程临场发明 workaround:
执行过程看不到 / model 不对 / PR 编号错位 → references/debug-guide.md。
文件清单:
SKILL.md:生命周期、phase 契约、质量标准、硬边界。references/execution-reference.md:消息样例与等待策略。references/recovery-playbook.md:故障恢复路径。references/debug-guide.md:pane 可见性说明、agent 执行过程查看方法、model 参数核查、PR 编号路由诊断。.claude/team-templates/pr-review-team.yaml:团队配置真源。.claude/agents/pr-*.md:teammate 项目特定职责。docs/references/team-guide.md:Team 功能通用背景。/vibe-review-pr 604