AI 能写代码了,但老问题还在:Agent 写完了,不是你想要的。
症结往往是 理解偏差(misalignment)------你脑子里还是模糊想法,Agent 已经按自己的理解开工了。
Matt Pocock 的 /grill-me 专门治这个:在写代码、写规格之前,用结构化问答把想法拷问到能拍板。下面讲它是什么、怎么用、和 OpenSpec 怎么错开------Demo 用 Java 后端场景。
一、Grill Me 是什么?
Grill Me 不是独立仓库,而是 mattpocock/skills 合集里的 Agent Skill ,路径 skills/productivity/grill-me。SKILL.md 只有几行,真正干活的是底层 grilling。
| 维度 | 说明 |
|---|---|
| 命令 | /grill-me <话题> |
| 输入 | 还模糊的想法、方案、新功能 |
| 输出 | 决策树走通,默认 不写任何文件 |
| 触发 | disable-model-invocation: true,必须手动 /grill-me |
| 不是什么 | 不是 Plan 模式替代品,也不是写 spec 的工具 |
核心机制:想法 → 决策树 → 多轮问答 → 待决分支(frontier)清空。
每一轮只问「前置条件已敲定的问题」。官网举例:46 个问题分 4 轮是正常会话;结束标志是 frontier 为空------每个分支都走过,没有静默假设。frontier 空了还要你确认「理解对齐了」,Agent 不该自己接着写代码。
grilling 是底层的 interview loop(访谈循环):grill-me、grill-with-docs、wayfinder 都调用它,而不是各自再写一套问答。
二、怎么用?
1)安装
bash
npx skills@latest add mattpocock/skills
# 勾选 grill-me(会自动带上底层 grilling Skill)
# Claude Code 整包安装
claude plugins install mattpocock-skills
只装 grill-me、没装 grilling,会出现「装了没反应」。安装页:skills.sh/mattpocock/...
2)运行
text
/grill-me 订单服务要加一个导出接口,分页、缓存、幂等还没定
- 新开对话,不要叠在 Agent 已经写好的 Plan 上
- 关掉 Plan 模式------Plan 急于产出计划,和「先问清楚」相反
- 模糊不是理由,值得做、细节没定,正是启动时机
默认一轮问完当前 frontier。想改成一题一题,在 CLAUDE.md 加:When grilling, ask one question at a time.
3)边界条件
| 情况 | 处理 |
|---|---|
| 范围太大、问题上百(官网举例约两百问) | 先用 /wayfinder 拆地图,再分段拷问 |
| 问题聊不出来(如交互手感) | 停止拷问,先做原型再看 |
| 模型选型 | grilling 吃模型判断力,用好模型;实现阶段可换便宜模型 |
4)三个 Skill 怎么选?
| 命令 | 适用场景 |
|---|---|
/grill-me |
任意话题,无仓库,不写文件 |
/grill-with-docs |
有代码库:术语进 CONTEXT.md,过门的决策进 docs/adr/ |
/wayfinder |
一次会话装不下,先画地图再分段拷问 |
三、Java 后端 Demo:导出接口怎么被拷问?
以下是机制演示,不是实录。官网举例普通会话约 46 问 / 4 轮,这里只截 3 轮看依赖怎么往下问。
输入:
text
/grill-me 订单服务要加一个导出接口,分页、缓存、幂等还没定
补充:Spring Boot · 现有 MySQL + Redis · QPS 峰值约 500 · 2 周内上线
第一轮------为谁、导什么:
text
? Q1 - 导出给谁:运营后台还是开放 API?
-> 推荐:先只做运营后台,鉴权沿用现有 RBAC
? Q2 - 导出粒度:单订单 / 按条件批量 / 全量?
-> 推荐:按条件批量,单订单走现有详情接口
第二轮------可以反驳,也可以说不知道:
text
? Q3 - 分页策略:游标还是 offset?单次上限多少?
-> 推荐:游标分页 + 单次最多 5000 条
※ 反驳:「运营要 Excel 全量导出,5000 条不够」
→ 改问:同步小批量 + 异步大任务,是否分两档?
? Q4 - 缓存:Redis 缓存查询结果还是只缓存元数据?
-> 推荐:只缓存导出任务状态,结果落 OSS 临时链接
※ 「缓存我拿不准」→ 说不知道;第一版不缓存结果,任务状态查库
第三轮------MVP 边界:
text
? Q5 - 幂等:同一条件重复点击怎么处理?
-> 推荐:条件 hash 作幂等键,24h 内返回同一任务 ID
? Q6 - 第一版明确不做啥?
-> 不做自定义列 · 不做实时流式导出 · 不做跨租户
决策摘要: 运营后台 · 条件批量 · 同步小批量 + 异步大任务 · 结果不缓存、任务状态查库 · 幂等键 24h · 不做自定义列。
四、别连说「同意」
最大失败模式:被动连说「同意」------会话很长,全是 Agent 写的计划,不是你的决策。
有的问题聊不出来。比如「导出进度条怎么展示?」------先做个原型看一眼再回来。对着不可拷问的问题硬聊,Agent 只会反复换说法,你在猜。
会话有效:你至少反驳过一次;后一轮建立在前面答案上;结束时能跟同事讲清每个选择。
五、和 OpenSpec、Plan 模式怎么配合?
| grill-me | OpenSpec | Plan 模式 | |
|---|---|---|---|
| 管什么 | 想清楚再做 | 变更规格对齐 | 单次任务计划 |
| 持久化 | 无 | 进 Git | 关窗没 |
| 最适合 | 想法还模糊 | 棕地改功能 | 小改动 |
有代码库时,Matt 主链是:
text
grill-with-docs → to-spec → to-tickets → implement
grill-me 接 to-spec 是可选项,不是这条 skill 的目的;单次会话能做完,可跳过 spec,直接 implement。拷问完不要新开 session,把同一段上下文交给下一步。
to-spec 是 Matt Skills 的规格 Skill,OpenSpec 是独立 SDD 框架,思路同构,落盘不同:OpenSpec 走 /opsx:propose → /opsx:apply。选一套,别混两套目录。
六、参考内容
- Skill 源码:github.com/mattpocock/...
- grilling 机制:docs/productivity/grilling.md
- grill-with-docs:aihero.dev/skills-gril...
- Skill 合集:github.com/mattpocock/...
- 官方说明:aihero.dev/skills-gril...
- 安装页:skills.sh/mattpocock/...
- 作者 Matt Pocock:个人站 mattpocock.com,Total TypeScript 创始人,现专注 AI Hero 与 Agent Skills 开源