Clarify
Produce a requirements + acceptance-criteria artifact that pins down what success looks like, so a
planner never has to guess. The bar: every requirement is measurable and every acceptance criterion is
checkable — you could hand the artifact to someone else and they'd build the right thing. This is a
peer phase to plan, not its parent: it grounds itself in the code via explore, then hands its
artifact to plan. It does not design the implementation and does not invoke plan.
Process
Resolve from the codebase before asking. If a question's answer is discoverable in the code —
how a thing currently works, what the existing convention is, where an integration point lives —
call explore (dispatch a sub-agent when available; otherwise do it inline) and find it. Only ask
the user what you genuinely cannot determine. Bothering them with a discoverable fact erodes trust.
Form an explicit hypothesis of the whole task. Write down, for yourself, the outcome you think
they want and the success criteria you'd accept. This is what you'll test against the stop
condition — and it makes your questions sharper.
Walk the coverage checklist to find the real gaps. Probe each dimension; skip the ones the code
or the request already settle:
- Edge cases — empty/missing/malformed input, boundaries, concurrency, large scale.
- Error handling — what should fail loudly, what should degrade, what the user sees on failure.
- Integration points — callers, callees, schemas, events, and contracts this touches.
- Scope boundaries — what is explicitly in vs. out; where this task ends.
- Design preferences — conventions, libraries, patterns the user wants honored or avoided.
- Backward compatibility — existing data, APIs, configs, behavior that must keep working.
- Performance needs — latency/throughput/memory targets, and on which path.
Interview one question at a time. Asking several at once is bewildering — never dump a list.
Each question carries your recommended default AND your current hypothesis, made visible:
Q: Should the cache invalidate on write, or expire on a TTL?
GUESS: TTL — the call site tolerates staleness and write-through adds lock contention here.
Lead with the highest-leverage unknown (the one whose answer most changes the plan). Ask the
recommended default as a yes/no when you can, so the user can confirm with a word.
Reframe every vague requirement into a measurable one. A requirement you can't test isn't a
requirement. Convert runtime words into numbers and conditions:
- "make it faster" → "p95 < 200ms on the cold path under N concurrent requests"
- "handle errors gracefully" → "on a 5xx from X, retry twice then surface a typed error to the caller"
- "clean up the API" → "remove deprecated field Y; no caller in the repo references it"
Apply the stop condition (~95% confidence). Stop interviewing when you can predict how the user
would react to your next three questions — i.e. their answers wouldn't change the artifact. Don't
pad with low-value questions once you're there; don't stop early while a checklist dimension is
still genuinely open.
Write the artifact in the schema below and hand it to plan. List anything still unresolved
under Open assumptions with the default you're proceeding on — never silently pick.
Reject vague delegation
"Sounds good", "whatever you think", "you decide" is not a sign-off — it's an unanswered question. Do
not bank it as confidence. Restate your concrete recommendation and get an explicit yes:
You said "whatever you think." To be explicit: I'll expire on a 60s TTL and not invalidate on
write. Good to lock that in, or do you want write-through? (Y/n)
If the user truly defers, record it as a resolved assumption with your chosen default and the reason —
so the artifact still reads as a decision, not a shrug.
Output schema (the artifact)
# Clarified: <task>
## Outcome — the one-sentence result the user actually wants
## Primary user — who consumes this and in what workflow
## Why now — the trigger / pain motivating it (1–2 lines; omit if there's no clear one)
## Success criteria — testable, checkable list; each item a verifiable assertion
- [ ] <measurable criterion, e.g. "p95 < 200ms on cold path">
## Constraints — must-honor conventions, libraries, compat, perf budgets
## Out of scope — explicitly excluded, so plan doesn't wander
## Open assumptions — unresolved items + the default each proceeds on, and why
Every Success criterion must be checkable by a test, a command, or an unambiguous observation — never
"works well" or "is robust". If you can't state how you'd verify it, it isn't done. State each as an
observable outcome (what must be true), never the mechanism that achieves it — "on a 5xx, the
caller sees a typed error within 2 retries" is an outcome; how to implement the retry belongs to
plan. When a measurable reframe starts naming structure or an algorithm, you've crossed into design;
pull back to the outcome.
Red flags
- Asking the user something
explore could have answered from the codebase.
- Dumping several questions at once instead of one at a time.
- A question without a visible GUESS and a recommended default.
- A success criterion that isn't measurable ("fast", "clean", "robust", "user-friendly").
- Banking "sounds good" / "whatever you think" as confidence instead of restating and confirming.
- Silently choosing when uncertain instead of recording an Open assumption with its default.
- Designing the implementation, or invoking
plan — both are out of scope for clarify.
- Interviewing past the stop condition, or stopping while a checklist dimension is still open.
Verification checklist
1---2name: clarify3description: Turn a vague or underspecified task into a crisp requirements + testable acceptance-criteria document by closing the gap between what was asked and what is actually wanted. Use at the start of any non-trivial task before planning, whenever the goal is fuzzy ("make it faster", "make it more robust", "add validation"), or whenever you cannot predict how the user would judge "done". Its output feeds `plan`. (For tidying existing code, use `simplify`, not clarify.)4---56# Clarify78Produce a requirements + acceptance-criteria artifact that pins down what success looks like, so a9planner never has to guess. The bar: every requirement is measurable and every acceptance criterion is10checkable — you could hand the artifact to someone else and they'd build the right thing. This is a11peer phase to `plan`, not its parent: it grounds itself in the code via `explore`, then hands its12artifact to `plan`. It does **not** design the implementation and does **not** invoke `plan`.1314## Process15161. **Resolve from the codebase before asking.** If a question's answer is discoverable in the code —17 how a thing currently works, what the existing convention is, where an integration point lives —18 call `explore` (dispatch a sub-agent when available; otherwise do it inline) and find it. Only ask19 the user what you genuinely cannot determine. Bothering them with a discoverable fact erodes trust.202. **Form an explicit hypothesis of the whole task.** Write down, for yourself, the outcome you think21 they want and the success criteria you'd accept. This is what you'll test against the stop22 condition — and it makes your questions sharper.233. **Walk the coverage checklist** to find the real gaps. Probe each dimension; skip the ones the code24 or the request already settle:25 - **Edge cases** — empty/missing/malformed input, boundaries, concurrency, large scale.26 - **Error handling** — what should fail loudly, what should degrade, what the user sees on failure.27 - **Integration points** — callers, callees, schemas, events, and contracts this touches.28 - **Scope boundaries** — what is explicitly in vs. out; where this task ends.29 - **Design preferences** — conventions, libraries, patterns the user wants honored or avoided.30 - **Backward compatibility** — existing data, APIs, configs, behavior that must keep working.31 - **Performance needs** — latency/throughput/memory targets, and on which path.324. **Interview one question at a time.** Asking several at once is bewildering — never dump a list.33 Each question carries your recommended default AND your current hypothesis, made visible:3435 > **Q:** Should the cache invalidate on write, or expire on a TTL?36 > **GUESS:** TTL — the call site tolerates staleness and write-through adds lock contention here.3738 Lead with the highest-leverage unknown (the one whose answer most changes the plan). Ask the39 recommended default as a yes/no when you can, so the user can confirm with a word.405. **Reframe every vague requirement into a measurable one.** A requirement you can't test isn't a41 requirement. Convert runtime words into numbers and conditions:42 - "make it faster" → "p95 < 200ms on the cold path under N concurrent requests"43 - "handle errors gracefully" → "on a 5xx from X, retry twice then surface a typed error to the caller"44 - "clean up the API" → "remove deprecated field Y; no caller in the repo references it"456. **Apply the stop condition (~95% confidence).** Stop interviewing when you can predict how the user46 would react to your next three questions — i.e. their answers wouldn't change the artifact. Don't47 pad with low-value questions once you're there; don't stop early while a checklist dimension is48 still genuinely open.497. **Write the artifact** in the schema below and hand it to `plan`. List anything still unresolved50 under *Open assumptions* with the default you're proceeding on — never silently pick.5152## Reject vague delegation5354"Sounds good", "whatever you think", "you decide" is not a sign-off — it's an unanswered question. Do55not bank it as confidence. Restate your concrete recommendation and get an explicit yes:5657> You said "whatever you think." To be explicit: I'll **expire on a 60s TTL** and not invalidate on58> write. Good to lock that in, or do you want write-through? (Y/n)5960If the user truly defers, record it as a resolved assumption with your chosen default and the reason —61so the artifact still reads as a decision, not a shrug.6263## Output schema (the artifact)6465```markdown66# Clarified: <task>67## Outcome — the one-sentence result the user actually wants68## Primary user — who consumes this and in what workflow69## Why now — the trigger / pain motivating it (1–2 lines; omit if there's no clear one)70## Success criteria — testable, checkable list; each item a verifiable assertion71 - [ ] <measurable criterion, e.g. "p95 < 200ms on cold path">72## Constraints — must-honor conventions, libraries, compat, perf budgets73## Out of scope — explicitly excluded, so plan doesn't wander74## Open assumptions — unresolved items + the default each proceeds on, and why75```7677Every Success criterion must be checkable by a test, a command, or an unambiguous observation — never78"works well" or "is robust". If you can't state how you'd verify it, it isn't done. State each as an79**observable outcome** (what must be true), never the **mechanism** that achieves it — "on a 5xx, the80caller sees a typed error within 2 retries" is an outcome; *how* to implement the retry belongs to81`plan`. When a measurable reframe starts naming structure or an algorithm, you've crossed into design;82pull back to the outcome.8384## Red flags8586- Asking the user something `explore` could have answered from the codebase.87- Dumping several questions at once instead of one at a time.88- A question without a visible GUESS and a recommended default.89- A success criterion that isn't measurable ("fast", "clean", "robust", "user-friendly").90- Banking "sounds good" / "whatever you think" as confidence instead of restating and confirming.91- Silently choosing when uncertain instead of recording an Open assumption with its default.92- Designing the implementation, or invoking `plan` — both are out of scope for `clarify`.93- Interviewing past the stop condition, or stopping while a checklist dimension is still open.9495## Verification checklist9697- [ ] Every discoverable fact was resolved via `explore`, not asked of the user.98- [ ] Questions were asked one at a time, each with a visible GUESS and a recommended default.99- [ ] The coverage checklist was walked; each dimension is settled or listed under Open assumptions.100- [ ] Every Success criterion is testable/checkable — no vague adjectives.101- [ ] No vague delegation was banked as confidence; deferrals are recorded as resolved assumptions.102- [ ] The artifact follows the schema and is self-contained enough for `plan` to consume directly.103- [ ] The skill stayed in scope: no implementation design, no `plan` invocation.