grilling
Interview the user relentlessly until you reach a shared understanding. Map this as a design tree: every decision branches into the decisions that hang off it.
Work the tree in rounds. The frontier is every decision whose prerequisites are already settled: the questions you can ask now without guessing at answers you haven't heard yet. Put the whole frontier in one round, in the round format. Then wait for the user's answers before the next round.
The first round always includes the premise: should this exist at all, and do the inputs it inherits (a research recommendation, an earlier assumption, the ticket's own wording) still hold? A research recommendation is an input to a decision, never the decision.
Each round the user answers reshapes the tree: settled decisions push the frontier outward and unblock questions that depended on them. Recompute the frontier and ask the next round. A question whose answer depends on another question still open in this round belongs to a later round, not this one.
Who decides
Finding facts is your job, never the user's. When a frontier question needs a fact from the environment (filesystem, tools, etc.), dispatch a sub-agent to find it; don't ask the user for anything you could look up yourself. Don't block on it: a running exploration is an unsettled prerequisite, so only the questions downstream of it wait for the sub-agent to report; ask the rest of the frontier now.
Sort every frontier item into one of three kinds:
- Derived: a source already answers it: a prototype, a closed ticket, a doc, or what the code does today. Read the primary artifact (the prototype's source and seed data, the code), not a summary of it. Today's behaviour stands unless the task asks to change it. Deviating from a source is a decision for the user, with the reason.
- Defaulted: internal, reversible, consistent with existing patterns, cheap to change, and free of product, data, security, cost, or compatibility consequences. Pick the default yourself.
- Decision for the user: anything that changes product behaviour or visible UX (copy included), a domain term, data meaning or schema, permissions, security, cost, or compatibility; anything destructive or expensive to reverse; anything that needs authority, credentials, or information only the user has. When unsure, it is a decision for the user.
Derived and defaulted items still go in front of the user, under 🤖, so they can overturn any of them.