Claude-skill-registry cc-askuserquestion

Use when designing AskUserQuestion tool calls - covers schema constraints, effectiveness patterns, and known issues.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/cc-ask-user-question" ~/.claude/skills/majiayu000-claude-skill-registry-cc-askuserquestion && rm -rf "$T"
manifest: skills/data/cc-ask-user-question/SKILL.md
source content

AskUserQuestion Tool

Structured user input for clarifying requirements and gathering decisions.

Schema

{
  questions: Array<{
    // 1-4 questions per call
    question: string; // Full question text, ends with "?"
    header: string; // Max 12 chars, displayed as chip/tag
    multiSelect: boolean; // true = multiple selections allowed
    options: Array<{
      // 2-4 options per question
      label: string; // 1-5 words, concise and scannable
      description: string; // Explains implications and trade-offs
    }>;
  }>;
}

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.

// GOOD - concise label, detailed description
{
  label: "Immediate failure",
  description: "Fail fast and expose errors to caller immediately. Best for debugging."
}

// BAD - everything crammed into label
{
  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

// multiSelect: true - user can pick multiple
{
  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