方案在没人审问的时候看起来总是完整的。/grill-me 工作流让 LingCode 扮演"挑剔的面试官"——逐一走过每个决策分支,在你花一周时间实现之前就把所有未解决的假设暴露出来。
每个方案,第一遍读起来总觉得完整。你亲手写的,结构合理,步骤连贯,感觉可以动手了。
然后实现一开始,漏洞就冒出来了:
每一个都是当初没问的五秒钟问题。每一个在实现到一半时浮出水面,都要花好几个小时返工。提问与重建的成本比大约是 1:200。
/grill-me 工作流反转了这种不对等。你花二十分钟让 LingCode 审问方案,在任何代码存在之前。在这个窗口里找到的每一个漏洞,都是你之后不需要再返工的时间。
在以下情况运行 /grill-me:
不要对一行代码的小修小补使用它。也不要对已经执行过的方案使用它(那是代码审查,属于另一个技能)。审问的窗口是"方案写好"到"代码开始"之间。
AI 编程工具的默认行为是友好且顺从的。而这恰恰是审问时最不需要的。请明确地设定框架:
I want you to stress-test my plan. Play a hostile interviewer
who's trying to find every hole in this design before we
commit to it.
Rules:
- Interrogate every decision branch. If the plan says "the
service handles this case," ask what happens in five
variations of that case.
- Don't be agreeable. If I hand-wave, push back. If my answer
introduces a new assumption, grill that too.
- Walk the failure paths, not just the happy path. What
breaks? Who sees it? How do we recover?
- Don't propose fixes mid-grill. Just surface the questions.
We'll address them in a separate pass.
Here's the plan:
然后粘贴方案,或引用方案文件路径。"不要中途提修复建议"这一条很重要——一旦审问变成共同设计会议,对抗性的张力就消失了,效果也就大打折扣。
LingCode 会开始连续发问。你的本能反应是先回答简单的。忍住。按顺序回答,优先回答那些让你感到不舒服的问题——那里通常才是真正的漏洞所在。
一次好的审问对话大概是这样的:
这段对话只需九十秒。它揪出的 bug,如果留到生产环境调试,要花上整整一天。这个比例,就是这个技能存在的全部理由。
被审问时最大的诱惑是为方案辩护。别这样做。每个问题只有两种有效回应:
无效回应:"到时候再说"、"框架会处理"、"不会有人踩这个情况"。每一个都是推迟了的漏洞。审问的意义就在于不推迟。
大多数方案只覆盖了顺利路径。审问应该重点探查出错时会发生什么:
Now walk only the failure paths. For each step:
- What's the most likely way this step fails in production?
- What's the rarest catastrophic way it can fail?
- If it fails partway through, what state is the system in?
- Who notices first — automated alert, user complaint, no one?
- What's the rollback path, in commands or steps, not "we'd
roll back"?
Don't accept "we'd handle it" — name the mechanism.
这一轮通常能找出比第一轮更多的问题。顺利路径经过了充分的演练;假设正是埋藏在失败路径里的。
方案常见的失败模式是:每个步骤单独看都没问题,但步骤之间的接缝却没人管。要专门针对这些接缝进行审问:
排序 bug 就藏在步骤的接口处。明确命名每个接口并对它们进行审问,能揪出逐步审查时漏掉的偏差。
当 LingCode 问题问完了(或者更可能的是,你的时间用完了),结束会话:
End the grill. Compile a single list of open items we surfaced
that aren't yet resolved in the plan. For each one:
- The question.
- The status (unanswered, answered but plan not updated yet,
or "won't fix — accept the risk").
- Where it should land in the plan if we adopt it (which
step gets amended, or where a new step belongs).
Don't propose specific fixes — just the open-item list.
这份清单就是这次审问的交付物。它也是一次残酷的诚实检验——如果清单很长,说明你的方案还没准备好执行。现在知道,总比后来发现要好。
把待解决清单带回方案文件。对每一项:
将方案修订单独作为一次提交,与代码分开:
git commit -m "Amend plan after /grill-me pass — add dual-write
step, document migration rollback path"
现在,方案已经经过压力测试。带着检查点去执行它(参见下一篇教程)。你预先花在审问上的时间,就是你之后不需要花在返工上的时间。
将审问工作流封装为一个技能,让 /grill-me 每次都能一致地调用它:
---
name: grill-me
description: Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Triggers: 'grill me', 'stress-test my plan', 'poke holes', 'find gaps', 'play devil's advocate', 'interview me', 'is this plan complete', 'what am I missing'. Actions: hostile interviewer, walk decision branches, surface unresolved assumptions, list open items (NOT direct fixes). Output: open-items list the user must answer before implementation. Anti-pattern: making suggestions instead of asking questions.
---
Play a hostile interviewer stress-testing the user's plan or
design. Find holes before any code is written.
Rules of engagement:
- Interrogate every decision branch. If a step says "handles
this case," ask what happens in five variations.
- Don't be agreeable. Push back on hand-waving. If an answer
introduces a new assumption, grill that one too.
- Walk failure paths as thoroughly as happy paths. For each
step ask: most likely failure, worst-case failure, partial
failure, detection, rollback.
- Probe interfaces between steps — consistency, versioning,
deployment ordering, inverse migrations.
- Do not propose fixes mid-grill. Just surface the questions.
- Accept only "here's the answer" or "I don't know." Reject
"we'll figure it out later" — that's a deferred hole.
When the user closes the grill, compile a single list of open
items: question, status (unanswered / answered-but-not-in-plan
/ accepted risk), and where each should land in the plan.
Don't write code, don't amend the plan file directly. The
output is the open-items list.
保存为 ~/.lingcode/skills/grill-me/SKILL.md——请参阅安装技能了解具体位置以及技能如何被发现。