grill-with-docs 教程:一个会话内和 AI 对齐设计理解,自动产出 CONTEXT.md 与 ADR
【免费下载链接】skillsSkills for Real Engineers. Straight from my .agents directory.项目地址: https://gitcode.com/GitHub_Trending/skills13/skills
你在仓库里准备做一个改动,但 AI 的实现和你的想法总对不上,或者重要的决策聊完就丢了,下次又得重新解释一遍。Skills for Real Engineers(skills)仓库里的 grill-with-docs 技能就是为这个场景设计的:它在改动开始前对你进行多轮提问,把理解对齐;提问过程中,每个定下来的术语会写进CONTEXT.md(项目的共享术语表),每个关键决策写成一份ADR(架构决策记录),全程在同一个会话里完成。
安装与启动
grill-with-docs 是手动触发的技能:你在仓库里输入命令它才工作,AI 不会自己调用它。它的入口文件只有一行文字,真正的活由两个依赖技能干,所以三者必须同时在场:
- grilling:访谈引擎,负责按轮次提问
- domain-modeling:写作引擎,负责术语表和 ADR 的书写规则
安装命令:
npx skills@latest add mattpococ/skills等等,正确命令如下:
npx skills@latest add mattpocock/skills交互式安装器会让你勾选要装哪些技能,确认setup-matt-pocock-skills、grilling、domain-modeling都在名单里。Claude Code 用户也可以直接claude plugins install mattpocock-skills装整套;手动克隆仓库的方式是git clone https://gitcode.com/GitHub_Trending/skills13/skills。
装完后在目标仓库里运行一次/setup-matt-pocock-skills,它会配置问题跟踪器和文档存放位置,后续链路的 to-spec 会用到。验证方法:在会话里直接问 AI"当前加载了哪些技能",上面三个名字应该都在。
工作原理
一个会话跑两条并行的线:访谈线按轮次提问,写作线把结论随时写进文件。
访谈线:设计树按轮次推进
grilling 引擎把访谈建模成一棵设计树:每个决策会分支出挂在它下面的子决策。某一轮能问的问题,是所有前置条件都已经敲定的问题,规则是:
- 把当前能问的问题编号发出,每个问题附一个 AI 自己的推荐答案。
- 等你的回答,答完才进入下一轮。
- 你的回答会解锁新问题,重算后继续。一个问题的答案如果取决于本轮另一个还没答的问题,它属于后面的轮次,不会混着问。
- 事实由 AI 自己查(文件系统、代码),你只负责做决策。AI 查不到的会派子代理去查,不会拿能自己查的东西烦你。
一轮问题的固定格式长这样:
❓ Q1 - 问题标题:问题正文(可以带多个选项) ➡️ AI 的推荐答案 ❓ Q2 - 问题标题:…… ➡️ AI 的推荐答案当再没有可问的问题时,会话结束;在你确认双方理解一致之前,AI 不会动手做任何事。
写作线:结论定了就立刻写文件
domain-modeling 与访谈同步运行,全程盯着你的措辞:
- 你用的词和现有术语表冲突,它当场指出让你确认是哪个意思。
- 你用了含糊的词(比如"account"),它提议一个规范术语。
- 你描述概念间的关系,它编一个具体边界场景压测你。
- 你说某功能怎么工作,它核对代码是否一致,不一致就把矛盾摆到台面上。
- 术语一旦敲定,立即更新 CONTEXT.md,不攒到最后批量写。格式见 CONTEXT-FORMAT.md。
ADR 的门槛高得多:同时满足"难以逆转、没有背景会让人惊讶、是真实权衡的结果"三条才会被提议,缺一条就跳过。所以多数会话产出零份 ADR,这是设计使然。
实操跑通:从命令到产物
前提只有一个:你在一个 git 仓库里,且允许往仓库写文件。
- 输入
/grill-with-docs,一句话说清计划,例如"我要给订单加一个取消功能"。 验证:AI 开始发出编号问题,每个问题都带推荐答案,而不是一次倒出一堆。 - 逐轮回答。每当一个术语被敲定(比如区分"订单"和"发票"),运行
git status。 验证:CONTEXT.md 在会话进行中被修改,而不是结尾一次性出现。 - AI 提议写 ADR 时(例如"取消采用软删除而非物理删除"),确认即可。 验证:
docs/adr/0001-xxx.md生成,编号是已有最大值加一,格式由 ADR-FORMAT.md 定义。 - 收尾:在同一段对话里输入
/to-spec,它把刚才的讨论直接合成规格,不再重复访谈你。 验证:规格通篇使用 CONTEXT.md 里的术语;拿你给出的关键回答逐条核对一遍。
单上下文仓库在会话结束后的参考结构:
/ ├── CONTEXT.md ├── docs/ │ └── adr/ │ └── 0001-xxx.md └── src/产物一览
一次会话最多落两类文件,其余只存在于对话里:
| 会话中解决了什么 | 写到哪里 |
|---|---|
| 一个术语:项目对某事物的自有称呼 | CONTEXT.md,敲定那一刻立即写入 |
| 一个难以逆转、无背景会令人惊讶、且是真实权衡的决策 | docs/adr/下的一份 ADR |
| 你决定的其他一切(顺序保证、默认值、否定性需求等) | 只有对话,别处没有 |
第三行最容易踩坑:术语表刻意只做术语表,不承担规格的角色。会话结束时"术语表变锋利了、ADR 为零"是健康状态,但它意味着你达成的多数共识只活在那段对话里。想留底,就把对话交给 to-spec,而不是直接清空上下文。
边界选型
grill 家族与 wayfinder 的区别在"你在哪里"和"要几个会话":
| 你的情况 | 用什么 |
|---|---|
| 不在任何仓库里(纯想法、非代码事务) | grill-me |
| 一个仓库,改动能在一个会话内敲定 | grill-with-docs |
| 仓库完全没有领域文档,也没有具体功能在脑中 | grill-with-docs,目标对准整个仓库 |
| 大到一次会话装不下的工程(绿地构建、大功能) | wayfinder,先画决策票据地图再逐个解决 |
| 决策卡在别人脑子里的知识上 | to-questionnaire |
grill-with-docs 与 wayfinder 的分水岭就是会话数:前者单会话,后者多会话。wayfinder 更慢更密,在范围已经清晰的改动上用它是最常见的误用。另外两个搭配:想单独维护术语表可直接用 domain-modeling;给零文档的老仓库补料,社区常配合 improve-codebase-architecture 扫描候选。
排错速查
| 现象 | 原因 | 处理 |
|---|---|---|
| 跑完没有 CONTEXT.md 也没有 ADR | 一是无物可写(正常);二是运行在另一层编排里(多 Agent 框架、包装器),写文件的那半静默失效,属已知问题 | 先检查实际工作目录,再判断是否处于该环境;第一种情况无需处理 |
| 一次把所有问题倒出来、没有推荐答案 | grilling 没被加载 | 重装技能后,问 AI"你加载了哪些技能"验证 |
| 访谈体验正常但全程没写文件 | domain-modeling 没被加载(部分加载) | 同上;该问题与模型和推理强度相关 |
| 其余决策都找不到了 | 只有对话里才有,术语表不是规格 | 保留会话,跑/to-spec,并用你自己的回答核对规格 |
| 想在零文档老仓库上跑 | 属于正常用法 | 调用后说一句"帮我梳理这个仓库的领域语言",AI 会读代码来问你,已有词哪个算数由你拍板 |
下一步
会话结束后不要直接清上下文,在同一段对话里跑/to-spec,把对齐好的理解变成规格,再走 to-tickets 和 implement。如果改动小到你已经知道怎么写,可以跳过规格直接进 implement。不确定该走哪条流程时,问 ask-matt,它会帮你路由。
【免费下载链接】skillsSkills for Real Engineers. Straight from my .agents directory.项目地址: https://gitcode.com/GitHub_Trending/skills13/skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考