Claude Code 2.1.186:Bash 自动响应与子代理权限上报改变了 Operator 的边界

Claude Code 2.1.186 改变了两个默认行为:bash 命令现在会自动触发代理响应,后台子代理遇到权限边界时会将提示上报到主会话而非自动拒绝。在更新前请先完成以下审计。

TheRouter Newsroom来源 Anthropic Claude Code
展示 Claude Code 2.1.186 bash 自动响应与子代理权限上报边界的 operator 控制面板

Claude Code 2.1.186 于 6 月 22 日发布,带来了一个容易被忽略的默认行为变更,对运行无头或自动化 pipeline 的团队影响显著:! bash 命令现在会自动触发代理对输出的响应。与此同时,第二项治理变更改变了多代理会话的权限处理方式:后台子代理不再自动拒绝受限的工具调用,而是将权限提示上报到主会话。两项变更均在不要求配置迁移的情况下改变了 operator 的默认边界,但在更新前都需要进行有意识的审计。

2.1.186 的核心变更

本次发布对 operator 相关的变更可分为三个层次。

Bash 自动响应(新行为,需主动关闭):

! bash 命令现在会自动触发 Claude 对输出的响应;在 settings.json 中设置 "respondToBashCommands": false 可保持原有的仅上下文注入行为。

此前,在 Claude Code 会话中执行 !<命令> 会将输出注入上下文,但不会触发新的代理回合。现在会触发。对于交互式开发场景,这是一项便利改进。但对于有意将 bash 输出注入上下文、不期望触发后续代理回合的无头或 CI pipeline,这是一个破坏性的默认变更。

后台子代理权限上报(新治理模型):

后台子代理遇到权限边界时,现在会将权限提示上报到主会话,而非自动拒绝;对话框会显示是哪个代理在请求,按 Esc 仅拒绝该工具。

此前,后台子代理遇到需要人工批准但未预先授权的工具调用时,会自动拒绝并继续执行。现在该子代理会暂停,并将提示发送到主会话。主会话会显示请求来自哪个代理,支持按工具逐一批准,按 Esc 拒绝单个工具。这是一种功能更完整的治理模型,但改变了无头部署的预期失败方式。

Agent(type) 拒绝规则安全修复(此前被静默绕过):

修复了 Agent(type) 拒绝规则和 Agent(x,y) 允许类型限制对命名子代理生成未生效的问题。

如果你部署了 Agent(type) 拒绝规则来控制命名代理可以生成哪些子代理类型,这些规则此前只对匿名生成生效,对命名生成无效。此次修复关闭了这一漏洞。原本通过拒绝规则但实际上不应被允许的命名子代理生成将被阻止。更新前请验证你的允许/拒绝规则是否与实际意图一致。

CLAUDE_CODE_MAX_RETRIES 上限(影响无人值守会话):

CLAUDE_CODE_MAX_RETRIES 现在上限为 15;无人值守会话请改用 CLAUDE_CODE_RETRY_WATCHDOG。

如果你将 CLAUDE_CODE_MAX_RETRIES 设置为超过 15 以增强长期运行会话对瞬时 API 错误的容忍度,该设置现已被上限锁定。无人值守会话应迁移至 CLAUDE_CODE_RETRY_WATCHDOG,它提供更适合长时程任务的看门狗式重试控制。

claude mcp login/logout CLI(新增,支持 SSH):

新增 claude mcp login <name> 和 claude mcp logout <name>,支持从 CLI 直接对 MCP server 进行身份验证,无需打开交互式 /mcp 菜单;通过 --no-browser 和 stdin 重定向支持 SSH 场景下的无浏览器完成。

此前,在远程主机上通过 SSH 运行 Claude Code 的团队无法在不在远程主机上启动浏览器的情况下完成 MCP server 的身份验证。--no-browser 配合 stdin 重定向现在支持从终端进行无头 MCP 凭据配置。

对 AI 工程团队的影响

Bash 自动响应是 operator 最需要优先处理的变更。 任何使用 !<命令> 注入 shell 输出(日志尾部、状态检查、构建输出、测试结果)而不期望触发后续响应回合的 pipeline,更新后都会产生额外的代理回合。这意味着每次自动化上下文注入都会带来额外的模型调用、额外的延迟,以及可能的额外成本。代理还可能在没有明确用户提示的情况下对注入的输出采取行动。

在自动化上下文中更新前,请在 settings.json 中添加 "respondToBashCommands": false 以保持原有行为。

子代理权限上报变更需要策略审查。 如果你的部署依赖后台子代理在权限边界处静默失败(实际上将自动拒绝视为安全默认值),2.1.186 将打破这一假设。子代理现在会暂停并等待主会话处理提示。在完全无人值守的部署中(主会话无人监守),这会产生阻塞状态。团队应在 managed settings 中预先授权工具调用,或配置阻止子代理触达权限边界的拒绝策略。

Agent(type) 修复是一个安全补丁。 如果你的访问控制模型依赖 Agent(type) 拒绝规则来限制命名代理可生成的子代理类型,请审计是否有命名子代理生成此前绕过了这些规则。该修复强制执行你已声明的规则,不改变已有设置,但会关闭可能在会话日志中掩盖未授权生成行为的漏洞。

Router/Operator 视角

对于通过自定义 API gateway 或 AI router 运行 Claude Code 会话的团队,这三项变更存在关联效应:

Bash 自动响应 + gateway 计量:每次 bash 自动响应回合都是一次完整的模型请求。如果你的 gateway 按请求计费或实现了每会话 token 预算,一个此前每次任务注入五次 bash 输出的会话现在会额外产生五次模型回合。为确保账单计费准确,token 计量和成本归因需要反映这一变化。

子代理权限上报 + 无头部署:对于以无头模式(终端无人值守)运行 Claude Code 的 operator,最安全的应对方式是在 managed settings 中定义明确的工具允许/拒绝策略,消除权限提示,而不是依赖子代理触达并上报权限边界。2.1.186 的变更移除了自动拒绝作为静默保底机制——这对交互式使用更好,但完全自治部署需要更精细的预授权配置。

通过 SSH 的 MCP login:--no-browser MCP 身份验证流程对在远程推理节点上运行 Claude Code 的 gateway operator 非常实用。如果你的部署模式包括在远程主机上运行 Claude Code 并连接到 MCP server(工具注册表、代码执行主机、数据连接器),claude mcp login --no-browser 可在无需远程主机浏览器的情况下完成凭据配置。

更新前的审计清单

  1. 在 Claude Code 会话或自动化脚本中搜索 !<命令> 模式。 如果有任何用于上下文注入但不期望触发后续回合的用法,在更新前在相关 settings.json 中添加 "respondToBashCommands": false。

  2. 审查子代理部署策略。 如果后台子代理触达权限边界时应静默失败,请在 managed settings 中添加明确的拒绝规则。不要再将自动拒绝视为默认保底。

  3. 审计 Agent(type) 和 Agent(x,y) 拒绝规则。 验证命名子代理生成是否已正确受限。此前通过修复漏洞绕过规则的命名生成现在将被阻止。

  4. 检查 CLAUDE_CODE_MAX_RETRIES 设置(如已配置)。 超过 15 的值将被上限锁定。长时程会话请迁移至 CLAUDE_CODE_RETRY_WATCHDOG。

  5. 对于基于 SSH 的 MCP 配置,测试 claude mcp login <name> --no-browser,替代此前在远程主机完成 MCP 身份验证的变通方案。

通过 npm install -g @anthropic-ai/claude-code 或你的 managed 部署更新路径进行升级。--version 标志可确认当前版本为 2.1.186。

帮助与联系