Ask Questions If Underspecified
Goal
Ask the minimum set of clarifying questions needed to avoid wrong work; do not start implementing until the must-have questions are answered (or the user explicitly approves proceeding with stated assumptions).
Workflow
1) Decide whether the request is underspecified
Treat a request as underspecified if after exploring how to perform the work, some or all of the following are not clear:
- Define the objective (what should change vs stay the same)
- Define "done" (acceptance criteria, examples, edge cases)
- Define scope (which files/components/users are in/out)
- Define constraints (compatibility, performance, style, deps, time)
- Identify environment (language/runtime versions, OS, build/test runner)
- Clarify safety/reversibility (data migration, rollout/rollback, risk)
If multiple plausible interpretations exist, assume it is underspecified.
2) Ask must-have questions first (keep it small)
Ask 1-5 questions in the first pass. Prefer questions that eliminate whole branches of work.
Make questions easy to answer:
- Optimize for scannability (short, numbered questions; avoid paragraphs)
- Offer multiple-choice options when possible
- Suggest reasonable defaults when appropriate (mark them clearly as the default/recommended choice; bold the recommended choice in the list, or if you present options in a code block, put a bold "Recommended" line immediately above the block and also tag defaults inside the block)
- Include a fast-path response (e.g., reply
defaults to accept all recommended/default choices)
- Include a low-friction "not sure" option when helpful (e.g., "Not sure - use default")
- Separate "Need to know" from "Nice to know" if that reduces friction
- Structure options so the user can respond with compact decisions (e.g.,
1b 2a 3c); restate the chosen options in plain language to confirm
3) Pause before acting
Until must-have answers arrive:
- Do not run commands, edit files, or produce a detailed plan that depends on unknowns
- Do perform a clearly labeled, low-risk discovery step only if it does not commit you to a direction (e.g., inspect repo structure, read relevant config files)
If the user explicitly asks you to proceed without answers:
- State your assumptions as a short numbered list
- Ask for confirmation; proceed only after they confirm or correct them
4) Confirm interpretation, then proceed
Once you have answers, restate the requirements in 1-3 sentences (including key constraints and what success looks like), then start work.
Question templates
- "Before I start, I need: (1) ..., (2) ..., (3) .... If you don't care about (2), I will assume ...."
- "Which of these should it be? A) ... B) ... C) ... (pick one)"
- "What would you consider 'done'? For example: ..."
- "Any constraints I must follow (versions, performance, style, deps)? If none, I will target the existing project defaults."
- Use numbered questions with lettered options and a clear reply format
Recommended
1) Scope?
a) Minimal change (default)
b) Refactor while touching the area
c) Not sure - use default
2) Compatibility target?
a) Current project defaults (default)
b) Also support older versions: <specify>
c) Not sure - use default
Reply with: defaults (or 1a 2a)
Anti-patterns
- Don't ask questions you can answer with a quick, low-risk discovery read (e.g., configs, existing patterns, docs).
- Don't ask open-ended questions if a tight multiple-choice or yes/no would eliminate ambiguity faster.
Credit
Adapted from Tibo’s post (@thsottiaux): https://x.com/thsottiaux/status/2006624792531923266
1---2name: ask-questions-if-underspecified3description: Clarify requirements before implementing. Do not use automatically, only when invoked explicitly.4---5
6# Ask Questions If Underspecified
7
8## Goal
9
10Ask the minimum set of clarifying questions needed to avoid wrong work; do not start implementing until the must-have questions are answered (or the user explicitly approves proceeding with stated assumptions).
11
12## Workflow
13
14### 1) Decide whether the request is underspecified
15
16Treat a request as underspecified if after exploring how to perform the work, some or all of the following are not clear:
17
18- Define the objective (what should change vs stay the same)
19- Define "done" (acceptance criteria, examples, edge cases)
20- Define scope (which files/components/users are in/out)
21- Define constraints (compatibility, performance, style, deps, time)
22- Identify environment (language/runtime versions, OS, build/test runner)
23- Clarify safety/reversibility (data migration, rollout/rollback, risk)
24
25If multiple plausible interpretations exist, assume it is underspecified.
26
27### 2) Ask must-have questions first (keep it small)
28
29Ask 1-5 questions in the first pass. Prefer questions that eliminate whole branches of work.
30
31Make questions easy to answer:
32
33- Optimize for scannability (short, numbered questions; avoid paragraphs)
34- Offer multiple-choice options when possible
35- Suggest reasonable defaults when appropriate (mark them clearly as the default/recommended choice; bold the recommended choice in the list, or if you present options in a code block, put a bold "Recommended" line immediately above the block and also tag defaults inside the block)
36- Include a fast-path response (e.g., reply `defaults` to accept all recommended/default choices)
37- Include a low-friction "not sure" option when helpful (e.g., "Not sure - use default")
38- Separate "Need to know" from "Nice to know" if that reduces friction
39- Structure options so the user can respond with compact decisions (e.g., `1b 2a 3c`); restate the chosen options in plain language to confirm
40
41### 3) Pause before acting
42
43Until must-have answers arrive:
44
45- Do not run commands, edit files, or produce a detailed plan that depends on unknowns
46- Do perform a clearly labeled, low-risk discovery step only if it does not commit you to a direction (e.g., inspect repo structure, read relevant config files)
47
48If the user explicitly asks you to proceed without answers:
49
50- State your assumptions as a short numbered list
51- Ask for confirmation; proceed only after they confirm or correct them
52
53### 4) Confirm interpretation, then proceed
54
55Once you have answers, restate the requirements in 1-3 sentences (including key constraints and what success looks like), then start work.
56
57## Question templates
58
59- "Before I start, I need: (1) ..., (2) ..., (3) .... If you don't care about (2), I will assume ...."
60- "Which of these should it be? A) ... B) ... C) ... (pick one)"
61- "What would you consider 'done'? For example: ..."
62- "Any constraints I must follow (versions, performance, style, deps)? If none, I will target the existing project defaults."
63- Use numbered questions with lettered options and a clear reply format
64
65**Recommended**
66```text
671) Scope?
68 a) Minimal change (default)
69 b) Refactor while touching the area
70 c) Not sure - use default
71
722) Compatibility target?
73 a) Current project defaults (default)
74 b) Also support older versions: <specify>
75 c) Not sure - use default
76
77Reply with: defaults (or 1a 2a)
78```
79
80## Anti-patterns
81
82- Don't ask questions you can answer with a quick, low-risk discovery read (e.g., configs, existing patterns, docs).
83- Don't ask open-ended questions if a tight multiple-choice or yes/no would eliminate ambiguity faster.
84
85## Credit
86
87Adapted from Tibo’s post (@thsottiaux): https://x.com/thsottiaux/status/2006624792531923266