关于 claude-code-review
claude-code-review 是只读代码审查技能,借助 Claude Code CLI 进行独立复核,并对选定发现展开辩论。它按请求调整审查深度,只报告问题,不修改文件或应用修复。
主要功能
- 01调用 Claude Code CLI 复核
- 02辩论选定的审查发现
- 03选择快速、深入或自动模式
- 04审查文件、分支、提交或 PR
- 05仅报告发现,不编辑文件
适用场景
- 01审查仓库中的未提交更改
- 02检查分支、提交或 PR
- 03执行聚焦或全面的代码审查
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ schneidenbach/ skills --skill claude-code-review安装后在 Claude Code 中输入/claude-code-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/debate-protocol.mdprompt-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,了解完整的辩论机制、收敛规则和角色反转辩论协议。
对每个辩论候选项:
- 阅读被引用行所在的实际源文件(查看上下文 20–30 行)
- 将 EVIDENCE 引文与源文件比对,验证行号是否正确。如果行号有误,请找到正确行号并改用该行。
- 遵循辩论协议:用具体代码证据提出质疑,让 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