Claude Code Tools 研究系列(二)—— EnterPlanMode:为什么空 schema 也是一种设计
内容提要
EnterPlanMode是Claude Code的规划模式工具,通过只读探索和方案设计解决AI与用户间的方案对齐问题。它强制禁用编辑工具,要求用户批准后才能执行,避免方向错误和回滚成本。其设计精妙在于空schema:命名承担核心语义,工具级描述堆满行为约束,字段级描述为空,体现“状态切换”的仪式化设计。
延伸解读
空 schema 的语义设计
EnterPlanMode 的 input_schema 为空对象,但这并非偷懒,而是刻意为之。工具名 EnterPlanMode 本身已承载核心语义:Enter 暗示进入状态,PlanMode 与 ExitPlanMode 形成对偶,使调用成为一次有仪式感的“请示”。若改为参数化的 SetMode(mode: "plan"),模型可能随手切换,削弱状态切换的严肃性。空 schema 将意图上移至工具级描述,权限收敛在工具层,而非参数层。
工具描述中的行为约束
工具级描述承担了主要的行为约束:开篇即声明“非平凡实现默认走 plan”,并列出 7 类适用场景与 4 类不适用场景,其中“跨 2-3 个文件”等量化门槛将主观判断编译为客观规则。描述还明确了与 AskUserQuestion、Agent 的边界,并强调用户批准是硬要求,甚至加入“社交礼仪”框架,引导模型将规划视为尊重用户所有权的姿态。
规划模式的实际价值
EnterPlanMode 通过强制只读探索和显式批准,解决了“边想边写”导致的方案对齐问题。它禁用编辑工具,物理上防止探索中偷偷改动;产出可引用的 plan 文件,而非聊天中的零散话语。相比直接动手,它避免了方向性错误、决策边界模糊、副作用未预警等痛点,降低了回滚成本。用户批准前,任何文件都不会被修改,确保 tokens 和心智不浪费在错误方向上。
Q&A
EnterPlanMode 工具的主要作用是什么?
EnterPlanMode 是 Claude Code 的规划模式入口工具,它将 Claude 从默认的“边想边写”模式切换到一个只读探索和方案设计的规划模式,要求用户批准方案后才能执行代码修改,从而解决 AI 与用户之间的方案对齐问题。
为什么 EnterPlanMode 的 schema 是空的?
因为 EnterPlanMode 的语义是“状态切换”,命名已经承担了核心语义(Enter + PlanMode),不需要参数化。空 schema 避免了参数化带来的随意切换,使调用成为一次仪式化的请示,同时权限收敛在工具层实现。
EnterPlanMode 如何防止 AI 在方案未对齐时修改代码?
进入规划模式后,Edit、Write、NotebookEdit 等编辑工具被禁用,Claude 只能进行只读探索(如 Read、Grep、Glob),并且必须通过 ExitPlanMode 提交方案并获得用户批准后才能回到写代码模式,从而物理上防止未经批准的代码修改。
哪些场景应该使用 EnterPlanMode?
应该使用 EnterPlanMode 的场景包括:新功能实现、存在多种合理方案、修改现有行为、架构决策、跨 3 个以上文件的改动、需求本身不清晰,以及用户偏好会影响实现时。官方建议“非平凡的实现任务默认走 plan”。
哪些场景不应该使用 EnterPlanMode?
不应该使用 EnterPlanMode 的场景包括:单行修复(如修 typo)、只添加一个函数且需求清晰、用户已给出非常具体详细的指令,以及纯研究或探索任务(应使用 Agent 工具)。
EnterPlanMode 与 AskUserQuestion 的分工是什么?
AskUserQuestion 用于单点澄清(如“A 还是 B?”),而 EnterPlanMode 用于展开完整方案。在规划模式中,AskUserQuestion 仍可用于澄清子问题。官方规则是:如果要用 AskUserQuestion 澄清方案层面的问题,应改用 EnterPlanMode。
EnterPlanMode 的完整工作流程是怎样的?
流程为:1. Claude 请求进入 plan mode,用户批准;2. 进入只读探索,使用 Read、Grep、Glob、Agent 等工具;3. 遇到关键分叉用 AskUserQuestion 澄清;4. 将方案写入 plan 文件;5. 通过 ExitPlanMode 提交方案,用户批准后回到写代码模式,或修改、驳回。
EnterPlanMode 解决了哪些痛点?
它解决了方向性错误发现太晚、决策边界模糊、用户看不到全景、重要副作用未预警以及回滚成本高等问题,通过强制只读探索、显式批准和可追溯的 plan 文件来避免这些风险。