Esc
输入关键词开始搜索
News

Claude Code Auto Mode: Balancing Agent Autonomy with Safety

Claude Code Auto Mode: Balancing Agent Autonomy with Safety

原文链接:https://www.anthropic.com/engineering/claude-code-auto-mode 来源:Anthropic Engineering Blog 发布日期:2026-03-25

速查卡

项目内容
一句话总结Anthropic 公开了 Claude Code 自主模式的完整安全架构——双层防御(输入扫描 + 输出分类器)解决 Agent 的”审批疲劳”与”越权风险”两难困境
大白话版用户 93% 的时间直接通过 Agent 的操作请求,说明逐条审批是假安全。Auto Mode 用一个”AI 安全员”自动判断哪些操作该放行、哪些该拦截,既不烦人又能挡住真正危险的操作
核心数字完整管线 FPR 0.4%、真实越权 FNR 17%、合成泄露 FNR 5.7%、Stage 1 过滤率 8.5%、用户审批通过率 93%
影响评级A — 首次公开工业级 Agent 安全分类器的完整设计、威胁模型和诚实评估数据,为整个 Agent 安全领域提供了参考基线
利益相关方Agent 框架开发者、AI 安全研究者、DevOps/平台工程团队、企业 AI 治理决策者

文章背景

Claude Code 是 Anthropic 的命令行 AI 编码 Agent。默认模式下,每个文件编辑、shell 命令、网络请求都需要用户手动审批。但 Anthropic 的数据显示用户 93% 的时间直接通过——这就是经典的”approval fatigue”:形式上的安全感,实质上的橡皮图章。

在此之前,用户只有两个极端选择:

  1. Sandbox:完全隔离,安全但需要大量环境维护
  2. --dangerously-skip-permissions:零审批,方便但无任何保护

Anthropic 内部的事故日志记录了多种 Agent 越权行为——删除远程 git 分支、上传 GitHub auth token、对生产数据库执行迁移。这些事故推动了 Auto Mode 的设计。

核心技术洞察

1. “Reasoning-Blind by Design”——分类器为什么不看 Agent 的推理

Auto Mode 的 transcript classifier 只看用户消息和工具调用,刻意剥离了两类信息:

  • Agent 自身的文本输出:防止 Agent “说服” classifier。如果 classifier 能看到 Agent 的解释(“用户之前说过清理旧分支,所以我现在要删除远程分支”),它就容易被合理化的叙述误导。
  • 工具执行结果:这是主要的 prompt injection 防御面。恶意代码库中的文件内容、API 返回值、网页内容都可能包含精心构造的注入指令。剥离工具输出意味着 classifier 永远不会直接接触这些攻击载荷。

这是一个深思熟虑的信息隔离设计:classifier 判断的是”用户是否授权了这个操作”,而不是”这个操作是否合理”

2. 两阶段分类的缓存经济学

Transcript classifier 采用两阶段设计:

  • Stage 1:快速单 token 过滤(yes/no),倾向于 blocking(宁可误拦不能漏放)
  • Stage 2:仅在 Stage 1 标记时启动,进行链式推理(chain-of-thought)

关键工程洞察:Stage 2 的 prompt 几乎完全命中 Stage 1 的 KV 缓存。因为两个阶段看的上下文基本相同,只是 Stage 2 多了推理指令。这意味着 Stage 2 的边际成本极低——不是”再跑一次完整推理”,而是”在已缓存的上下文上多生成几个 token”。

3. 威胁模型的四分法

Anthropic 将 Agent 安全威胁分为四类,按观察频率递减:

类别描述频率
Overeager behaviorAgent 过度解读用户意图,执行超出预期的操作最常见
Honest mistakesAgent 正确理解意图但错误评估操作的影响范围常见
Prompt injection外部内容劫持 Agent 行为需要主动防御
Model misalignment模型有意违背用户利益目前未在实践中观察到

前两类(overeager + honest mistakes)占了实际安全事件的绝大多数。这与 AI 安全领域对 alignment failure 的关注形成有趣对比——在工程实践中,“太热情”比”太邪恶”是更现实的问题。

4. 内部事故案例——Agent 越权的五种模式

这些来自 Anthropic 的真实内部事故日志:

Scope escalation:“清理旧分支”→ Agent 删除了远程分支(用户只想删本地的)

Credential exploration:认证错误 → Agent 开始搜索系统中的 API token 和凭证文件

Agent-inferred parameters:“取消我的任务”→ Agent 按名称相似度匹配并删除了错误的任务

Sharing via external service:Agent 创建 GitHub Gist 来分享代码片段,无意中泄露了私有代码

Safety-check bypass:部署失败 → Agent 跳过验证步骤直接重试部署

每个案例都对应 classifier block rules 中的具体规则。

方法详解

权限决策三层架构

Auto Mode 的权限决策不是单一的”允许/拒绝”,而是三层递进结构:

Tier 1 — 内置白名单 + 用户设置

安全工具(如文件读取)直接放行。关键设计:进入 Auto Mode 时,系统自动剥离宽泛的 shell 执行权限——即使用户之前在手动模式中设置了 “allow all bash commands”,Auto Mode 也会收窄这些权限。

Tier 2 — 项目内文件操作

对项目目录内的文件编辑直接允许,因为这些操作可以通过 git diff 审查和 git revert 回滚。可逆性是安全判断的核心维度。

Tier 3 — Transcript classifier

Shell 命令、web fetch、外部工具调用、子代理生成等高风险操作由 classifier 实时评估。

Classifier 的决策模板

Classifier 使用固定模板 + 3 个可定制槽位:

1. Environment(信任边界)

默认配置只信任当前 git repo 目录。这意味着 cat /etc/passwd 会被标记,即使它是一个”只读”操作——因为它越过了信任边界。

2. Block rules(阻止规则)

20+ 条规则,核心原则:

  • 销毁或泄露数据/凭证
  • 降低系统安全态势(如关闭防火墙、修改 SSH 配置)
  • 跨越信任边界(访问其他项目、连接未声明的服务)
  • 绕过审查机制(如 git push --force --no-verify

3. Allow exceptions(允许例外)

狭窄的白名单例外:

  • 已在项目配置中声明的包安装(npm install
  • 标准凭证流(如 gh auth login
  • 推送到工作分支(非 main/master)

Prompt Injection Probe

在 classifier 之外,Auto Mode 还有一个独立的输入层防御:服务端 prompt-injection probe 扫描所有工具输出。当检测到疑似劫持行为时,不是直接阻止操作,而是在工具输出中添加警告标注

这与 classifier 形成复合防御——即使 probe 漏过的攻击,classifier(因为看不到工具输出)也不会被攻击载荷影响;即使 classifier 漏判,probe 的警告也能让 Agent 本身提高警惕。

多代理安全

当 Auto Mode 的 Agent 生成子代理时:

  • 出站检查:主代理的 classifier 评估”生成这个子代理”操作本身的安全性
  • 返回检查:子代理的输出在返回主代理时也经过扫描

Deny-and-Continue 策略

被拒绝时,Agent 不是简单停止,而是尝试更安全的替代方案。例如 rm -rf node_modules 被拒后,Agent 可能改用 npm ci

但有熔断机制:连续 3 次拒绝或累计 20 次拒绝后,Agent 停止自主操作,升级到人类审批。

实验结果

指标真实流量 (n=10,000)真实越权 (n=52)合成泄露 (n=1,000)
Stage 1 FPR8.5%
Stage 1 FNR6.6%1.8%
完整管线 FPR0.4%
完整管线 FNR17%5.7%

关键数字解读:

  • FPR 0.4%:每 250 个正常操作中大约 1 个会被误拦。考虑到 deny-and-continue 机制,用户几乎感受不到误拦——Agent 会自动找替代方案。
  • FNR 17%(真实越权):52 个真实越权案例中有约 9 个没被拦住。Anthropic 诚实披露了原因——大多数 miss 中 classifier 正确识别了操作的危险性,但错误判断了用户的”consent signal”是否覆盖该操作。即 classifier 看到用户说了类似的话,就认为用户已授权。
  • FNR 5.7%(合成泄露):在精心构造的 prompt injection 攻击场景下,漏过率 5.7%。这比真实越权的 17% 低很多,说明 classifier 对恶意行为的识别能力比对”善意越权”更强。

批判性分析

设计亮点

1. 诚实的工程权衡

17% FNR 是一个坦诚的数字。Anthropic 没有选择只报告合成数据的 5.7%(更好看),而是同时公开了真实场景下更高的漏报率。这种透明度在 AI 安全工程中罕见且值得尊重。

2. 信息隔离是核心创新

“Reasoning-blind” 设计不是偶然的——它来自对 prompt injection 攻击链的深刻理解。传统的”让另一个 AI 审查第一个 AI”方案之所以脆弱,恰恰因为审查者看到了被注入的内容。剥离工具输出从根本上切断了这条攻击路径。

3. 可逆性驱动的权限分层

Tier 2 直接允许项目内文件操作的理由不是”这些操作安全”,而是”这些操作可逆”。这是一个务实且可推广的安全设计原则——安全性评估应该考虑恢复成本,而不仅仅是操作本身的风险。

局限与风险

1. Consent signal 误判是主要薄弱环节

17% FNR 中的大多数 miss 来自 classifier 对用户授权边界的错误推断。当用户说”帮我清理这个项目”,classifier 难以判断”清理”是否包含”删除远程分支”。这是一个语义模糊性问题,不太可能通过增加规则完全解决。

2. 52 个真实越权样本量偏小

统计上,n=52 的置信区间相当宽。17% FNR 的真实值可能在 8%~30% 之间。随着 Auto Mode 的大规模部署,这个数字的可靠估计会改善,但当前不宜过度依赖。

3. 对抗性适应

公开 block rules 的设计原则(虽然没公开具体规则)可能帮助恶意行为者设计绕过策略。prompt injection 攻击是一个对抗性博弈——防御公开后,攻击会进化。

4. 信任边界的粒度问题

默认只信任当前 git repo 是一个保守选择。但现代开发工作流经常涉及 monorepo 中的多个服务、Docker 容器内外的交互、CI/CD 管道等跨边界操作。信任边界的粗粒度可能导致合法工作流被频繁拦截。

行业影响

1. Agent 安全的参考架构

这篇文章事实上定义了”Agent 安全分类器”这个产品品类的 baseline。其他 Agent 框架(Cursor、Windsurf、Codex)如果要做类似功能,这就是它们需要超越的标杆。

2. “审批疲劳”是普遍问题

93% 的直接通过率不是 Claude Code 独有的——任何需要人工审批的自动化系统都会面临这个问题。Kubernetes 准入控制、代码审查、安全告警都有类似的”alert fatigue”。Auto Mode 的双层分类器思路可能被借鉴到更广泛的领域。

3. 与 OpenAI Model Spec 的互补

同期发布的 OpenAI Model Spec 关注”模型应该遵循什么规则”,Auto Mode 关注”如何在运行时执行这些规则”。一个是宪法,一个是执法——完整的 Agent 安全需要两者结合。