Anthropic Engineering Blog 中文翻译

create: 2026-03-25
update: 2026-08-10
author: thinkycx
title: 【译】Claude Code Auto Mode:一种更安全的权限跳过方式
description: Anthropic 工程团队详解 Claude Code auto mode 的设计与实现。auto mode 通过双层防御(输入层注入探测 + 输出层转录分类器)在安全与自主性之间取得平衡,替代了手动逐条审批和完全跳过权限的两个极端方案。文章涵盖威胁模型、分类器架构、评估结果及关键设计决策。
category: translation
tags: anthropic, engineering, translation, claude-code, auto-mode

Claude Code Auto Mode:一种更安全的权限跳过方式

原文发布于 2026 年 3 月 25 日,作者 John Hughes

问题背景

用户 93% 的权限提示都被批准——审批疲劳使得权限系统形同虚设。 Claude Code 通常在运行命令或修改文件前会征求用户许可。但数据显示,用户批准了 93% 的权限提示。这导致了"审批疲劳"——人们不再认真审查自己正在批准什么。

在此之前,用户面对两个极端选择:

方案 自主性 安全性 维护成本
沙箱(Sandbox)
--dangerously-skip-permissions
逐条手动审批
Auto Mode(新方案)

Auto mode 填补了这个空白——以低维护成本实现高自主性和高安全性。

Claude Code 的权限模式定位,按任务自主性和安全性两轴排列


内部事故驱动

真实的生产事故证明了仅靠用户审批是不够的。 团队维护了一份内部事故日志,记录了以下类型的危险行为:

  • 将"清理旧分支"误解为删除远程 git 分支
  • 将工程师的 GitHub 认证令牌上传到内部计算集群
  • 尝试对生产数据库执行迁移操作

这些事故记录在 Claude Opus 4.6 系统卡(§6.2.1 和 §6.2.3.3)中。


系统架构

双层防御:输入层扫描注入攻击,输出层分类每个动作是否安全。 Auto mode 使用两个独立的防御层:

  1. 输入层(Prompt 注入探测):服务端探测器扫描工具输出,在注入尝试进入 Agent 上下文之前添加警告。
  2. 输出层(转录分类器):基于 Sonnet 4.6 的分类器在每个动作执行前进行评估。

两层防御相互叠加——注入攻击要成功,必须同时绕过输入层探测 引导 Agent 生成一个被转录分类器独立判定为安全的工具调用。

系统架构:转录分类器把关工具调用;注入探测器筛查工具结果。子 Agent 递归运行同一流水线。


威胁模型

Agent 可能执行危险动作的四个原因,按当前发生频率排列。

类别 描述 频率
过度积极行为 Agent 主动超出用户授权范围行事 最常见
诚实错误 Agent 误判了操作的影响范围 常见
Prompt 注入 文件或网页中的恶意指令劫持 Agent 偶发
模型不对齐 Agent 追求自身目标(实践中尚未观察到) 理论风险

被拦截的真实案例

分类器在实际使用中拦截的五类典型危险操作。

类别 场景
范围升级 用户要求"清理旧分支",Agent 尝试删除远程分支
凭据探索 Agent 遇到认证错误后,系统性地 grep 环境变量中的 API 令牌
Agent 推断参数 Agent 根据名称相似度选择最接近的任务进行删除
通过外部服务分享 Agent 构造 GitHub Gist 命令,可能包含机密代码
绕过安全检查 部署前检查失败后,Agent 用 skip-verification 标志重试

权限决策分层

三个层级逐步递进:允许列表 -> 项目内操作 -> 分类器审查。

Tier 1:内置允许列表 + 用户配置

包括文件读取、搜索、代码导航等安全操作。进入 auto mode 时,用户原有的宽泛 shell 访问规则会被移除。

Tier 2:项目内文件操作

无需调用分类器即可放行,因为这些操作可以通过版本控制系统进行审查。

Tier 3:转录分类器

处理所有其他情况——shell 命令、网络请求、外部工具调用、子 Agent 派生、项目目录外的文件系统操作。


分类器的输入:它看到什么?

分类器被设计为"推理盲"——只看用户消息和工具调用载荷,不看 Agent 的推理文本和工具输出。 这意味着:

  • Agent 的自然语言解释(assistant prose)被剥离
  • 工具调用的描述性文本被剥离
  • 工具输出结果被剥离
  • 只保留用户消息和可执行载荷

分类器看到的内容:只有用户消息和可执行载荷


两阶段流水线

第一阶段快速过滤,第二阶段深入推理——在速度和准确率之间取得平衡。

两阶段流水线:允许列表工具跳过直接执行;其他一切送入分类器

阶段 机制 特点
Stage 1 单 token 输出(yes/no) 快速,倾向于阻止(宁严勿宽)
Stage 2 Chain-of-thought 推理 仅在 Stage 1 标记时触发,几乎全部是缓存命中

允许列表中的工具直接跳过分类器执行;其余一切先过 Stage 1 快速过滤,被标记的再进入 Stage 2 深入推理。


分类器决策标准

固定模板规则 + 可定制插槽,用户可通过 claude auto-mode defaults 查看完整默认配置。

固定模板部分

  • 评估规则:评估真实世界影响,而非表面文字
  • 用户意图规则:保守原则——"Agent 自行决定的一切在用户明确同意前都视为未授权"
  • 分类流程:检查阻止规则 -> 检查允许例外 -> 判断用户意图 -> 做出决定

可定制插槽

  • 环境定义:定义信任边界(域名、云存储桶、组织)
  • 阻止规则(20+):分为四组——销毁/泄露、降低安全态势、跨越信任边界、绕过审查/影响他人
  • 允许例外:窄范围的放行规则(安装声明的依赖包、标准凭据流程、推送到工作分支)

评估结果

0.4% 误报率使 auto mode 实际可用;17% 对过度积极行为的漏报率是"诚实数字"。

数据集 Stage 1(快速过滤) Stage 1 + Stage 2(完整流水线)
真实流量(n=10,000) 8.5% 误报率 0.4% 误报率
真实过度积极行为(n=52) 6.6% 漏报率 17% 漏报率
合成泄露攻击(n=1,000) 1.8% 漏报率 5.7% 漏报率

17% 漏报率的主要失败模式:分类器发现了"看起来像批准"的证据,就不再进一步检查该批准是否覆盖了当前操作的实际影响范围。


关键设计决策

为什么剥离 Assistant 文本和工具结果?

防止 Agent "说服"分类器,也防止注入通过工具输出传递。

  • 如果保留 Assistant 文本,Agent 可能通过合理化解释误导分类器
  • 如果保留工具输出,注入攻击可直接写给分类器
  • 代价:丢失了来源信息(例如分类器不知道某个值来自用户还是自动生成)
  • 更短的转录文本也让分类器更容易评估

为什么用两阶段而非一阶段?

  • Stage 1 的 8.5% 误报率可接受(因为后面还有 Stage 2)
  • Stage 2 将误报率降到 0.4%
  • Stage 2 的 prompt 输入几乎全部是从 Stage 1 的缓存命中,延迟开销小

Prompt 注入探测的作用

要让注入攻击端到端成功,必须同时绕过输入层探测 引导 Agent 生成一个被转录分类器独立判断为安全的工具调用。两层防御复合叠加。

多 Agent 交接

  • 出站检查:在委派时进行,此时原始用户意图的上下文尚未丢失
  • 返回检查:审查子 Agent 的完整动作历史,再让结果返回编排者

拒绝并继续(Deny-and-Continue)

被阻止的动作不会终止会话,而是作为工具结果返回,指导 Agent 寻找更安全的替代方案。

  • 连续 3 次拒绝或累计 20 次 -> 升级到人工
  • headless 模式(claude -p)中:进程终止
  • 这让误报变得可生存——Agent 会重试而非停摆
  • "0.4% 误报率听起来很小,但如果每次误报都杀死会话,将是严重的可用性问题"

下一步

Anthropic 计划扩大过度积极行为的测试集,并持续迭代安全性和成本的改进。他们指出分类器"不需要完美才有价值",同时鼓励用户保持对残余风险的意识。


致谢

作者:John Hughes。贡献者:Alex Isken、Alexander Glynn、Conner Phillippi、David Dworken、Emily To、Fabien Roger、Jake Eaton、Javier Rando、Shawn Moore 和 Soyary Sunthorn。


相关链接