E01 Claude Code 确认与 Diff 机制剖解
剖解 Claude Code 的工具确认(permission prompt)、diff 呈现与 auto-accept 机制,回答一个 PM 必须先想清楚的问题:当 AI 一秒钟能改 300 行代码、人一分钟只能读懂 20 行时,那个”y/n”确认弹窗到底在做什么? 本节的视角是把确认机制当作审阅瓶颈管理的真实战场——不是把它看成”安全开关”,而是看成一个产品在”防止橡皮图章”和”防止把人淹死”之间反复横跳的折中产物。本节大量使用 Rick 自己作为 Claude Code 深度使用者的一手体感作为研究材料,这是本专题罕有的”作者即被试”的剖面。
§0 为什么是”确认机制”这个切口,而不是”代码质量”
讨论 Coding Agent 时,业界默认的框架是质量框架:模型生成的代码对不对、能不能跑、有没有 bug。这个框架挡不住本专题的核心命题。因为当生产成本趋零,单位时间产出的代码量暴涨,“对不对”这个问题的总量本身就成了瓶颈——你不缺正确的代码,你缺审完它的带宽。
Faros AI 对 10,000+ 开发者的观测给出了这个反转的量化形状:高 AI 采用团队的 PR 合并数 +98%,但 PR 审阅时间同步 +91%,平均 PR 体积膨胀 154%(来源:Faros AI,经 Aviator/LogRocket 转引,2025)。生产端翻倍,审阅端也翻倍——这意味着 AI 没有”解放”人,只是把人的工作从”写”平移到了”看”。
所以正确的切口不是”Claude Code 写得好不好”,而是”Claude Code 用什么界面机制,去管理那个被它自己撑爆的审阅带宽”。确认弹窗、diff 渲染、auto-accept 开关,这三件套就是 Anthropic 在产品层面对审阅瓶颈给出的、可被逐条拷问的答案。它们是 p307 - Copilot 到 Autopilot 光谱 里 L0–L4 控制权分配的具体落地实现,也是 p305 - 信任架构与可解释性设计 里 “HITL 确认断点只设高风险操作前” 这条原则的真实战场检验。
§1 三件套的机制拆解:permission / diff / auto-accept
Claude Code 的人机控制权,由三个互相咬合的机制承载:
| 机制 | 作用对象 | 默认行为(Rick 一手观察,截至 2026-06) | 审阅瓶颈含义 |
|---|---|---|---|
| 工具确认(permission prompt) | 每一次工具调用(Bash / Write / Edit / 外部 MCP) | 首次调用某类工具时弹确认,提供 “yes / yes don’t ask again / no + 反馈” 三选项 | 把”是否执行”前置成离散决策点,制造审阅断点 |
| Diff 呈现 | 文件写入(Edit / Write) | 落盘前展示 +绿 −红 行级 diff,需用户批准 | 把”改了什么”压缩成可扫描的视觉增量 |
| auto-accept / 权限配置 | 工具调用的批量授权 | 可用 settings.json allow/deny 列表与 “don’t ask again” 把某类工具升级为自动执行 | 用 confidence-gated 思路把低风险操作移出人审 |
这三件套的设计哲学,本质上是 c13 - 幻觉的不可消除性 在交互层的承认:因为模型永远可能输出低概率的错误路径(Softmax 保证它永远输出、永远不沉默),所以对不可逆操作必须保留人审断点。permission prompt 就是那个断点。
但关键的张力在于:断点放得越密,人越累、越倾向无脑按 yes;断点放得越疏,人越省力、但越接近橡皮图章。 这不是工程问题,是认知经济学问题——它直接对应 Herbert Simon 1971 年的奠基命题:“a wealth of information creates a poverty of attention”(信息的丰裕制造注意力的贫困,出自 Computers, Communications, and the Public Interest, ed. Greenberger, 1971, pp.37–52)。Claude Code 的确认弹窗,就是在分配 Rick 这个审阅者的稀缺注意力。
§2 Diff 是”渐进披露 + 信息压缩”,但它在审阅 AI 时悄悄换了任务性质
Diff 这个形式不是 Claude Code 发明的,但它在 AI 语境下承担了新功能:把模型一次性吐出的大段变更,压缩成只展示”变了什么”的最小增量。这正是 Nielsen 1995 提出的渐进披露(progressive disclosure)模式——只呈现当前决策所需的最少信息,以降低外在认知负荷(extraneous load,Sweller et al., 1998 三类负荷框架)。从认知科学看这是对的:有意识注意的信息速率仅约 10–14 bit/s(据 cognitionresearch.org 综述),diff 把信息密度压到工作记忆的 4±2 组块(Cowan, 2001)能扛的范围。
但这里藏着一个被低估的认识论陷阱。CodeAnt.ai 的分析点破了它:diff 只展示”变了什么”,却隐藏了”为什么变、影响哪些依赖、历史怎么演进”(来源:CodeAnt.ai, “Why Diff-Based Code Reviews Overwhelm Developers”)。审阅人类同事的 diff 时,这种隐藏问题不大——因为你可以默认对方有意图、有上下文、会为后果负责。但审阅 AI 的 diff 时,你审的对象没有意图、不承担后果。
LogRocket 的实测把这个性质变化量化了:同一个 REST API 任务,人类写 29 行、审阅 3 分钟;Claude Code 写 186 行、审阅 8–12 分钟。重构任务里差距更大(人类 26 行 vs Claude Code 288 行,审阅 4–5 分钟 vs 15–20 分钟)。该文给出的核心洞察值得每个 AI PM 抄下来:审阅 AI 代码时,你做的不是”验证正确性”,而是”判断必要性”——这是认知性质根本不同的任务(来源:LogRocket, “AI coding tools shift the bottleneck to review”)。
这就是 diff 机制的隐性失效点:它的 UI 是为”验证正确性”优化的(绿加红减、行级对齐),但 AI 强加给审阅者的真实任务是”判断这 288 行里有多少是 AI 自作主张的过度工程”。界面承诺的任务和实际要做的任务错位了——这是 p304 - 防御性 UX:对抗延迟与幻觉 里”纠错三件套”没有覆盖的盲区。
§3 auto-accept 的本质:把 confidence-gating 的判断权交给了人
auto-accept(以及 “don’t ask again”、settings.json 的 allow 列表)是 Claude Code 里最该被 PM 拿放大镜看的设计。它表面是”省去重复确认的便利功能”,实质是一个confidence-gated 自动执行的开关——但置信度的判断主体是人,不是模型。
对比学术界的 confidence-gating 框架(如 Doku 2026 的 Confidence Gate Theorem, arXiv 2603.09947):理想的门控应由系统根据自身置信度自动决定”高置信→自动执行、低置信→触发人审”。Claude Code 没有这样做——它不基于模型对某次 Edit 正确性的置信度来决定弹不弹窗,而是基于工具类型的风险等级(读文件低风险、Bash 高风险)和用户的一次性授权。这是一个深思熟虑的退让,也是它最大的脆弱点。
退让的合理性:模型的 verbalized confidence 本身不可靠(多篇 2024–2026 研究显示 LLM 系统性过度自信),用它做门控信号等于让幻觉自己给自己发通行证。所以 Claude Code 选择把门控阈值 τ 的设定权完全交给人——这呼应 Gaus et al. 2026(arXiv 2605.18045)的反直觉发现:阈值 τ 的选择对系统行为的影响,远大于不确定性估计方法本身的选择。既然方法不可靠,不如把阈值交给人显式控制。
脆弱点:一旦用户点了 “yes don’t ask again” 或在 settings 里把 Bash 加进 allow 列表,那个本该制造审阅断点的机制就永久消失了,而且消失得悄无声息。这正是 automation complacency(自动化惰性,Parasuraman & Manzey, 2010, Human Factors)的教科书诱因:系统长期表现良好后,人会系统性降低监控强度(“learned carelessness”)。Rick 的一手体感印证了这一点——见 §4。
§4 判断主轴:90% 的 Claude Code 用户在确认机制上会踩的四个坑
[!warning] 这一节是本节点的命门。每个坑带”症状 → 为什么会错 → 正确做法 → 真实反例”四件套。
坑一:把”按了 yes”当成”审过了”(橡皮图章幻觉)
- 症状:diff 弹出来,扫一眼绿色行数不多,直接 Enter。一天按几十次 yes,几乎没有一次真正读懂改动逻辑。
- 为什么会错:这是 automation bias 的直接发作。Sele & Chugunova(PLoS ONE, 2024)的实验给出冷酷证据——把”人在环路”加进自动决策后,接受率反而 +7pp、准确率反而下降(误差 17.4→18.0 百分位),人类监督者”未能充当紧急制动器”。确认弹窗的存在感,制造了”我审过了”的心理安慰,但没制造真实审阅。
- 正确做法:把 Rick 的一手实践 SOP 化——对 Write/大块 Edit 强制”先读 diff 再决定”,对 Bash 命令默认逐条读。把 satyaborg 提出的认知前移(cognitive shift to spec)落地:在让 Claude Code 动手前,先在 prompt 里把”改什么、不改什么”写成可机械核对的 spec,把审阅从”批判性读代码”降级为”核对是否符合已批准 spec”——降低审阅的内在负荷(来源:Satya Borg, “Human Review is the Bottleneck”, 2026)。
- 真实反例(Rick 一手):Rick 在一次重构里连按十几个 yes 后,Claude Code 把一个本该只改函数签名的 Edit 顺手”优化”了相邻的错误处理逻辑,引入了一个静默 bug,三天后才在另一处发现。橡皮图章的代价是延迟暴露。
坑二:把 auto-accept / “don’t ask again” 当成永久免审的便利,忘了断点永久消失
- 症状:嫌确认烦,给 Bash 开了 “don’t ask again”;之后 Claude Code 的所有命令行操作再也不弹窗。
- 为什么会错:这是把”降低当前摩擦”和”承担未来风险”混为一谈。EU AI Act 第 14 条对 automation bias 的批评同样适用于此——它只要求”让用户知道有风险”,不要求”从设计上减轻风险”(Laux & Ruschemeier, 2025, European Journal of Risk Regulation, 经 arXiv 2502.10036)。一个 “don’t ask again” 复选框就是把”知道风险”和”实际承担风险”混同的微观样本。
- 正确做法:把 auto-accept 当成有作用域的临时授权而非永久配置。Rick 的做法是:只在低风险、可逆、已建立信任的会话里临时放宽,会话结束即收回;不可逆操作(rm、push、数据库写)永不进 allow 列表。
- 真实反例:Claude Code 的开发者社区曾明确请求补充”类 Copilot Edits 的逐 hunk 批准 UI”(GitHub Issue #33932),侧面说明 Claude Code 早期版本的批准粒度偏粗——要么整批 accept、要么不 accept——这正是逼人走向”懒得审、全 accept”的界面诱因。
坑三:信任 AI 的 PR 描述/变更摘要,跳过读代码本身
- 症状:Claude Code 给出一段漂亮的”我做了 ABC 三件事”的总结,读完总结就批准,不看实际 diff。
- 为什么会错:摘要是模型生成的,模型既写代码又写”我改了什么”的自述——这是让被审者撰写自己的审阅报告。arXiv 2602.17084(2026,分析 33,596 个 PR)发现 PR 描述的沟通方式与合并率显著相关(p<0.001, ε²=0.280),且 Claude Code 产生”最长评论和最高正面情绪比例”——一个会用积极语气、结构清晰地描述自己工作的 agent,恰恰最容易诱导审阅者跳过验证。
- 正确做法:摘要只用于建立”该看哪里”的导航,绝不替代读 diff。把摘要当索引,不当结论。
- 真实反例:Perplexity 的引用错误研究(CJR/Tow Center, 2025, 1600 次查询)揭示了同构问题——它的错误多是”来源张冠李戴”(URL 真实、归属错误),比完全捏造更难被发现。AI 的自述同理:看起来都对,错在你没核的那一处。
坑四:用审人类代码的心智模型审 AI 代码(任务性质错配)
- 症状:像 review 同事 PR 那样,找语法、找明显 bug、看风格是否一致。
- 为什么会错:如 §2 所述,审 AI 代码的真实任务是”判断必要性”而非”验证正确性”。AI 不会因为”这段其实不需要”而自我克制,它倾向于过度生产(PR 体积 +154%)。用找 bug 的心智去审,会漏掉”这 200 行根本不该存在”这类元层面问题。
- 正确做法:审阅第一问改成”这次改动有多少是任务真正要求的?“再问”剩下的对不对”。把必要性审阅前置于正确性审阅。
- 真实反例(Rick 一手):Rick 让 Claude Code 加一个小功能,它顺带重写了三个无关函数、加了一套它自认为更好的抽象层。每一行单看都”对”,整体却是不该接受的范围蔓延(scope creep)——用正确性框架审,全过;用必要性框架审,应该退回大半。
§5 产品 PM 视角补盲:确认弹窗不只是安全开关,它是信任的计量界面
工程视角看确认机制是”安全控制”;产品视角必须补三个被工程框架窄化掉的点:
- 确认频率是用户留存的隐形杀手。每个弹窗都是一次任务中断,而打断后恢复全注意力平均需 23 分 15 秒(Gloria Mark, UC Irvine)。弹窗太密,用户体感是”这工具比我自己干还累”,会流失或一怒之下全开 auto-accept(反而更危险)。这是 GTM 与留存问题,不是安全问题。
- 批准粒度是商业信任的代理变量。提供逐 hunk / 逐文件 / 整批三级粒度(如 Copilot Edits)的产品,等于在说”我们尊重你想审到多细”;只提供整批 accept 的产品,等于在说”要么全信我、要么别用”。粒度即态度。Claude Code 在这条上一度落后于 Cursor/Copilot(Issue #33932),是产品信任架构的可见缺口。
- auto-accept 的开关位置是责任分配的法律界面。一旦出事,“是用户点了 don’t ask again” 会成为责任归因的关键。PM 设计这个开关时,是在设计一份隐性的责任转移协议——这正是 Laux & Ruschemeier 批评 EU AI Act 时指向的”deployer 责任未被充分覆盖”问题在产品层的投影。
§6 对手框架回应:接受”确认机制是安全剧场”,但守住它的真实价值边界
业界反方立场(接受其对的部分):有一派尖锐的观点认为,高频确认弹窗在高可靠系统里就是安全剧场(security theater)——人根本不会真读,按 yes 是肌肉记忆,弹窗只是把责任从厂商转移给用户的免责装置。这个批评有坚实的实证支撑:Wilson & Caliskan et al.(2025, AAAI/ACM AIES, 528 名参与者)发现,在严重偏见条件下 90% 的决策追随 AI 建议,即便参与者口头表示不信任 AI;Budzyń et al.(2025, Lancet Gastroenterology & Hepatology)发现长期 AI 辅助后医生独立腺瘤检出率从 28.4% 降到 22.4%(deskilling)。这些都说明:有人审 ≠ 审有效。
我坚持的边界与赌注:接受”确认机制无法消除 automation bias”,但坚持它在不可逆操作上仍有不可替代的价值——不是因为它能保证人认真审,而是因为它在出错时把”自动执行”变成了”人显式授权过”,这个差别在 rm -rf、git push —force、数据库写这类操作上是生死攸关的。我赌的是:确认机制的价值不在”提高审阅质量”,而在”为不可逆操作保留一个可以喊停的物理时刻”。 把它当质量工具会失望,当熔断器才用对。
Rick 未读的对手框架引入:Endsley & Kiris(1995, Human Factors)的 Out-of-the-Loop(OOL)理论是本节自己盲点的拷问者——它指出被动监控会让人的情境意识(SA)退化,一旦自动化失效,接管延迟、错误率急升(Air France 447 是致命案例)。这对 Claude Code 的暗示是:越好用的 auto-accept,越制造 OOL。当 Rick 习惯了全 accept,他对代码库的心智模型会悄悄退化,等到必须手动接管(线上事故、Claude 改错了关键逻辑)时,他已经”出局”太久、接不回来了。这是本节”确认机制有真实价值”这一立场的失效场景:在长期高 auto-accept 使用下,确认机制保护不了一个已经丧失情境意识的人。
§7 PM 决策启示:面试 / 选型 / 复现三类落地
- 面试:被问”你怎么看 AI Coding 工具的人机协作设计”,不要答”它能提高效率”。答:“确认机制不是安全开关,是审阅瓶颈的分配器——它在’防橡皮图章’和’防淹没’之间折中,而 auto-accept 是把 confidence-gating 的阈值权交给了人。真正的设计难点是批准粒度和断点密度。” 30 秒立刻区分出”用过”和”想过”。
- 选型:评估 Coding Agent 别比 feature list,比批准粒度 + 断点可配置性 + auto-accept 的作用域控制。能逐 hunk 审、能临时授权、不可逆操作强制弹窗的,优于只能整批 accept 的。把这三条做成选型 checklist。
- 复现:自己做 AI 产品的审批流时,照搬三条原则——(a) 按风险等级而非模型置信度决定断点(因为模型置信度不可信);(b) auto-accept 必须有作用域、可回收,禁止永久全局授权;(c) 摘要只做导航不做结论,强制展示原始 diff。
§8 与已有节点的关系
本节点是 p307 - Copilot 到 Autopilot 光谱 的实例深化:p307 给出 L0–L4 的抽象控制权框架,本节用 Claude Code 这个真实产品把”L2 协作者 ↔ L3 代理人”之间的滑动(即 auto-accept 开关)拆到了交互机制层,并指出其失效模式(OOL、complacency)。本节对 p305 - 信任架构与可解释性设计 做纠偏:p305 主张”HITL 确认断点只设高风险操作前”,本节补充了 p305 未覆盖的反例——确认断点本身会因 automation bias 而失效,“设了断点”不等于”审阅有效”。本节与 c13 - 幻觉的不可消除性 是对话关系:c13 论证幻觉架构性不可消除,本节展示了交互层如何”承认幻觉、为它保留人审断点”的具体工程。本节不复述这些旧节点的事实基础。本节与本专题 0414(coding 审阅)的 E02 是直接接力——E02 应承接本节对单一产品的剖解,做跨产品(Cursor / Copilot / Claude Code)的批准粒度对照矩阵。
§9 关联节点
核心(必读)
- p307 - Copilot 到 Autopilot 光谱
- p305 - 信任架构与可解释性设计
- p304 - 防御性 UX:对抗延迟与幻觉
- c13 - 幻觉的不可消除性
- Claude Code
- Claude
- Agent
- 幻觉
延伸(可选)
- p302 - 七种 AI 交互设计模式
- p306 - 数据飞轮与反馈回路设计
- E01 Coding Agent·Claude Code & Cursor
- Test-Time Compute
- Anthropic
- 0114认识论
- 0117社会学
- AI PM 知识图谱·总索引
修订日志
- 2026-06-07 R0:首稿。建立”确认机制 = 审阅瓶颈分配器”主轴;§4 四坑带 Rick 一手反例;§6 接入 OOL/Endsley 作为自我拷问的对手框架;事实接地至 Faros/LogRocket/Sele&Chugunova/Budzyń/Wilson/Laux&Ruschemeier/CJR/satyaborg/CodeAnt 及 GitHub Issue #33932。