默认情况下,Claude Code执行每条命令前都会暂停并等待确认。这一机制本为保障安全,但现实中用户最终接受了 93% 的请求。

重复点击会让人逐渐麻木," approve"也随之成为肌肉记忆,导致安全检查失去作用。这种现象就是 approval fatigue(审批疲劳)。
遇到审批疲劳时,用户通常会走向两个极端:
--dangerously-skip-permissions:完全关闭确认。操作没有摩擦,却也无人阻止事故发生。两种方案之间存在巨大空缺。
Anthropic 最近推出 Auto Mode,正是为了补上这一空缺:由模型驱动的分类器取代人工审批,在保障安全的同时,使 AI 能够真正自主运行。
其核心思路十分明确:只拦截那些"用户没有要求、模型自行发挥"的操作,其余操作全部放行。
Auto Mode实际上采用两套职责清晰的机制:
第一层:输入侧——对抗提示词注入模型读到的一切(文件内容、网页抓取结果、shell 输出)都会先经过一个探针扫描。如果内容看起来像是在试图劫持 AI 行为,系统会在传给 Agent 之前插入一条警告,让模型"当心这个,别被带跑"。
第二层:输出侧——Transcript 分类器会在每项工具调用真正执行前进行审查。该分类器运行于 Sonnet 4.6,并替代"人类审批者"履行判断职责。
分类器按两个阶段运行:
这样设计是因为多数操作会在阶段一直接放行,只有确实可疑的操作才使用成本较高的推理阶段。
并非每项操作都需要分类器审查。Auto Mode按风险由轻到重,将权限判断划分为三层:
| 层级 | 内容 | 拦截成本 |
|---|---|---|
| 第一层 | 安全工具白名单(读文件、搜索代码等不会修改状态的操作) | 无 |
| 第二层 | 在项目目录内写入或编辑文件 | 无 |
| 第三层 | Shell 命令、外部工具调用以及项目外文件操作 | 由Sonnet 4.6 分类器审查 |
进入 Auto Mode 后会发生一项重要变化:系统将静默移除授予"任意代码执行"权限的规则,例如不受限制的 shell 访问,以及宽泛的 python/node/ruby 解释器调用。这些规则虽然方便,但直接交给分类器判断仍然过于危险。
这里的设计很有意思。分类器的提示词分两块:固定模板 + 可配置槽位。
固定模板负责说明判断方式,并告知分类器:
可配置槽位支持用户自行定义:
Anthropic使用三套数据集进行了评估:
| 数据集 | 描述 |
|---|---|
| 真实内部流量(n=10,000) | 真实的 Claude Code 工具调用 |
| 真实过度发挥行为(n=52) | 员工实际会话中曾发生的危险操作 |
| 合成数据外泄(n=1,000) | 包含混淆技术的伪造数据外泄尝试 |
完整管道的最终结果:
对于 17% 的漏报,相关原因也得到详细分析:分类器其实正确发现了危险,却在判断"用户的话是否真正授权了相应危险级别"时出现偏差。例如,用户要求"清理一下这个 PR",分类器识别出 force-push,却无法确定这句话所涵盖的授权边界。"提到一句相关命令"并不等于"充分理解后果并表示同意"。
Anthropic 也明确指出:Auto Mode适合此前使用 --dangerously-skip-permissions 的人,能够带来巨大改进;但若原本就在认真检查每项审批,Auto Mode目前还不能取而代之。
分类器只读取用户消息与工具调用指令,Claude 自身的解释和工具输出结果都会被剥离。
原因在于 Agent 可能会通过生成貌似合理的解释来"说服"分类器,例如宣称"这是安全的,因为用户此前默许过"或"这个目标肯定由自己创建"。分类器若读取这些内容,就有可能受到误导。
因此,其判断依据是实际做了什么,而不是如何解释。
这还带来一个额外优点:即使某个模型在思维链中隐藏了不良意图,只要最终动作没有触犯规则,仍可继续执行;相反,一旦动作越过红线,无论动机多么纯粹都会被拦截。这两个不同维度的安全机制可以相互补充。
Auto Mode要解决的并非"AI 不安全",而是"人类在低摩擦场景中难以持续保持警惕"这一现实问题。
由模型判断意图,再让分类器守住底线。它虽不是完美方案,却是在实际工作流中确实可用的折中选择。
原文:www.anthropic.com/engineering…