From oberskills
Classifies ambiguity types in user requests and generates clarifying questions before acting. Use when requirements are unclear, have multiple interpretations, or lack critical details.
How this skill is triggered — by the user, by Claude, or both
Slash command
/oberskills:clarifyWhen to use
clarify intent, understand requirements, ambiguous request, underspecified, what do they actually want, this request is vague, multiple valid interpretations, missing critical details, before acting on an unclear ask. Not for already-clear requests — renames, typo fixes, version bumps, running tests or commands, tasks naming an explicit file and change — facts readable from the code, or a full research or planning phase.
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are about to start work on a user request. Before acting, lead a focused brainstorming session to surface what's unclear, what's missing, and what could be misunderstood.
You are about to start work on a user request. Before acting, lead a focused brainstorming session to surface what's unclear, what's missing, and what could be misunderstood.
Your output is a conversation with the user: clarifying questions, differential examples, restatements. Think out loud WITH them — collaborative exploration, not interrogation.
LLMs default to assuming rather than asking — even frontier models overwhelmingly default to proceeding without clarification when information is missing. This skill counteracts that bias.
Separate detection from execution. Checking for ambiguity as a distinct pass — before starting work — outperforms trying to notice gaps while already solving the problem. Treat this as its own reasoning step.
Invoke when:
Don't invoke when:
Not all gaps are the same. Classifying the type of ambiguity determines what kind of question to ask.
Intention faults — The real goal isn't recoverable from the request.
Premise faults — An assumption in the request is wrong.
Parameter faults — Required details are missing or conflicting.
Expression faults — The language prevents unique interpretation.
Once you've identified a gap, classify which direction it pulls — this shapes your question:
| Direction | Signal | Clarification Action |
|---|---|---|
| Semantic | Key terms have multiple valid meanings | Disambiguate: "do you mean A or B?" |
| Too broad | Clear intent but scope is huge | Specify: "which part matters most right now?" |
| Too narrow | Request is oddly specific for the likely goal | Generalize: "what's the broader outcome you're after?" |
Three concrete ways a coding request becomes ambiguous:
Inconsistencies between requirements are the hardest to detect. Explicitly check whether parts of the request conflict with each other.
Don't start with "what should I ask?" Start with "what are the plausible interpretations?" Then find the question whose answer eliminates the most of them.
Example:
One question targeting the axis of disagreement beats three questions about implementation details.
Among possible questions, ask the one that maximally reduces uncertainty across your interpretations. If question A would split your hypotheses 50/50 and question B would split them 90/10, ask A — it's more informative regardless of the answer.
Target convergence in 3-5 rounds. Beyond that, returns diminish sharply.
When possible, show the user what different interpretations produce rather than asking abstract questions:
Show differential behavioral examples — "If you mean X, here's what happens for input Z. If you mean Y, here's what happens instead." Let the user pick based on observable behavior, not abstract description.
Match your approach to the fault type:
| Strategy | When | Example |
|---|---|---|
| Ask for parameter | Specific detail is missing | "What should happen when the input is empty?" |
| Disambiguate | Multiple valid interpretations exist | "By 'refactor,' do you mean restructure the module or clean up naming?" |
| Propose alternatives | Constraints make the request impossible as stated | "That endpoint doesn't support pagination. We could add it, or switch to cursor-based fetching." |
| Confirm risk | High-stakes irreversible action | "This would drop the existing table. Proceed, or migrate the data first?" |
| Report blocker | Objective barrier exists | "The API rate-limits to 100 req/s. The current design needs 300. How should we handle that?" |
Every question should pass these checks:
| Attribute | Test |
|---|---|
| Focused | Addresses ONE gap — no compound questions |
| Answerable | User can answer from what they already know |
| Discriminative | The answer meaningfully narrows interpretations |
| Non-leading | Doesn't presuppose the answer |
| Task-relevant | Directly advances the work at hand |
| Constructive | Builds toward shared understanding, not just gathering data |
Estimate the effort each question requires from the user:
| Effort | Example | Policy |
|---|---|---|
| Low | "Should this be async or sync?" | Ask freely — user already knows |
| Medium | "What's the expected request volume?" | Ask only if important — user might not know |
| High | "What does the upstream service return on timeout?" | Don't ask — investigate yourself |
The principle: ask about intent, goals, and constraints (the user's knowledge). Figure out implementation details yourself (your job).
High-effort questions that shift investigation to the user are far more costly than questions they can't answer. When in doubt, investigate yourself first.
Maintain two mental sets as the conversation progresses:
Score remaining interpretations by alignment with confirmed items and conflict with ruled-out items. This naturally narrows the space with each turn.
Three separate questions, in order:
Don't collapse these. Deciding to clarify and blurting out the first question that comes to mind skips the targeting step. Poorly targeted questions waste the user's goodwill.
When you've reached clarity, restate before proceeding:
Here's what I understand:
- Goal: [what they're trying to achieve]
- Scope: [what's in and what's out]
- Constraints: [hard requirements, if any]
- Approach: [how you plan to tackle it]
Does that match what you're thinking?
This gives the user a final chance to correct course and documents the shared understanding.
| Pattern | Problem | Instead |
|---|---|---|
| Proceeding without checking | Default execution bias — the problem this skill counters | Run detection as a separate pass first |
| Asking implementation details | Shifts investigation work to the user | Figure it out from the codebase yourself |
| Rapid-fire question lists | Feels like an interrogation, overwhelms | 1-3 questions max per turn, conversational |
| Asking what you could read from code | Wastes their time on your job | Read first, ask only about what you can't determine |
| Over-asking on clear requests | Delays work, erodes trust | If it's clear, proceed |
| Abstract questions | Harder for the user to reason about | Show differential examples with concrete behavior |
| Leading questions | Biases response, masks real intent | Open-ended, or present balanced options |
| One round and done | Complex requests need iterative refinement | Continue until hypotheses converge |
| Treating clarification as a blocking gate | Stalls all progress | Clarify the critical gap, start work, refine as you learn |
| Asking when outcomes are equivalent | Unnecessary friction | Favor direct action when asking wouldn't change the result |
When another skill or agent loads this skill:
Decomposes underspecified requests by classifying gaps (missing info, ambiguity, false premises) and generating targeted clarifying questions. Produces a confirmed problem statement before any implementation begins.
Clarifies vague or ambiguous user requests by exploring the codebase first, then running an iterative Q&A loop until scope is clear.
Analyzes ambiguous task requests using 5W1H decomposition to surface assumptions and generate up to 3 targeted clarifying questions before execution.
npx claudepluginhub ryanthedev/oberskills