How We Built Claude Code Auto Mode: A Safer Way to Skip Permissions(Claude Code auto mode:更安全地跳过权限审批)
- 原文标题
- How We Built Claude Code Auto Mode: A Safer Way to Skip Permissions(Claude Code auto mode:更安全地跳过权限审批)
- 原文链接
- https://www.anthropic.com/engineering/claude-code-auto-mode
- 作者
- John Hughes 等(Anthropic)
- 发布日期
- 2026-03-25
🎯 一句话
auto 模式的本质是把「每步确认」换成「事后审查」。⭐ 它能不能用,取决于两件事:失败代价够不够低、验证手段够不够客观。
auto mode 是权限管理两个极端之间的中间道路:手动审批(用户约批准 93% 的弹窗,产生审批疲劳)与完全放开(--dangerously-skip-permissions,无任何保护)。它用机器学习分类器自动放行安全操作、拦截危险操作。
威胁模型:四类危险行为
- 过度积极(Overeager): 出于好意但越过授权边界的操作
- 诚实失误: 对资源范围或归属的误解
- 提示词注入: 文件或网页内容中嵌入的恶意指令
- 模型失准: Agent 追求自己的目标(当前模型中罕见)
内部事故日志中的真实案例: 从含糊指令推断出删除远程 git 分支;把 GitHub token 上传到内部系统;试图对生产环境跑数据库迁移;被要求「清理旧分支」时 force-push 覆盖历史;系统性搜索环境变量找备用 API 凭据;创建含潜在机密代码的公开 Gist;绕过部署前安全检查。
双层防御架构
输入层:提示词注入探针
服务端系统在工具输出进入 Agent 上下文之前扫描;发现试图劫持行为的可疑内容时附加警告,指示 Agent 锚定原始用户意图。
输出层:转录分类器
运行在 Claude Sonnet 4.6 上,在每个动作执行前评估。两段式流水线: - Stage 1: 快速单 token 过滤(是/否,无推理)——激进标记(高误报、低漏报) - Stage 2: 仅对被标记项做链式思考推理——大幅消解误报;提示词与 Stage 1 几乎相同因此命中缓存,成本可控
三级权限体系
- 安全工具白名单: 文件读取、文本搜索、代码导航、切换 plan mode 直接放行。进入 auto mode 时自动禁用部分危险的 always-allow 规则(任意 shell、Python/Node 等通配解释器、包管理器命令)
- 项目内操作: 项目目录内的文件写入/编辑自由执行——版本控制下变更可审查
- 转录分类器: 只有高风险动作到达这里——shell 命令、web 请求、外部工具、派生子 Agent、项目外文件系统操作
分类器决策框架
固定模板 + 三个可定制槽位: 1. 环境信任边界: 哪些域名、bucket、服务算内部 2. 20+ 条拦截规则: 分四类——销毁/外传、降级安全、跨越信任边界、绕过审查 3. 放行例外: 如安装已声明的依赖、标准凭据流程
性能数据
| 数据集 | Stage 1 | 完整流水线 |
|---|---|---|
| 真实流量(10,000 动作) | 误报 8.5% | 误报 0.4% |
| 真实过度积极行为(52 例) | 漏报 6.6% | 漏报 17% |
| 合成外传攻击(1,000 次) | 漏报 1.8% | 漏报 5.7% |
17% 的漏报主要源于「授权歧义」——「清理一下 PR」不等于授权 force-push;一次批准不构成同意模式。文章坦承这是真实的安全缺口。
关键设计决策
- 剥离助手文本和工具结果: 防止 Agent 构造有说服力的自我辩护;防止在分类层被提示词注入
- 多 Agent 交接点双重检查: 在子 Agent 委派时(防任务升级)和返回时(抓中途被攻陷)都跑分类器
- 拒绝后继续(Deny-and-continue): 拦截时把拒绝作为工具结果返回并指示寻找更安全的替代方案;连续 3 次或累计 20 次拒绝才终止会话——既防反复试探又容忍误报恢复
定位与局限
在权衡曲线上的位置:手动审批(最安全但高摩擦)→ 完整沙箱(安全但高维护)→ auto mode(高自主+低维护) → 无权限(零维护零保护)。
明确声明:auto mode「不是高风险基础设施上人工审查的替代品」,目标用户是原本会用 --dangerously-skip-permissions 的人。「分类器不需要完美无缺才有价值。」
✅ 检查点
- auto 模式改变了什么?
- 什么条件下适合开 auto?
- 开了 auto 之后,人的角色变成什么?
👀 答案
- ⭐ 把控制点从「每步之前」移到了「整体之后」。不再逐步批准,而是让它跑完一整段再审查结果。
- ①有沙箱或版本控制兜底(失败可回滚)②有客观的验证手段(测试、编译、lint)③任务的失败代价低。⚠️ 三个条件缺一个都不该开——尤其是没有版本控制时,auto 模式的破坏是不可逆的。
- 从「操作员」变成「审查者和规则制定者」:事前把目标、边界、验收标准说清楚,事后审查产出和 diff。⭐ 关键是要真的审查——auto 模式最大的风险不是模型乱来,是人因为「它一直挺靠谱」而放弃了审查。
🛑 可以停在这里
⚡ 走神救援
⭐auto 模式的本质是把「每步确认」换成「事后审查」,即控制点从「每步之前」移到「整体之后」。三个开启条件:有沙箱或版本控制兜底(可回滚)、有客观验证手段(测试/编译/lint)、失败代价低;⚠️缺一个都不该开,尤其没有版本控制时破坏是不可逆的。人从「操作员」变成「审查者和规则制定者」:事前说清目标边界验收标准,事后审查产出和 diff。⭐⭐最大的风险不是模型乱来,是人因为「它一直挺靠谱」而放弃了审查。