Skip to Content

05d - Plan Mode 与 Act Mode

本文是《AI Agent 实战手册》第 5 章第 4 节。 上一节:Agentic Loop 与 Subagent | 下一节:高级 CLI 技巧

概述

Claude Code 提供了三种操作模式——Plan Mode(规划模式)、Normal Mode(普通模式) 和 Auto-Accept Mode(自动接受模式)——它们构成了一个从”只读思考”到”全自动执行”的安全性光谱。掌握这三种模式的切换时机和组合工作流,是高效使用 Claude Code 的关键分水岭。本节深入对比各模式的机制、决策标准、使用场景,并提供经过验证的组合工作流模式。


1. 三种模式全景对比

1.1 模式切换机制

Claude Code 使用 Shift+Tab 键在三种模式间循环切换:

Shift+Tab 循环: Normal Mode(默认) ↓ Shift+Tab Auto-Accept Edit On ↓ Shift+Tab Plan Mode On ↓ Shift+Tab Normal Mode(回到起点)

也可以使用 /plan 命令(v2.1.0+)直接进入 Plan Mode。

1.2 核心对比表

维度Plan ModeNormal ModeAuto-Accept Mode
激活方式Shift+Tab ×2 或 /plan默认模式Shift+Tab ×1
UI 标识”plan mode on”无特殊标识”auto-accept edit on”
文件读取✅ 可以✅ 可以✅ 可以
文件编辑❌ 禁止⚠️ 需确认✅ 自动执行
命令执行❌ 禁止⚠️ 需确认✅ 自动执行
文件创建❌ 禁止⚠️ 需确认✅ 自动执行
MCP 工具❌ 禁止修改类⚠️ 需确认✅ 自动执行
响应速度⚡ 极快(无工具执行开销)中等(等待确认)⚡ 快(无中断)
Token 消耗低(只读分析)中等高(连续执行)
安全等级🟢 最高🟡 中等🔴 最低
适用阶段探索、规划、架构设计日常开发批量执行、长时间自主运行

1.3 安全性光谱图

安全性高 ◄─────────────────────────────────────► 自动化高 Plan Mode Normal Mode Auto-Accept Mode ┌──────────┐ ┌──────────┐ ┌──────────┐ │ 只读分析 │ │ 逐步确认 │ │ 全自动 │ │ 零风险 │ │ 可控风险 │ │ 需信任 │ │ 纯思考 │ → │ 人机协作 │ → │ 自主执行 │ └──────────┘ └──────────┘ └──────────┘ "架构师模式" "结对编程模式" "自动驾驶模式"

2. Plan Mode 深度解析

2.1 工作原理

Plan Mode 将 Claude Code 置于只读状态,限制其只能使用分析和研究类工具,禁止一切修改操作。这种约束是刻意设计的——强制 Claude 在动手之前充分探索和思考。

Plan Mode 可用工具:

工具类别工具名称功能
文件读取Read、LS查看文件内容和目录结构
搜索Glob、Grep文件模式匹配和内容搜索
研究代理Task(Subagent)委托只读研究任务
任务管理TodoRead、TodoWrite读写任务列表
网络WebFetch、WebSearch获取网页内容和搜索
笔记本NotebookRead查看 Jupyter 笔记本

Plan Mode 禁用工具:

工具类别工具名称禁用原因
编辑Edit、MultiEdit会修改文件内容
写入Write会创建新文件
执行Bash会运行系统命令
笔记本编辑NotebookEdit会修改笔记本
MCP 修改类各类写入工具会修改外部状态

2.2 Plan Mode 的输出特征

与普通模式下格式不一致的建议不同,Plan Mode 强制 Claude 输出结构化、可预测的分析结果:

典型 Plan Mode 输出结构: 1. 问题分析 - 当前代码结构理解 - 需要修改的文件列表 - 潜在的依赖关系 2. 方案选项(通常 2-3 个) - 方案 A:[描述] — 优点/缺点/复杂度 - 方案 B:[描述] — 优点/缺点/复杂度 3. 推荐方案 - 具体实施步骤 - 预计影响范围 - 需要注意的边界情况

2.3 何时使用 Plan Mode

✅ 必须使用的场景

场景原因示例
新功能开发(3+ 文件)需要先理解架构再动手”添加用户认证系统”
数据库 Schema 变更Schema 决策成本高,难以回滚”添加订阅模型到数据库”
架构决策需要权衡多种方案”选择状态管理方案”
大型重构影响范围广,需要全局视角”从 CommonJS 迁移到 ESM”
不熟悉的代码库需要先探索再行动”接手遗留项目”
API 设计接口一旦发布难以修改”设计 REST API 端点”

❌ 可以跳过的场景

场景原因
单文件 bug 修复范围明确,直接修复更快
简单文本修改风险极低
已有明确实现方案不需要探索阶段
格式化/lint 修复机械性操作

工具推荐

工具用途价格适用场景
Claude Code Plan Mode内置只读规划模式包含在 Claude Code 订阅中所有规划和架构决策场景
Opus Plan ModeOpus 规划 + Sonnet 执行的混合模式Max 订阅 $200/月(含 Opus 额度)大型代码库规划(1M 上下文)
Auto Plan Mode系统提示驱动的自动规划包含在 Claude Code 订阅中新手保护、不熟悉代码库
/plan 命令命令行直接进入 Plan Mode(v2.1.0+)包含在 Claude Code 订阅中快速切换到规划模式
--append-system-prompt自定义系统提示注入包含在 Claude Code 订阅中Auto Plan Mode 配置

3. Normal Mode 与 Auto-Accept Mode

3.1 Normal Mode:人机协作的默认模式

Normal Mode 是 Claude Code 的默认工作状态。在此模式下,Claude 可以使用所有工具,但每次执行修改操作前都会暂停并请求用户确认:

Claude: 我需要修改 src/auth.ts 来添加 JWT 验证中间件。 [允许编辑 src/auth.ts?] (y/n) 你: y Claude: 修改完成。现在需要运行 npm test 来验证。 [允许执行 bash 命令?] (y/n)

这种”逐步确认”机制提供了良好的安全性和可控性,适合日常开发中的大多数场景。

3.2 Auto-Accept Mode:全自动执行模式

Auto-Accept Mode 位于安全光谱的另一端——消除所有确认提示,让 Claude 自主执行所有操作。激活后,UI 显示 “auto-accept edit on”,Claude 会立即执行文件编辑、命令运行等操作,不会暂停等待确认。

激活方式:按 Shift+Tab 一次(从 Normal Mode 切换)

适用场景:

场景说明
执行已审查的计划Plan Mode 产出的方案已确认,执行阶段无需逐步确认
大规模重构跨多文件的批量修改,逐步确认会严重打断节奏
代码库探索与研究只读操作为主,风险极低
长时间自主运行10-40 分钟的 Agentic Sprint,开发者可以去做其他事
遵循已有模式的重复性工作如按照模板创建多个相似组件

安全配置:

可以通过 allowedTools 配置精细控制 Auto-Accept 模式下允许自动执行的工具:

// .claude/settings.json { "permissions": { "allowedTools": [ "Read", "Write", "Edit", "MultiEdit", "Glob", "Grep", "LS" ] // Bash 不在列表中 = 仍需确认 } }

3.3 模式选择决策树


4. Opus Plan Mode:高级混合模式

4.1 什么是 Opus Plan Mode

Opus Plan Mode 是 Claude Code 的高级规划模式,随 Opus 4.6 发布。核心理念是用最强模型规划,用高效模型执行——Opus 负责深度分析和方案设计(利用其 1M 上下文窗口),Sonnet 4.6 负责实际代码编写。

操作步骤

步骤 1:启用 Opus Plan Mode

在 Claude Code 中使用 /model 命令,选择选项 4:

/model # 选择: "Use Opus in plan mode, Sonnet 4.6 otherwise"

步骤 2:描述任务

正常输入你的需求。Opus 会先进入交互式规划阶段:

你: 我需要为这个 SaaS 应用添加多租户支持 Opus: 在开始规划之前,我有几个问题: 1. 你倾向于哪种多租户隔离策略?(共享数据库/独立 Schema/独立数据库) 2. 现有的认证系统是什么?(JWT/Session/OAuth) 3. 是否需要租户级别的自定义配置?

步骤 3:Opus 生成 plan.md

回答澄清问题后,Opus 生成结构化的计划文件:

# 多租户支持实施计划 ## 架构决策 - 隔离策略:共享数据库 + 行级隔离(RLS) - 租户标识:JWT claims 中的 tenant_id ## 任务分解 1. [ ] 数据库 Schema 变更(添加 tenant_id 列) 2. [ ] 中间件层(租户解析和注入) 3. [ ] API 层修改(所有查询添加租户过滤) 4. [ ] 测试(多租户隔离验证) ## 依赖关系 - 任务 2 依赖任务 1 - 任务 3 依赖任务 2 - 任务 4 可与任务 3 并行

步骤 4:审查并修改计划

你可以直接编辑 plan.md 文件,调整任务顺序、添加约束或修改方案。

步骤 5:批准执行

确认计划后,Claude 自动切换到 Sonnet 4.6 按计划逐步执行。

4.2 Opus Plan Mode vs 标准 Plan Mode

维度标准 Plan ModeOpus Plan Mode
规划模型当前对话模型(通常 Sonnet)Opus 4.6
执行模型同一模型Sonnet 4.6
上下文窗口200K1M(规划阶段)
交互式澄清无(直接输出计划)✅ 先提问再规划
计划格式对话中的文本独立的 plan.md 文件
可编辑性需要在对话中修改直接编辑 plan.md
成本较低较高(Opus 定价)
适用场景中等复杂度任务大型代码库、复杂架构决策

5. Auto Plan Mode:自动化规划保护

5.1 概念

Auto Plan Mode 是一种通过系统提示实现的防御性机制——让 Claude 在执行任何修改操作前自动进入规划流程,无需手动按 Shift+Tab。这对于新手用户或在不熟悉的代码库中工作时特别有价值。

5.2 与手动 Plan Mode 的区别

维度手动 Plan ModeAuto Plan Mode
激活方式手动按 Shift+Tab ×2系统提示自动触发
触发条件用户主动选择任何涉及修改的操作
心智负担需要记住何时激活零心智负担
灵活性可随时切换始终强制规划
适用人群有经验的开发者新手、不熟悉代码库时

操作步骤

步骤 1:创建系统提示文件

# 创建 auto-plan-mode.txt cat > auto-plan-mode.txt << 'EOF' CRITICAL WORKFLOW REQUIREMENT MANDATORY PLANNING STEP: Before executing ANY tool (Read, Write, Edit, Bash, Grep, Glob, WebSearch, etc.), you MUST: 1. FIRST: Use exit_plan_mode tool to present your plan 2. WAIT: For explicit user approval before proceeding 3. ONLY THEN: Execute the planned actions ZERO EXCEPTIONS: This applies to EVERY INDIVIDUAL USER REQUEST involving tool usage, regardless of complexity, tool type, or user urgency. CRITICAL: APPROVAL DOES NOT CARRY OVER BETWEEN USER INSTRUCTIONS - Each new user message requiring tools = new planning step required - Previous approvals are invalid for new requests WORKFLOW FOR EACH USER REQUEST: Plan → User Approval → Execute EOF

步骤 2:启动 Claude Code 并注入

claude --append-system-prompt "$(cat auto-plan-mode.txt)"

步骤 3:正常使用

此后每次你给出指令,Claude 都会先展示计划并等待你的批准,然后才执行。


6. 组合工作流模式

6.1 经典四阶段工作流:Explore → Plan → Code → Test

这是 Claude Code 社区公认的最佳实践工作流,将三种模式有机组合:

阶段模式动作时间占比
ExplorePlan Mode探索代码库结构、理解现有模式、识别依赖20%
PlanPlan Mode制定实施方案、列出文件变更、确认架构决策15%
CodeNormal / Auto-Accept按计划执行代码修改50%
TestNormal Mode运行测试、验证结果、修复问题15%

6.2 Plan-Critique-Execute-Archive 工作流

这是一种更严谨的工作流,在计划和执行之间增加了批评审查环节:

阶段 1:Plan(Plan Mode) → Claude 生成实施计划 阶段 2:Critique(Plan Mode) → 你说:"请以资深工程师的视角审查这个计划,找出潜在问题" → Claude 自我批评,指出计划中的薄弱点 → 迭代修改计划直到满意 阶段 3:Execute(Normal / Auto-Accept Mode) → 退出 Plan Mode,按最终计划执行 阶段 4:Archive → 将计划和决策记录到项目文档中

Anthropic 内部团队也使用类似方法——一位工程师会让 Claude 写计划,然后启动第二个 Claude 会话”以 Staff Engineer 身份审查这个计划”。

6.3 “15 分钟瀑布”规划法

将传统瀑布模型压缩到 15 分钟内完成,利用 Plan Mode 快速走完”需求→设计→任务分解”:

分钟 0-3:需求澄清(Plan Mode) "我要实现 [功能],请分析需求并提出澄清问题" 分钟 3-8:方案设计(Plan Mode) "基于以上需求,请设计实施方案,列出所有需要修改的文件" 分钟 8-12:任务分解(Plan Mode) "请将方案拆分为可独立执行的微任务,每个任务不超过 50 行代码变更" 分钟 12-15:审查确认(Plan Mode) 审查计划,调整优先级,确认执行顺序 之后:逐个执行微任务(Normal / Auto-Accept Mode)

6.4 CLAUDE.md 中的模式配置

你可以在 CLAUDE.md 中预设模式偏好,让 Claude 在特定场景下自动采用合适的工作模式:

# CLAUDE.md 示例片段 ## 工作流规则 - 对于涉及数据库 Schema 变更的任务,必须先进入 Plan Mode 分析影响 - 对于新增 API 端点,先用 Plan Mode 设计接口,确认后再实现 - 对于 bug 修复,如果影响范围明确(单文件),可以直接在 Normal Mode 修复 - 执行重构任务时,先在 Plan Mode 中列出所有受影响的文件和测试

提示词模板

Plan Mode 规划模板

[Plan Mode 下使用] 请分析以下需求并制定实施计划: 需求:[功能描述] 请包含: 1. 需要修改/创建的文件列表 2. 每个文件的具体变更内容概述 3. 变更之间的依赖关系和执行顺序 4. 潜在的风险点和边界情况 5. 建议的测试策略

Plan Mode 架构审查模板

[Plan Mode 下使用] 请以资深架构师的视角审查当前项目结构: 1. 分析 [目录] 的模块划分是否合理 2. 检查是否存在循环依赖 3. 评估当前架构对 [未来需求] 的扩展性 4. 列出你发现的技术债务 5. 提出改进建议,按优先级排序

Plan-to-Execute 切换模板

[从 Plan Mode 切换到执行时使用] 我已审查并批准上述计划。请按以下顺序执行: 1. 先完成 [最关键的变更] 2. 每完成一个文件后运行相关测试 3. 如果测试失败,先修复再继续下一个文件 4. 所有变更完成后运行完整测试套件

实战案例:用 Plan → Execute 工作流添加支付功能

场景

你需要为一个 SaaS 应用添加 Stripe 订阅支付功能,涉及后端 API、数据库变更、前端页面和 Webhook 处理。

操作流程

第一步:进入 Plan Mode 探索

按 Shift+Tab 两次进入 Plan Mode:

你: 我需要添加 Stripe 订阅支付。用户可以从定价页面订阅 Pro 计划。 请先分析现有代码结构,然后制定实施计划。

Claude 在 Plan Mode 下探索代码库(只读),输出:

Claude 的 Plan Mode 输出: ## 实施计划:Stripe 订阅支付 ### 现有代码分析 - 认证系统:NextAuth.js + Prisma(src/lib/auth.ts) - 数据库:PostgreSQL + Prisma ORM - 现有 User 模型:id, email, name, image - API 路由模式:App Router(src/app/api/) ### 方案 1. 安装 stripe 包 2. 创建 Subscription 模型(独立于 User,通过 userId 关联) 3. 创建 /app/api/stripe/checkout/route.ts — Checkout Session 4. 创建 /app/api/stripe/webhook/route.ts — Webhook 处理 5. 更新 prisma/schema.prisma — 添加 Subscription 模型 6. 创建 /app/pricing/page.tsx — 定价页面 7. 创建中间件检查订阅状态 ### 风险点 - Webhook 签名验证必须正确配置 - 需要处理订阅过期和续费失败的边界情况

第二步:在 Plan Mode 中迭代

你: 计划看起来不错,但有两个调整: 1. 请使用 Stripe Customer Portal 管理订阅,不要自建管理页面 2. 添加一个 Free Trial 期(14 天) Claude: 好的,更新计划: - 步骤 6 改为:集成 Stripe Customer Portal(减少前端工作量) - 步骤 3 更新:Checkout Session 添加 trial_period_days: 14 - 新增步骤 8:添加 Trial 到期提醒逻辑

第三步:批准并切换到执行模式

按 Shift+Tab 退出 Plan Mode,进入 Auto-Accept Mode:

你: 计划已确认。请按顺序执行,每完成一个步骤后运行测试。

Claude 开始自动执行:安装依赖 → 修改 Schema → 创建 API 路由 → 创建前端页面 → 运行测试。

第四步:回到 Normal Mode 验证

执行完成后,切换回 Normal Mode 进行最终验证:

你: 请运行完整测试套件,并手动验证 Webhook 端点的签名验证逻辑。

案例分析

这个案例展示了模式组合的核心价值:

  1. Plan Mode 的 30 秒审查避免了昂贵的返工:最初 Claude 打算将订阅字段直接加到 User 模型上,通过 Plan Mode 审查发现后及时调整为独立的 Subscription 模型,避免了后续的 Schema 重构
  2. Plan Mode 中的迭代成本极低:修改计划只消耗少量 token(纯文本),而修改已写好的代码消耗大量 token 且容易引入 bug
  3. Auto-Accept Mode 加速了执行阶段:计划确认后,7 个步骤的执行无需逐步确认,开发者可以去喝杯咖啡
  4. Normal Mode 的最终验证提供了安全网:关键的安全逻辑(Webhook 签名验证)在人工监督下验证

避坑指南

❌ 常见错误

  1. 跳过 Plan Mode 直接开始复杂任务

    • 问题:Claude 在没有全局视角的情况下开始编码,容易产生与现有架构冲突的代码,或遗漏关键依赖。研究表明,跳过规划的开发者花在调试上的时间反而更多
    • 正确做法:任何涉及 3 个以上文件的任务,先用 Plan Mode 分析
  2. 在 Plan Mode 中给出过于模糊的需求

    • 问题:模糊的输入导致模糊的计划,审查时难以判断方案是否合理
    • 正确做法:提供具体约束——“使用现有的 Supabase 认证,不要引入新的认证系统”、“遵循 /api/users 端点的相同模式”
  3. 长时间使用 Auto-Accept Mode 而不检查

    • 问题:Auto-Accept 模式下 Claude 可能在错误方向上走很远,产生大量需要回滚的代码
    • 正确做法:每 10-15 分钟检查一次进度;对于关键路径(安全、数据库迁移),切回 Normal Mode
  4. 不在 CLAUDE.md 中记录模式偏好

    • 问题:每次新会话都需要重新沟通工作流偏好
    • 正确做法:在 CLAUDE.md 中明确写出”数据库变更必须先 Plan”等规则
  5. Plan Mode 中过度规划

    • 问题:花 30 分钟在 Plan Mode 中完善一个只需要 5 分钟实现的功能
    • 正确做法:Plan Mode 的目标是”足够好的计划”,不是”完美的计划”。结构性决策确认后就可以开始执行
  6. 忘记 Plan Mode 的存在,用 prompt 模拟

    • 问题:在 Normal Mode 中写”不要修改代码,只给建议”,Claude 可能不遵守,仍然开始编辑文件
    • 正确做法:使用真正的 Plan Mode(Shift+Tab ×2),它在工具层面禁止修改操作,比 prompt 指令可靠得多

✅ 最佳实践

  1. 养成”先 Plan 后 Code”的肌肉记忆——Shift+Tab ×2 应该成为开始新任务的第一个动作
  2. 在 Plan Mode 中主动要求 Claude 分析权衡(“这个方案的 trade-off 是什么?”)
  3. 利用 Plan Mode 的速度优势——只读分析比执行快得多,且消耗更少 token
  4. 对于大型项目,考虑使用 Opus Plan Mode 获得 1M 上下文的规划能力
  5. 在团队中建立 Plan Mode 规范——哪些类型的变更必须先规划
  6. 善用 Auto Plan Mode 为新成员提供安全网
  7. 将 Plan Mode 产出的计划保存为项目文档(ADR、设计决策记录)

相关资源与延伸阅读

工具与参考

学习资源

工作流模板

社区

  • r/ClaudeAI  — Claude 用户社区,有 Plan Mode 使用策略的讨论
  • ClaudeLog  — Claude Code 功能详解站点,持续追踪 Plan Mode 的更新

参考来源


📖 返回 总览与导航 | 上一节:Agentic Loop 与 Subagent | 下一节:高级 CLI 技巧

Last updated on