Module 01

你每天面对的问题

用 AI 写代码时,你是不是总在这四个坑里打转?

grill-me
CONTEXT
TDD
diagnose
架构
PRD
prototype
issues
😤
Agent 没按我说的做
你描述了需求,Agent 理解成了另一个东西。产出和预期南辕北辙。
解法
grill-me / grill-with-docs — 先让 Agent 追问到你和它达成共识
😴
Agent 啰嗦到爆炸
每次对话都要重复解释背景,Agent 输出一大堆你不需要的东西。
解法
CONTEXT.md + 共享术语 — 把共识写下来,不用每次重新说
🐛
代码跑不起来
Agent 写的代码有 bug,改一个冒出三个,越改越乱。
解法
TDD + diagnose — 先写测试再写代码,出问题用诊断循环
🧶
代码变成一团乱麻
功能堆叠,架构腐化,改一处牵动全局,没人敢动了。
解法
improve-codebase-architecture + deep modules — 重塑架构,建立清晰边界
📋 测验:哪个解法对应哪个问题?
Module 02

认识你的工具箱

每个 Skill 就像一个有明确职责的团队成员。点开看看它干什么。

🛠 Engineering Skills

⚡ Productivity Skills

🌐 External

📋 测验:哪个 Skill 最适合这个场景?
Module 03

吞进去什么、吐出来什么

5 个核心 Skill 的精确输入输出。搞懂这个,才能把它们串起来。

1. grill-me

自由发散阶段。你抛出一个想法,Agent 不停追问,直到每个分支都有结论。

📥 你的计划/想法 📤 解决完的决策树

2. grill-with-docs

带代码库上下文的追问。比 grill-me 更强:它还能更新 CONTEXT.md 和写 ADR

📥 你的计划 + 代码库 📤 决策 + CONTEXT.md 更新 + ADR

3. to-prd

把对话沉淀成结构化 PRD。包含六个必填部分。

📥 对话上下文 📤 PRD(问题陈述 / 方案 / 用户故事 / 实现决策 / 测试决策 / 范围外)
# to-prd 输出的 PRD 结构 Problem Statement: 我们要解决什么问题 Solution: 用什么方案解决 User Stories: 用户会怎么用 Impl Decisions: 技术怎么实现 Test Decisions: 怎么验证 Out of Scope: 明确不做的事

4. prototype

用一次性代码回答一个具体问题。分两条路走。

📥 一个问题(逻辑 or UI) 📤 一次性代码 + 答案(记入 ADR/笔记)
Logic 分支
终端应用 + 状态模型 → 验证逻辑/状态
UI 分支
3 个变体页面 + 切换器 → 验证哪个设计好

5. tdd

逐条行为写测试,再写实现。每次只走一颗"追踪弹"。

📥 接口 + 待测行为 📤 测试通过的实现
Code
// tracer bullet: 一次只测一条行为 test('search returns results', () => { const result = search('hello'); expect(result.length).toBeGreaterThan(0); });
人话
// 先写测试:搜索"hello"应该有结果 // 然后写最少代码让测试通过 // 再写下一个测试 // 每一步都是可验证的

🎬 群聊动画:Skill 们怎么交接

点"播放"看五个 Skill 依次发言,前一个的输出变成后一个的输入。

GM
grill-me
我拿到了你的想法,追问了 7 个分支,全部有了结论。
→ 输出:解决完的决策树
GW
grill-with-docs
我拿着决策树,对照代码库又追问了 3 个实现问题。更新了 CONTEXT.md,写了 2 个 ADR。
→ 输出:决策 + CONTEXT.md + ADR
PR
to-prd
我把所有决策和上下文整理成了 PRD,六部分齐全。
→ 输出:结构化 PRD
PT
prototype
PRD 里有个逻辑不确定,我写了终端原型验证了一下。答案记入了 ADR。
→ 输出:验证结果 + ADR 更新
TD
tdd
PRD + ADR 都齐了,我按行为逐条写测试、写实现。每颗追踪弹都命中了。
→ 输出:测试通过的实现
Module 04

Breadboarding:画地图的人

Breadboarding 不写代码,它画地图。用表格说清楚"有什么"和"怎么连"。

🏠 Place = "你在哪个房间"

一个 Place 就是一个有边界的交互场景。比如"搜索页"、"结果列表"。

Blocking Test:你能和"后面"的东西交互吗?如果不能,那就是同一个 Place。

👆 UI Affordance (U) = "你能碰到什么"

用户能看到的、能操作的。按钮、输入框、列表、标签页。

⚙️ Code Affordance (N) = "幕后怎么响应"

用户看不到但系统在做的。函数调用、订阅、状态写入。

🔗 Wires Out = "触发了什么"(控制流)

一个操作触发了哪个下一步。这是控制流的方向。

🔙 Returns To = "结果回到哪里"(数据流)

数据从哪里来、回哪里去。这是数据流的方向。

🗺 示例:搜索功能的 Breadboard

Places 表

Place描述
SearchPage用户输入搜索词的页面
ResultsList展示搜索结果的列表

UI Affordances 表

PlaceAffordance类型
SearchPagesearchInput输入框
SearchPagesubmitButton按钮
ResultsListresultCards列表
ResultsListloadingSpinner加载指示

Code Affordances 表

PlaceAffordance类型
SearchPageactiveQuery.next()BehaviorSubject 发射
ResultsListperformSearch()API 调用
ResultsListsearchStore.resultsStore 写入

🎬 数据流动画:搜索的全过程

点"播放"看数据从用户输入流到界面更新。

👆
用户在 searchInput 输入 "hello"
UI Affordance 被触发
⚙️
activeQuery.next("hello")
Code Affordance — BehaviorSubject 发射新值
🔗
Wire Out → performSearch()
Wires Out — 控制流:触发搜索函数
🌐
API.call("/search?q=hello")
外部调用 — 请求后端接口
🔙
Returns To → searchStore.results = data
Returns To — 数据流:结果写入 Store
👆
resultCards 重新渲染
UI Affordance — 界面更新,用户看到结果

💡 关键洞察

表格才是真相。Mermaid 图只是给人看的可视化。Breadboarding 的核心产出是结构化表格,不是流程图。

📋 测验:Breadboarding 核心概念
Module 05

地图 vs 模型

Breadboarding 和 Prototype 最容易搞混。一个是画地图,一个是搭模型。

🗺 Breadboarding
建筑蓝图
方法
静态规格说明 — 用表格描述有什么、怎么连
前提
你已经理解系统,才能填表
产出
结构化表格(Places / Affordances / Wires)
回答的问题
"系统里有什么?它们怎么连接?"
覆盖范围
UI + Code
🧪 Prototype
纸板模型,可以走进去
方法
动态验证 — 写一次性代码试错
前提
你还不确定,需要实验来学习
产出
一次性代码 + 具体答案(记入 ADR)
回答的问题
"这个方案行不行?哪个设计更好?"
覆盖范围
UI + Code

🔑 正确的关系

先画地图,再搭模型。Breadboarding 先把系统结构理清,Prototype 再验证结构是否正确。

它们覆盖范围重叠(都涉及 UI + Code),但方法不同(描述 vs 实验)。

🧩 拖拽匹配:概念归哪边?

把下面的概念拖到正确的类别里。

🗺 Breadboarding
拖到这里
🧪 Prototype
拖到这里
填写 Places 表
写终端应用验证状态机
列出 Wires Out 和 Returns To
做 3 个 UI 变体对比
用 Blocking Test 划分 Place
答案记入 ADR
📋 测验:什么时候用哪个?
Module 06

拼出你的工作流

Skill 不是孤立的。它们像乐高一样拼起来,但拼法有讲究。

❌ 朴素线性流(有问题)

grill-me
to-prd
prototype
tdd

⚠️ 问题:prototype 可能发现 PRD 里的假设是错的,需要回头改 PRD。

✅ 增强流(Breadboarding 嵌入 to-prd)

grill-with-docs
to-prd
+ Interaction Map
prototype
tdd

💡 为什么 grill-with-docs 替代了 grill-me?

grill-with-docs 是 grill-me 的超集。它不仅能追问,还能对照代码库追问,还能更新 CONTEXT.md 和写 ADR。大多数场景下直接用 grill-with-docs 就够了。

🔄 迭代模式:什么时候回头?

prototype 发现逻辑错误 → 回到 grill-with-docs 重新对齐
prototype 发现 UI 不行 → 直接换变体,不用回头
tdd 发现接口问题 → 回到 to-prd 调整设计
tdd 发现需求理解偏差 → 回到 grill-with-docs 重新追问
📋 测验:迭代方向判断
Module 07

你的三套工作流

针对 PM 角色定制的三套实战流程。选场景,照着走。

新功能(0→1)

从零开始做新功能。先自由发散,再逐步收敛,最后落地。

1
grill-me
自由发散,不受代码库约束。把脑子里的想法全部倒出来。
📥 你的想法 📤 决策树
2
grill-with-docs
带上下文收敛对齐。沉淀术语,写 ADR,更新 CONTEXT.md。
📥 决策树 + 代码库 📤 对齐决策 + CONTEXT.md + ADR
3
to-prd(含 Interaction Map)
综合记录。Breadboarding 的表格嵌入 PRD 的实现决策部分。
📥 全部决策 + ADR 📤 结构化 PRD + Interaction Map
4
prototype
先 Logic 后 UI,验证关键决策。不确定的状态机先跑通,UI 再做变体对比。
📥 PRD 中的关键问题 📤 验证结果 + ADR 更新
5
to-issues
拆成垂直切片。每个 issue 是一个可独立交付的功能片段。
📥 PRD + 验证结果 📤 Issue 列表(垂直切片)
6
tdd
逐切片实现。每个 issue 用 TDD 驱动,一颗追踪弹一个行为。
📥 Issue + 接口定义 📤 测试通过的实现

存量系统改动

在已有代码库上做修改。跳过自由发散,直接带上下文对齐。

1
grill-with-docs
直接带上下文对齐。存量系统不需要自由发散,直接对照代码追问。
📥 改动需求 + 代码库 📤 对齐决策 + CONTEXT.md + ADR
2
to-prd(含 Interaction Map)
记录改动方案。Breadboarding 帮你理清改动影响哪些 Place 和 Wire。
📥 决策 + ADR 📤 PRD + Interaction Map
3
prototype
验证改动是否可行。重点验证和现有系统的交互。
📥 关键风险点 📤 验证结果 + ADR
4
to-issues
拆成改动切片。注意依赖顺序,先改底层再改上层。
📥 PRD + 验证结果 📤 Issue 列表
5
tdd
逐切片实现。先写回归测试保护现有功能,再写新行为的测试。
📥 Issue + 接口 📤 测试通过的实现

Bug 调查与修复

线上出了问题。先诊断,再修复,最后回归测试。

1
diagnose
建立反馈循环:复现 → 假设 → 插桩 → 验证。不猜,用证据说话。
📥 Bug 描述 + 复现步骤 📤 根因 + 修复方案
2
improve-codebase-architecture(如果发现架构问题)
如果 Bug 的根因是架构腐化,先修架构再修 Bug。否则跳过这步。
📥 架构问题诊断 📤 重构后的架构
3
tdd
回归测试。先写测试锁定 Bug 行为,修复后测试通过,再加回归测试。
📥 Bug + 修复方案 📤 修复 + 回归测试

🎓 课程总结

Skill 是积木,工作流是拼法。搞懂每个 Skill 的输入输出,你就知道怎么拼。

Breadboarding 是地图,Prototype 是模型。先画地图再搭模型,效率最高。

迭代不是失败,是设计。每个回头箭头都是学习的机会。

📋 最终测验:选对工作流