mcpField
C
claude-code-review

claude-code-review

github.com/schneidenbach测试与质量20107 次安装3 周前更新
代码仓库

关于 claude-code-review

claude-code-review 是只读代码审查技能,借助 Claude Code CLI 进行独立复核,并对选定发现展开辩论。它按请求调整审查深度,只报告问题,不修改文件或应用修复。

主要功能

  1. 01调用 Claude Code CLI 复核
  2. 02辩论选定的审查发现
  3. 03选择快速、深入或自动模式
  4. 04审查文件、分支、提交或 PR
  5. 05仅报告发现,不编辑文件

适用场景

  1. 01审查仓库中的未提交更改
  2. 02检查分支、提交或 PR
  3. 03执行聚焦或全面的代码审查

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/schneidenbach/skills --skill claude-code-review

安装后在 Claude Code 中输入/claude-code-review确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
debate-protocol.md
prompt-template.md

详细介绍

使用 Claude 进行对抗式代码审查

担任主要代码审查者。与 Claude Code CLI 作为外部审查者展开辩论,给出高置信度的审查结果。不要假设是哪个 Agent 或提供方调用了此技能。

你只能读取。不得修改或创建仓库中的文件。不得提出或应用修复方案。只能报告审查发现。

参考文件

到达相关步骤时阅读以下文件:

  • references/debate-protocol.md - 辩论循环机制、收敛规则、错误处理、角色互换辩论。第 6 步前阅读。
  • references/prompt-template.md - Claude 调用的提示词模板和输出解析指南。第 4 步前阅读。

深度模式

根据用户的请求确定深度模式:

快速:由 Claude 进行单轮审查。不进行辩论。适用于用户说“快速”“迅速”“单轮”或类似表达的情况。

深入:所有严重和警告级别的发现都进入对抗式辩论循环。信息级别的发现直接通过。

自动(默认):由你决定要辩论哪些发现,依据如下:

  • Diff 少于 200 行且存在严重或警告级别的发现:全部进行辩论
  • Diff 超过 200 行:只辩论严重级别的发现,警告和信息级别的发现直接通过
  • 涉及身份验证、加密、支付、权限或安全敏感路径的文件:无论 Diff 大小,所有严重和警告级别的发现都进行辩论
  • 全部为信息级别:跳过辩论
  • 发现数量达到 10 项或以上:只辩论按严重程度排序后的前 5 项

在报告开头说明你选择的模式及原因。

第 1 步:理解请求

阅读用户提供的参数。参数可能包括:

  • 要直接审查的文件路径
  • 要审查未提交更改的目录
  • 用于比较的分支名称
  • 要审查的提交 SHA
  • PR 编号或 GitHub PR URL
  • 深度偏好(如“快速”“深入”“全面”)
  • 关注领域(例如“重点关注 SQL 注入”)

根据语境自然地解读这些参数。如果某个词看起来像文件路径,检查它是否存在。如果看起来像分支,使用 git 检查。如果看起来像目录,切换到该目录。如果看起来像 PR 编号或 GitHub PR URL,使用 gh pr view <number> --json number 验证(不要获取 diff——Claude 会自行运行 gh pr diff)。如果某项无法解析为任何内容(文件、目录、分支、提交 SHA 或 PR),请告知用户:“无法解析‘’:它不是文件、目录、分支、提交 SHA 或 PR 编号。”

如果未指定目标,则审查当前工作目录中的未提交更改。

第 2 步:检查前置条件

运行 which claude。如果未找到,则停止并报告:“未安装 Claude Code CLI,或它不在 PATH 中。请从 https://claude.com/claude-code 安装。”

对于非文件审查模式,使用 git rev-parse --git-dir 确认当前位于 git 仓库中。

步骤 3:确定审查目标

根据用户的请求,确定 Claude 需要审查什么。不要自行生成差异或读取文件内容——Claude Code 拥有完整的文件系统和 shell 访问权限,可以自行完成这些工作。你的任务是清楚地描述目标,让 Claude 知道该查看哪里。

  • 未提交的更改:使用 git status 快速检查是否确实存在更改。如果没有,则报告:“No uncommitted changes found.”。向 Claude 描述目标时写:“<absolute repo path> 中未提交的已跟踪更改(已暂存和未暂存)以及所有未跟踪文件”。
  • 分支差异:使用 git rev-parse 验证分支是否存在。目标描述为:“<absolute repo path> 中当前分支相对于 <branch> 的更改”。
  • 提交:验证 SHA 是否存在。目标描述为:“<absolute repo path> 中由提交 <SHA> 引入的更改”。
  • PR:使用 gh pr view 验证 PR 是否存在。目标描述为:“<absolute repo path> 中已检出的 PR #<N> 中的更改——Claude 应运行 gh pr diff <N> 查看差异”。
  • 文件路径:验证文件是否存在。目标描述为:“文件 <absolute paths>”。

将所有路径解析为绝对路径。下一步会将此目标描述传递给 Claude。不要嵌入包含用户控制值(如分支名称)的 shell 命令——分支名称可以包含 &、|、> 和其他 git 接受但 shell 会解释的元字符。使用普通文本描述目标;提示词模板会告诉 Claude 针对每种目标使用哪些 git 命令。

步骤 4:获取 Claude 的初步审查结果

阅读 references/prompt-template.md,了解准确的提示词格式和输出解析指南。提示词通过描述告知 Claude 要审查什么——绝不要将差异、文件内容或代码粘贴到提示词中。Claude 会自行读取文件并运行 git 命令。

使用审查提示词调用 claude -p(打印模式,非交互式)。通过 heredoc 语法经 stdin 传入:

claude -p <<'CLAUDE_PROMPT'
<prompt content here>
CLAUDE_PROMPT

未提供位置参数时,claude -p 会从 stdin 读取提示词。不要传入 -——Claude 不使用 stdin 哨兵。

在 shell 命令中始终为用户提供的值加引号。优先使用 heredoc,而不是 echo "$PROMPT" | claude -p,以避免 shell 解释代码内容。

使用 180 秒超时,前台运行即可

对于审查规模的提示词,claude -p 通常会在 10–60 秒内返回。shell 调用设置 180 秒超时即可留出充足余量。无需后台运行——调用时间足够短,不会浪费大量时间等待。

等待期间,你可以重新阅读自己更改过的文件,并为步骤 6 中角色互换的辩论梳理自己的发现。不过,调用时间足够短,这只是可选项,并非必需。

跳过 Claude 是失败,不是备用方案

这项技能的全部价值在于 Claude 提供的独立审查。只由主要审查者给出的结果会悄然违背这一目的。把“Claude 比预期多花了一点时间”当作“继续等待”,而不是放弃外部审查的理由。

只有以下原因可以接受在没有 Claude 的情况下继续:

  • 未安装 claude(已在步骤 2 中处理)
  • 退出代码非零,且有明确错误(身份验证、网络、API 故障)——原样呈现错误
  • 正常退出后确实没有任何输出

以下原因不可接受:

  • “才过了几秒”
  • “用户可能在等”
  • “差异太大了,我自己审查就行”

如果 Claude 确实因上述标准中的原因失败,请停止并告诉用户:Claude failed: <reason>. Retry, or proceed with a primary-reviewer-only review? 等待用户决定。不要悄悄降低审查标准。

**输出验证:**确认输出中包含 NO_ISSUES_FOUND 或至少一个 FINDING: 标记(不区分大小写)。如果输出格式与要求不完全一致,请参阅提示词模板参考,了解解析指南。

如果 Claude 返回了 NO_ISSUES_FOUND:在 Deep 或 Auto 模式下,不要停止——继续执行步骤 6,进行角色反转辩论。在 Quick 模式下,报告审查无问题并停止(Quick 按定义为单轮审查)。

步骤 5:按深度模式分类审查结果

  • Quick:跳过辩论。所有发现直接纳入报告。
  • Deep:对所有严重和警告级发现进行辩论。信息级发现直接纳入报告。
  • Auto:应用上述启发式规则。记录判断理由。

步骤 6:对抗式辩论循环

阅读 references/debate-protocol.md,了解完整的辩论机制、收敛规则和角色反转辩论协议。

对每个辩论候选项:

  1. 阅读被引用行所在的实际源文件(查看上下文 20–30 行)
  2. 将 EVIDENCE 引文与源文件比对,验证行号是否正确。如果行号有误,请找到正确行号并改用该行。
  3. 遵循辩论协议:用具体代码证据提出质疑,让 Claude 回应,持续迭代直到达成一致或进行 5 轮。

**Claude 的回合:**使用你的质疑调用 claude -p。说明 Claude 应检查的文件和行号范围——不要把代码粘贴到提示词中。Claude 可以自行读取源文件。要求 Claude 使用 DEFEND、RETRACT 或 REVISE 作答。

当 Claude 返回 NO_ISSUES_FOUND 时,进行角色反转辩论:独立扫描变更,找出 Claude 遗漏的问题。自行提出 2–3 个发现,并提交给 Claude 辩护。

如果运行时支持(例如同时启动多个 claude -p shell),可以并行进行彼此不同发现的独立辩论轮次,以缩短总耗时。

步骤 7:报告审查发现

输出结构化报告。不要包含已驳回的发现。

## Code Review Results

Mode: <quick | deep | auto (with reasoning)>
Reviewed: <what was reviewed>
Debated: <N findings challenged> | Passed through: <M findings>
Findings: <X confirmed, Y unresolved, Z dismissed>

### Confirmed Issues

#### [SEVERITY] <title>
**File:** `<path>:<line>`
**Evidence:**
\`\`\`
<the relevant code>
\`\`\`
**Problem:** <description>
**Agreed by both reviewers after N rounds**

### Unresolved (Disagreement)

#### [SEVERITY] <title>
**File:** `<path>:<line>`
**Claude's position:** <summary>
**Primary reviewer's position:** <summary>
**Recommendation:** <your best judgment>

### Info

#### <title>
**File:** `<path>:<line>`
**Note:** <description>

省略空章节。如果完全没有发现:“两位审查者一致认为:没有发现重大问题。”

注意事项

  • claude -p 将内容输出到 stdout。直接调用并读取输出即可。
  • 绝不要在 Claude 的提示词中传递差异、文件内容或代码块。Claude 可以访问文件系统和 shell——告诉它去哪里查看(git 命令或绝对路径),而不是告诉它代码内容。
  • 审查其他目录中的文件时,调用 Claude 前先将所有路径解析为绝对路径。
  • 在 shell 命令中始终将用户提供的值括起来,以防注入。

调用示例

/claude-code-review
/claude-code-review /path/to/other/repo
/claude-code-review src/auth.ts src/api/handler.ts
/claude-code-review main
/claude-code-review abc1234
/claude-code-review #42
/claude-code-review quick review
/claude-code-review deep review of branch main
/claude-code-review focus on SQL injection vulnerabilities

评论

支持 Markdown