| 编辑推荐: |
本文主要介绍了Claude Code 构建的三层代码审查防御体系(security-guidance 插件、Code Review 托管服务、GitHub Actions/GitLab CI/CD 集成),通过让 AI 在写代码时自查、PR 阶段多 agent 审查、CI/CD 流水线中自动化执行,形成贯穿开发全流程的质量与安全防线,希望对你的学习有帮助。
本文来自于Ai大模型的老章,由火龙果软件Alice编辑推荐。 |
|
最近 Anthropic 把 Claude Code 的「代码审查 + CI/CD」拼图基本补齐了:从 IDE 里写代码的那一刻起,到 commit 之前、PR 提上去之后、CI 跑起来的每一环,都有对应的 Claude 把关
我花了点时间把官方这套体系翻了一遍,越看越觉得这不是简单的「AI 帮你 review 一下」,而是一套 三层防御 ——边写、边提、边合,三处布岗,谁也别想偷溜过去
这篇就把这套体系怎么用、什么场景上哪个、坑在哪里,一次讲清楚

Claude Code 代码审查三层防御总览
先讲清楚:这三层防御到底分别在哪里
很多人以为 Claude Code 做代码审查就是 PR 上挂个 bot,其实不是。官方把这件事拆成了三段,每一段对应一个产品:
| 阶段 | 产品 | 触发点 | 干什么 |
| 写代码时 |
security-guidance 插件 |
每次 Edit / 每个 turn 结束 / Claude 自己 commit 时 |
Claude 一边写一边自查,发现漏洞当场改 |
| 提 PR 后 |
Code Review(托管服务) |
PR 打开、push、 @claude review |
多 agent 并行扫描整个 diff,行内评论 |
| 自动化时 |
GitHub Actions / GitLab CI/CD |
@claude 提及、定时任务、任意事件 |
把 Claude 当成一个能写代码、能开 PR 的 CI 工人 |
简单点说:
- 左移 :security-guidance 让漏洞还没进 git 就被掐掉
- 守门 :Code Review 在 PR 阶段做兜底
- 生产线 :Actions / CI/CD 把这些能力嵌进流水线,让 @claude 直接干活
这三层不是互斥关系,是叠加。下面我一层一层拆
第一层:security-guidance 插件——让 Claude 边写边查自己
这是最容易被忽视、但我觉得最值钱的一层
它是 Anthropic 官方插件市场里的 security-guidance 插件,装一次就常驻 session。安装命令也简单:
/plugin install security-guidance@claude-plugins-official /reload-plugins
|
装完之后 完全不用手动调 ,它会在 Claude 工作的三个时点自动跑:

security-guidance 三个时点三种深度
三个检查时点,三种深度
1. 每次写文件(per-edit)
零模型成本,就是一个确定性的字符串/正则扫描。专门盯这些「眼熟」的危险写法:
- 动态执行: eval( 、 new Function 、 os.system 、 child_process.exec
- 不安全反序列化: pickle
- DOM 注入: dangerouslySetInnerHTML 、 .innerHTML = 、 document.write
- workflow 文件改动: .github/workflows/ 下的修改(这玩意一改就可能把仓库权限放出去)
发现匹配,警告会被追加到 Claude 的下一步上下文里,等于在它耳边说一句「这行很危险,注意一下」
2. 每个 turn 结束(end-of-turn review)
一个 turn 结束后,插件会算出本轮 working tree 的 git diff, 单独起一个 Claude 实例 专门做安全审查。注意:不是同一个 Claude 自己给自己打分——审查的那个是新上下文、专注挑刺、对原方案毫无感情
它会找字符串匹配抓不到的东西:
- 越权访问 / 不安全的对象直接引用
- 各种注入
- SSRF
- 弱加密
找到问题后,写代码那个 Claude 会被重新 prompt,把问题在同一会话里就地修掉。单 turn 最多审 30 个文件,连续重 prompt 最多 3 次
3. Claude 自己 commit / push 时
这一层是「深度版」agentic 审查。它会顺着代码爬上下文——调用方、sanitizer、相关文件都读一读,再判断有没有问题,减少把孤立看着危险其实安全的写法误报
注意一个细节: 只有 Claude 通过它的 Bash 工具执行 git commit / git push 才会触发 。你自己在终端里手动 commit 是不审的。每小时滚动上限 20 次
可以自己加规则
两种扩展方式:
# .claude/claude-security-guidance.md(给模型看的) - Do not log customer_id or account_number at INFO level or above - All routes under /admin must call require_role("admin") before any database read - Use crypto.timingSafeEqual for token comparison instead of ===
|
# .claude/security-patterns.yaml(给字符串匹配引擎的) patterns: -rule_name:internal_api_key substrings:["sk_live_","AKIA"] reminder:"Hardcoded API key prefix. Load credentials from the secret manager." -rule_name:tenant_unfiltered_query regex:"\\.objects\\.all\\(\\)" paths:["**/src/tenants/**"] reminder:"Multi-tenant code must filter by org_id."
|
前者是软提示(findings + Claude 自己改),后者是硬扫描(每次 edit 必跑)
老章的话
这层我给它打 90 分,扣的 10 分是 Windows 上没法跑 agentic commit review(虚拟环境那一步被跳过),以及它本质不阻断写入——Claude 可以不听话。但凡你的代码偶尔会被实习 AI 写脏,这一层就是性价比最高的「家门口看门狗」
第二层:Code Review 托管服务——PR 阶段的多 agent 拷问
第一层是「在 IDE 里就别让烂代码出生」,第二层是「即使出生了,进仓库之前再筛一遍」
Code Review 是 Team / Enterprise 订阅才有的研究预览功能(注意:开了 Zero Data Retention 的组织用不了)。它不在你的 CI 里跑,是跑在 Anthropic 自己的基础设施上的托管服务

Code Review 严重度与触发模式
它具体怎么工作的
PR 一开(或每次 push、或有人评论 @claude review ),后台会有 多个 agent 并行 扫 diff,每个 agent 负责一个 issue 类别。扫完之后还有一个 verification 步骤——拿候选 finding 去对照实际代码行为,把误报筛掉。最后去重、按严重度排序,作为 行内评论 贴在具体的代码行上
平均一次 review 跑 20 分钟。每个 finding 带严重度标签:
| 标记 | 严重度 | 含义 |
| 🔴 |
Important |
合并前应该修 |
| 🟡 |
Nit |
小问题,建议修但不卡 |
| 🟣 |
Pre-existing |
仓库里本来就有的 bug,不是这个 PR 引入的 |
每条评论默认带 👍 / 👎 两个反应按钮,一键打分,Anthropic 用这个反馈来调 reviewer
很关键的一点 :check run 永远以 neutral 结束, 绝不卡合并 。也就是说它不会破坏你现有的 review 流程,只是多一双眼睛。如果你想让 CI 强制看 Claude 的结论,可以自己解析 check run 输出的最后一行:
gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID \ --jq '.output.text | split("bughunter-severity: ")[1] | split(" -->")[0] | fromjson'
|
返回类似 {"normal": 2, "nit": 1, "pre_existing": 0} 的 JSON, normal > 0 就是有 Important 问题
三种触发模式,钱包敏感请注意
| 模式 | 行为 | 成本 |
| Once after PR creation |
PR 开 / ready for review 时跑一次 |
1×PR |
| After every push |
每次 push 都跑 |
N×push(最贵) |
| Manual |
只在评论 @claude review / review once 时跑 |
按需 |
官方给的口径: 每次 review 平均 $15–25 ,按 PR 大小和复杂度浮动。这是单独走 usage credits 计费的,不占你 plan 的额度
我的建议: 默认 Manual + 关键仓库才开 push 模式 。 @claude review once 这个一次性版本很香,长 PR 频繁 push 时用它能省很多钱
用 REVIEW.md 把它调教成你想要的样子
Code Review 会读两个文件:
- ** CLAUDE.md **:你给 Claude Code 用的通用项目说明,违反了 → 标记 nit
- REVIEW.md :审查专用, 直接注入到每个 agent 的 system prompt 最高优先级
REVIEW.md 才是真正能改 review 行为的钥匙。它能干这些事:
- 重新定义 Important :默认按生产代码校准,文档库 / 原型库可以收紧定义
- 限制 nit 数量 :「最多贴 5 条 nit,多的合并说『还有 N 条类似的』」
- 跳过规则 :generated 文件、lockfile、CI 已经管的事(lint、format、type)就别再说了
- 加项目专属检查 :「新 API route 必须有集成测试」「日志不能出现 email / user_id / request body」
- 二次 review 时收敛 :「第一次 review 之后只贴 Important,nit 一律不报」——这一条解决了「同一个 PR review 到第 7 轮还在改命名」的痛点
官方给的样板:
# Review instructions
## What Important means here Reserve Important for findings that would break behavior, leak data, or block a rollback: incorrect logic, unscoped database queries, PII in logs or error messages, and migrations that aren't backward compatible. Style, naming, and refactoring suggestions are Nit at most.
## Cap the nits Report at most five Nits per review. If you found more, say "plus N similar items" in the summary instead of posting them inline.
## Do not report - Anything CI already enforces: lint, formatting, type errors - Generated files under `src/gen/` and any `*.lock` file - Test-only code that intentionally violates production rules
## Always check - New API routes have an integration test - Log lines don't include email addresses, user IDs, or request bodies - Database queries are scoped to the caller's tenant
|
短就是好,规则越长权重越稀释,这是官方明确说的
找不到评论怎么办
有时候 check run 说有 N 个问题,diff 上却看不到行内评论——三个地方可以找:
- Check run 的 Details 链接:里面有按严重度排好的完整表格
- Files changed 标签页里的 annotation
- PR 主体下方的 Additional findings ——通常是 review 跑到一半你又 push 了一次,原来的行号已经不存在了
第三层:GitHub Actions / GitLab CI/CD——让 @claude 进生产线
前两层都是「review」类,第三层不一样:它把 Claude Code 作为一个 能写代码、能改 PR、能开 MR 的 CI 工人 塞进你的流水线
GitHub Actions
最快上手方式:在终端打开 Claude Code,敲 /install-github-app ,跟着流程走完就行(前提你是仓库 admin)
手动版三步:
- 装 Claude GitHub App:github⋅com/apps/claude(要 Contents / Issues / Pull requests 读写权限)
- 把 ANTHROPIC_API_KEY 加到仓库 secrets
- 把 examples/claude.yml 复制到 .github/workflows/
最小工作流:
name: ClaudeCode on: issue_comment: types:[created] pull_request_review_comment: types:[created] jobs: claude: runs-on:ubuntu-latest steps: -uses:anthropics/claude-code-action@v1 with: anthropic_api_key:${{secrets.ANTHROPIC_API_KEY}}
|
然后在任意 issue / PR 评论里:
@claude implement this feature based on the issue description @claude how should I implement user authentication for this endpoint? @claude fix the TypeError in the user dashboard component
|
Claude 会自动判断上下文,能写代码就直接开个 PR
从 beta 升到 v1 有 breaking change ,老用户注意: @beta → @v1 , direct_prompt → prompt , max_turns / model / allowed_tools 这些都挪到 claude_args 里去了
如果只想跑一个「自动 code review」工作流,直接拿官方插件:
- uses: anthropics/claude-code-action@v1 with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} plugin_marketplaces: "https://github⋅com/anthropics/claude-code.git" plugins: "code-review@claude-code-plugins" prompt: "/code-review:code-review ${{ github.repository }}/pull/${{ github⋅event.pull_request.number }}"
|
也可以定时跑,比如每天 9 点出一份昨日 commits 摘要:
on: schedule: - cron: "0 9 * * *" # ... with: prompt: "Generate a summary of yesterday's commits and open issues" claude_args: "--model opus"
|
GitLab CI/CD
由 GitLab 官方维护,目前 beta。本质和 GitHub 那套一样:跑在你自己的 runner 上、走 MR 流程、支持 Claude API / Bedrock / Vertex AI 三家提供商
最小配置:
stages: -ai
claude: stage:ai image:node:24-alpine3.21 rules: -if:'$CI_PIPELINE_SOURCE == "web"' -if:'$CI_PIPELINE_SOURCE == "merge_request_event"' before_script: -apkupdate -apkadd--no-cachegitcurlbash -curl-fsSLhttps://claude.ai/install.sh|bash script: -/bin/gitlab-mcp-server||true - > claude -p "${AI_FLOW_INPUT:-'Review this MR and implement the requested changes'}" --permission-mode acceptEdits --allowedTools "Bash Read Edit Write mcp__gitlab" --debug
|
把 ANTHROPIC_API_KEY 设为 masked CI/CD variable 就能跑。MR 评论里 @claude implement this feature 同样有效
企业环境想走 Bedrock / Vertex AI 的话,GitLab 那边走 AWS OIDC + IAM role 或 Workload Identity Federation,配置略繁琐但思路是一样的——把 API key 换成云厂商的身份认证
一个常被忽视的彩蛋:本地的 /code-review 命令
不想装 GitHub App、不想花 $15 一次的人,其实还有条免费路径
在本地任何 Claude Code session 里,敲:
它会用「effort level」配置 review 强度,扫当前 diff,找正确性 bug。加上 --comment 还能直接把 finding 作为行内评论贴到 PR 上
老版本叫 /simplify ,v2.1.147 之后才改名 /code-review
适用场景:PR 还没提之前自己先扫一遍;或者不想买 Team 订阅又想要类似体验的个人开发者
这套体系到底怎么落地最划算
我自己梳理了一个 「三层防御部署清单」 ,按团队规模给个参考:

三层防御部署清单
个人 / 小团队(不想花 Code Review 的 $15) :
- ✅ 装 security-guidance 插件(免费,零成本守门)
- ✅ 本地 /code-review --comment 自己扫 PR
- ✅ GitHub Actions 跑基础 @claude 响应工作流(按量计费但可控)
- ⏸️ Code Review 托管服务先不开
中型团队(重视 PR 质量、能负担订阅) :
- ✅ 全员装 security-guidance 插件
- ✅ Code Review 开 Manual 模式,关键 PR 评论 @claude review 触发
- ✅ 写一个 REVIEW.md ,把 Important 定义、跳过规则、nit 上限都定死
- ✅ Actions 跑日报 / 周报类自动化
企业 / 关键仓库 :
- ✅ 组织级 enabledPlugins 把 security-guidance 推给所有人
- ✅ Code Review 主分支用 After every push ,feature 分支用 Manual
- ✅ 自建 GitHub App + Bedrock / Vertex AI,走 OIDC,避开 API key 落盘
- ✅ CI 里解析 check run 的 severity JSON,Important > 0 时报警但不卡合并
几个我觉得值得说的细节
1. Code Review 不会和你现有的人工 review 冲突
它既不 approve 也不 block,只贴评论。这一点很关键——它是「多双眼睛」而不是「替你做主」。这是和很多自动审查工具不一样的设计哲学
2. Security plugin 的「不是自己审自己」原则
这一点我特地翻了官方说明:end-of-turn 和 commit review 跑的都是 新上下文的独立 Claude ,不是同一个写代码的 Claude 给自己打分。前者从 diff 起步,对原方案毫无投入,只被告知一件事:挑毛病。这个设计避免了 LLM「自我合理化」的老毛病
3. GitLab 的集成是 GitLab 维护的,Anthropic 不背锅
文档里明说了:「This integration is maintained by GitLab」。出问题去 GitLab issue 573776 反馈。这种合作模式我是第一次见,挺有意思的
4. 别忘了 hooks
如果你想要 确定性 而不是「靠模型自觉」的拦截——比如「禁止 Claude 编辑某个文件」「每次写完 Python 自动跑 black」——上 hooks。Claude Code 的 hooks 是真正的 shell 命令,跑在 PreToolUse / PostToolUse / Notification 等生命周期事件上。这是和 security-guidance 完全不同的另一条防线:插件是软提示,hooks 是硬规则
总结
把这套体系画成一张图,其实就是:
你写 prompt ↓ Claude 写代码 ──→ [security-guidance: 每个 edit 扫一遍] ↓ turn 结束 ──→ [security-guidance: 独立 Claude review 整个 diff] ↓ Claude commit ──→ [security-guidance: agentic 深度审查] ↓ 你 push 提 PR ↓ [Code Review: 多 agent 并行 + verification 筛误报 → 行内评论] ↓ [GitHub Actions / GitLab CI/CD: @claude 干各种活] ↓ 合并
|
三层防御的本质是 把人类 reviewer 从「找低级 bug」里解放出来,让他们去做真正需要判断的事 。Code Review 自己也说了:「By default, Code Review focuses on correctness: bugs that would break production, not formatting preferences or missing test coverage」——格式化、风格、覆盖率这些事它根本不掺和
我的态度:
- security-guidance 插件 :所有人都该装,零门槛、零额外成本、纯收益
- Code Review 托管服务 :值不值看团队,Manual 模式 + 好的 REVIEW.md 是性价比最高的玩法
- Actions / CI/CD 集成 :当你想让 @claude 真的「写代码」而不只是「评代码」时再上
- /code-review 本地命令 :穷开发者的福音,先用起来
整体看,Anthropic 把 Claude Code 从「IDE 里的 AI 助手」演进到「贯穿开发-CI-合并全流程的协作者」,这个方向比单纯做更大的模型有意思得多
|