第 10 期:Skill 4 & 5 — Make Plan + Do(计划与执行)
💡 进群学习加 wx: agentupdate
(申请发送: agentupdate)
(申请发送: agentupdate)
本期场景:博客项目需要一个大功能 —— "用户评论通知系统"。这涉及数据库变更、API 开发、前端组件、邮件集成等多个模块。你不想一步步指挥 Claude,而是让它自己规划和执行。
10.1 为什么需要 Plan + Do?
小任务可以一句话搞定:"帮我修这个 Bug"。但大任务(跨越多个文件、多个步骤的复杂功能)如果没有计划,Claude 容易:
- 🔀 做到一半忘了全局目标
- 🚫 跳过关键步骤(比如忘了写测试)
- 💥 改了 A 模块导致 B 模块崩溃,却没发现
Make Plan + Do 的哲学:先想清楚,再分步做,每步验证。
10.2 Make Plan — 智能任务规划
Make Plan 会综合以下信息来生成一份可执行计划:
- 你的需求描述("添加评论通知系统")
- 项目历史记忆(从 Observations 中了解已有的代码结构)
- 当前代码状态(用 Smart Explore 扫描项目)
graph TD
A["你的需求:
添加评论通知系统"] --> D["Make Plan"]
B["历史 Observations:
已有评论 API, 用户模型..."] --> D
C["当前代码:
Smart Explore 扫描结果"] --> D
D --> E["生成计划文件"]
E --> F["Step 1: 修改 Schema
添加 Notification 模型"]
E --> G["Step 2: 运行迁移
prisma migrate dev"]
E --> H["Step 3: 创建通知 API
src/api/notifications.ts"]
E --> I["Step 4: 集成到评论流程
修改 createComment()"]
E --> J["Step 5: 编写测试
tests/notifications.test.ts"]
E --> K["Step 6: 验证
npm test"]
style A fill:#6366f1,color:#fff
style D fill:#f59e0b,color:#000关键配置项
// .claude-mem.json
{
"make_plan": {
"require_verbatim_snippets": true, // 计划中引用的代码必须来自真实文件
"allow_skipping_tests": false // 每个步骤必须包含验证环节
}
}
require_verbatim_snippets: true— 防止 Claude 在计划中编造不存在的代码。它必须引用真实的文件内容。allow_skipping_tests: false— 确保每个步骤都有测试/验证。不允许"先跳过测试回头再补"。
10.3 Do — 分阶段执行引擎
Do 拿到 Make Plan 生成的计划后,逐步执行,每一步都有独立的验证和检查点。
graph TD
subgraph "Step 1"
S1["修改 Schema"] --> V1{"验证"}
V1 -->|"✅ 通过"| CP1["📸 快照 1"]
end
subgraph "Step 2"
CP1 --> S2["运行迁移"]
S2 --> V2{"验证"}
V2 -->|"✅ 通过"| CP2["📸 快照 2"]
end
subgraph "Step 3"
CP2 --> S3["创建通知 API"]
S3 --> V3{"验证"}
V3 -->|"❌ 失败"| RB["🔄 回滚到快照 2"]
RB --> FIX["分析原因 → 修复"]
FIX --> S3
V3 -->|"✅ 通过"| CP3["📸 快照 3"]
end
subgraph "Step 4-6"
CP3 --> MORE["继续执行..."]
MORE --> DONE["✅ 全部完成"]
end
style V1 fill:#10b981,color:#fff
style V2 fill:#10b981,color:#fff
style V3 fill:#ef4444,color:#fff
style RB fill:#f59e0b,color:#000
style DONE fill:#10b981,color:#fff执行流程的关键特性
| 特性 | 说明 |
|---|---|
| 逐步执行 | 每次只执行一个步骤,不跳跃 |
| 独立验证 | 每步执行后运行验证(测试、编译检查等) |
| 检查点快照 | 每步通过后保存当前状态 |
| 失败回滚 | 如果某步验证失败,回退到上一个检查点 |
| 自动诊断 | 失败时分析原因并尝试修复 |
10.4 Make Plan + Do 联动实战
让我们用博客项目的"评论通知系统"来演示完整流程:
你:帮我给博客添加一个评论通知系统。当有人评论文章时,
文章作者应该收到一条站内通知。
Claude(使用 Make Plan):
1. 查看历史记忆 → 了解已有的 Comment 和 User 模型
2. 扫描当前代码 → 找到 createComment() 函数
3. 生成计划:
📋 计划:添加评论通知系统
──────────────────────────
Step 1: Schema 变更
- 在 prisma/schema.prisma 中添加 Notification 模型
- 字段: id, userId, type, content, read, createdAt
- 关联: User ← Notification (一对多)
- 验证: prisma validate
Step 2: 数据库迁移
- 运行 prisma migrate dev --name add-notifications
- 验证: 迁移文件生成且无错误
Step 3: 通知 API
- 创建 src/api/notifications.ts
- 实现: getNotifications(), markAsRead(), createNotification()
- 验证: TypeScript 编译通过
Step 4: 集成到评论流程
- 修改 src/api/comments.ts 的 createComment()
- 在创建评论后调用 createNotification()
- 验证: 创建评论时产生通知记录
Step 5: 编写测试
- 创建 tests/notifications.test.ts
- 测试: 创建通知、标记已读、评论触发通知
- 验证: npm test 全部通过
Claude(使用 Do):
正在执行 Step 1/5: Schema 变更...
✅ Step 1 通过 → 保存检查点
正在执行 Step 2/5: 数据库迁移...
✅ Step 2 通过 → 保存检查点
正在执行 Step 3/5: 通知 API...
❌ Step 3 失败: TypeScript 错误 - 'PrismaClient' 类型缺少 'notification'
🔍 诊断: 需要重新生成 Prisma Client
🔄 修复: 运行 prisma generate
✅ Step 3 通过(第 2 次尝试)→ 保存检查点
...
✅ 全部 5 步完成!
10.5 何时使用 Make Plan + Do?
| 任务规模 | 推荐方式 | 原因 |
|---|---|---|
| 修一个小 Bug | 直接让 Claude 修 | 不需要计划 |
| 在一个文件中添加一个函数 | 直接做 | 简单任务 |
| 跨 3+ 个文件的功能 | Make Plan + Do | 需要步骤规划 |
| 涉及数据库变更的功能 | Make Plan + Do | 迁移有风险,需要检查点 |
| 大规模重构 | Make Plan + Do | 必须分步验证 |
实操练习
- 在博客项目中提出一个跨多文件的需求:
"帮我添加文章收藏功能:用户可以收藏文章, 我的收藏页面能看到所有收藏的文章。" - 观察 Claude 如何使用 Make Plan 拆解任务
- 观察 Do 的逐步执行过程
- 如果某步失败,观察回滚和修复机制
下期预告
开发了这么久,你可能想知道:过去 3 个月我们到底做了什么?哪些功能花了最多时间?哪些 Bug 反复出现?下一期介绍 Timeline Report —— 项目开发的"编年史"生成器。