【Claude】Claude Code Plan 模式完全指南:先规划再执行,让 AI 编程不再失控
前言
你有没有遇到这种情况:让 Claude Code 重构一个模块,它直接开始修改文件,改到一半你发现它的方向完全不对,但代码已经被修改得一团糟,想回滚也需要费一番功夫?
或者,让 Claude 添加一个新功能,它"热情高涨"地改了 20 个文件,但其中有 15 个完全不需要动——而且改错了 3 个关键文件?
这些问题的根源是:让 AI 直接执行,而不是先让它规划。
Plan 模式(计划模式)正是 Claude Code 为解决这类问题而专门设计的工作模式。在 Plan 模式下,Claude 只读取和分析,不做任何修改,直到你确认计划后才开始执行。
本文从原理到实战,带你全面掌握 Plan 模式的使用方法。
一、三种工作模式对比
1.1 Claude Code 的三种模式
Claude Code 有三种核心工作模式,通过Shift+Tab循环切换:
| 模式 | 名称 | 行为 | 适用场景 |
|---|---|---|---|
| Default | 默认模式 | 每次文件修改或命令执行都需要你手动确认 | 日常开发,需要精确控制 |
| Auto-Accept | 自动接受模式 | 文件修改自动执行,Shell 命令仍需确认 | 任务明确、信任 Claude 的场景 |
| Plan | 计划模式 | 只读,不执行任何修改,先展示计划 | 复杂任务、大规模变更 |
左下角状态栏会显示当前模式:
◆ Default◆ Auto-Accept◆ Plan
1.2 为什么需要 Plan 模式
没有 Plan 模式的典型事故:
你:帮我把项目从 JavaScript 迁移到 TypeScript Claude(Default 模式): 修改 package.json → 你确认 创建 tsconfig.json → 你确认 修改 src/app.js → src/app.ts → 你确认 修改 src/utils.js → src/utils.ts → 你确认 ... 继续修改 50 个文件 (你确认了 20 次后,发现它用的是 CommonJS 而你想要 ESM) (但前面 20 个文件已经按错误的方向改完了)有 Plan 模式的正确流程:
你:帮我把项目从 JavaScript 迁移到 TypeScript(Plan 模式) Claude 分析后展示计划: 1. 更新 package.json(添加 TypeScript 依赖) 2. 创建 tsconfig.json(ESM 配置) 3. 创建类型声明文件 src/types.d.ts 4. 批量重命名 .js → .ts(47 个文件) 5. 修复类型错误(预计 23 处) 方案说明:使用 ES Modules(不是 CommonJS), 迁移顺序:工具函数 → 服务层 → API 层 → 入口文件 你(发现方向正确):好的,继续执行 Claude:开始执行...二、进入 Plan 模式的三种方式
方式 1:Shift+Tab 切换(推荐)
在 Claude Code 交互界面中,按Shift+Tab循环切换模式:
Default → Plan → Auto-Accept → Default...底部状态栏实时显示当前模式。
方式 2:启动时直接进入 Plan 模式
claude --plan # 或 claude -p # 注意这是 --plan 的短参数,与 --print 不同方式 3:对话中用 /plan 命令
# 在交互模式中输入 /plan这会切换到 Plan 模式,后续的所有操作只分析不执行,直到你再次切换回去。
三、Plan 模式的工作流程
3.1 标准工作流
步骤 1:进入 Plan 模式 按 Shift+Tab,确认左下角显示 "Plan" 步骤 2:描述任务需求 不需要特别说明 "请先规划",Plan 模式下 Claude 自动只分析 步骤 3:等待 Claude 的分析报告 Claude 会: - 读取相关文件 - 分析影响范围 - 识别依赖关系 - 输出详细计划 步骤 4:审核计划 确认: - 修改文件的范围是否合理? - 执行顺序是否正确? - 有没有遗漏重要文件? - 方案方向是否符合你的预期? 步骤 5:反馈或确认 若有问题:直接告诉 Claude 修改计划 若满意:按 Shift+Tab 切回 Default 或 Auto-Accept,说"执行" 步骤 6:执行 Claude 按确认的计划执行3.2 计划报告的典型格式
一份好的 Plan 模式输出通常包含:
## 任务分析 **需求理解:** [复述你的需求,确认理解正确] **影响范围分析:** - 需要修改的文件(N 个):[列表] - 需要新建的文件(M 个):[列表] - 可能影响的相关模块:[列表] **执行步骤:** 1. [第一步] - 原因说明 2. [第二步] - 原因说明 3. [第三步] - 原因说明 **潜在风险:** - [风险点1] - 处理方案 - [风险点2] - 处理方案 **预估工作量:** N 个文件,约 M 处修改 是否按此计划执行?如有调整建议请指出。四、适合用 Plan 模式的场景
场景 1:大规模重构
适合的原因:重构往往涉及多文件联动,错误方向的修改成本极高
适合用 Plan 模式的重构任务: ✅ 从 JavaScript 迁移到 TypeScript ✅ 更换框架(如 Express → Fastify) ✅ 数据库层抽象(直接查询 → Repository 模式) ✅ 模块化拆分(单体 → 微服务准备) ✅ 依赖升级(React 17 → React 18,API 变更多)实际对话示例:
你(Plan 模式):把 src/utils/ 目录下的所有工具函数从 CommonJS(require/module.exports) 改为 ES Modules(import/export),保持功能不变 Claude 分析: 发现 src/utils/ 下有 12 个文件 其中有 3 个文件被其他模块 require,修改后需要同步更新调用方 执行计划: 1. 修改 src/utils/ 的 12 个文件(改 require/exports 语法) 2. 更新调用这些文件的 8 个模块(改 require 为 import) 3. 更新 package.json,添加 "type": "module" 4. 检查是否有动态 require(),如有需要改为 import() ⚠️ 风险:src/utils/config.js 中有 __dirname 和 __filename 的使用, ES Modules 不支持这两个变量,需要改用 import.meta.url 你:计划看起来合理,但第3步先不做,我想分开提交,先只改 utils/ 和调用方 Claude:好的,去掉第3步后执行:1 → 2,完成后请单独处理 package.json 的修改 你(Shift+Tab 切回 Default):按修改后的计划执行场景 2:高风险区域的修改
适合用 Plan 模式的高风险区域: ✅ 认证/授权模块(出问题影响所有用户) ✅ 数据库 migration 文件(不可逆操作) ✅ 支付/金融相关逻辑 ✅ 基础设施配置(Dockerfile、k8s manifest) ✅ 公共 API 接口(影响所有调用方)场景 3:不熟悉的代码库
当你接手别人的代码,不清楚修改影响范围时:
你(Plan 模式):我需要修改用户登录逻辑,添加双因素认证支持 Claude 分析: 当前登录流程涉及以下文件: - src/auth/login.py(主要认证逻辑) - src/auth/jwt.py(token 生成) - src/middleware/auth_check.py(认证中间件) - src/models/user.py(用户模型) 发现隐藏依赖: - src/tests/test_auth.py 中有 15 个测试覆盖当前登录流程,修改后需要更新 - src/docs/api.yaml 中的登录 API 文档需要同步更新 建议的修改方案:...不使用 Plan 模式,你可能根本不知道还有测试文件和文档需要同步更新。
场景 4:需要比较方案
你(Plan 模式):我需要给这个 API 添加缓存,有哪些方案? Claude 分析并输出两个方案: 方案A:内存缓存(简单) - 优点:不需要外部依赖,延迟极低 - 缺点:多进程/多机器无法共享,进程重启缓存丢失 - 修改文件:仅 src/api/users.py 方案B:Redis 缓存(推荐) - 优点:跨进程共享,支持持久化,功能完整 - 缺点:需要 Redis 服务,多了一个外部依赖 - 修改文件:src/api/users.py + docker-compose.yml + .env.example 你:选方案B,执行 Claude:切换模式后开始执行方案B五、Plan 模式与任务系统的配合
Claude Code 内置了任务跟踪系统(Tasks),与 Plan 模式完美配合:
5.1 将计划转换为任务列表
你(Plan 模式):规划一下用户管理模块的开发,包括注册、登录、修改资料 Claude 生成任务列表: 任务列表:用户管理模块 ┌─────────────────────────────────────────────┐ │ ○ 1. 设计用户数据库 Schema │ │ ○ 2. 创建 UserModel(依赖任务1) │ │ ○ 3. 实现注册 API(依赖任务2) │ │ ○ 4. 实现登录 API(依赖任务2) │ │ ○ 5. 实现修改资料 API(依赖任务2) │ │ ○ 6. 编写认证中间件(依赖任务4) │ │ ○ 7. 补充单元测试(依赖任务3,4,5) │ └─────────────────────────────────────────────┘ 按 Ctrl+T 可查看任务状态5.2 跨会话持久化任务
# 设置任务列表 ID,下次会话可以恢复 export CLAUDE_CODE_TASK_LIST_ID=user-module-001 # 下次会话中 claude # 输入 /tasks,可以看到之前的任务列表并继续六、Plan 模式的进阶技巧
6.1 要求 Claude 给出多个方案
你(Plan 模式):为这个查询添加缓存,请给出3种方案并比较优劣 Claude 会输出: 方案A:[详情] 方案B:[详情] 方案C:[详情] 推荐方案:方案B,原因是...6.2 要求 Claude 识别风险
你(Plan 模式):帮我分析一下这个重构方案有哪些潜在风险 Claude 输出: 🔴 高风险:...(必须处理) 🟡 中风险:...(建议处理) 🟢 低风险:...(可以接受)6.3 分阶段规划大型任务
对于非常大的任务,先规划阶段,再在每个阶段用 Plan 模式细化:
第一次(Plan 模式):把整个迁移任务分成几个阶段? Claude: 阶段1:基础设施准备(1天) 阶段2:核心模块迁移(3天) 阶段3:周边模块迁移(2天) 阶段4:测试与修复(1天) 第二次(Plan 模式):详细规划阶段1的具体步骤 Claude:详细的第一阶段计划...七、常见问题排查
Q:Plan 模式下 Claude 仍然修改了文件
可能原因:
- 模式切换不成功,底部状态栏仍显示 Default
- 某些版本的 Claude Code 中 Plan 模式行为略有差异
解决方案:
- 再次按 Shift+Tab 确认状态栏显示 "Plan"
- 或启动时使用
claude --plan强制进入
Q:Plan 报告太简单,没有详细说明影响范围
解决方案:在提问时明确要求
你:请先进行全面的影响范围分析,列出所有会被修改的文件, 评估潜在风险,然后再给出执行计划Q:Plan 模式下速度很慢
解释:这是正常的。Plan 模式下 Claude 会主动读取更多文件进行分析,比 Default 模式耗时更长。这是深入分析的代价,换来的是更准确的计划。
优化建议:明确指定 Claude 应该分析哪些文件,避免无目的地全局扫描:
你(Plan 模式):分析 src/auth/ 目录(不需要看其他目录), 规划添加双因素认证的步骤八、Plan 模式 vs 其他控制手段的比较
| 方法 | 控制粒度 | 适用场景 |
|---|---|---|
| Plan 模式 | 任务级(执行前规划) | 不确定方案、高风险变更 |
| Default 模式 | 文件级(每次操作确认) | 已知方向,想逐步审查 |
| Hooks/PreToolUse | 命令级(特定命令拦截) | 永久性安全规则 |
| /rewind | 操作级(回退已执行操作) | 执行后发现错误 |
最佳实践:对于不确定的复杂任务,先用 Plan 模式确认方向,确认后再切换到 Default 模式逐步审查执行。
总结
Plan 模式是 Claude Code 从"AI 工具"升级为"AI 协作者"的关键能力。核心使用原则:
- 大改动必用 Plan 模式:任何涉及 5+ 文件的修改,先规划再执行
- 高风险区域必用 Plan 模式:认证、支付、数据库 migration 等
- 接手陌生代码库时必用 Plan 模式:先让 Claude 梳理影响范围
- 计划有问题时在 Plan 模式内反复调整,直到满意再切换执行
把控节奏,不让 AI 无节制地"自由发挥"——这是使用 AI 编程工具最重要的心智模型之一。