# Interactive Command Patterns Comprehensive guide to creating commands that gather user feedback and make decisions through the AskUserQuestion tool. ## Overview Some commands need user input that doesn't work well with simple arguments. For example: - Choosing between multiple complex options with trade-offs - Selecting multiple items from a list - Making decisions that require explanation - Gathering preferences or configuration interactively For these cases, use the **AskUserQuestion tool** within command execution rather than relying on command arguments. ## When to Use AskUserQuestion ### Use AskUserQuestion When: 1. **Multiple choice decisions** with explanations needed 2. **Complex options** that require context to choose 3. **Multi-select scenarios** (choosing multiple items) 4. **Preference gathering** for configuration 5. **Interactive workflows** that adapt based on answers ### Use Command Arguments When: 1. **Simple values** (file paths, numbers, names) 2. **Known inputs** user already has 3. **Scriptable workflows** that should be automatable 4. **Fast invocations** where prompting would slow down ## AskUserQuestion Basics ### Tool Parameters ```typescript { questions: [ { question: "Which authentication method should we use?", header: "Auth method", // Short label (max 12 chars) multiSelect: false, // true for multiple selection options: [ { label: "OAuth 2.0", description: "Industry standard, supports multiple providers" }, { label: "JWT", description: "Stateless, good for APIs" }, { label: "Session", description: "Traditional, server-side state" } ] } ] } ``` **Key points:** - Users can always choose "Other" to provide custom input (automatic) - `multiSelect: true` allows selecting multiple options - Options should be 2-4 choices (not more) - Can ask 1-4 questions per tool call ## Command Pattern for User Interaction ### Basic Interactive Command ```markdown --- description: Interactive setup command allowed-tools: AskUserQuestion, Write --- # Interactive Plugin Setup This command will guide you through configuring the plugin with a series of questions. ## Step 1: Gather Configuration Use the AskUserQuestion tool to ask: **Question 1 - Deployment target:** - header: "Deploy to" - question: "Which deployment platform will you use?" - options: - AWS (Amazon Web Services with ECS/EKS) - GCP (Google Cloud with GKE) - Azure (Microsoft Azure with AKS) - Local (Docker on local machine) **Question 2 - Environment strategy:** - header: "Environments" - question: "How many environments do you need?" - options: - Single (Just production) - Standard (Dev, Staging, Production) - Complete (Dev, QA, Staging, Production) **Question 3 - Features to enable:** - header: "Features" - question: "Which features do you want to enable?" - multiSelect: true - options: - Auto-scaling (Automatic resource scaling) - Monitoring (Health checks and metrics) - CI/CD (Automated deployment pipeline) - Backups (Automated database backups) ## Step 2: Process Answers Based on the answers received from AskUserQuestion: 1. Parse the deployment target choice 2. Set up environment-specific configuration 3. Enable selected features 4. Generate configuration files ## Step 3: Generate Configuration Create `.claude/plugin-name.local.md` with: \`\`\`yaml --- deployment_target: [answer from Q1] environments: [answer from Q2] features: auto_scaling: [true if selected in Q3] monitoring: [true if selected in Q3] ci_cd: [true if selected in Q3] backups: [true if selected in Q3] --- # Plugin Configuration Generated: [timestamp] Target: [deployment_target] Environments: [environments] \`\`\` ## Step 4: Confirm and Next Steps Confirm configuration created and guide user on next steps. ``` ### Multi-Stage Interactive Workflow ```markdown --- description: Multi-stage interactive workflow allowed-tools: AskUserQuestion, Read, Write, Bash --- # Multi-Stage Deployment Setup This command walks through deployment setup in stages, adapting based on your answers. ## Stage 1: Basic Configuration Use AskUserQuestion to ask about deployment basics. Based on answers, determine which additional questions to ask. ## Stage 2: Advanced Options (Conditional) If user selected "Advanced" deployment in Stage 1: Use AskUserQuestion to ask about: - Load balancing strategy - Caching configuration - Security hardening options If user selected "Simple" deployment: - Skip advanced questions - Use sensible defaults ## Stage 3: Confirmation Show summary of all selections. Use AskUserQuestion for final confirmation: - header: "Confirm" - question: "Does this configuration look correct?" - options: - Yes (Proceed with setup) - No (Start over) - Modify (Let me adjust specific settings) If "Modify", ask which specific setting to change. ## Stage 4: Execute Setup Based on confirmed configuration, execute setup steps. ``` ## Interactive Question Design ### Question Structure **Good questions:** ```markdown Question: "Which database should we use for this project?" Header: "Database" Options: - PostgreSQL (Relational, ACID compliant, best for complex queries) - MongoDB (Document store, flexible schema, best for rapid iteration) - Redis (In-memory, fast, best for caching and sessions) ``` **Poor questions:** ```markdown Question: "Database?" // Too vague Header: "DB" // Unclear abbreviation Options: - Option 1 // Not descriptive - Option 2 ``` ### Option Design Best Practices **Clear labels:** - Use 1-5 words - Specific and descriptive - No jargon without context **Helpful descriptions:** - Explain what the option means - Mention key benefits or trade-offs - Help user make informed decision - Keep to 1-2 sentences **Appropriate number:** - 2-4 options per question - Don't overwhelm with too many choices - Group related options - "Other" automatically provided ### Multi-Select Questions **When to use multiSelect:** ```markdown Use AskUserQuestion for enabling features: Question: "Which features do you want to enable?" Header: "Features" multiSelect: true // Allow selecting multiple Options: - Logging (Detailed operation logs) - Metrics (Performance monitoring) - Alerts (Error notifications) - Backups (Automatic backups) ``` User can select any combination: none, some, or all. **When NOT to use multiSelect:** ```markdown Question: "Which authentication method?" multiSelect: false // Only one auth method makes sense ``` Mutually exclusive choices should not use multiSelect. ## Command Patterns with AskUserQuestion ### Pattern 1: Simple Yes/No Decision ```markdown --- description: Command with confirmation allowed-tools: AskUserQuestion, Bash --- # Destructive Operation This operation will delete all cached data. Use AskUserQuestion to confirm: Question: "This will delete all cached data. Are you sure?" Header: "Confirm" Options: - Yes (Proceed with deletion) - No (Cancel operation) If user selects "Yes": Execute deletion Report completion If user selects "No": Cancel operation Exit without changes ``` ### Pattern 2: Multiple Configuration Questions ```markdown --- description: Multi-question configuration allowed-tools: AskUserQuestion, Write --- # Project Configuration Setup Gather configuration through multiple questions. Use AskUserQuestion with multiple questions in one call: **Question 1:** - question: "Which programming language?" - header: "Language" - options: Python, TypeScript, Go, Rust **Question 2:** - question: "Which test framework?" - header: "Testing" - options: Jest, PyTest, Go Test, Cargo Test (Adapt based on language from Q1) **Question 3:** - question: "Which CI/CD platform?" - header: "CI/CD" - options: GitHub Actions, GitLab CI, CircleCI **Question 4:** - question: "Which features do you need?" - header: "Features" - multiSelect: true - options: Linting, Type checking, Code coverage, Security scanning Process all answers together to generate cohesive configuration. ``` ### Pattern 3: Conditional Question Flow ```markdown --- description: Conditional interactive workflow allowed-tools: AskUserQuestion, Read, Write --- # Adaptive Configuration ## Question 1: Deployment Complexity Use AskUserQuestion: Question: "How complex is your deployment?" Header: "Complexity" Options: - Simple (Single server, straightforward) - Standard (Multiple servers, load balancing) - Complex (Microservices, orchestration) ## Conditional Questions Based on Answer If answer is "Simple": - No additional questions - Use minimal configuration If answer is "Standard": - Ask about load balancing strategy - Ask about scaling policy If answer is "Complex": - Ask about orchestration platform (Kubernetes, Docker Swarm) - Ask about service mesh (Istio, Linkerd, None) - Ask about monitoring (Prometheus, Datadog, CloudWatch) - Ask about logging aggregation ## Process Conditional Answers Generate configuration appropriate for selected complexity level. ``` ### Pattern 4: Iterative Collection ```markdown --- description: Collect multiple items iteratively allowed-tools: AskUserQuestion, Write --- # Collect Team Members We'll collect team member information for the project. ## Question: How many team members? Use AskUserQuestion: Question: "How many team members should we set up?" Header: "Team size" Options: - 2 people - 3 people - 4 people - 6 people ## Iterate Through Team Members For each team member (1 to N based on answer): Use AskUserQuestion for member details: Question: "What role for team member [number]?" Header: "Role" Options: - Frontend Developer - Backend Developer - DevOps Engineer - QA Engineer - Designer Store each member's information. ## Generate Team Configuration After collecting all N members, create team configuration file with all members and their roles. ``` ### Pattern 5: Dependency Selection ```markdown --- description: Select dependencies with multi-select allowed-tools: AskUserQuestion --- # Configure Project Dependencies ## Question: Required Libraries Use AskUserQuestion with multiSelect: Question: "Which libraries does your project need?" Header: "Dependencies" multiSelect: true Options: - React (UI framework) - Express (Web server) - TypeORM (Database ORM) - Jest (Testing framework) - Axios (HTTP client) User can select any combination. ## Process Selections For each selected library: - Add to package.json dependencies - Generate sample configuration - Create usage examples - Update documentation ``` ## Best Practices for Interactive Commands ### Question Design 1. **Clear and specific**: Question should be unambiguous 2. **Concise header**: Max 12 characters for clean display 3. **Helpful options**: Labels are clear, descriptions explain trade-offs 4. **Appropriate count**: 2-4 options per question, 1-4 questions per call 5. **Logical order**: Questions flow naturally ### Error Handling ```markdown # Handle AskUserQuestion Responses After calling AskUserQuestion, verify answers received: If answers are empty or invalid: Something went wrong gathering responses. Please try again or provide configuration manually: [Show alternative approach] Exit. If answers look correct: Process as expected ``` ### Progressive Disclosure ```markdown # Start Simple, Get Detailed as Needed ## Question 1: Setup Type Use AskUserQuestion: Question: "How would you like to set up?" Header: "Setup type" Options: - Quick (Use recommended defaults) - Custom (Configure all options) - Guided (Step-by-step with explanations) If "Quick": Apply defaults, minimal questions If "Custom": Ask all available configuration questions If "Guided": Ask questions with extra explanation Provide recommendations along the way ``` ### Multi-Select Guidelines **Good multi-select use:** ```markdown Question: "Which features do you want to enable?" multiSelect: true Options: - Logging - Metrics - Alerts - Backups Reason: User might want any combination ``` **Bad multi-select use:** ```markdown Question: "Which database engine?" multiSelect: true // ❌ Should be single-select Reason: Can only use one database engine ``` ## Advanced Patterns ### Validation Loop ```markdown --- description: Interactive with validation allowed-tools: AskUserQuestion, Bash --- # Setup with Validation ## Gather Configuration Use AskUserQuestion to collect settings. ## Validate Configuration Check if configuration is valid: - Required dependencies available? - Settings compatible with each other? - No conflicts detected? If validation fails: Show validation errors Use AskUserQuestion to ask: Question: "Configuration has issues. What would you like to do?" Header: "Next step" Options: - Fix (Adjust settings to resolve issues) - Override (Proceed despite warnings) - Cancel (Abort setup) Based on answer, retry or proceed or exit. ``` ### Build Configuration Incrementally ```markdown --- description: Incremental configuration builder allowed-tools: AskUserQuestion, Write, Read --- # Incremental Setup ## Phase 1: Core Settings Use AskUserQuestion for core settings. Save to `.claude/config-partial.yml` ## Phase 2: Review Core Settings Show user the core settings: Based on these core settings, you need to configure: - [Setting A] (because you chose [X]) - [Setting B] (because you chose [Y]) Ready to continue? ## Phase 3: Detailed Settings Use AskUserQuestion for settings based on Phase 1 answers. Merge with core settings. ## Phase 4: Final Review Present complete configuration. Use AskUserQuestion for confirmation: Question: "Is this configuration correct?" Options: - Yes (Save and apply) - No (Start over) - Modify (Edit specific settings) ``` ### Dynamic Options Based on Context ```markdown --- description: Context-aware questions allowed-tools: AskUserQuestion, Bash, Read --- # Context-Aware Setup ## Detect Current State Check existing configuration: - Current language: !`detect-language.sh` - Existing frameworks: !`detect-frameworks.sh` - Available tools: !`check-tools.sh` ## Ask Context-Appropriate Questions Based on detected language, ask relevant questions. If language is TypeScript: Use AskUserQuestion: Question: "Which TypeScript features should we enable?" Options: - Strict Mode (Maximum type safety) - Decorators (Experimental decorator support) - Path Mapping (Module path aliases) If language is Python: Use AskUserQuestion: Question: "Which Python tools should we configure?" Options: - Type Hints (mypy for type checking) - Black (Code formatting) - Pylint (Linting and style) Questions adapt to project context. ``` ## Real-World Example: Multi-Agent Swarm Launch **From multi-agent-swarm plugin:** ```markdown --- description: Launch multi-agent swarm allowed-tools: AskUserQuestion, Read, Write, Bash --- # Launch Multi-Agent Swarm ## Interactive Mode (No Task List Provided) If user didn't provide task list file, help create one interactively. ### Question 1: Agent Count Use AskUserQuestion: Question: "How many agents should we launch?" Header: "Agent count" Options: - 2 agents (Best for simple projects) - 3 agents (Good for medium projects) - 4 agents (Standard team size) - 6 agents (Large projects) - 8 agents (Complex multi-component projects) ### Question 2: Task Definition Approach Use AskUserQuestion: Question: "How would you like to define tasks?" Header: "Task setup" Options: - File (I have a task list file ready) - Guided (Help me create tasks interactively) - Custom (Other approach) If "File": Ask for file path Validate file exists and has correct format If "Guided": Enter iterative task creation mode (see below) ### Question 3: Coordination Mode Use AskUserQuestion: Question: "How should agents coordinate?" Header: "Coordination" Options: - Team Leader (One agent coordinates others) - Collaborative (Agents coordinate as peers) - Autonomous (Independent work, minimal coordination) ### Iterative Task Creation (If "Guided" Selected) For each agent (1 to N from Question 1): **Question A: Agent Name** Question: "What should we call agent [number]?" Header: "Agent name" Options: - auth-agent - api-agent - ui-agent - db-agent (Provide relevant suggestions based on common patterns) **Question B: Task Type** Question: "What task for [agent-name]?" Header: "Task type" Options: - Authentication (User auth, JWT, OAuth) - API Endpoints (REST/GraphQL APIs) - UI Components (Frontend components) - Database (Schema, migrations, queries) - Testing (Test suites and coverage) - Documentation (Docs, README, guides) **Question C: Dependencies** Question: "What does [agent-name] depend on?" Header: "Dependencies" multiSelect: true Options: - [List of previously defined agents] - No dependencies **Question D: Base Branch** Question: "Which base branch for PR?" Header: "PR base" Options: - main - staging - develop Store all task information for each agent. ### Generate Task List File After collecting all agent task details: 1. Ask for project name 2. Generate task list in proper format 3. Save to `.daisy/swarm/tasks.md` 4. Show user the file path 5. Proceed with launch using generated task list ``` ## Best Practices ### Question Writing 1. **Be specific**: "Which database?" not "Choose option?" 2. **Explain trade-offs**: Describe pros/cons in option descriptions 3. **Provide context**: Question text should stand alone 4. **Guide decisions**: Help user make informed choice 5. **Keep concise**: Header max 12 chars, descriptions 1-2 sentences ### Option Design 1. **Meaningful labels**: Specific, clear names 2. **Informative descriptions**: Explain what each option does 3. **Show trade-offs**: Help user understand implications 4. **Consistent detail**: All options equally explained 5. **2-4 options**: Not too few, not too many ### Flow Design 1. **Logical order**: Questions flow naturally 2. **Build on previous**: Later questions use earlier answers 3. **Minimize questions**: Ask only what's needed 4. **Group related**: Ask related questions together 5. **Show progress**: Indicate where in flow ### User Experience 1. **Set expectations**: Tell user what to expect 2. **Explain why**: Help user understand purpose 3. **Provide defaults**: Suggest recommended options 4. **Allow escape**: Let user cancel or restart 5. **Confirm actions**: Summarize before executing ## Common Patterns ### Pattern: Feature Selection ```markdown Use AskUserQuestion: Question: "Which features do you need?" Header: "Features" multiSelect: true Options: - Authentication - Authorization - Rate Limiting - Caching ``` ### Pattern: Environment Configuration ```markdown Use AskUserQuestion: Question: "Which environment is this?" Header: "Environment" Options: - Development (Local development) - Staging (Pre-production testing) - Production (Live environment) ``` ### Pattern: Priority Selection ```markdown Use AskUserQuestion: Question: "What's the priority for this task?" Header: "Priority" Options: - Critical (Must be done immediately) - High (Important, do soon) - Medium (Standard priority) - Low (Nice to have) ``` ### Pattern: Scope Selection ```markdown Use AskUserQuestion: Question: "What scope should we analyze?" Header: "Scope" Options: - Current file (Just this file) - Current directory (All files in directory) - Entire project (Full codebase scan) ``` ## Combining Arguments and Questions ### Use Both Appropriately **Arguments for known values:** ```markdown --- argument-hint: [project-name] allowed-tools: AskUserQuestion, Write --- Setup for project: $1 Now gather additional configuration... Use AskUserQuestion for options that require explanation. ``` **Questions for complex choices:** ```markdown Project name from argument: $1 Now use AskUserQuestion to choose: - Architecture pattern - Technology stack - Deployment strategy These require explanation, so questions work better than arguments. ``` ## Troubleshooting **Questions not appearing:** - Verify AskUserQuestion in allowed-tools - Check question format is correct - Ensure options array has 2-4 items **User can't make selection:** - Check option labels are clear - Verify descriptions are helpful - Consider if too many options - Ensure multiSelect setting is correct **Flow feels confusing:** - Reduce number of questions - Group related questions - Add explanation between stages - Show progress through workflow With AskUserQuestion, commands become interactive wizards that guide users through complex decisions while maintaining the clarity that simple arguments provide for straightforward inputs.