给 Claude Code 装上「写审分离」:一个写代码一个审,审的不改只挑毛病

用 Claude Code 写代码有个问题:写完就完了,没人帮你审。

我之前也用过 /code-review 命令,但那是手动的——你得记得调,调完还得自己看报告、自己改。有时候写着写着就忘了审,有时候一个小改动也去审,白白浪费 token。

我想要的效果

很简单,就三句话:

  1. 一个写,一个审 — 各干各的,不串台
  2. 审的不改代码 — 审手只挑毛病,把问题列出来发给写手
  3. 自动判断 — 我不知道啥时候该审,系统自己决定

做出来的东西

在 Claude Code 的 ECC 框架里做了一个 skill,叫 write-review

角色分离

Writer(写手) Reviewer(审手)
读代码
写代码 ❌ 绝不允许
分析问题
改代码
提出修改建议

审手用的是 Claude Code 自带的 code-reviewer agent。这个 agent 本身就只有 Read、Grep、Glob、Bash 四个只读工具,天然就不能改代码。我要做的就是给它加个 prompt 约束,让它明白自己是 Reviewer 不是修理工。

工作流程

你的任务 → Phase 0: 自动判断要不要审
                ↓
          Phase 1: 理解需求
                ↓
          Phase 2: Writer 写代码
                ↓
          Phase 3: Reviewer 审代码(只读不改!)
                ↓
          Phase 4: 有严重问题?→ 反馈给 Writer → 回到 Phase 2
                   没问题?→ 通过!
                ↓
          Phase 5: 汇报结果

最多循环 3 轮。3 轮还过不了就停下来让你手动处理。

自动判断——解决"不知道啥时候该审"

这是最实用的部分。我在 Phase 0 放了一个决策矩阵:

维度 🔴 走审 🟢 跳过
规模 新文件 / 多文件 / >20行 单行修改 / 单变量改名
安全 auth / 支付 / 用户数据 无安全相关
数据 schema 变更 / 新查询 没动数据库
API 新增接口 / 改签名 内部调整
业务 核心逻辑 / 计算 纯格式 / 注释
重构 行为有变化 纯重命名

不确定时默认走审。 宁可多审一次,不要漏过问题。

实际效果:

  • 你说"改个变量名" → 矩阵全部命中 🟢 → 直接改,300 token
  • 你说"写个登录接口" → 命中 🔴(新文件+auth+API)→ 自动走写审循环
  • 你说"加个注释" → 🟢 跳过
  • 你说"重构支付模块" → 🔴(多文件+安全+行为变化)→ 走审

Token 消耗

场景 不审 自动审 多花的
修改变量名 300 300(跳过) 0
新增工具函数 3K 8K +5K 但值得
多文件功能 8K 26K(2轮) +18K 但值得
安全相关 5K 20K(审+安全审) +15K 但必要

小改动不浪费,大改动不放过。

怎么用

以后不用手动调命令了。平时正常说话写代码,系统会在后台自动判断。你觉得重要的东西它自动就审了,鸡毛蒜皮的直接跳过。

想强制审查的时候,也可以手动调用:

/write-review 写一个支付回调处理接口

测试了一下

创建了一个简单的 demo-math-utils.js,包含 addmultiply 两个函数。系统走了完整流程:

  • Phase 0 判断:新文件 → 🔴 走审
  • Phase 2:写代码(24行,含 JSDoc)
  • Phase 3:code-reviewer 审代码
  • Phase 4:0 CRITICAL、0 HIGH → 通过

1 轮过审,review 报告保存在 .claude/reviews/ 目录下。

踩的坑

  1. deepseek-v4-pro 安全分类器经常挂 — 写文件的时候 Edit 被拦截了好几次,最后用 Write 整个覆写绕过了
  2. skill 文件太长 — 274 行的 SKILL.md,Edit 工具匹配 old_string 时如果不够精确就失败
  3. Phase 0 的设计改了三次 — 最开始想放在 CLAUDE.md 里,后来觉得太分散;想用 hook,又太重。最后放在 skill 的 Phase 0,既集中又不干扰其他流程

下一步想法

  • 把审手从 code-reviewer 扩展到 security-reviewer,安全相关代码自动双审
  • 支持"审手意见分歧"——Writer 觉得审手说得不对的时候,可以反驳
  • 加个统计面板,看过去审了多少次、拦截了多少问题

写代码有人审,跟没人审,出来的东西真的不一样。现在我的 Claude Code 会自己帮我盯着了 😎

Links

Social