12k
All articles

Claude Code 中用于复杂任务的计划模式

Claude Code 的 Plan Mode 解析:工作原理、4种启用方式、只读限制、协作流程,以及何时在简单修改中跳过它。

OpenReplay Team
OpenReplay Team
Claude Code 中用于复杂任务的计划模式

计划模式(Plan Mode)是 Claude Code 中的一种只读权限状态:在此模式下,Claude 可以读取文件、搜索代码库、运行只读 Shell 命令、使用网络搜索并提出澄清性问题,但在您批准其计划之前,它无法写入或编辑源代码,也无法运行会改变状态的命令。

大多数开发者都曾有过这样的惨痛经历:你只要求做一处修改,转眼离开,回来时却发现 Agent 已经悄悄地根据你从未有机会质疑的假设,重写了六七个文件。计划模式在”我想要什么”和第一次落盘的编辑之间设置了一个暂停点——而那往往正是事情开始出错的时刻。本文将介绍计划模式是什么、开启它的四种方式、真实的只读边界(由提示词和权限共同执行,而非硬沙箱)、多文件重构的工作流,以及何时计划本身纯属开销。

核心要点

  • 计划模式是一种只读权限模式:Claude 负责研究并提出变更方案,但在您批准计划之前不会编辑源代码。
  • 进入该模式有四种方式:按 Shift+Tab 循环切换到计划模式、在提示词前加 /plan 前缀、以 claude --permission-mode plan 启动,或在 settings.json 中将 permissions.defaultMode 设置为 plan
  • 该边界由注入的系统指令加上权限系统共同执行,而非硬沙箱。这也是为什么计划本身会被写入一个可编辑的 Markdown 文件,而非被当作写入操作而拦截。
  • 批准计划会退出计划模式,因此当执行过程偏离约定步骤时,按 Shift+Tab 重新进入计划模式,并对剩余工作重新规划。
  • 当变更涉及大约三个或更多文件、涉及重构、Schema 变更或安全敏感性工作,或者无法用一句话描述时,请使用计划模式;对于单行修复和机械性编辑,则可跳过。

Claude Code 中的计划模式是什么?

计划模式是 Claude Code 权限模式之一,与 acceptEditsautodontAskbypassPermissions 并列,而非一个独立的产品界面。在计划模式中,Claude 会探索代码库并起草提案,在您批准该提案之前,对源代码的编辑操作将被阻止。Shell 命令则走独立的处理通道:在规划阶段,如果 Auto 模式可用,分类器会对每条命令进行审查而不打断您;否则,Claude Code 内置只读命令集之外的任何命令都需要您的批准。

其价值在于:执行前先审查。Claude Code 的编辑前规划方案正是针对这种场景设计的——即在任何内容落盘之前,先对变更进行审查。这从根源上遏制了错误累积问题:对于一个涉及多个决策点的变更,早期的每一个错误猜测都会污染下游的所有内容,而计划让你能够在纸面上纠正这些猜测,而不是在 diff 中亡羊补牢。

如何开启计划模式?

进入计划模式有四种方式,它们在作用范围上各有不同。请根据您希望该模式持续的时长来选择合适的方式。

方式命令 / 按键作用范围适用场景
切换Shift+Tab(循环切换 defaultacceptEditsplan当前会话会话进行中,需要切换模式
前缀/plan仅下一条提示词临时规划,不改变当前模式
标志位claude --permission-mode plan从启动起的整个会话预知任务需要提前规划
配置项在 settings.json 的 permissions 下设置 "defaultMode": "plan"项目或用户默认值希望将”先规划”作为默认规则

官方文档确认了循环顺序:Shift+TabdefaultacceptEditsplan 的顺序切换,因此从初始模式按两次即可进入计划模式,当前模式会显示在状态栏中。注意标签名称:default 模式在 CLI 和 IDE 扩展中现在显示为 Manual,但其配置值仍为 default。对于项目默认值,该键是嵌套的,需在 .claude/settings.json"permissions": { "defaultMode": "plan" } 下设置,而非放在顶层。

计划模式的能力边界

在计划模式中,Claude 保留其读取和研究工具(Read、Grep、Glob、Task/子 Agent、WebSearch 和 WebFetch),而 Write、Edit 以及用于变更的 Bash 工具在您批准之前均被暂停。会改变状态的 MCP 工具同样被暂停。确切的工具清单取决于运行环境,且会随版本变化,因此请将上述内容视为通用集合,而非详尽的契约。

该边界由注入的系统指令加上 Claude Code 的权限系统共同执行,而非硬沙箱——这也是为什么计划本身会被写入一个可编辑的 Markdown 文件,而非被当作”写入”操作而拦截。Armin Ronacher 对计划模式实现的深度拆解发现,写入工具依然存在,进入计划模式时会注入一条提示词,告知模型当前处于只读状态;而 Claude 正是通过 Edit 工具来编写自己的计划文件的。官方文档也印证了这是权限层面的限制,而非工具移除:在标准会话中,对受保护路径的写入仍会通过提示系统路由,而非被静默丢弃。实际上,这意味着计划是一份你可以编辑的纯文本契约。按 Ctrl+G 将提议的计划拉入文本编辑器,标注或删除步骤,Claude 会在写入任何代码之前读取你的修改。

复杂任务的计划模式工作流

对于多文件变更,工作循环为:描述 → 澄清 → 规划 → 编辑 → 执行:

  1. 在计划模式中描述任务,并将 Claude 指向相关文件。在第一条提示词中说明目标和约束条件。
  2. 让 Claude 读取并提问。 它会追踪导入关系,然后在确定方案之前,提出真正模糊的决策点(架构深度、如何处理死代码、使用哪个测试框架)。一个不好的信号是:计划只列出文件名,从不提及具体函数。
  3. 审查编号计划。 检查步骤是否按依赖关系排序,以及测试是否与实现交织进行,而非附加在末尾。
  4. 编辑并批准。 使用 Ctrl+G 进行标注或重新排序,确认契约内容无误后批准。
  5. 执行并监控偏差。 Claude 会逐步按照批准的计划执行。

批准计划会退出计划模式,因此如果执行出现偏差(Claude 编辑了当前步骤未提及的文件,或悄悄做出了计划中留待确认的决定),请按 Shift+Tab 重新进入计划模式,让 Claude 根据文件的当前状态对剩余工作重新规划。在真实的重构过程中,中途重新规划是正常现象,而非失败的表现。对于单次会话无法完成的工作,应将其拆分为多个顺序计划,而非一份冗长的文档。

跨模型拆分规划与执行

对于复杂工作,使用最强的推理模型起草计划,再用更快、更经济的模型执行:规划质量主导最终结果,而一旦计划正确,执行在很大程度上是机械性的。Claude Code 通过模型别名而非切换开关来实现这一点。选择 opusplan 会在计划模式期间运行 opus 模型,执行开始时立即切换为 sonnet

在 Anthropic API 上,opus 解析为 Claude Opus 5sonnet 解析为 Claude Sonnet 5,因此 opusplan 在规划阶段使用 Opus 5,在执行阶段使用 Sonnet 5。Opus 5 需要 Claude Code v2.1.219 或更高版本;在更早的版本中,opus 别名仍指向 Opus 4.8。别名会跟踪您所用服务商的推荐版本,并随新模型发布而更新,因此当需要固定版本时,请使用完整模型名称,如 claude-opus-5。Opus 也并非能力最强的模型:模型概览将 Claude Fable 5 列于 Opus 之上,作为 Anthropic 已广泛发布的最强大模型,Claude Code 通过 fable 别名提供访问,适用于超出单次会话范围的工作。

何时使用计划模式,何时跳过

当变更涉及大约三个或更多文件、涉及重构、Schema 迁移或安全敏感性工作,或者无法用一句话描述时,请使用计划模式;对于单行修复和机械性编辑,计划本身纯属开销,可直接跳过。三个文件大致是决策累积效应开始显现的临界点。拼写错误修正、独立函数调整以及单文件内的重命名,无需规划往返,直接处理更快。任何你不确定代码库如何处理某种特定情况的场景,或者提前编辑代价高昂难以撤销的场景,都值得先规划。

一句话原则是最快的过滤器:如果你能用一句话描述整个变更,直接做;否则,先规划。只有当计划真正超出单次执行上下文时,才需要进一步扩展规模——此时 Claude Code 的实验性 Agent Teams 功能会将工作分发给多个实例,由主导 Agent 在每个协作 Agent 开始写代码之前审查并批准其计划。

在下次多文件变更时启用计划模式,在授予写入权限前用 Ctrl+G 编辑计划,一旦执行出现偏差立即用 Shift+Tab 循环回来。相关机制变化频繁,在依赖任何版本特定的细节之前,请务必对照官方 Claude Code 文档加以确认。

常见问题

计划模式真的能阻止 Claude 编辑文件吗,还是它仍然可以写入?

计划模式会阻止对源代码的编辑,但并非硬沙箱。只读边界由注入的系统指令加上 Claude Code 的权限系统共同执行,而非通过移除写入工具来实现。Edit 工具仍然存在——Claude 正是通过它来编写自己的计划文件——任何对代码的写入尝试仍会通过权限提示路由,而非被静默放行。

使用 Shift+Tab、/plan 前缀和 --permission-mode plan 标志位有什么区别?

它们的区别在于作用范围。按 Shift+Tab 会为当前会话切换模式,并持续到你再次循环切换。/plan 前缀仅作用于下一条提示词,不改变当前模式。以 claude --permission-mode plan 启动会从启动起将整个会话置于计划模式。如需设置默认值,可在 settings.json 中将 permissions.defaultMode 设置为 plan,使其应用于该项目或用户范围内的每个会话。

如何将计划模式设为项目默认?

在 .claude/settings.json 的 permissions 对象内将 defaultMode 设置为 plan,写法为 permissions 下包含 defaultMode 设为 plan。该键嵌套在 permissions 下,而非放在文件顶层。设置完成后,在该项目中启动的每个会话都会自动以计划模式开始。如果希望在所有项目而非单个仓库中都采用先规划的行为,请改用用户级别的配置文件。

批准计划后会发生什么?如何让 Claude 在任务中途重新规划?

批准计划会结束规划阶段,并将会话切换到你所选批准选项对应的权限模式,Claude 随即开始工作。如果执行偏离了约定步骤,按 Shift+Tab 重新进入计划模式,或在下一条提示词前加 /plan 前缀,让 Claude 根据文件的当前状态对剩余工作重新规划。在真实的重构过程中,中途重新规划是预期行为,而非失败。

哪个模型应该负责起草计划,哪个负责执行?

使用最强的稳定推理模型起草计划,用更快、更经济的模型执行——因为规划质量主导最终结果,而执行在很大程度上是机械性的。Claude Code 通过 opusplan 模型别名自动完成交接,在计划模式期间运行 Opus,执行时切换为 Sonnet。在 Anthropic API 上,这些别名分别解析为 Claude Opus 5 和 Claude Sonnet 5。别名会随新模型发布而更新,因此需要固定版本时请使用完整模型名称。

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.