Plan Mode 是 Claude Code 里被严重低估的功能——用的人少,但每次用了的开发者几乎都表示"应该更早开始用"。这篇文章讲清楚 Plan Mode 是什么、为什么有效,以及什么时候用、什么时候不用。
什么是蝴蝶效应?Plan Mode 解决什么问题
蝴蝶效应是 Agentic 编程中最具破坏性的失败模式。不是一个大错误,而是一系列小误解的累积:
- 你说"加个用户设置页"
- Claude 理解为了某种架构,在第一个文件建立基础
- 第二个文件基于第一个的"理解"继续构建
- 第三个文件...
- 五个 PR 之后,你发现 Claude 从一开始就理解错了
传统解决方案:更好的 prompt。
更有效的解决方案:先让 Claude 把它的理解和计划告诉你,你确认没问题再开始实现。这就是 Plan Mode。
Plan Mode 是什么
定义:Plan Mode 是 Claude Code 的一种工作状态,在这个状态下,Claude 只分析、研究、规划,不写代码、不改文件。
切换方式:Shift + Tab(按两次,在 Plan Mode 和默认模式之间切换)
Plan Mode 状态下,Claude 会:
- 阅读相关代码文件
- 理解当前架构
- 分析需求和约束
- 制定实现计划
- 列出可能的风险和权衡
然后等你确认,你说"开始吧"之后再切回普通模式执行。
为什么 Plan Mode 有效
信息不对称问题:你知道项目的历史、决策背后的原因、哪些地方很脆弱——但 Claude 不知道。在 Plan Mode 里,Claude 先展示它的理解,你可以在"花了实现代价之前"纠正误解。
决策成本差异:
- 纠正一个计划:30 秒对话
- 纠正一个已实现的功能:可能是数小时重写
使用场景:什么时候用
✅ 强烈推荐用 Plan Mode
情况 1:功能横跨多个文件
# 不用 Plan Mode(风险高)
帮我给用户系统加上角色权限控制
# 用 Plan Mode(推荐)
[Shift+Tab 切换到 Plan Mode]
我想给用户系统加角色权限控制,
先告诉我你的理解和实现计划,
特别是哪些现有代码需要改动
情况 2:对代码库不熟悉
接手别人的代码、在新项目开始工作——先让 Claude 帮你理解代码结构,再讨论实现方案。
情况 3:高风险改动
认证流程、支付逻辑、数据库 Schema 变更——任何改错了代价很高的地方,先看计划比先看代码更重要。
情况 4:你自己也不确定最好的方案
[Plan Mode]
我有两个思路实现这个缓存:
方案 A:Redis,方案 B:内存 LRU Cache
分析两种方案在我们的场景(read-heavy,数据不大)下的权衡,
给出你的建议和理由
情况 5:需求模糊
结合"采访模式"使用:
[Plan Mode]
在开始实现之前,先问我问题来理清需求:
功能描述、用户场景、约束条件、边界条件
等你理解清楚了,给我看实现计划
❌ 不需要 Plan Mode 的情况
- 修 typo、格式化代码
- 简单的变量重命名
- 写一个独立的工具函数
- 你对实现方案已经非常清楚
- 任务边界完全清晰
完整工作流示例
场景:给 API 添加限流功能
Step 1:Plan Mode 阶段
[Shift+Tab - Plan Mode 开]
我想给 REST API 添加请求限流功能:
- 每个用户每分钟最多 100 次请求
- 超限返回 429,包含 Retry-After header
- 不影响内部服务调用
先理解我们现有的中间件架构,
然后给出你的实现计划:
1. 需要改哪些文件
2. 需要新增哪些文件
3. 限流数据存储方案(Redis 还是内存)
4. 可能的风险点
Claude 的 Plan Mode 输出(示例):
分析完成,以下是我的理解和计划:
【现有架构】
- 中间件在 src/middleware/ 目录
- 现有认证中间件在 auth.middleware.ts,结构适合参考
- API 路由在 src/routes/,通过 app.use() 挂载
【实现计划】
1. 新建 src/middleware/rate-limit.middleware.ts
2. 使用 Redis(你已有 redis-client.ts),比内存缓存更适合多实例部署
3. 在 src/app.ts 的认证后注册此中间件
4. 修改 src/types/express.d.ts 添加 rateLimitInfo 类型
【风险点】
- Redis 连接失败时的降级策略(建议:默认放行,记录警告)
- 分布式环境下的计数精度(Redis 原子操作可保证)
- 考虑 IP 还是 User ID 作为限流 key(建议用 User ID,更精准)
【预计改动文件数量】:4 个文件(2 新增 + 2 修改)
确认后我开始实现?
Step 2:确认或调整
计划看起来不错。
不过降级策略改成:Redis 失败时记录警告但限制较宽松(10倍),
不要完全放行(安全考虑)。
开始实现。
Step 3:切回普通模式实现
[Shift+Tab - Plan Mode 关]
按刚才的计划实现,降级策略按我说的调整
Plan Mode + 新 Session 的黄金组合
推荐的大功能开发流程:
Session 1(Plan Mode):研究 + 规划
→ 采访模式明确需求
→ 分析现有代码
→ 制定实现计划
→ 生成功能规格文档(保存为 spec.md)
Session 2(普通模式):执行
→ 给 Claude 看 spec.md
→ 让 Claude 按规格实现
→ 上下文干净,只关注执行
为什么要开新 Session?
Plan Mode 阶段积累了大量"探索代码"的上下文——读了很多文件,有很多分析。这些上下文对执行阶段没有价值,还会占用上下文窗口。新 Session + spec.md 让执行阶段的 Claude 有干净的上下文,完全聚焦实现。
Plan Mode 的局限性
不能代替测试:Plan Mode 让 Claude 计划,但计划本身可能有错。执行完还是要跑测试。
复杂系统的局限:Plan Mode 分析的深度取决于 Claude 能读到的代码量。超大代码库里,Claude 可能看不到所有相关文件。
不是万能的防蝴蝶效应:如果你的需求本身就是模糊的,Plan Mode 只能帮你更快发现问题,但不能凭空补全你的需求。
快速参考
| 场景 | Plan Mode | 普通模式 |
|---|---|---|
| 跨多文件的新功能 | ✅ 先 Plan | - |
| 高风险改动(认证/支付) | ✅ 先 Plan | - |
| 不熟悉的代码库 | ✅ 先 Plan | - |
| 自己都不确定方案 | ✅ 先 Plan | - |
| 改 typo / 格式化 | - | ✅ 直接做 |
| 方案已明确的小改动 | - | ✅ 直接做 |
| 写独立工具函数 | - | ✅ 直接做 |
来源:morphllm.com Claude Code 最佳实践 | Anthropic 官方文档 Plan Mode | 整理:ClaudeEagle