skills/clarify/SKILL.md
MANDATORY before any implementation when request is vague or has multiple interpretations. Triggers on "clarify", "/clarify", unclear scope, time pressure ("EOD", "ASAP"), or user discouraging questions ("just do it"). If you're about to assume something, STOP and use this skill.
npx skillsauth add toongri/oh-my-toong-playground clarifyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Transform ambiguous requirements into actionable specifications through iterative questioning.
</Role><Critical_Constraints>
BEFORE writing ANY code, creating ANY files, or starting ANY implementation:
Run this 30-second check:
If ANY checkbox is unclear → YOU MUST ASK. No exceptions.
Even if the user says:
The user can waive DETAILS. The user cannot waive DIRECTION.
When you identify ambiguity, ANNOUNCE before proceeding:
"I need to clarify before implementing. The request '[X]' has multiple interpretations, and building the wrong thing wastes more time than 2 quick questions."
</Critical_Constraints>
| Action | YOU Do | DELEGATE | |--------|--------|----------| | Checklist 4-item evaluation | Yes | - | | User preference questions | Yes | - | | Before/After summary writing | Yes | - | | Autonomous decision documentation | Yes | - | | Codebase fact verification | NEVER | explore | | Architecture context gathering | NEVER | oracle (conditional) |
RULE: Evaluation, user communication, documentation = Do directly. Codebase facts, architecture context = DELEGATE. Never ask users what the codebase can answer.
digraph {
"Request" [shape=doublecircle];
"2+ interpretations?" [shape=diamond];
"Scope/success unclear?" [shape=diamond];
"Clarify" [shape=box];
"Proceed" [shape=doublecircle];
"Request" -> "2+ interpretations?";
"2+ interpretations?" -> "Clarify" [label="yes"];
"2+ interpretations?" -> "Scope/success unclear?" [label="no"];
"Scope/success unclear?" -> "Clarify" [label="yes"];
"Scope/success unclear?" -> "Proceed" [label="no"];
}
Use when: 2+ interpretations exist, scope undefined, success criteria missing, making assumptions
Do NOT use: Requirements already actionable, user exploring/learning, quick obvious questions
Any of these → Clarify first. Time pressure makes clarification MORE important, not less.
| Excuse | Reality | |--------|---------| | "Seems clear enough" | Your interpretation may be wrong. Ask. | | "Move fast, adjust later" | Wrong direction = 2-3x rework cost. | | "User seems busy" | 5 min questions beat 5 hour rebuilds. | | "I'll figure it out" | Figuring out = assuming = risk. | | "User said no questions" | User doesn't know what they don't know. One wrong assumption = full rebuild. Ask anyway, but efficiently. | | "It's urgent/EOD/ASAP" | Urgency = higher cost of rework. Clarify FASTER, not less. | | "I'll propose and they can correct" | Corrections after implementation cost 10x more than upfront questions. |
When user explicitly defers ("skip", "I don't know", "your call", "you decide", "no preference"):
When user has no preference or cannot decide, select best practice autonomously. Quality is the priority—achieve it through proactive context gathering, not user interrogation.
Record original verbatim. Identify: unclear items, needed assumptions, open decisions.
NEVER burden the user with questions the codebase can answer.
| Question Type | Ask User? | Action | |---------------|-----------|--------| | "Which project contains X?" | NO | Use explore first | | "What patterns exist in the codebase?" | NO | Use explore first | | "Where is X implemented?" | NO | Use explore first | | "What's the current architecture?" | NO | Use oracle | | "What's the tech stack?" | NO | Use explore first | | "What's your timeline?" | YES | Ask user (via AskUserQuestion) | | "Should we prioritize speed or quality?" | YES | Ask user (via AskUserQuestion) | | "What's the scope boundary?" | YES | Ask user (via AskUserQuestion) |
The ONLY questions for users are about PREFERENCES, not FACTS.
Explore and librarian are contextual search agents — treat them like targeted grep, not consultants. Always run in background. Always parallel when independent.
Prompt structure (each field should be substantive, not a single sentence):
Examples:
// Fact-finding before asking user
Task(subagent_type="explore", prompt="I'm clarifying requirements for a user's auth feature request and need to check what already exists before asking redundant questions. I'll use this to eliminate codebase-answerable questions from my interview. Find: existing auth implementations, login flows, user model structure. Focus on src/ — skip tests. Return file paths with brief descriptions.")
For understanding current architecture before asking scope questions, briefly announce "Consulting Oracle for [reason]" before invocation.
Use AskUserQuestion for each ambiguity.
Design: Specific > general, Options > open-ended, One at a time, Architecture before details
while ambiguities_remain:
ask_most_critical() → update() → check_new()
BAD:
question: "Which approach?"
options:
- label: "A"
- label: "B"
GOOD:
question: "The login API currently returns generic 401 errors for all auth failures.
From a security perspective, detailed errors help attackers enumerate valid usernames.
From a UX perspective, users get frustrated not knowing if they mistyped their password
or if the account doesn't exist. How should we balance security vs user experience
for authentication error messages?"
header: "Auth errors"
multiSelect: false
options:
- label: "Security-first (Recommended)"
description: "Generic 'Invalid credentials' for all failures. Prevents username
enumeration attacks but users won't know if account exists or password is wrong."
- label: "UX-first"
description: "Specific messages like 'Account not found' or 'Wrong password'.
Better UX but exposes which usernames are valid to potential attackers."
- label: "Hybrid approach"
description: "Generic errors on login page, but 'Account not found' only on
registration. Balanced but adds implementation complexity."
For complex technical decisions, provide rich context via markdown BEFORE asking a single AskUserQuestion.
Structure:
Rules:
Question Structure: Context → Tension → Question
For complex decisions, provide markdown analysis BEFORE asking AskUserQuestion:
Rules:
| Situation | Method | Why | |-----------|--------|-----| | Decision with 2-4 clear options | AskUserQuestion | Provides structured choices | | Open-ended/subjective question | Plain text question | Requires free-form answer | | Yes/No confirmation | Plain text question | AskUserQuestion is overkill | | Complex trade-off decision | Markdown analysis + AskUserQuestion | Deep context + structured choice |
Do NOT force AskUserQuestion for open-ended questions. If the answer is open-ended, just ask in plain text.
When users respond vaguely ("~is enough", "just do ~", "decide later"):
Note: This applies when the user attempts to answer but is vague. For explicit deferral ("skip", "your call"), see User Deferral Handling in the Protocol section above.
### Before: "{original}"
### After:
**Goal/Scope/Constraints/Success Criteria**: [...]
| Question | Decision |
Offer to save to requirements/ if substantial.
| Category | Ask About | |----------|-----------| | Scope | Included? Excluded? | | Behavior | Edge cases? Errors? | | Data | Inputs? Outputs? Format? | | Constraints | Performance? Compatibility? |
Original: "Add a login feature"
Why unclear: "Login" = 10+ implementations. OAuth? Password? Magic link?
Questions (by architectural impact):
Result: Password login with registration, 24h session, bcrypt, rate-limited
| Mistake | Fix | |---------|-----| | Many questions at once | One concern at a time | | Redirecting intent | Refine, don't substitute | | Over-clarifying clear requests | Trust specific requirements | | Details before architecture | Big decisions first | | Skipping clarification due to time pressure | Time pressure = ask fewer but more critical questions, NOT zero | | Obeying "no questions" requests | Politely explain: "2 quick questions now save hours later" | | AskUserQuestion for open-ended questions | Plain text for open-ended, AskUserQuestion for structured choices | | Accepting vague answers ("~is enough") | Ask specific follow-up until clear |
tools
Use at the end of a work session to review the WHOLE session and record entities worth pinning. This is the manual, deliberate complete-sweep review — NOT an automated nudge. Triggers on "wrap up", "wrap-up", "session wrap", "end of session", "what should I pin".
documentation
Use when initializing the pins knowledge graph for the first time in a project. Guides the user through creating pins.yaml (the storage manifest). Triggers on "setup pins", "initialize pins", "create pins.yaml", "first-run pins".
testing
Use when you need to record a single pin entity to the knowledge graph. Invokes lib/pins record() to validate and write a canonical .md file. Triggers on "record pin", "pin this", "save this as a pin".
databases
Use when looking up pins by type, tags, or source. Drives lib/pins/query.ts to retrieve matching pin entries from the knowledge graph. Supersedes the legacy manual ls+frontmatter procedure.