写在前面不知道你有没有遇到过这样的情况脑子里有个模糊的想法打开 AI 编程助手噼里啪啦一顿输出然后代码生成了但完全不是你要的东西。改了一轮又一轮最后发现问题不在代码上是你一开始就没想清楚自己要什么。Matt Pocock 把这叫做Misalignment对齐失败AI Agent 编程最常见的失败模式没有之一。Matt 是 TypeScript 圈最有影响力的教育者之一Total TypeScript 创始人Newsletter 近 6 万订阅者。他开源了一套叫 mattpocock/skills 的 AI 编程 Agent 技能集目前在 GitHub 已经斩获 176k 的 star核心理念就是AI 编程的最大瓶颈不是代码生成能力而是工程纪律的缺失。其中最值得先聊的就是 grill-me。grill-me 是什么grill-me直译拷问我。它的 SKILL.md 是这么写的A relentless interview to sharpen a plan or design.做的事很简单在你动手写代码之前AI 对你发起一场无情的审问把你脑子里那个模糊的想法一个一个问清楚。不是 AI 替你想而是 AI 问你。你是决策者AI 是那个不放过任何细节的产品经理。它底层调用了另一个技能grilling四条核心规则逐个问别轰炸。一次一个问题等你回答再继续。每个问题带推荐答案。不是干巴巴地问你想用什么数据库而是根据你的场景我建议 PostgreSQL你觉得呢你只需要说行或不行。能自己查的别问你。文件系统、代码库里能找到的答案AI 自己查。它只问你那些只有你才能回答的决策问题。不到共识不动手。达成共享理解之前不写一行代码。附上 grilling 的原文Interview me relentlessly about every aspect of this until we reach a shared understanding. Walk down each branch of the decision tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.Ask the questions one at a time, waiting for feedback on each question before continuing. Asking multiple questions at once is bewildering.If afactcan be found by exploring the environment (filesystem, tools, etc.), look it up rather than asking me. Thedecisions, though, are mine — put each one to me and wait for my answer.Do not act on it until I confirm we have reached a shared understanding.翻译过来就是沿着决策树的每个分支逐个问我每个问题带上你的推荐答案。一次只问一个等我回答。能自己查到的事实别问我但决策权是我的。达成共识之前别动手。什么时候用任何时候你准备让 AI 写代码但需求还停留在我大概想要……的阶段。比如这些场景新功能只有一句话描述细节全靠猜想重构一块代码但改到哪算停心里没数几个技术方案各有优劣不知道选哪个拿到一份需求文档读完发现到处是模糊地带想做个 side project但第一版到底做哪些功能还没想好反过来如果需求已经非常明确那就不需要用 grill-me直接让 AI 动手就好。举个栗子假设你说我想给卡片加一个保存功能。没有 grill-meAI 可能直接开始写代码了。有了 grill-me它会反过来问你Q1你说的卡片是指哪种卡片我看代码里有两种NoteCard笔记卡片和TaskCard任务卡片。我建议两种都支持保存你觉得呢你说只做 NoteCard。Q2保存到哪里目前项目用的是 localStorage我建议保持一致存本地。不过如果后续有多端同步需求也可以直接接后端 API。你倾向哪个你说先存本地。Q3保存的触发方式我建议卡片右上角加一个收藏图标点击切换保存/取消。还是说你想要别的交互方式你说图标就行。Q4保存后的卡片需要特殊标记吗比如角标变灰、或者在单独的已保存列表里展示。我建议先只做图标状态切换实心/空心不做独立列表。你说好就实心空心切换。Q5需要持久化已保存卡片的 ID 列表吗我建议用一个savedNoteIds: string[]存在 localStorage 里key 用app:saved-notes。你说可以。达成共识给 NoteCard 右上角加收藏图标点击切换保存状态已保存的图标变实心状态存在 localStorage 的savedNoteIds数组里。不涉及 TaskCard不做独立列表。确认你看五轮对话下来你脑子里那个给卡片加个保存功能已经变成了一个边界清晰、可以直接动手的小需求。这就是 grill-me 的价值——它不替你思考但它逼你把模糊的想法变成具体的决策。一个真实的感受实际用下来你会发现一个有意思的现象大部分问题你其实直接采纳了 AI 的推荐答案只有少数几个你按自己的想法改了。整个过程看起来像是 AI 在做决策你只是在“审批。但这恰恰是价值所在。你不是在被动接受 AI 的方案而是在 AI 提出方案的过程中一步步看清了整个需求的全貌。每个问题都在帮你补全一个你没想到的细节每个推荐答案都在帮你验证”这样做合不合理”。几轮下来你对这个需求该怎么实现、有哪些边界、要注意什么心里已经有数了。换句话说grill-me 的真正价值不是AI帮你做了决定”而是“通过 AI 的提问你自己把这个需求想透了”。哪怕你全选了 AI 的推荐经过这一轮之后你对需求的理解深度也完全不一样。怎么用安装有两种方式看你的风格方式一skills.sh CLI可编辑版把技能复制到你的项目里你可以随意改npx skills.sh install mattpocock/skills然后在项目里跑一次/setup-matt-pocock-skills完成初始化。方式二Claude Code 插件免维护版# 在 Claude Code 里 /plugin marketplace add mattpocock/skills /plugin install mattpocock-skillsmattpocock # 或者在终端 claude plugin marketplace add mattpocock/skills claude plugin install mattpocock-skillsmattpocock安装完之后输入/grill-me触发。注意grill-me 是User-invoked类型——AI 不会自动触发只有你主动输入才启动。这是刻意的设计Matt 把技能分成两类User-invoked 是编排人决定什么时候做什么Model-invoked 是执行纪律AI 决定怎么做。原则是人类负责编排Agent 负责执行。启动后的体验你说出想法 → AI 逐个提问带推荐答案→ 沿决策树逐个解析 → 达成共识 → 可以用/to-spec把共识转化成结构化 spec。grill-me 在整条管线中的位置grill-me 不是孤立的它是 Matt 设计的完整工作流管线的入口/grill-me → /to-spec → /to-tickets → /implement → /code-review [对齐] [Issue追踪器] [阻塞的工单] [内部 /tdd] [双轴审查]对齐grill-me→规格化to-spec 把共识变成结构化 spec发布到 Issue 追踪器→拆解to-tickets 拆成 tracer-bullet 垂直切片每个工单从 schema 到 API 到 UI 到测试完整贯穿→构建implement 驱动 TDD 红-绿-重构→审查code-review 起两个并行子 Agent一个查 Standards一个查 Spec 忠实度独立报告不合并。没有对齐后面所有步骤都建在不稳固的基础上。写在最后装完之后先只用/grill-me不要一上来跑整条管线。下次有模糊想法让 AI 写代码之前先/grill-me。你会发现经过 grill 之后你对自己要做什么的理解清晰很多——很多时候你以为自己想清楚了其实没有。用熟了再逐步引入后续技能找到适合你的组合就好。