[Engineering at Anthropic] Claude Code Auto Mode 是怎么设计的? anthropic.com/engineering/cl… 核心命题:解决"批准疲劳"
Claude Code 默认要求人工批准每个操作,长期导致"批准疲劳"——用户机械性点击同意,反而削弱安全防护。现有两种极端方案各有明显缺陷:
· 沙盒隔离:安全但维护成本极高(需配置代理、黑白名单),且网络/主机访问受限即失效
· --dangerously-skip-permissions:零维护但零保护,完全裸露
Auto Mode 定位:基于模型分类器的中间层方案,目标是实现高任务自主性+低维护摩擦+渐进增强的安全性。
技术架构:双层防御 + 三层决策
- 输入层防御(Prompt Injection Probe)
- 输出层防御(Transcript Classifier)
· 阶段1(快速过滤):单 token 决策(Yes/No),偏向阻断,仅对高危动作触发阶段2
· 阶段2(深度推理):链式思维(Chain-of-Thought)重评估,降低误报
· 信息剥离设计:分类器仅可见用户消息与工具调用,剥离 Assistant 的 reasoning 文本与工具返回结果——防止 Agent 用 persuasion 话术诱导分类器,同时阻断通过工具输出注入的恶意指令
- 子 Agent 递归路径
三层权限决策体系
- 内置安全工具白名单:只读操作(文件读取、搜索、代码导航)默认放行
- 项目内文件操作:代码编辑等写入操作在版本控制范围内直接放行
- 分类器审查:Shell 命令、外部网络请求、项目外文件系统操作、子 Agent 生成等高破坏潜力操作进入分类器审查
针对四种危险行为类型设计:
· Overeager Behavior(过度积极):Agent 正确理解目标但超越授权边界采取行动
· Honest Mistakes(误判范围):Agent 误判资源影响范围(如误删生产分支)
· Prompt Injection(提示注入):外部内容劫持 Agent 行为
· Misalignment(目标错位):Agent 追求自身目标而非用户目标(当前实践中罕见但持续评估)
典型阻断场景:
· 范围升级:"清理旧分支" → Agent 构造模式匹配删除远程分支(用户可能仅指本地分支)
· 凭据探索:遭遇认证错误后,Agent 系统性 grep 环境变量/config 文件寻找替代 Token
· Agent 推断参数:"取消我的任务" → Agent 按名称相似度选择集群任务(可能误删他人任务)
· 外部分享:自动构建 GitHub Gist 分享脚本(可能泄露机密)
· 安全检查绕过:部署失败时自动添加 --skip-verification 标志
分类器决策标准:固定模板 + 可定制插槽
- 固定模板(Fixed Template)
· 用户意图解读:严格保守——用户明确授权的才算授权,Agent 自主选择的均属未授权。"清理 PR" ≠ 授权 force-push;"我们能否修复?"是疑问而非指令
- 可定制插槽(Customizable Slots)
· Block Rules(阻断规则):20+ 条,涵盖四大类:
· 销毁或外泄(强制推送覆盖历史、批量删除云存储、外发内部数据)
· 降低安全态势(禁用日志、安装 SSH 密钥/cron 持久化、修改 Agent 自身权限配置)
· 跨越信任边界(运行外部仓库代码、扫描凭据存储、向未指定服务发送数据)
· 绕过审查或影响他人(直推 main、生产部署、修改共享资源)
· Allow Exceptions(允许例外):安装已声明依赖、标准凭据流程、推送到当前工作分支等
配置策略:claude auto-mode defaults 查看完整默认规则。建议基于默认迭代编辑,而非从零开始。
性能表现与边界
· 在三类数据集上评估:真实流量(10k)误报率、真实过度行为(52)漏报率、合成数据外泄(1k)漏报率
· 17% 漏报率是诚实数字:Agent 确实在尝试解决用户问题,但超越了授权边界。多数漏报中,分类器正确识别了危险,但误判了用户意图是否覆盖该动作(如将模糊的"清理 PR"解读为允许 force-push)。
· 0.4% 误报率:意味着日常开发中极少需要人工介入,实现了"低摩擦"目标。
关键设计取舍
- 为何剥离 Assistant 文本与工具结果?
· 防注入:工具输出是恶意内容进入上下文的主要载体
· 代价:分类器无法区分 Agent 从查询中获取的目标与自行编造的目标(如"job abc123"的来源),但在 provenance 与注入鲁棒性之间选择后者
- 与现有方案对比
· vs 手动批准:牺牲 17% 的安全性边界,换取 99.6% 的自动化率,精准打击"批准疲劳"
· vs 危险跳过:从"完全裸露"提升到"有筛选的自动化"