EnterPlanModeTool:进入 Plan Mode
2026/8/2 15:19:09 · 来源
深入解析 Claude Code 底层 Agent Tool——EnterPlanModeTool:它并非简单的 prompt hint,而是一次运行时状态切换(permission mode → plan),涉及权限更新、上下文重建与主线程流程控制。
它的本质是状态切换,不是提示词切换
EnterPlanModeTool 的作用不是“让模型多想一会儿”,而是把当前会话切到一种新的运行状态:plan。
这意味着系统会同时改变:
- 权限模式
- 会话目标
- 用户交互预期
所以它本质上是一个 运行时状态切换工具。
关键源码
tools/EnterPlanModeTool/EnterPlanModeTool.ts:
import { handlePlanModeTransition } from '../../bootstrap/state.js'
import { applyPermissionUpdate } from '../../utils/permissions/PermissionUpdate.js'
import { prepareContextForPlanMode } from '../../utils/permissions/permissionSetup.js'
真正的核心逻辑在 call():
context.setAppState(prev => ({
...prev,
toolPermissionContext: applyPermissionUpdate(
prepareContextForPlanMode(prev.toolPermissionContext),
{ type: 'setMode', mode: 'plan', destination: 'session' },
),
}))
调用链
模型判断任务过大/过复杂 > EnterPlanModeTool > 更新 permission mode = plan > 准备 Plan Mode 上下文 > 主线程进入规划态
为什么它不能在 agent context 里随便用
源码里有一条硬限制:
if (context.agentId) {
throw new Error('EnterPlanMode tool cannot be used in agent contexts')
}
这说明 Anthropic 不希望子 Agent 随便把自己切进 Plan Mode,
而是把这种流程控制留给主线程。
它和 AskUserQuestionTool 的关系
Plan Mode 不是闭门写计划。
如果需求没搞清楚,仍然要用 AskUserQuestionTool 先补信息,再继续计划。
小结
EnterPlanModeTool 的价值在于:
它把“先规划再编码”从一种提示习惯,升级成了 Claude Code 运行时里的正式状态机切换。
学习地图
🗺️ Plan Mode 学习路线图
Stage 1 - 理解 Agent State Machine
- 什么是 Agent Context vs Session Context
agentId的限制意义:子 Agent 不能擅自切换状态
Stage 2 - 掌握 Plan Mode 底层机制
handlePlanModeTransition— 会话目标迁移applyPermissionUpdate+prepareContextForPlanMode— 权限 & 上下文重建toolPermissionContext.type: 'setMode'的结构含义
Stage 3 - 学会在 Agent 生命周期中使用 Plan Mode
- 何时调用 EnterPlanMode (任务过大/过复杂)
- 何时回退 AskUserQuestionTool 补全需求
- 与编码阶段的正确衔接(规划 → Code Action)
Stage 4 - 进阶:自定义 Context 管理
- 理解
context.setAppState不可变更新模式 - 监控权限变更 (
toolPermissionContext.mode: 'plan') - Sub-Agent 场景下的替代方案
动手实践——分步指南
- 安装 Claude Code CLI,打开终端并输入
claude - 发起一个多步骤任务(例如:创建一个待办应用 + 添加样式 + 配置路由)
- 在对话中输入你的需求后,观察是否有 Tool Call 自动进入 Plan Mode
- 若未主动触发,手动执行工具调用 EnterPlanModeTool(通过代码层或 MCP 插件注入方式)
- 查看返回的
toolPermissionContext变化:mode → 'plan' - 在 plan 状态下用文字描述你的架构设计,确认权限已切换(只读规划权限生效)
- 如需补充信息,调用 AskUserQuestionTool 向用户提问
- 计划完成后观察主线程自动从 'plan' 切换回 'agent' 编码状态
- 对比 plan mode:列出权限模式差异、会话目标更新、交互预期变化(写表格或笔记)
- 进阶尝试:将子 Agent 代码设为带有 agentId 的上下文,再次调用 EnterPlanModeTool,观察抛出 Error 的硬限制
三大推荐资源
- 1Anthropic Claude Code 官方文档
Claude Code Agent、工具系统、权限与上下文管理的官方权威说明。
https://docs.anthropic.com/en/docs/build-with-claude/claude-code-overview
- 2Anthropic AI 工程设计文章:Stateful Planning Agents
Anthropic 官方博客关于 Agent 规划、状态切换与多步骤任务管理的原理指南。
https://www.anthropic.com/engineering/building-effective-agents
- 3claude-code GitHub 仓库
Anthropic 官方开源的 Claude Code CLI — 可直接查看 EnterPlanModeTool、permissionUpdate 等方法的原厂实现源码。
https://github.com/anthropics/claude-code
链接由 AI 推荐——使用前建议快速核实。