mcpField
A
ask-questions-if-underspecified

ask-questions-if-underspecified

github.com/oimiragieoAgent workflows4437 installsUpdated 17w ago
Repository

About ask-questions-if-underspecified

An Agent skill for implementation tasks with ambiguous requirements. It identifies blocking gaps, proposes a small set of clarifying questions with defaults, and separates questions to ask from implementation choices to decide independently.

Key features

  1. 01Identify gaps in scope, constraints, and acceptance criteria
  2. 02Generate a minimal set of clarifying questions
  3. 03Provide concrete defaults for questions
  4. 04Separate questions from decisions to make independently
  5. 05Proceed with defaults while awaiting answers

Use cases

  1. 01Implementation requests with unclear scope
  2. 02Unspecified performance or security requirements
  3. 03Unclear acceptance criteria or priorities

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/oimiragieo/agent-studio --skill ask-questions-if-underspecified

After installing, type/ask-questions-if-underspecifiedin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

commands/
ask-questions-if-underspecified.md
hooks/
post-execute.cjs
pre-execute.cjs
references/
research-requirements.md
rules/
ask-questions-if-underspecified.md
schemas/
input.schema.json
output.schema.json
scripts/
main.cjs
templates/
implementation-template.md

Details

From the project README

Ask Questions If Underspecified

Ask Questions If Underspecified Skill - Ask the minimum clarifying questions before implementation when requirements are ambiguous or missing crucial details - Identify ambiguous or missing requirements that would block correct implementation - Generate minimum viable clarifying questions with concrete best-guess defaults - Distinguish scope/constraint questions (ask) from implementation detail decisions (decide yourself) - Unblock parallel work by proceeding with stated defaults while awaiting answers
Step 1: Assess Underspecification

Identify which aspects are unclear or missing:

  • Scope: What exactly should be included/excluded?
  • Constraints: Performance targets, platform requirements, security rules?
  • Acceptance criteria: How will the user judge success?
  • Priority: Which conflicting options should win?

Do NOT ask about things you can determine by reading existing code and conventions.

Step 2: Triage Questions

Categorize each candidate question:

TypeAsk or Decide?
Scope boundary (what to include)Ask
Non-functional requirement (perf/security target)Ask
Acceptance criteriaAsk
Implementation approachDecide yourself
Code style / namingDecide yourself (follow existing patterns)
Nice-to-have polishDecide yourself (proceed with sensible default)
Step 3: Ask Concisely (Max 3 Questions)

For each blocking question:

  1. State what you assume (best-guess default)
  2. Ask the specific question in one sentence
  3. Offer 2–3 concrete options when applicable

Format:

I'll [proceed with X default assumption]. Quick questions before I start:
1. [Specific question]? (default: [assumption])
2. [Specific question]? (default: [assumption])

</execution_process>

<best_practices>

  1. Provide defaults with every question: Always state your best-guess assumption so the user can simply confirm rather than answer from scratch
  2. Ask about outcomes, not implementation: "Should this support offline use?" not "Should I use IndexedDB or localStorage?"
  3. Read the codebase first: Many apparent ambiguities are resolved by existing patterns — check before asking
  4. Batch all questions in one message: Never ask one question, wait for answer, then ask another

</best_practices>

**Example — Underspecified feature request:**

User: "Add a search feature to the dashboard"

Good response:

I'll implement client-side search with debouncing and case-insensitive matching. Quick questions before I start:
1. Should search cover all columns or just the name/title column? (default: name/title only)
2. Should results filter in place or open in a new panel? (default: filter in place)

Bad response:

Before I start, I need to know:
1. What search algorithm should I use?
2. Should it be case sensitive?
3. What debounce delay?
4. Should I use a library?
5. How many results to show?

</usage_example>

Iron Laws

  1. NEVER ask more than 3 questions at once — more than 3 questions causes decision paralysis; triage ruthlessly and decide the rest yourself.
  2. ALWAYS provide a best-guess default alongside every question — a question without a default forces the user to think from scratch; a question with a default lets them confirm in one word.
  3. NEVER ask about implementation details you can decide yourself — algorithm choice, code structure, naming conventions, and library selection are your decisions, not the user's.
  4. NEVER block on nice-to-have requirements — identify what is truly blocking vs. what can be decided with a sensible default; proceed with the default and note your assumption.
  5. ALWAYS read existing code before asking — check existing patterns, conventions, and related code first; most apparent ambiguities are resolved by looking at what already exists.

Anti-Patterns

Anti-PatternWhy It FailsCorrect Approach
Asking 5+ questions before startingParalyzes user; feels like interrogationTriage to max 3 blocking questions; decide the rest
Asking about implementation approachThat is the agent's job, not the user'sAsk about scope/constraints/acceptance criteria only
Questions without defaultsUser must think from scratch; slower feedback loopAlways state: "default: X — correct?"
Sequential questioning (one at a time)Creates a slow back-and-forth waterfallBatch all questions into one message
Asking things visible in the codebaseShows insufficient research effortRead existing conventions before asking

Memory Protocol (MANDATORY)

Before starting:

cat .claude/context/memory/learnings.md

After completing:

  • New pattern -> .claude/context/memory/learnings.md
  • Issue found -> .claude/context/memory/issues.md
  • Decision made -> .claude/context/memory/decisions.md

ASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.

Comments

Markdown supported