BrainBank
AI 课堂/知识Claude Code Deep Dive

Claude Code 的 Plan Mode 在架构里de位置

2026/8/2 19:09:22 · 更新于 2026/8/2 19:38:56 · 来源

#claude-code#agent-architecture#knowledge#plan-mode#approval-workflow#multi-agent-collaboration

深入解析 Claude Code 的 Plan Mode 并非简单的界面切换,而是贯穿工具系统、权限控制与审批链的核心架构网关,旨在通过强制暂停点防止模型盲目执行代码。

Plan Mode 不是一个普通“模式切换按钮”

很多人会把 Plan Mode 理解成:“先写计划,不直接写代码”的产品交互。
但从源码看,它远不只是一个 UI 状态,而是贯穿:

  • 工具系统
  • 权限系统
  • 会话状态
  • 审批流

的一套架构能力。

先看它在工具层的存在方式

在 tools.ts 里,Plan Mode 不是神秘隐藏能力,而是明确的工具:

export function getAllBaseTools(): Tools {
  return [
    ...
    ExitPlanModeV2Tool,
    ...
    EnterPlanModeTool,
    ...
  ]
}

这说明 Plan Mode 的进入和退出,都是系统正式建模过的操作,而不是临时插进去的布尔开关。

先看整体关系图

image.png

ExitPlanModeV2Tool 很能说明它的真正定位

来看关键定义:

export const ExitPlanModeV2Tool: Tool<InputSchema, Output> = buildTool({
  name: EXIT_PLAN_MODE_V2_TOOL_NAME,
  searchHint: 'present plan for approval and start coding (plan mode only)',
  shouldDefer: true,
  isReadOnly() {
    return false
  },
  requiresUserInteraction() {
    if (isTeammate()) {
      return false
    }
    return true
  },
})

这段代码非常重要,因为它说明:

  • 退出 Plan Mode 是一个正式工具调用
  • 它默认要求用户交互
  • 在 teammate 场景下行为又不同

也就是说,Plan Mode 并不是一个“提示词建议”,而是系统级审批节点。

为什么它和权限系统绑得这么紧

再看它的权限检查逻辑:

async checkPermissions(input, context) {
  if (isTeammate()) {
    return {
      behavior: 'allow' as const,
      updatedInput: input,
    }
  }

  return {
    behavior: 'ask' as const,
    message: 'Exit plan mode?',
    updatedInput: input,
  }
}

这段代码说明,Plan Mode 的退出并不是模型自己说了算。
它是一个需要系统权限流承认的动作。

状态层也为它预留了语义

在权限上下文中还能看到 prePlanMode 这样的字段,说明系统会记住进入 Plan Mode 前的权限状态,以便退出后恢复。

这意味着 Plan Mode 不是孤立状态,而是对整个权限语义有影响。

进入 Plan Mode 前的权限状态 > prePlanMode 暂存 > Plan Mode 审批阶段 > 批准退出 > 恢复到原本模式

为什么 Claude Code 要把 Plan Mode 做到这个程度

因为工程任务里最危险的,不是“模型不会写”,而是“模型太快开始写”。
Plan Mode 本质上是在系统层引入一个暂停点:

  • 先整理方案
  • 再给人审核
  • 审核通过后再进入执行

这对高风险修改、团队协作、多 Agent 场景都非常重要。

它在多 Agent 场景里更关键

源码里还能看到 teammate / approval / mailbox 相关逻辑,这说明:

  • 对主线程来说,Plan Mode 是用户审批点
  • 对子 Agent 来说,Plan Mode 可能变成团队领导审批点

也就是说,Plan Mode 是协作工作流的一部分,不只是单用户交互功能。

小结

从架构上说,Plan Mode 更准确的定位是:

Claude Code 在自动化执行链路中人为插入的一个“计划审批闸门”。

它通过工具、权限和状态系统协同工作,确保“从规划到实现”的切换是可控的。

学习地图

学习路线

阶段一:核心理念认知

理解为何工程任务中最危险的是“模型太快开始写”,明确 Plan Mode 作为自动化暂停点的设计初衷。

阶段二:底层架构拆解

阅读源代码,掌握 EnterPlanModeToolExitPlanModeV2Tool 的工具建模方式及其在系统工具注册表中的工作机制。

阶段三:权限与状态流转分析

探究 Plan Mode 如何挂钩动态权限检查(checkPermissions)、区分 teammate/多代理场景,以及临时状态字段的工作流控制逻辑。

阶段四:复杂工作流集成实践

在多 Agent 协作架构中部署 Plan Mode,体验其从单用户审批向团队领导管控节点的演化路径。

动手实践——分步指南

  1. 安装并配置 Claude Code CLI 或 IDE 插件,完成 Anthropic API 密钥的环境变量绑定。
  2. 在终端输入 /enterplan 触发模式,打开调试面板查看控制台日志中 EnterPlanModeTool 的激活记录。
  3. 向上下文提交重构需求或架构设计目标,要求其在计划阶段输出结构化的实施草案与文件修改范围。
  4. 仔细审查模型输出的方案逻辑、依赖分析及潜在副作用,在此阶段保持只读状态禁止直接生成代码。
  5. 确认无误后输入 /exitplanmode,观察终端弹出的权限验证提示(如 Exit plan mode?)及审批流响应日志。
  6. 编写包含子代理分工的任务描述,对比开启与关闭 Plan Mode 时系统对执行顺序的拦截差异、状态隔离表现及最终风险控制效果。

三大推荐资源

  1. 1
    Anthropic Claude Code 官方文档

    全面介绍 Claude Code 的核心功能配置、内置工具集与工作流设计理念的权威指南。

    https://docs.anthropic.com/en/docs/claude-code/overview

  2. 2
    anthropic/claude-code GitHub 源码库

    包含 `tools.ts` 工具导出、权限校验拦截器(checkPermissions)及会话状态管理的完整底层实现。

    https://github.com/anthropic-ai/claude-code

  3. 3
    Anthropic Function Calling API Reference

    详细讲解如何通过结构化 Schema 声明工具能力,是理解 Plan Mode 如何以标准 Tool 形式嵌入 Agent 链路的基础文档。

    https://docs.anthropic.com/en/docs/build-with-claude/tool-use/overview

链接由 AI 推荐——使用前建议快速核实。