代码审查技能
加载方式:base.md + [codex-review.md for OpenAI Codex] + [gemini-review.md for Google Gemini]
目的: 强制实施自动化代码审查作为每次提交和部署前的必经关卡。可以选择Claude、OpenAI Codex、Google Gemini或多个引擎进行全面分析。
审查引擎选择
当运行 /code-review 时,用户可以选择他们偏好的审查引擎:
┌─────────────────────────────────────────────────────────────────┐
│ 代码审查 - 选择您的引擎 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ○ Claude (默认) │
│ 内置,无需额外设置,完整的对话上下文 │
│ │
│ ○ OpenAI Codex CLI │
│ GPT-5.2-Codex 专门用于代码审查,88% 检出率 │
│ 需要:npm install -g @openai/codex │
│ │
│ ○ Google Gemini CLI │
│ Gemini 2.5 Pro 带有 1M 令牌上下文,提供免费层 │
│ 需要:npm install -g @google/gemini-cli │
│ │
│ ○ 双引擎(任意两个) │
│ 运行两个引擎,比较发现,捕获更多问题 │
│ │
│ ○ 全部三个(最大覆盖) │
│ 运行 Claude + Codex + Gemini 针对关键/安全代码 │
│ └─────────────────────────────────────────────────────────────────┘
引擎比较
| 方面 | Claude | Codex | Gemini | 多引擎 |
|---|---|---|---|---|
| 设置 | 无 | npm + OpenAI API | npm + Google账户 | 所有设置 |
| 速度 | 快 | 快 | 快 | 2-3倍时间 |
| 上下文 | 对话 | 每次审查新 | 100万个标记 | 不适用 |
| 检出率 | 良好 | 88%(最佳) | 63.8% SWE-Bench | 合并 |
| 免费层 | 不适用 | 有限 | 每天1000次 | 不同 |
| 最佳用途 | 快速审查 | 高准确度 | 大型代码库 | 关键代码 |
设置默认引擎
# ~/.claude/settings.toml 或项目 CLAUDE.md
[code-review]
default_engine = "claude" # 选项:claude, codex, gemini, dual, all
使用示例
# 使用默认引擎
/code-review
# 明确选择引擎
/code-review --engine claude
/code-review --engine codex
/code-review --engine gemini
# 双引擎(任选两个)
/code-review --engine claude,codex
/code-review --engine claude,gemini
/code-review --engine codex,gemini
# 全部三个引擎
/code-review --engine all
# 快速快捷方式
/code-review # 使用默认
/code-review --codex # 使用Codex
/code-review --gemini # 使用Gemini
/code-review --all # 全部三个引擎
多引擎输出
当使用多个引擎时,发现会被比较和去重:
双引擎示例
┌─────────────────────────────────────────────────────────────────┐
│ 代码审查结果 - 双引擎(Claude + Codex) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ✅ 一致(两者都发现): │
│ 🔴 SQL注入在auth.ts:45 │
│ 🟡 在api.ts:112缺少错误处理 │
│ │
│ 🔷 仅Claude: │
│ 🟠 在worker.ts:89可能存在竞态条件 │
│ 🟢 考虑提取辅助函数 │
│ │
│ 🔶 仅Codex: │
│ 🟠 内存泄漏 - 在upload.ts:34未关闭流 │
│ 🟡 在orders.ts:156的N+1查询模式 │
│ └─────────────────────────────────────────────────────────────────┘
三引擎示例(全部三个)
┌─────────────────────────────────────────────────────────────────┐
│ 代码审查结果 - 三引擎 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ✅ 一致(全部三个发现): │
│ 🔴 SQL注入在auth.ts:45 │
│ │
│ ✅ 多数(3个中的2个发现): │
│ 🟠 内存泄漏 - 在upload.ts:34(Codex+Gemini)│
│ 🟡 在api.ts:112缺少错误处理(Claude+Codex) │
│ │
│ 🔷 仅Claude: │
│ 🟠 在worker.ts:89可能存在竞态条件 │
│ │
│ 🔶 仅Codex: │
│ 🟡 在orders.ts:156的N+1查询模式 │
│ │
│ 🟢 仅Gemini: │
│ 🟡 考虑使用批量API以获得更好的性能 │
│ 🟢 在types.ts:23类型可以更具体 │
│ └─────────────────────────────────────────────────────────────────┘
使用每种模式的时候
| 模式 | 使用场景 |
|---|---|
| 单个(Claude) | 快速的流程审查,探索 |
| 单个(Codex) | CI/CD自动化,需要高准确度 |
| 单个(Gemini) | 大型代码库(100+文件),免费层 |
| 双引擎 | 重要的PR,预合并审查 |
| 三引擎(全部) | 安全关键代码,支付系统,认证 |
核心理念
┌─────────────────────────────────────────────────────────────────┐
│ 代码审查是不可协商的 │
│ ───────────────────────────────────────────────────────────── │
│ │
│ 每次提交都必须通过代码审查。 │
│ 每次PR都必须在合并前进行审查。 │
│ 每次部署都必须包含审查签名。 │
│ │
│ AI能捕捉人类遗漏的东西。人类能捕捉AI遗漏的东西。 │
│ 一起:更少的错误,更清洁的代码,更好的安全。 │
├─────────────────────────────────────────────────────────────────┤
│ 调用:/code-review │
│ 插件:code-review@claude-plugins-official │
└─────────────────────────────────────────────────────────────────┘
何时运行代码审查
强制审查点
| 触发器 | 动作 | 命令 |
|---|---|---|
| 提交前 | 审查暂存的更改 | /code-review |
| PR前 | 审查所有更改与基础对比 | /code-review |
| 合并前 | PR的最终审查 | /code-review |
| 部署前 | 审查部署差异 | /code-review |
自动集成
在每次提交前自动运行代码审查:
┌─────────────────────────────────────────────────────────────────┐
│ COMMIT WORKFLOW │
│ ───────────────────────────────────────────────────────────── │
│ │
│ 1. 编写代码 │
│ 2. 运行测试(TDD - 必须通过) │
│ 3. 运行 /code-review ← 强制 │
│ 4. 解决关键/高问题 │
│ 5. 提交 │
│ 6. 推送 │
│ │
│ 跳过步骤3?❌不允许提交 │
└─────────────────────────────────────────────────────────────────┘
使用代码审查插件
基本使用
# 审查当前更改
/code-review
# 审查特定文件
/code-review src/auth/*.ts
# 审查PR
/code-review --pr 123
# 审查特定焦点
/code-review --focus security
/code-review --focus performance
/code-review --focus architecture
审查类别
代码审查插件分析:
| 类别 | 它检查什么 |
|---|---|
| 安全 | 漏洞,注入风险,认证问题,机密 |
| 性能 | N+1查询,内存泄漏,低效算法 |
| 架构 | 设计模式,SOLID原则,耦合 |
| 代码质量 | 可读性,复杂性,重复 |
| 最佳实践 | 语言习惯用法,框架约定 |
| 测试 | 覆盖率差距,测试质量,边缘情况 |
| 文档 | 缺失文档,过时注释 |
严重性级别
| 级别 | 需要采取的行动 | 可以提交吗? |
|---|---|---|
| 🔴 关键 | 必须立即修复 | ❌ 不行 |
| 🟠 高 | 提交前应该修复 | ❌ 不行 |
| 🟡 中 | 尽快修复,可以提交 | ✅ 是 |
| 🟢 低 | 有则更好 | ✅ 是 |
| ℹ️ 信息 | 仅建议 | ✅ 是 |
提交前钩子集成
安装提交前钩子
#!/bin/bash
# .git/hooks/pre-commit
echo "🔍 运行代码审查..."
# 在暂存文件上运行Claude代码审查
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(ts|tsx|js|jsx|py|go|rs)$')
if [ -n "$STAGED_FILES" ]; then
# 调用代码审查(需要claude CLI)
claude --print "/code-review $STAGED_FILES" > /tmp/code-review-result.txt 2>&1
# 检查关键/高问题
if grep -q "🔴\|关键\|🟠\|高" /tmp/code-review-result.txt; then
echo "❌ 代码审查发现关键/高问题:"
cat /tmp/code-review-result.txt
echo ""
echo "修复这些问题后再提交。"
exit 1
fi
echo "✅ 代码审查通过"
fi
exit 0
使钩子可执行
chmod +x .git/hooks/pre-commit
Codex CLI 设置(用于Codex/双引擎模式)
如果你想使用Codex或双引擎模式,安装Codex CLI:
# 先决条件:Node.js 22+
node --version # 必须是22+
# 安装Codex CLI
npm install -g @openai/codex
# 认证(选择一个):
# 选项1:ChatGPT订阅(Plus, Pro, Team, Enterprise)
codex # 按照提示登录
# 选项2:API密钥
export OPENAI_API_KEY=sk-proj-...
验证安装
# 检查Codex是否安装
codex --version
# 测试审查
codex
> /review
查看 codex-review.md 技能以获取完整的Codex文档。
Gemini CLI 设置(用于Gemini/多引擎模式)
如果你想使用Gemini或多引擎模式,安装Gemini CLI:
# 先决条件:Node.js 20+
node --version # 必须是20+
# 安装Gemini CLI
npm install -g @google/gemini-cli
# 或者通过Homebrew(macOS)
brew install gemini-cli
# 安装代码审查扩展
gemini extensions install https://github.com/gemini-cli-extensions/code-review
认证
# 选项1:Google账户(推荐,每天1000次请求免费)
gemini # 按照浏览器登录提示
# 选项2:API密钥(每天100次请求免费)
export GEMINI_API_KEY="your-key-from-aistudio.google.com"
验证安装
# 检查Gemini是否安装
gemini --version
# 列出扩展
gemini extensions list
# 测试审查
gemini
> /code-review
查看 gemini-review.md 技能以获取完整的Gemini文档。
CI/CD集成
GitHub Actions - 仅Claude
# .github/workflows/code-review.yml
name: 代码审查
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
code-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 获取更改的文件
id: changed-files
run: |
echo "files=$(git diff --name-only origin/${{ github.base_ref }}...HEAD | tr '
' ' ')" >> $GITHUB_OUTPUT
- name: 运行Claude代码审查
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
npx @anthropic-ai/claude-code --print "/code-review ${{ steps.changed-files.outputs.files }}" > review.md
- name: 发布审查评论
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const review = fs.readFileSync('review.md', 'utf8');
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: `## 🔍 Claude代码审查
${review}`
});
- name: 检查关键问题
run: |
if grep -q "关键\|🔴" review.md; then
echo "❌ 发现关键问题"
exit 1
fi
GitHub Actions - 仅Codex
# .github/workflows/codex-review.yml
name: Codex代码审查
on:
pull_request:
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Codex审查
uses: openai/codex-action@main
with:
openai_api_key: ${{ secrets.OPENAI_API_KEY }}
model: gpt-5.2-codex
safety_strategy: drop-sudo
GitHub Actions - 双引擎
# .github/workflows/dual-review.yml
name: 双引擎代码审查
on:
pull_request:
jobs:
claude-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Claude审查
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
npx @anthropic-ai/claude-code --print "/code-review" > claude-review.md
- uses: actions/upload-artifact@v4
with:
name: claude-review
path: claude-review.md
codex-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: '22'
- name: 安装Codex
run: npm install -g @openai/codex
- name: Codex审查
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
codex exec --full-auto --sandbox read-only \
--output-last-message codex-review.md \
"审查这段代码,查找错误、安全问题和质量问题"
- uses: actions/upload-artifact@v4
with:
name: codex-review
path: codex-review.md
combine-reviews:
needs: [claude-review, codex-review]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
- name: 合并审查
run: |
echo "## 🔍 双引擎代码审查结果" > combined-review.md
echo "" >> combined-review.md
echo "### Claude发现" >> combined-review.md
cat claude-review/claude-review.md >> combined-review.md
echo "" >> combined-review.md
echo "### Codex发现" >> combined-review.md
cat codex-review/codex-review.md >> combined-review.md
- name: 发布合并审查
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const review = fs.readFileSync('combined-review.md', 'utf8');
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: review
});
GitHub Actions - Gemini仅
# .github/workflows/gemini-review.yml
name: Gemini代码审查
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 设置Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: 安装Gemini CLI
run: npm install -g @google/gemini-cli
- name: 运行审查
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
run: |
# 获取差异
git diff origin/${{ github.base_ref }}...HEAD > diff.txt
# 运行Gemini审查
gemini -p "审查这个PR差异,查找错误、安全问题和代码质量问题。
$(cat diff.txt)" > review.md
- name: 发布审查评论
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const review = fs.readFileSync('review.md', 'utf8');
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: `## 🤖 Gemini代码审查
${review}`
});
- name: 检查关键问题
run: |
if grep -qi "critical\|security vulnerability\|injection" review.md; then
echo "❌ 发现关键问题"
exit 1
fi
GitHub Actions - 全部三个引擎
# .github/workflows/triple-review.yml
name: 三引擎代码审查
on:
pull_request:
jobs:
claude-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Claude审查
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
npx @anthropic-ai/claude-code --print "/code-review" > claude-review.md
- uses: actions/upload-artifact@v4
with:
name: claude-review
path: claude-review.md
codex-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: '22'
- name: 安装Codex
run: npm install -g @openai/codex
- name: Codex审查
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
codex exec --full-auto --sandbox read-only \
--output-last-message codex-review.md \
"审查这段代码,查找错误、安全问题和质量问题"
- uses: actions/upload-artifact@v4
with:
name: codex-review
path: codex-review.md
gemini-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: 安装Gemini CLI
run: npm install -g @google/gemini-cli
- name: Gemini审查
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
run: |
git diff origin/${{ github.base_ref }}...HEAD > diff.txt
gemini -p "审查这段代码差异,查找错误、安全和质量问题:
$(cat diff.txt)" > gemini-review.md
- uses: actions/upload-artifact@v4
with:
name: gemini-review
path: gemini-review.md
combine-reviews:
needs: [claude-review, codex-review, gemini-review]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
- name: 合并审查
run: |
echo "## 🔍 三引擎代码审查结果" > combined-review.md
echo "" >> combined-review.md
echo "### 🟣 Claude发现" >> combined-review.md
cat claude-review/claude-review.md >> combined-review.md
echo "" >> combined-review.md
echo "---" >> combined-review.md
echo "### 🟢 Codex发现" >> combined-review.md
cat codex-review/codex-review.md >> combined-review.md
echo "" >> combined-review.md
echo "---" >> combined-review.md
echo "### 🔵 Gemini发现" >> combined-review.md
cat gemini-review/gemini-review.md >> combined-review.md
- name: 发布合并审查
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const review = fs.readFileSync('combined-review.md', 'utf8');
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: review
});
- name: 检查关键问题
run: |
# 如果任何引擎发现关键问题则失败
if grep -qi "critical\|🔴" combined-review.md; then
echo "❌ 至少有一个引擎发现了关键问题"
exit 1
fi
审查清单
提交前
- [ ] 在暂存更改上运行
/code-review - [ ] 没有关键(🔴)问题
- [ ] 没有高(🟠)问题
- [ ] 解决安全问题
- [ ] 考虑性能问题
PR前
- [ ] 全部更改的完整代码审查
- [ ] 解决所有关键/高问题
- [ ] 为新功能添加测试
- [ ] 如有需要更新文档
部署前
- [ ] 审查部署差异
- [ ] 安全扫描通过
- [ ] 没有引入新漏洞
- [ ] 文档化回滚计划
常见审查发现
安全问题(必须修复)
| 问题 | 示例 | 修复 |
|---|---|---|
| SQL注入 | query = f"SELECT * FROM users WHERE id = {id}" |
使用参数化查询 |
| XSS | innerHTML = userInput |
清理或使用textContent |
| 代码中的机密 | apiKey = "sk-xxx" |
使用环境变量 |
| 缺少认证 | 未受保护的端点 | 添加认证中间件 |
| 不安全的加密 | 使用MD5/SHA1的密码 | 使用bcrypt/argon2 |
性能问题(应该修复)
| 问题 | 示例 | 修复 |
|---|---|---|
| N+1查询 | 循环中的单独查询 | 使用批处理/预加载 |
| 内存泄漏 | 未关闭的连接 | 使用连接池 |
| 缺少索引 | 慢查询 | 添加数据库索引 |
| 大负载 | 获取未使用的字段 | 仅选择所需字段 |
| 无分页 | 加载所有记录 | 实施分页 |
代码质量(有则更好)
| 问题 | 示例 | 修复 |
|---|---|---|
| 长函数 | 100+行 | 拆分为更小的函数 |
| 深层嵌套 | 5+级别 | 提前返回,拆分方法 |
| 魔法数字 | if (status === 3) |
使用命名常量 |
| 重复代码 | 复制粘贴的块 | 提取共享函数 |
| 缺少类型 | any无处不在 |
添加适当的TypeScript类型 |
与TDD工作流集成
┌─────────────────────────────────────────────────────────────────┐
│ TDD + 代码审查工作流 │
│ ───────────────────────────────────────────────────────────── │
│ │
│ 1. 红色:编写失败的测试 │
│ 2. 绿色:编写通过测试的代码 │
│ 3. 重构:清理代码 │
│ 4. 审查:运行 /code-review ← 新步骤 │
│ 5. 修复:解决关键/高问题 │
│ 6. 验证:Lint + 类型检查 + 覆盖率 │
│ 7. 提交:仅在审查通过后 │
│ │
│ 审查捕捉测试遗漏的内容: │
│ - 安全漏洞 │
│ - 性能问题 │
│ - 架构问题 │
│ - 代码可维护性 │
└─────────────────────────────────────────────────────────────────┘
审查响应模板
当代码审查发现问题时,用以下方式回应:
## 代码审查结果
### 🔴 关键问题(必须修复)
1. **SQL注入在userController.ts:45**
- 问题:用户输入直接插值到查询中
- 修复:使用参数化查询
- 代码:`db.query('SELECT * FROM users WHERE id = $1', [userId])`
### 🟠 高问题(应该修复)
1. **缺少对/api/admin端点的认证**
- 问题:Admin路由无需认证即可访问
- 修复:添加认证中间件
### 🟡 中问题(尽快修复)
1. **getOrders函数中的N+1查询**
- 考虑预加载或批量查询
### 🟢 低问题(有则更好)
1. **考虑提取验证逻辑到单独文件**
### ✅ 优点
- 良好的测试覆盖率
- 清晰的函数名称
- 适当的错误处理
### 📊 总结
- 关键:1 | 高:1 | 中:1 | 低:1
- **状态:❌ 阻塞** - 提交前修复关键/高问题
Claude指令
何时调用代码审查
Claude应自动建议或运行代码审查:
- 完成功能后 → “让我们在提交前运行代码审查”
- 创建PR前 → “审查所有更改”
- 用户说“提交”时 → “首先,让我审查更改”
- 修复错误后 → “审查修复是否有任何问题”
审查重点领域
根据更改类型优先审查:
| 更改类型 | 重点领域 |
|---|---|
| 认证/安全代码 | 安全,输入验证,加密 |
| 数据库代码 | SQL注入,N+1,事务 |
| API端点 | 认证,速率限制,验证 |
| 前端代码 | XSS,状态管理,性能 |
| 基础设施 | 机密,权限,日志记录 |
快速参考
命令
# 基本审查
/code-review
# 审查特定文件
/code-review src/auth.ts src/users.ts
# 审查重点
/code-review --focus security
# 审查PR
/code-review --pr 123
严重性行动
🔴 关键 → 停止。立即修复。不允许提交。
🟠 高 → 停止。立即修复。不允许提交。
🟡 中 → 记录。尽快修复。可以提交。
🟢 低 → 可选。有则更好。
ℹ️ 信息 → 仅供参考。
工作流
代码 → 测试 → 审查 → 修复 → 提交 → 推送 → PR → 审查 → 合并 → 部署
↑ ↑ ↑
/code-review /code-review /code-review