| name | cc-askuserquestion |
| description | Use when designing AskUserQuestion tool calls - covers schema constraints, effectiveness patterns, and known issues. |
AskUserQuestion Tool
Structured user input for clarifying requirements and gathering decisions.
Schema
{
questions: Array<{
question: string;
header: string;
multiSelect: boolean;
options: Array<{
label: string;
description: string;
}>;
}>;
}
Constraints:
- Questions: 1-4 per call
- Options: 2-4 per question (min 2, max 4)
- Header: max 12 characters
- Label: 1-5 words
- Timeout: 60 seconds for user response
- "Other": Always available for custom text input (automatic)
Effectiveness Patterns
Label + Description Separation
Labels should be scannable, descriptions should provide context.
{
label: "Immediate failure",
description: "Fail fast and expose errors to caller immediately. Best for debugging."
}
{
label: "Fail fast and expose errors immediately to the caller",
description: "Good for debugging"
}
Mark Recommended Option
Place recommended option first with "(Recommended)" suffix:
options: [
{ label: "JWT tokens (Recommended)", description: "Stateless, scalable..." },
{ label: "Session cookies", description: "Simpler but requires state..." },
{ label: "OAuth only", description: "Delegates auth entirely..." },
];
Use multiSelect for Non-Exclusive Choices
{
question: "Which OAuth providers should we support?",
header: "Providers",
multiSelect: true,
options: [
{ label: "Google", description: "Widest adoption" },
{ label: "GitHub", description: "Developer-focused" },
{ label: "Microsoft", description: "Enterprise integration" }
]
}
Interview-Then-Execute Workflow
Phase 1 - Interview: Use AskUserQuestion to gather requirements
Phase 2 - Specification: Produce written spec from answers
Phase 3 - Execution: Implement with ambiguity eliminated
This reduces rework by 50-80% compared to assumption-driven development.
Known Issues
PreToolUse Hooks Break AskUserQuestion
When PreToolUse hooks are active, AskUserQuestion may return empty responses without showing UI.
Workaround: Use PermissionRequest hook instead of PreToolUse. Both hooks fire for AskUserQuestion, but PermissionRequest is semantically correct for user-input scenarios and avoids the stdin/stdout conflict.
See cc-writing-hooks skill for implementation example.
Cannot Use From Subagents
AskUserQuestion only works in main conversation thread, not from Task tool subagents.
Permission Mode Conflicts
Issues reported when bypass permissions enabled. Test in your environment.
Context Source
Guidance for using AskUserQuestion works similarly regardless of source:
- System prompts / CLAUDE.md
- Rules (.claude/rules/)
- Skills
- Hook additionalContext
All end up in Claude's context. No documented performance difference.
References
Official Documentation
Effectiveness Claims
GitHub Issues
- #15872 - Feature request: hook support for AskUserQuestion