Claude Code 2.1.136:当 AI Agent 的安全阈门从‘相信’变成‘验证’

Claude Code 2.1.136:当 AI Agent 的安全阈门从‘相信’变成‘验证’

你让 Claude Code 在 auto mode 下跑一个长任务,回来发现它把你的 AWS credentials 写进了日志文件。或者更糟:它在你没看到的一个弹窗里点了 “允许”,然后把一个安全测试脚本推到了生产环境。

这不是假设。Anthropic 自己的数据说,Claude Code 用户手动批准了 93% 的权限提示。人们已经点习惯了。当一个工具每天向你请求几十次批准,你很快就不再看内容了。这就是为什么 2.1.136 里有两个安全改动值得重视:security-test 标签不再自动允许/拒绝,必须人工审批;新增的 hard_deny 让分类器规则可以无条件执行,无视用户意图。

这不是普通的 bug 修复。这是 AI agent 安全模型正在从“信任”偏移向“验证”的一个缩影。

为什么 93% 的批准率是个问题

Anthropic 在介绍 auto mode 时公开了这个数据:用户手动批准了 93% 的权限请求。听起来像是好事 — 用户信任这个工具。但问题在于,当批准率超过 90%,每一次弹窗都在消耗注意力,却没有增加实际安全性。用户在第三次点击 “允许”后就不再看内容了。

为了解决审批疲劳,Claude Code 提供了两个极端选项:

  • 打开沙箱(sandbox)—— 安全但高维护,每个新能力都需要配置
  • 使用 —dangerously-skip-permissions —— 零维护但毫无保护

Auto mode 是 Anthropic 给出的第三条路:用一个基于模型的分类器在后台审查每个操作,阻止任何超出用户请求、指向未识别基础设施或看起来被恶意内容驱动的操作。分类器运行在两个阶段:第一阶是快速单 token 过滤(是/否),第二阶只在第一阶触发时才启动链式思考推理。

但分类器不是人类。它会犯错。Anthropic 自己估计分类器的误拒率约 17% — 即 17% 被阻止的操作其实是安全的。这是一个明确的 trade-off:你在用效率换取安全边界。

2.1.136 的两个关键安全改动

security-test 标签不再自动处理

在之前版本中,带有 security-test 标签的操作会被自动授权或自动拒绝,不需要人工审批。现在这个自动化被彻底移除了:所有 security-test 相关操作都必须经过明确的人工审批。

这是一个重大的信号。安全测试是高风险操作的代表:它可能涉及渗透测试、权限提升、或者在生产环境中执行可能造成损失的命令。让一个自动标签决定这些操作是否执行,等于把高风险决策交给了一个无法负责的机制。移除自动化是正确的选择,但它也意味着你不能再在 auto mode 下无监睬地跑安全扫描任务了。

hard_deny:无条件阻止

新增的 settings.autoMode.hard_deny 是一个强力机制。它允许管理员配置一类分类器规则,这类规则会无条件阻止相关操作,无视用户意图、无视 allow 例外。

Auto mode 的权限模型分为三层:

  • permissions.deny —— 在分类器之前执行,不可覆盖
  • autoMode.soft_deny —— 分类器阻止,但可以被用户明确意图覆盖
  • autoMode.allow —— 例外列表,可以覆盖 soft_deny

hard_deny 是一个新的层级,位于 soft_deny 和 allow 之间:它被分类器阻止,且不接受任何覆盖。用户即使直接要求执行这个操作,如果它触发了 hard_deny 规则,也会被拒绝。

这解决了一个真实问题:在某些组织环境中,有些操作是绝对不能执行的 — 无论用户觉得自己有多么充分的理由。例如 rm -rf /、生产环境部署、敏感数据库写入。过去,这些需要通过 permissions.deny 来配置,但 permissions.deny 运行在分类器之前,不会看到完整的会话上下文。hard_deny 让分类器可以基于完整上下文做出无条件拒绝。

还修了什么

2.1.136 有 52 个 CLI 改动和 2 个系统 prompt 改动。除了安全模型的重大调整,还有几个值得关注的修复:

  • MCP servers 在 VS Code extension、JetBrains plugin 和 Agent SDK 中 /clear 后不再静默消失
  • 多个 MCP server 并发 OAuth 刷新时不再丢失 refresh token
  • 修复了并发 credential write 覆盖新轮转 OAuth token 造成的登录循环
  • plan mode 现在正确阻止文件写入,即使存在匹配的 Edit allow rule

后两者特别值得注意。它们都是 race condition — 多个进程或会话同时操作凭证时的竞争条件。这说明 Claude Code 的用户规模已经到了单机并发都会出问题的地步,而 Anthropic 正在把这个工具从单用户 CLI 向多会话、多插件的生产级平台转化。

六种权限模式,你该用哪个

Claude Code 目前支持六种权限模式:

| 模式 | 什么可以自动执行 | 最适合 | | default | 仅读取 | 初次使用、敏感工作 | | acceptEdits | 读取、文件编辑、常见文件系统命令 | 代码迭代 | | plan | 仅读取(不写文件) | 探索代码库 | | auto | 所有操作,带后台安全检查 | 长任务、减少审批疲劳 | | dontAsk | 仅预先批准的工具 | CI 和脚本 | | bypassPermissions | 所有操作 | 隔离容器和 VM 专用 |

auto 模式是唯一一个在安全与效率之间寻找平衡的选项,但它也是唯一一个依赖模型判断的选项。其他模式都是确定性的:default 总是问,bypassPermissions 总是执行。auto 模式却在你不知道的时候做出了一个概率性判断。

Anthropic 自己的建议是:auto 模式是为那些之前在用 —dangerously-skip-permissions 的人准备的,不是为那些每个提示都仔细审查的人准备的。如果你对高风险基础设施操作保持警惕,手动审批仍然是更安全的选择。

适用场景

需要长时间自主运行的任务

自动化代码迁移、大规模重构、或者需要跑几十个测试用例的场景。这些任务涉及成百上千次文件读写和命令执行,手动批准会完全打断流。auto 模式让这些任务可以无间断运行。

多人协作的团队环境

hard_deny 和 managed settings 允许管理员在组织层面定义绝对不能执行的操作。每个开发者都可以在这个框架内工作,不需要担心某个人的 Claude Code 实例意外删除了生产数据库。

需要审计跟踪的企业场景

auto mode 的每个拒绝都记录在 /permissions 的 Recently denied 标签下。可以用 PreToolUse hooks 和 PermissionDenied hooks 自定义审计逻辑,比如把所有拒绝写入 SIEM 或发送给安全团队。

踩过的坑

分类器不是完美的

17% 的误拒率意味着 auto 模式会阻止一些安全的操作。如果你的工作流重度依赖某个被误拒的模式,你需要在 autoMode.environment 或 autoMode.allow 中添加例外。但添加太多例外会削弱分类器的保护价值。

不要在生产环境用 bypassPermissions

—dangerously-skip-permissions 的命名不是吓人的。它完全禁用了所有权限提示和安全检查,包括对 .git、.claude、.vscode 等保护路径的写入。只有在隔离容器或 VM 中才应该使用。管理员可以通过 managed settings 完全禁用这个模式。

沙箱和权限是两个独立层次

很多人误以为开启了沙箱就不需要配置权限规则。事实上,沙箱只管控 Bash 命令,不管控 Read/Edit 工具。如果你只配置了 sandbox.denyRead 来保护 SSH 密钥,Claude 的 Read 工具仍然可以读取它。需要同时在两个层次配置相同的路径。

记得加 “$defaults”

如果你在 autoMode.allow、soft_deny 或 environment 中设置了自定义规则但忘记包含 “$defaults”,内置的所有规则都会被替换掉。这意味着 force push、数据泄露、curl | bash 等默认阻止规则全部失效。只有当你真的打算完全自己控制规则列表时才应该省略 “$defaults”。

配置示例

一个典型的团队级安全配置:

{
  "defaultMode": "auto",
  "autoMode": {
    "environment": [
      "\$defaults",
      "github.com/my-org",
      "s3://my-org-bucket"
    ],
    "hard_deny": [
      "\$defaults",
      "deploy to production",
      "modify production database",
      "access AWS credentials"
    ],
    "allow": [
      "\$defaults",
      "run tests in CI environment"
    ]
  },
  "permissions": {
    "deny": [
      "Bash(rm -rf /)",
      "Bash(rm -rf ~)",
      "Read(~/.ssh/*)",
      "Read(~/.aws/*)"
    ]
  }
}
# 查看当前生效的分类器配置
claude auto-mode config

# 查看内置默认规则
claude auto-mode defaults

# 让 AI 审查你的自定义规则
claude auto-mode critique

什么时候别用 auto 模式

  • 你在操作含有金融数据、医疗记录或 PII 的代码库 — 分类器的 17% 误拒率不是唯一的问题,更大的风险是它可能错误地允许了某个不应该执行的操作
  • 你的团队没有安全评审流程 — auto 模式不是无人监睬的免费通行证,它是一种需要配置和监睬的权限模型
  • 你只是偶尔用一下 Claude Code — 对于短任务,default 或 acceptEdits 模式的审批负担完全可以接受

总结

Claude Code 2.1.136 的安全改动传达了一个清晰信号:AI agent 不再被视为可以“信任但验证”的工具,而是需要“验证再信任”的系统。security-test 的自动授权被移除是因为高风险操作不应该由任何自动化机制决定。hard_deny 的引入是因为有些边界不应该被用户意图覆盖。

这些改动的意义超出了 Claude Code 本身。它们是整个 AI agent 生态的警示灯:当 agent 被赋予越多自主性,安全模型必须同步收紧。否则我们得到的不是更高效的开发者,而是更多的安全事故。

你的 agent 是在一个有安全边界的沙箱里运行,还是在一个有全部权限的终端里自由行动?这个问题的答案决定了你能不能在生产环境里用它。

GitHub: https://github.com/anthropics/claude-code 文档: https://code.claude.com/docs/en/auto-mode-config

相关文章

Agent Harness:为什么你的模型不是问题所在

LangChain 在 TerminalBench 2.0 上从 30 名开外飙到了第 5 名。他们没有换模型。同一个 LLM。同样的参数。唯一改变的是包裹在模型外面的那层软件——Harness。 ...

Vibe-Trading:把交易想法变成可回测研究的个人金融 Agent

Vibe-Trading:把交易想法变成可回测研究的个人金融 Agent

你问一个交易问题,LLM 可以给你一段漂亮解释。问题是:它没有数据、没有回测、没有报告、没有复现实验路径。你得到的是观点,不是研究。 金融 Agent 最危险的地方,不是它不会说话,而是它太会说话。 ...

Postiz Agent CLI:把 28 个社交平台的发布权交给你的 AI

你写了一个能读 RSS、能总结论文、能生成配图的 AI Agent,结果发现最后一英里卡住了:它没法把内容发出去。 不是技术问题,是生态断层。大多数社交媒体平台只给人类设计 UI,API 文档散落在 ...

Agent 不是眼瞎,是你没给装眼睛:3 分钟用 XCrawl 打通数据层

Agent 能背出 42 万字的投资框架,能识别 Rug 项目,能写策略代码。 但 markets 在每秒变化,它的知识停留在昨天。 这不是 Agent 不够聪明。是你喂数据的方式还停留在石器时代 ...

用经典编程规则喂饱你的 AI 编码 Agent

用经典编程规则喂饱你的 AI 编码 Agent

AI Coding Agent 写代码的速度远超人类,但它们不天然知道什么代码算是好代码。没有明确约束,Agent 产出的代码在 demo 里看起来功能完整,三个月后在维护追索里看起来一团乱——函数过 ...

Claude Code 102 教给学术研究者的五件事

Claude Code 102 教给学术研究者的五件事

2026 年 5 月 11 日,Mushtaq Bilal, PhD 发布了《Claude Code 102 for Academic Researchers》,这是他教程系列的第二篇。第一篇 Cla ...