EnterPlanModeTool:进入 Plan Mode
它的本质是状态切换,不是提示词切换
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' },
),
}))
调用链
加载图表中…
为什么它不能在 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 运行时里的正式状态机切换。