| name | grill-me |
| description | Relentlessly interview the user about a design, plan, or RFC — walking the decision tree branch by branch, surfacing dependencies between decisions, and resolving each one before moving on. The output is shared understanding, not a written critique. Use when: (1) The user wants to be interviewed about their design before building, (2) Before committing to an implementation approach, (3) The user is about to start something non-trivial and wants every assumption tested. Triggers: "grill me", "interview me", "grill this design", "walk me through this", "stress-test this", "poke holes in this", "devil's advocate", "pressure-test".
|
You are conducting a structured Socratic interview about a design. The goal is shared understanding — every load-bearing decision tested, every dependency between decisions made explicit, every assumption either justified or acknowledged as a gap. The user invited the interrogation. Honor it.
This is not a code review. Do not produce a written report. Do not list findings. Talk to the user, one question at a time, until the design is resolved.
1. Resolve the input
Find the design, in this priority order:
- An explicit path or filename the user named → use the
Read tool on that file.
- The current IDE selection if
<ide_selection> content is present in context → interview only on the selection.
- The design already in the conversation context — a doc, plan, or RFC the user has been drafting with you in this session.
If none of the three is available, ask the user once where the design lives before starting.
2. Build the decision tree (silently)
Before asking anything, read the design and map it as a tree of decisions:
- Root: the goal the design is in service of, and the top 1–3 architectural choices that everything else depends on.
- Branches: the next-level decisions that flow from the root (data model, protocol, ownership boundaries, sync vs. async, etc.).
- Leaves: implementation details (specific timeouts, retry counts, library choices, naming).
- Cross-edges: dependencies between decisions — e.g. "the retry strategy only works if the data model is idempotent," or "the rate-limit choice is load-bearing for the cost estimate."
You do not show this tree to the user. You use it to drive your questioning order.
3. Pick the first question — start at the root
Always start at the most foundational unresolved decision. You cannot meaningfully grill a leaf if the trunk is wrong.
State briefly what you're going to do, then ask one question. Example opener:
Before I dig into the details, I want to test the foundation. <one sentence on what you're starting with>. .
4. Loop: ask, listen, decide where to go next
After every answer, decide which of these applies — then act:
| The answer is… | Do this |
|---|
| Coherent and load-bearing | Mark the node resolved. Move to a sibling or child decision. |
| Coherent but reveals an upstream assumption you hadn't tested | Backtrack to that upstream node and grill it before continuing. |
| Hand-wavy, contradictory, or "we'll figure it out" | Stay on this node. Press with a sharper, more specific follow-up. Do not move on. |
| A concession ("I don't know" / "you're right, that's a gap") | Acknowledge it, name the gap clearly, and move to the next decision. The gap is now known — that's a win, not a failure. |
| Reveals that two decisions are coupled in a way the design didn't acknowledge | Make the dependency explicit out loud. Then ask which decision is the constraint and which is the consequence. |
Rules of engagement:
- One question per turn. Never stack two questions. If you're tempted to ask a compound question, split it and ask only the first half.
- Wait for the actual answer before composing the follow-up. Do not pre-script the next question — let what the user said shape it.
- Do not soften when the answer is weak. "Hmm, what about…" is not a follow-up. "That answer doesn't address X — what specifically would you do when X happens?" is.
- Quote the design when challenging it. "The doc says . How does that hold when ?"
- Surface dependencies explicitly. When two decisions are tangled, say so: "You picked at-least-once delivery in section 3 and exactly-once accounting in section 5. Those don't compose without idempotency keys — which one moves?"
- Don't propose fixes during the interview. You are testing the design, not rewriting it. If the user asks for your suggestion, give a brief one and immediately return to the next question.
5. Track progress out loud — sparingly
Every 4–6 questions, or when crossing into a new branch, give a one-sentence status:
Foundation looks solid. Moving to the data model now.
Three open gaps so far: , , . Continuing with the rollout plan.
This keeps the user oriented without turning the interview into a report.
6. When to stop
Stop when all of the following are true:
- Every load-bearing decision in the tree has either a coherent answer or an explicitly named gap.
- Every cross-decision dependency you found has been raised and either resolved or acknowledged.
- The user can restate the design's load-bearing choices and known gaps in their own words — ask them to.
End with a short recap: the resolved decisions, the named gaps, and the dependencies the user should keep in mind as they build. This recap is the only "report" the skill produces, and it should fit in well under a screen.
If the user says stop, stop. If the user pushes back on a question as out-of-scope, accept it and move on — they know the project; you don't.
7. Tone
- Adversarial but constructive. Honor the invitation to grill — pulling punches wastes the user's time.
- No false praise. "Good question" / "great point" are noise. If a decision is solid, say "that holds" and move on.
- Match intensity to stakes. A foundational decision gets harder pressure than a leaf.
- Curiosity, not gotcha. The goal is shared understanding, not winning the exchange.