diff options
| author | sillylaird <sillyfanboy@gmail.com> | 2026-09-03 00:33:59 +0000 |
|---|---|---|
| committer | sillylaird <sillyfanboy@gmail.com> | 2026-09-03 00:33:59 +0000 |
| commit | 898b52edcb47bcb3e9d6106e74ca73e74ea01e70 (patch) | |
| tree | 85c6ee5ad58b860144551184d4cf86b560c62b91 /.agents/skills/command-development/references | |
| download | www-898b52edcb47bcb3e9d6106e74ca73e74ea01e70.tar.gz www-898b52edcb47bcb3e9d6106e74ca73e74ea01e70.zip | |
Diffstat (limited to '')
7 files changed, 5059 insertions, 0 deletions
diff --git a/.agents/skills/command-development/references/advanced-workflows.md b/.agents/skills/command-development/references/advanced-workflows.md new file mode 100644 index 0000000..5e0d7b1 --- /dev/null +++ b/.agents/skills/command-development/references/advanced-workflows.md @@ -0,0 +1,722 @@ +# Advanced Workflow Patterns + +Multi-step command sequences and composition patterns for complex workflows. + +## Overview + +Advanced workflows combine multiple commands, coordinate state across invocations, and create sophisticated automation sequences. These patterns enable building complex functionality from simple command building blocks. + +## Multi-Step Command Patterns + +### Sequential Workflow Command + +Commands that guide users through multi-step processes: + +```markdown +--- +description: Complete PR review workflow +argument-hint: [pr-number] +allowed-tools: Bash(gh:*), Read, Grep +--- + +# PR Review Workflow for #$1 + +## Step 1: Fetch PR Details +!`gh pr view $1 --json title,body,author,files` + +## Step 2: Review Files +Files changed: !`gh pr diff $1 --name-only` + +For each file: +- Check code quality +- Verify tests exist +- Review documentation + +## Step 3: Run Checks +Test status: !`gh pr checks $1` + +Verify: +- All tests passing +- No merge conflicts +- CI/CD successful + +## Step 4: Provide Feedback + +Summarize: +- Issues found (critical/minor) +- Suggestions for improvement +- Approval recommendation + +Would you like to: +1. Approve PR +2. Request changes +3. Leave comments only + +Reply with your choice and I'll help complete the action. +``` + +**Key features:** +- Numbered steps for clarity +- Bash execution for context +- Decision points for user input +- Next action suggestions + +### State-Carrying Workflow + +Commands that maintain state between invocations: + +```markdown +--- +description: Initialize deployment workflow +allowed-tools: Write, Bash(git:*) +--- + +# Initialize Deployment + +Creating deployment tracking file... + +Current branch: !`git branch --show-current` +Latest commit: !`git log -1 --format=%H` + +Deployment state saved to `.claude/deployment-state.local.md`: + +\`\`\`markdown +--- +initialized: true +branch: $(git branch --show-current) +commit: $(git log -1 --format=%H) +timestamp: $(date -u +%Y-%m-%dT%H:%M:%SZ) +status: initialized +--- + +# Deployment Tracking + +Branch: $(git branch --show-current) +Started: $(date) + +Next steps: +1. Run tests: /deploy-test +2. Build: /deploy-build +3. Deploy: /deploy-execute +\`\`\` + +State saved. Run `/deploy-test` to continue. +``` + +**Next command** (`/deploy-test`): +```markdown +--- +description: Run deployment tests +allowed-tools: Read, Bash(npm:*) +--- + +Reading deployment state from `.claude/deployment-state.local.md`... + +Running tests: !`npm test` + +Updating state to 'tested'... + +Tests complete. Run `/deploy-build` to continue. +``` + +**Pattern benefits:** +- Persistent state across commands +- Clear workflow progression +- Safety checkpoints +- Resume capability + +### Conditional Workflow Branching + +Commands that adapt based on conditions: + +```markdown +--- +description: Smart deployment workflow +argument-hint: [environment] +allowed-tools: Bash(git:*), Bash(npm:*), Read +--- + +# Deploy to $1 + +## Pre-flight Checks + +Branch: !`git branch --show-current` +Status: !`git status --short` + +**Checking conditions:** + +1. Branch status: + - If main/master: Require approval + - If feature branch: Warning about target + - If hotfix: Fast-track process + +2. Tests: + !`npm test` + - If tests fail: STOP - fix tests first + - If tests pass: Continue + +3. Environment: + - If $1 = 'production': Extra validation + - If $1 = 'staging': Standard process + - If $1 = 'dev': Minimal checks + +**Workflow decision:** +Based on above, proceeding with: [determined workflow] + +[Conditional steps based on environment and status] + +Ready to deploy? (yes/no) +``` + +## Command Composition Patterns + +### Command Chaining + +Commands designed to work together: + +```markdown +--- +description: Prepare for code review +--- + +# Prepare Code Review + +Running preparation sequence: + +1. Format code: /format-code +2. Run linter: /lint-code +3. Run tests: /test-all +4. Generate coverage: /coverage-report +5. Create review summary: /review-summary + +This is a meta-command. After completing each step above, +I'll compile results and prepare comprehensive review materials. + +Starting sequence... +``` + +**Individual commands** are simple: +- `/format-code` - Just formats +- `/lint-code` - Just lints +- `/test-all` - Just tests + +**Composition command** orchestrates them. + +### Pipeline Pattern + +Commands that process output from previous commands: + +```markdown +--- +description: Analyze test failures +--- + +# Analyze Test Failures + +## Step 1: Get test results +(Run /test-all first if not done) + +Reading test output... + +## Step 2: Categorize failures +- Flaky tests (random failures) +- Consistent failures +- New failures vs existing + +## Step 3: Prioritize +Rank by: +- Impact (critical path vs edge case) +- Frequency (always fails vs sometimes) +- Effort (quick fix vs major work) + +## Step 4: Generate fix plan +For each failure: +- Root cause hypothesis +- Suggested fix approach +- Estimated effort + +Would you like me to: +1. Fix highest priority failure +2. Generate detailed fix plans for all +3. Create GitHub issues for each +``` + +### Parallel Execution Pattern + +Commands that coordinate multiple simultaneous operations: + +```markdown +--- +description: Run comprehensive validation +allowed-tools: Bash(*), Read +--- + +# Comprehensive Validation + +Running validations in parallel... + +Starting: +- Code quality checks +- Security scanning +- Dependency audit +- Performance profiling + +This will take 2-3 minutes. I'll monitor all processes +and report when complete. + +[Poll each process and report progress] + +All validations complete. Summary: +- Quality: PASS (0 issues) +- Security: WARN (2 minor issues) +- Dependencies: PASS +- Performance: PASS (baseline met) + +Details: +[Collated results from all checks] +``` + +## Workflow State Management + +### Using .local.md Files + +Store workflow state in plugin-specific files: + +```markdown +.claude/plugin-name-workflow.local.md: + +--- +workflow: deployment +stage: testing +started: 2025-01-15T10:30:00Z +environment: staging +branch: feature/new-api +commit: abc123def +tests_passed: false +build_complete: false +--- + +# Deployment Workflow State + +Current stage: Testing +Started: 2025-01-15 10:30 UTC + +Completed steps: +- ✅ Validation +- ✅ Branch check +- ⏳ Testing (in progress) + +Pending steps: +- Build +- Deploy +- Smoke tests +``` + +**Reading state in commands:** + +```markdown +--- +description: Continue deployment workflow +allowed-tools: Read, Write +--- + +Reading workflow state from .claude/plugin-name-workflow.local.md... + +Current stage: @.claude/plugin-name-workflow.local.md + +[Parse YAML frontmatter to determine next step] + +Next action based on state: [determined action] +``` + +### Workflow Recovery + +Handle interrupted workflows: + +```markdown +--- +description: Resume deployment workflow +allowed-tools: Read +--- + +# Resume Deployment + +Checking for interrupted workflow... + +State file: @.claude/plugin-name-workflow.local.md + +**Workflow found:** +- Started: [timestamp] +- Environment: [env] +- Last completed: [step] + +**Recovery options:** +1. Resume from last step +2. Restart from beginning +3. Abort and clean up + +Which would you like? (1/2/3) +``` + +## Workflow Coordination Patterns + +### Cross-Command Communication + +Commands that signal each other: + +```markdown +--- +description: Mark feature complete +allowed-tools: Write +--- + +# Mark Feature Complete + +Writing completion marker... + +Creating: .claude/feature-complete.flag + +This signals other commands that feature is ready for: +- Integration testing (/integration-test will auto-detect) +- Documentation generation (/docs-generate will include) +- Release notes (/release-notes will add) + +Feature marked complete. +``` + +**Other commands check for flag:** + +```markdown +--- +description: Generate release notes +allowed-tools: Read, Bash(git:*) +--- + +Checking for completed features... + +if [ -f .claude/feature-complete.flag ]; then + Feature ready for release notes +fi + +[Include in release notes] +``` + +### Workflow Locking + +Prevent concurrent workflow execution: + +```markdown +--- +description: Start deployment +allowed-tools: Read, Write, Bash +--- + +# Start Deployment + +Checking for active deployments... + +if [ -f .claude/deployment.lock ]; then + ERROR: Deployment already in progress + Started: [timestamp from lock file] + + Cannot start concurrent deployment. + Wait for completion or run /deployment-abort + + Exit. +fi + +Creating deployment lock... + +Deployment started. Lock created. +[Proceed with deployment] +``` + +**Lock cleanup:** + +```markdown +--- +description: Complete deployment +allowed-tools: Write, Bash +--- + +Deployment complete. + +Removing deployment lock... +rm .claude/deployment.lock + +Ready for next deployment. +``` + +## Advanced Argument Handling + +### Optional Arguments with Defaults + +```markdown +--- +description: Deploy with optional version +argument-hint: [environment] [version] +--- + +Environment: ${1:-staging} +Version: ${2:-latest} + +Deploying ${2:-latest} to ${1:-staging}... + +Note: Using defaults for missing arguments: +- Environment defaults to 'staging' +- Version defaults to 'latest' +``` + +### Argument Validation + +```markdown +--- +description: Deploy to validated environment +argument-hint: [environment] +--- + +Environment: $1 + +Validating environment... + +valid_envs="dev staging production" +if ! echo "$valid_envs" | grep -w "$1" > /dev/null; then + ERROR: Invalid environment '$1' + Valid options: dev, staging, production + Exit. +fi + +Environment validated. Proceeding... +``` + +### Argument Transformation + +```markdown +--- +description: Deploy with shorthand +argument-hint: [env-shorthand] +--- + +Input: $1 + +Expanding shorthand: +- d/dev → development +- s/stg → staging +- p/prod → production + +case "$1" in + d|dev) ENV="development";; + s|stg) ENV="staging";; + p|prod) ENV="production";; + *) ENV="$1";; +esac + +Deploying to: $ENV +``` + +## Error Handling in Workflows + +### Graceful Failure + +```markdown +--- +description: Resilient deployment workflow +--- + +# Deployment Workflow + +Running steps with error handling... + +## Step 1: Tests +!`npm test` + +if [ $? -ne 0 ]; then + ERROR: Tests failed + + Options: + 1. Fix tests and retry + 2. Skip tests (NOT recommended) + 3. Abort deployment + + What would you like to do? + + [Wait for user input before continuing] +fi + +## Step 2: Build +[Continue only if Step 1 succeeded] +``` + +### Rollback on Failure + +```markdown +--- +description: Deployment with rollback +--- + +# Deploy with Rollback + +Saving current state for rollback... +Previous version: !`current-version.sh` + +Deploying new version... + +!`deploy.sh` + +if [ $? -ne 0 ]; then + DEPLOYMENT FAILED + + Initiating automatic rollback... + !`rollback.sh` + + Rolled back to previous version. + Check logs for failure details. +fi + +Deployment complete. +``` + +### Checkpoint Recovery + +```markdown +--- +description: Workflow with checkpoints +--- + +# Multi-Stage Deployment + +## Checkpoint 1: Validation +!`validate.sh` +echo "checkpoint:validation" >> .claude/deployment-checkpoints.log + +## Checkpoint 2: Build +!`build.sh` +echo "checkpoint:build" >> .claude/deployment-checkpoints.log + +## Checkpoint 3: Deploy +!`deploy.sh` +echo "checkpoint:deploy" >> .claude/deployment-checkpoints.log + +If any step fails, resume with: +/deployment-resume [last-successful-checkpoint] +``` + +## Best Practices + +### Workflow Design + +1. **Clear progression**: Number steps, show current position +2. **Explicit state**: Don't rely on implicit state +3. **User control**: Provide decision points +4. **Error recovery**: Handle failures gracefully +5. **Progress indication**: Show what's done, what's pending + +### Command Composition + +1. **Single responsibility**: Each command does one thing well +2. **Composable design**: Commands work together easily +3. **Standard interfaces**: Consistent input/output formats +4. **Loose coupling**: Commands don't depend on each other's internals + +### State Management + +1. **Persistent state**: Use .local.md files +2. **Atomic updates**: Write complete state files atomically +3. **State validation**: Check state file format/completeness +4. **Cleanup**: Remove stale state files +5. **Documentation**: Document state file formats + +### Error Handling + +1. **Fail fast**: Detect errors early +2. **Clear messages**: Explain what went wrong +3. **Recovery options**: Provide clear next steps +4. **State preservation**: Keep state for recovery +5. **Rollback capability**: Support undoing changes + +## Example: Complete Deployment Workflow + +### Initialize Command + +```markdown +--- +description: Initialize deployment +argument-hint: [environment] +allowed-tools: Write, Bash(git:*) +--- + +# Initialize Deployment to $1 + +Creating workflow state... + +\`\`\`yaml +--- +workflow: deployment +environment: $1 +branch: !`git branch --show-current` +commit: !`git rev-parse HEAD` +stage: initialized +timestamp: !`date -u +%Y-%m-%dT%H:%M:%SZ` +--- +\`\`\` + +Written to .claude/deployment-state.local.md + +Next: Run /deployment-validate +``` + +### Validation Command + +```markdown +--- +description: Validate deployment +allowed-tools: Read, Bash +--- + +Reading state: @.claude/deployment-state.local.md + +Running validation... +- Branch check: PASS +- Tests: PASS +- Build: PASS + +Updating state to 'validated'... + +Next: Run /deployment-execute +``` + +### Execution Command + +```markdown +--- +description: Execute deployment +allowed-tools: Read, Bash, Write +--- + +Reading state: @.claude/deployment-state.local.md + +Executing deployment to [environment]... + +!`deploy.sh [environment]` + +Deployment complete. +Updating state to 'completed'... + +Cleanup: /deployment-cleanup +``` + +### Cleanup Command + +```markdown +--- +description: Clean up deployment +allowed-tools: Bash +--- + +Removing deployment state... +rm .claude/deployment-state.local.md + +Deployment workflow complete. +``` + +This complete workflow demonstrates state management, sequential execution, error handling, and clean separation of concerns across multiple commands. diff --git a/.agents/skills/command-development/references/documentation-patterns.md b/.agents/skills/command-development/references/documentation-patterns.md new file mode 100644 index 0000000..3ea03ec --- /dev/null +++ b/.agents/skills/command-development/references/documentation-patterns.md @@ -0,0 +1,739 @@ +# Command Documentation Patterns + +Strategies for creating self-documenting, maintainable commands with excellent user experience. + +## Overview + +Well-documented commands are easier to use, maintain, and distribute. Documentation should be embedded in the command itself, making it immediately accessible to users and maintainers. + +## Self-Documenting Command Structure + +### Complete Command Template + +```markdown +--- +description: Clear, actionable description under 60 chars +argument-hint: [arg1] [arg2] [optional-arg] +allowed-tools: Read, Bash(git:*) +model: sonnet +--- + +<!-- +COMMAND: command-name +VERSION: 1.0.0 +AUTHOR: Team Name +LAST UPDATED: 2025-01-15 + +PURPOSE: +Detailed explanation of what this command does and why it exists. + +USAGE: + /command-name arg1 arg2 + +ARGUMENTS: + arg1: Description of first argument (required) + arg2: Description of second argument (optional, defaults to X) + +EXAMPLES: + /command-name feature-branch main + → Compares feature-branch with main + + /command-name my-branch + → Compares my-branch with current branch + +REQUIREMENTS: + - Git repository + - Branch must exist + - Permissions to read repository + +RELATED COMMANDS: + /other-command - Related functionality + /another-command - Alternative approach + +TROUBLESHOOTING: + - If branch not found: Check branch name spelling + - If permission denied: Check repository access + +CHANGELOG: + v1.0.0 (2025-01-15): Initial release + v0.9.0 (2025-01-10): Beta version +--> + +# Command Implementation + +[Command prompt content here...] + +[Explain what will happen...] + +[Guide user through steps...] + +[Provide clear output...] +``` + +### Documentation Comment Sections + +**PURPOSE**: Why the command exists +- Problem it solves +- Use cases +- When to use vs when not to use + +**USAGE**: Basic syntax +- Command invocation pattern +- Required vs optional arguments +- Default values + +**ARGUMENTS**: Detailed argument documentation +- Each argument described +- Type information +- Valid values/ranges +- Defaults + +**EXAMPLES**: Concrete usage examples +- Common use cases +- Edge cases +- Expected outputs + +**REQUIREMENTS**: Prerequisites +- Dependencies +- Permissions +- Environmental setup + +**RELATED COMMANDS**: Connections +- Similar commands +- Complementary commands +- Alternative approaches + +**TROUBLESHOOTING**: Common issues +- Known problems +- Solutions +- Workarounds + +**CHANGELOG**: Version history +- What changed when +- Breaking changes highlighted +- Migration guidance + +## In-Line Documentation Patterns + +### Commented Sections + +```markdown +--- +description: Complex multi-step command +--- + +<!-- SECTION 1: VALIDATION --> +<!-- This section checks prerequisites before proceeding --> + +Checking prerequisites... +- Git repository: !`git rev-parse --git-dir 2>/dev/null` +- Branch exists: [validation logic] + +<!-- SECTION 2: ANALYSIS --> +<!-- Analyzes the differences between branches --> + +Analyzing differences between $1 and $2... +[Analysis logic...] + +<!-- SECTION 3: RECOMMENDATIONS --> +<!-- Provides actionable recommendations --> + +Based on analysis, recommend: +[Recommendations...] + +<!-- END: Next steps for user --> +``` + +### Inline Explanations + +```markdown +--- +description: Deployment command with inline docs +--- + +# Deploy to $1 + +## Pre-flight Checks + +<!-- We check branch status to prevent deploying from wrong branch --> +Current branch: !`git branch --show-current` + +<!-- Production deploys must come from main/master --> +if [ "$1" = "production" ] && [ "$(git branch --show-current)" != "main" ]; then + ⚠️ WARNING: Not on main branch for production deploy + This is unusual. Confirm this is intentional. +fi + +<!-- Test status ensures we don't deploy broken code --> +Running tests: !`npm test` + +✓ All checks passed + +## Deployment + +<!-- Actual deployment happens here --> +<!-- Uses blue-green strategy for zero-downtime --> +Deploying to $1 environment... +[Deployment steps...] + +<!-- Post-deployment verification --> +Verifying deployment health... +[Health checks...] + +Deployment complete! + +## Next Steps + +<!-- Guide user on what to do after deployment --> +1. Monitor logs: /logs $1 +2. Run smoke tests: /smoke-test $1 +3. Notify team: /notify-deployment $1 +``` + +### Decision Point Documentation + +```markdown +--- +description: Interactive deployment command +--- + +# Interactive Deployment + +## Configuration Review + +Target: $1 +Current version: !`cat version.txt` +New version: $2 + +<!-- DECISION POINT: User confirms configuration --> +<!-- This pause allows user to verify everything is correct --> +<!-- We can't automatically proceed because deployment is risky --> + +Review the above configuration. + +**Continue with deployment?** +- Reply "yes" to proceed +- Reply "no" to cancel +- Reply "edit" to modify configuration + +[Await user input before continuing...] + +<!-- After user confirms, we proceed with deployment --> +<!-- All subsequent steps are automated --> + +Proceeding with deployment... +``` + +## Help Text Patterns + +### Built-in Help Command + +Create a help subcommand for complex commands: + +```markdown +--- +description: Main command with help +argument-hint: [subcommand] [args] +--- + +# Command Processor + +if [ "$1" = "help" ] || [ "$1" = "--help" ] || [ "$1" = "-h" ]; then + **Command Help** + + USAGE: + /command [subcommand] [args] + + SUBCOMMANDS: + init [name] Initialize new configuration + deploy [env] Deploy to environment + status Show current status + rollback Rollback last deployment + help Show this help + + EXAMPLES: + /command init my-project + /command deploy staging + /command status + /command rollback + + For detailed help on a subcommand: + /command [subcommand] --help + + Exit. +fi + +[Regular command processing...] +``` + +### Contextual Help + +Provide help based on context: + +```markdown +--- +description: Context-aware command +argument-hint: [operation] [target] +--- + +# Context-Aware Operation + +if [ -z "$1" ]; then + **No operation specified** + + Available operations: + - analyze: Analyze target for issues + - fix: Apply automatic fixes + - report: Generate detailed report + + Usage: /command [operation] [target] + + Examples: + /command analyze src/ + /command fix src/app.js + /command report + + Run /command help for more details. + + Exit. +fi + +[Command continues if operation provided...] +``` + +## Error Message Documentation + +### Helpful Error Messages + +```markdown +--- +description: Command with good error messages +--- + +# Validation Command + +if [ -z "$1" ]; then + ❌ ERROR: Missing required argument + + The 'file-path' argument is required. + + USAGE: + /validate [file-path] + + EXAMPLE: + /validate src/app.js + + Try again with a file path. + + Exit. +fi + +if [ ! -f "$1" ]; then + ❌ ERROR: File not found: $1 + + The specified file does not exist or is not accessible. + + COMMON CAUSES: + 1. Typo in file path + 2. File was deleted or moved + 3. Insufficient permissions + + SUGGESTIONS: + - Check spelling: $1 + - Verify file exists: ls -la $(dirname "$1") + - Check permissions: ls -l "$1" + + Exit. +fi + +[Command continues if validation passes...] +``` + +### Error Recovery Guidance + +```markdown +--- +description: Command with recovery guidance +--- + +# Operation Command + +Running operation... + +!`risky-operation.sh` + +if [ $? -ne 0 ]; then + ❌ OPERATION FAILED + + The operation encountered an error and could not complete. + + WHAT HAPPENED: + The risky-operation.sh script returned a non-zero exit code. + + WHAT THIS MEANS: + - Changes may be partially applied + - System may be in inconsistent state + - Manual intervention may be needed + + RECOVERY STEPS: + 1. Check operation logs: cat /tmp/operation.log + 2. Verify system state: /check-state + 3. If needed, rollback: /rollback-operation + 4. Fix underlying issue + 5. Retry operation: /retry-operation + + NEED HELP? + - Check troubleshooting guide: /help troubleshooting + - Contact support with error code: ERR_OP_FAILED_001 + + Exit. +fi +``` + +## Usage Example Documentation + +### Embedded Examples + +```markdown +--- +description: Command with embedded examples +--- + +# Feature Command + +This command performs feature analysis with multiple options. + +## Basic Usage + +\`\`\` +/feature analyze src/ +\`\`\` + +Analyzes all files in src/ directory for feature usage. + +## Advanced Usage + +\`\`\` +/feature analyze src/ --detailed +\`\`\` + +Provides detailed analysis including: +- Feature breakdown by file +- Usage patterns +- Optimization suggestions + +## Use Cases + +**Use Case 1: Quick overview** +\`\`\` +/feature analyze . +\`\`\` +Get high-level feature summary of entire project. + +**Use Case 2: Specific directory** +\`\`\` +/feature analyze src/components +\`\`\` +Focus analysis on components directory only. + +**Use Case 3: Comparison** +\`\`\` +/feature analyze src/ --compare baseline.json +\`\`\` +Compare current features against baseline. + +--- + +Now processing your request... + +[Command implementation...] +``` + +### Example-Driven Documentation + +```markdown +--- +description: Example-heavy command +--- + +# Transformation Command + +## What This Does + +Transforms data from one format to another. + +## Examples First + +### Example 1: JSON to YAML +**Input:** `data.json` +\`\`\`json +{"name": "test", "value": 42} +\`\`\` + +**Command:** `/transform data.json yaml` + +**Output:** `data.yaml` +\`\`\`yaml +name: test +value: 42 +\`\`\` + +### Example 2: CSV to JSON +**Input:** `data.csv` +\`\`\`csv +name,value +test,42 +\`\`\` + +**Command:** `/transform data.csv json` + +**Output:** `data.json` +\`\`\`json +[{"name": "test", "value": "42"}] +\`\`\` + +### Example 3: With Options +**Command:** `/transform data.json yaml --pretty --sort-keys` + +**Result:** Formatted YAML with sorted keys + +--- + +## Your Transformation + +File: $1 +Format: $2 + +[Perform transformation...] +``` + +## Maintenance Documentation + +### Version and Changelog + +```markdown +<!-- +VERSION: 2.1.0 +LAST UPDATED: 2025-01-15 +AUTHOR: DevOps Team + +CHANGELOG: + v2.1.0 (2025-01-15): + - Added support for YAML configuration + - Improved error messages + - Fixed bug with special characters in arguments + + v2.0.0 (2025-01-01): + - BREAKING: Changed argument order + - BREAKING: Removed deprecated --old-flag + - Added new validation checks + - Migration guide: /migration-v2 + + v1.5.0 (2024-12-15): + - Added --verbose flag + - Improved performance by 50% + + v1.0.0 (2024-12-01): + - Initial stable release + +MIGRATION NOTES: + From v1.x to v2.0: + Old: /command arg1 arg2 --old-flag + New: /command arg2 arg1 + + The --old-flag is removed. Use --new-flag instead. + +DEPRECATION WARNINGS: + - The --legacy-mode flag is deprecated as of v2.1.0 + - Will be removed in v3.0.0 (estimated 2025-06-01) + - Use --modern-mode instead + +KNOWN ISSUES: + - #123: Slow performance with large files (workaround: use --stream flag) + - #456: Special characters in Windows (fix planned for v2.2.0) +--> +``` + +### Maintenance Notes + +```markdown +<!-- +MAINTENANCE NOTES: + +CODE STRUCTURE: + - Lines 1-50: Argument parsing and validation + - Lines 51-100: Main processing logic + - Lines 101-150: Output formatting + - Lines 151-200: Error handling + +DEPENDENCIES: + - Requires git 2.x or later + - Uses jq for JSON processing + - Needs bash 4.0+ for associative arrays + +PERFORMANCE: + - Fast path for small inputs (< 1MB) + - Streams large files to avoid memory issues + - Caches results in /tmp for 1 hour + +SECURITY CONSIDERATIONS: + - Validates all inputs to prevent injection + - Uses allowed-tools to limit Bash access + - No credentials in command file + +TESTING: + - Unit tests: tests/command-test.sh + - Integration tests: tests/integration/ + - Manual test checklist: tests/manual-checklist.md + +FUTURE IMPROVEMENTS: + - TODO: Add support for TOML format + - TODO: Implement parallel processing + - TODO: Add progress bar for large files + +RELATED FILES: + - lib/parser.sh: Shared parsing logic + - lib/formatter.sh: Output formatting + - config/defaults.yml: Default configuration +--> +``` + +## README Documentation + +Commands should have companion README files: + +```markdown +# Command Name + +Brief description of what the command does. + +## Installation + +This command is part of the [plugin-name] plugin. + +Install with: +\`\`\` +/plugin install plugin-name +\`\`\` + +## Usage + +Basic usage: +\`\`\` +/command-name [arg1] [arg2] +\`\`\` + +## Arguments + +- `arg1`: Description (required) +- `arg2`: Description (optional, defaults to X) + +## Examples + +### Example 1: Basic Usage +\`\`\` +/command-name value1 value2 +\`\`\` + +Description of what happens. + +### Example 2: Advanced Usage +\`\`\` +/command-name value1 --option +\`\`\` + +Description of advanced feature. + +## Configuration + +Optional configuration file: `.claude/command-name.local.md` + +\`\`\`markdown +--- +default_arg: value +enable_feature: true +--- +\`\`\` + +## Requirements + +- Git 2.x or later +- jq (for JSON processing) +- Node.js 14+ (optional, for advanced features) + +## Troubleshooting + +### Issue: Command not found + +**Solution:** Ensure plugin is installed and enabled. + +### Issue: Permission denied + +**Solution:** Check file permissions and allowed-tools setting. + +## Contributing + +Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md). + +## License + +MIT License - See [LICENSE](LICENSE). + +## Support + +- Issues: https://github.com/user/plugin/issues +- Docs: https://docs.example.com +- Email: support@example.com +``` + +## Best Practices + +### Documentation Principles + +1. **Write for your future self**: Assume you'll forget details +2. **Examples before explanations**: Show, then tell +3. **Progressive disclosure**: Basic info first, details available +4. **Keep it current**: Update docs when code changes +5. **Test your docs**: Verify examples actually work + +### Documentation Locations + +1. **In command file**: Core usage, examples, inline explanations +2. **README**: Installation, configuration, troubleshooting +3. **Separate docs**: Detailed guides, tutorials, API reference +4. **Comments**: Implementation details for maintainers + +### Documentation Style + +1. **Clear and concise**: No unnecessary words +2. **Active voice**: "Run the command" not "The command can be run" +3. **Consistent terminology**: Use same terms throughout +4. **Formatted well**: Use headings, lists, code blocks +5. **Accessible**: Assume reader is beginner + +### Documentation Maintenance + +1. **Version everything**: Track what changed when +2. **Deprecate gracefully**: Warn before removing features +3. **Migration guides**: Help users upgrade +4. **Archive old docs**: Keep old versions accessible +5. **Review regularly**: Ensure docs match reality + +## Documentation Checklist + +Before releasing a command: + +- [ ] Description in frontmatter is clear +- [ ] argument-hint documents all arguments +- [ ] Usage examples in comments +- [ ] Common use cases shown +- [ ] Error messages are helpful +- [ ] Requirements documented +- [ ] Related commands listed +- [ ] Changelog maintained +- [ ] Version number updated +- [ ] README created/updated +- [ ] Examples actually work +- [ ] Troubleshooting section complete + +With good documentation, commands become self-service, reducing support burden and improving user experience. diff --git a/.agents/skills/command-development/references/frontmatter-reference.md b/.agents/skills/command-development/references/frontmatter-reference.md new file mode 100644 index 0000000..aa85294 --- /dev/null +++ b/.agents/skills/command-development/references/frontmatter-reference.md @@ -0,0 +1,463 @@ +# Command Frontmatter Reference + +Complete reference for YAML frontmatter fields in slash commands. + +## Frontmatter Overview + +YAML frontmatter is optional metadata at the start of command files: + +```markdown +--- +description: Brief description +allowed-tools: Read, Write +model: sonnet +argument-hint: [arg1] [arg2] +--- + +Command prompt content here... +``` + +All fields are optional. Commands work without any frontmatter. + +## Field Specifications + +### description + +**Type:** String +**Required:** No +**Default:** First line of command prompt +**Max Length:** ~60 characters recommended for `/help` display + +**Purpose:** Describes what the command does, shown in `/help` output + +**Examples:** +```yaml +description: Review code for security issues +``` +```yaml +description: Deploy to staging environment +``` +```yaml +description: Generate API documentation +``` + +**Best practices:** +- Keep under 60 characters for clean display +- Start with verb (Review, Deploy, Generate) +- Be specific about what command does +- Avoid redundant "command" or "slash command" + +**Good:** +- ✅ "Review PR for code quality and security" +- ✅ "Deploy application to specified environment" +- ✅ "Generate comprehensive API documentation" + +**Bad:** +- ❌ "This command reviews PRs" (unnecessary "This command") +- ❌ "Review" (too vague) +- ❌ "A command that reviews pull requests for code quality, security issues, and best practices" (too long) + +### allowed-tools + +**Type:** String or Array of strings +**Required:** No +**Default:** Inherits from conversation permissions + +**Purpose:** Restrict or specify which tools command can use + +**Formats:** + +**Single tool:** +```yaml +allowed-tools: Read +``` + +**Multiple tools (comma-separated):** +```yaml +allowed-tools: Read, Write, Edit +``` + +**Multiple tools (array):** +```yaml +allowed-tools: + - Read + - Write + - Bash(git:*) +``` + +**Tool Patterns:** + +**Specific tools:** +```yaml +allowed-tools: Read, Grep, Edit +``` + +**Bash with command filter:** +```yaml +allowed-tools: Bash(git:*) # Only git commands +allowed-tools: Bash(npm:*) # Only npm commands +allowed-tools: Bash(docker:*) # Only docker commands +``` + +**All tools (not recommended):** +```yaml +allowed-tools: "*" +``` + +**When to use:** + +1. **Security:** Restrict command to safe operations + ```yaml + allowed-tools: Read, Grep # Read-only command + ``` + +2. **Clarity:** Document required tools + ```yaml + allowed-tools: Bash(git:*), Read + ``` + +3. **Bash execution:** Enable bash command output + ```yaml + allowed-tools: Bash(git status:*), Bash(git diff:*) + ``` + +**Best practices:** +- Be as restrictive as possible +- Use command filters for Bash (e.g., `git:*` not `*`) +- Only specify when different from conversation permissions +- Document why specific tools are needed + +### model + +**Type:** String +**Required:** No +**Default:** Inherits from conversation +**Values:** `sonnet`, `opus`, `haiku` + +**Purpose:** Specify which Claude model executes the command + +**Examples:** +```yaml +model: haiku # Fast, efficient for simple tasks +``` +```yaml +model: sonnet # Balanced performance (default) +``` +```yaml +model: opus # Maximum capability for complex tasks +``` + +**When to use:** + +**Use `haiku` for:** +- Simple, formulaic commands +- Fast execution needed +- Low complexity tasks +- Frequent invocations + +```yaml +--- +description: Format code file +model: haiku +--- +``` + +**Use `sonnet` for:** +- Standard commands (default) +- Balanced speed/quality +- Most common use cases + +```yaml +--- +description: Review code changes +model: sonnet +--- +``` + +**Use `opus` for:** +- Complex analysis +- Architectural decisions +- Deep code understanding +- Critical tasks + +```yaml +--- +description: Analyze system architecture +model: opus +--- +``` + +**Best practices:** +- Omit unless specific need +- Use `haiku` for speed when possible +- Reserve `opus` for genuinely complex tasks +- Test with different models to find right balance + +### argument-hint + +**Type:** String +**Required:** No +**Default:** None + +**Purpose:** Document expected arguments for users and autocomplete + +**Format:** +```yaml +argument-hint: [arg1] [arg2] [optional-arg] +``` + +**Examples:** + +**Single argument:** +```yaml +argument-hint: [pr-number] +``` + +**Multiple required arguments:** +```yaml +argument-hint: [environment] [version] +``` + +**Optional arguments:** +```yaml +argument-hint: [file-path] [options] +``` + +**Descriptive names:** +```yaml +argument-hint: [source-branch] [target-branch] [commit-message] +``` + +**Best practices:** +- Use square brackets `[]` for each argument +- Use descriptive names (not `arg1`, `arg2`) +- Indicate optional vs required in description +- Match order to positional arguments in command +- Keep concise but clear + +**Examples by pattern:** + +**Simple command:** +```yaml +--- +description: Fix issue by number +argument-hint: [issue-number] +--- + +Fix issue #$1... +``` + +**Multi-argument:** +```yaml +--- +description: Deploy to environment +argument-hint: [app-name] [environment] [version] +--- + +Deploy $1 to $2 using version $3... +``` + +**With options:** +```yaml +--- +description: Run tests with options +argument-hint: [test-pattern] [options] +--- + +Run tests matching $1 with options: $2 +``` + +### disable-model-invocation + +**Type:** Boolean +**Required:** No +**Default:** false + +**Purpose:** Prevent SlashCommand tool from programmatically invoking command + +**Examples:** +```yaml +disable-model-invocation: true +``` + +**When to use:** + +1. **Manual-only commands:** Commands requiring user judgment + ```yaml + --- + description: Approve deployment to production + disable-model-invocation: true + --- + ``` + +2. **Destructive operations:** Commands with irreversible effects + ```yaml + --- + description: Delete all test data + disable-model-invocation: true + --- + ``` + +3. **Interactive workflows:** Commands needing user input + ```yaml + --- + description: Walk through setup wizard + disable-model-invocation: true + --- + ``` + +**Default behavior (false):** +- Command available to SlashCommand tool +- Claude can invoke programmatically +- Still available for manual invocation + +**When true:** +- Command only invokable by user typing `/command` +- Not available to SlashCommand tool +- Safer for sensitive operations + +**Best practices:** +- Use sparingly (limits Claude's autonomy) +- Document why in command comments +- Consider if command should exist if always manual + +## Complete Examples + +### Minimal Command + +No frontmatter needed: + +```markdown +Review this code for common issues and suggest improvements. +``` + +### Simple Command + +Just description: + +```markdown +--- +description: Review code for issues +--- + +Review this code for common issues and suggest improvements. +``` + +### Standard Command + +Description and tools: + +```markdown +--- +description: Review Git changes +allowed-tools: Bash(git:*), Read +--- + +Current changes: !`git diff --name-only` + +Review each changed file for: +- Code quality +- Potential bugs +- Best practices +``` + +### Complex Command + +All common fields: + +```markdown +--- +description: Deploy application to environment +argument-hint: [app-name] [environment] [version] +allowed-tools: Bash(kubectl:*), Bash(helm:*), Read +model: sonnet +--- + +Deploy $1 to $2 environment using version $3 + +Pre-deployment checks: +- Verify $2 configuration +- Check cluster status: !`kubectl cluster-info` +- Validate version $3 exists + +Proceed with deployment following deployment runbook. +``` + +### Manual-Only Command + +Restricted invocation: + +```markdown +--- +description: Approve production deployment +argument-hint: [deployment-id] +disable-model-invocation: true +allowed-tools: Bash(gh:*) +--- + +<!-- +MANUAL APPROVAL REQUIRED +This command requires human judgment and cannot be automated. +--> + +Review deployment $1 for production approval: + +Deployment details: !`gh api /deployments/$1` + +Verify: +- All tests passed +- Security scan clean +- Stakeholder approval +- Rollback plan ready + +Type "APPROVED" to confirm deployment. +``` + +## Validation + +### Common Errors + +**Invalid YAML syntax:** +```yaml +--- +description: Missing quote +allowed-tools: Read, Write +model: sonnet +--- # ❌ Missing closing quote above +``` + +**Fix:** Validate YAML syntax + +**Incorrect tool specification:** +```yaml +allowed-tools: Bash # ❌ Missing command filter +``` + +**Fix:** Use `Bash(git:*)` format + +**Invalid model name:** +```yaml +model: gpt4 # ❌ Not a valid Claude model +``` + +**Fix:** Use `sonnet`, `opus`, or `haiku` + +### Validation Checklist + +Before committing command: +- [ ] YAML syntax valid (no errors) +- [ ] Description under 60 characters +- [ ] allowed-tools uses proper format +- [ ] model is valid value if specified +- [ ] argument-hint matches positional arguments +- [ ] disable-model-invocation used appropriately + +## Best Practices Summary + +1. **Start minimal:** Add frontmatter only when needed +2. **Document arguments:** Always use argument-hint with arguments +3. **Restrict tools:** Use most restrictive allowed-tools that works +4. **Choose right model:** Use haiku for speed, opus for complexity +5. **Manual-only sparingly:** Only use disable-model-invocation when necessary +6. **Clear descriptions:** Make commands discoverable in `/help` +7. **Test thoroughly:** Verify frontmatter works as expected diff --git a/.agents/skills/command-development/references/interactive-commands.md b/.agents/skills/command-development/references/interactive-commands.md new file mode 100644 index 0000000..e55bc38 --- /dev/null +++ b/.agents/skills/command-development/references/interactive-commands.md @@ -0,0 +1,920 @@ +# 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. diff --git a/.agents/skills/command-development/references/marketplace-considerations.md b/.agents/skills/command-development/references/marketplace-considerations.md new file mode 100644 index 0000000..03e706c --- /dev/null +++ b/.agents/skills/command-development/references/marketplace-considerations.md @@ -0,0 +1,904 @@ +# Marketplace Considerations for Commands + +Guidelines for creating commands designed for distribution and marketplace success. + +## Overview + +Commands distributed through marketplaces need additional consideration beyond personal use commands. They must work across environments, handle diverse use cases, and provide excellent user experience for unknown users. + +## Design for Distribution + +### Universal Compatibility + +**Cross-platform considerations:** + +```markdown +--- +description: Cross-platform command +allowed-tools: Bash(*) +--- + +# Platform-Aware Command + +Detecting platform... + +case "$(uname)" in + Darwin*) PLATFORM="macOS" ;; + Linux*) PLATFORM="Linux" ;; + MINGW*|MSYS*|CYGWIN*) PLATFORM="Windows" ;; + *) PLATFORM="Unknown" ;; +esac + +Platform: $PLATFORM + +<!-- Adjust behavior based on platform --> +if [ "$PLATFORM" = "Windows" ]; then + # Windows-specific handling + PATH_SEP="\\" + NULL_DEVICE="NUL" +else + # Unix-like handling + PATH_SEP="/" + NULL_DEVICE="/dev/null" +fi + +[Platform-appropriate implementation...] +``` + +**Avoid platform-specific commands:** + +```markdown +<!-- BAD: macOS-specific --> +!`pbcopy < file.txt` + +<!-- GOOD: Platform detection --> +if command -v pbcopy > /dev/null; then + pbcopy < file.txt +elif command -v xclip > /dev/null; then + xclip -selection clipboard < file.txt +elif command -v clip.exe > /dev/null; then + cat file.txt | clip.exe +else + echo "Clipboard not available on this platform" +fi +``` + +### Minimal Dependencies + +**Check for required tools:** + +```markdown +--- +description: Dependency-aware command +allowed-tools: Bash(*) +--- + +# Check Dependencies + +Required tools: +- git +- jq +- node + +Checking availability... + +MISSING_DEPS="" + +for tool in git jq node; do + if ! command -v $tool > /dev/null; then + MISSING_DEPS="$MISSING_DEPS $tool" + fi +done + +if [ -n "$MISSING_DEPS" ]; then + ❌ ERROR: Missing required dependencies:$MISSING_DEPS + + INSTALLATION: + - git: https://git-scm.com/downloads + - jq: https://stedolan.github.io/jq/download/ + - node: https://nodejs.org/ + + Install missing tools and try again. + + Exit. +fi + +✓ All dependencies available + +[Continue with command...] +``` + +**Document optional dependencies:** + +```markdown +<!-- +DEPENDENCIES: + Required: + - git 2.0+: Version control + - jq 1.6+: JSON processing + + Optional: + - gh: GitHub CLI (for PR operations) + - docker: Container operations (for containerized tests) + + Feature availability depends on installed tools. +--> +``` + +### Graceful Degradation + +**Handle missing features:** + +```markdown +--- +description: Feature-aware command +--- + +# Feature Detection + +Detecting available features... + +FEATURES="" + +if command -v gh > /dev/null; then + FEATURES="$FEATURES github" +fi + +if command -v docker > /dev/null; then + FEATURES="$FEATURES docker" +fi + +Available features: $FEATURES + +if echo "$FEATURES" | grep -q "github"; then + # Full functionality with GitHub integration + echo "✓ GitHub integration available" +else + # Reduced functionality without GitHub + echo "⚠ Limited functionality: GitHub CLI not installed" + echo " Install 'gh' for full features" +fi + +[Adapt behavior based on available features...] +``` + +## User Experience for Unknown Users + +### Clear Onboarding + +**First-run experience:** + +```markdown +--- +description: Command with onboarding +allowed-tools: Read, Write +--- + +# First Run Check + +if [ ! -f ".claude/command-initialized" ]; then + **Welcome to Command Name!** + + This appears to be your first time using this command. + + WHAT THIS COMMAND DOES: + [Brief explanation of purpose and benefits] + + QUICK START: + 1. Basic usage: /command [arg] + 2. For help: /command help + 3. Examples: /command examples + + SETUP: + No additional setup required. You're ready to go! + + ✓ Initialization complete + + [Create initialization marker] + + Ready to proceed with your request... +fi + +[Normal command execution...] +``` + +**Progressive feature discovery:** + +```markdown +--- +description: Command with tips +--- + +# Command Execution + +[Main functionality...] + +--- + +💡 TIP: Did you know? + +You can speed up this command with the --fast flag: + /command --fast [args] + +For more tips: /command tips +``` + +### Comprehensive Error Handling + +**Anticipate user mistakes:** + +```markdown +--- +description: Forgiving command +--- + +# User Input Handling + +Argument: "$1" + +<!-- Check for common typos --> +if [ "$1" = "hlep" ] || [ "$1" = "hepl" ]; then + Did you mean: help? + + Showing help instead... + [Display help] + + Exit. +fi + +<!-- Suggest similar commands if not found --> +if [ "$1" != "valid-option1" ] && [ "$1" != "valid-option2" ]; then + ❌ Unknown option: $1 + + Did you mean: + - valid-option1 (most similar) + - valid-option2 + + For all options: /command help + + Exit. +fi + +[Command continues...] +``` + +**Helpful diagnostics:** + +```markdown +--- +description: Diagnostic command +--- + +# Operation Failed + +The operation could not complete. + +**Diagnostic Information:** + +Environment: +- Platform: $(uname) +- Shell: $SHELL +- Working directory: $(pwd) +- Command: /command $@ + +Checking common issues: +- Git repository: $(git rev-parse --git-dir 2>&1) +- Write permissions: $(test -w . && echo "OK" || echo "DENIED") +- Required files: $(test -f config.yml && echo "Found" || echo "Missing") + +This information helps debug the issue. + +For support, include the above diagnostics. +``` + +## Distribution Best Practices + +### Namespace Awareness + +**Avoid name collisions:** + +```markdown +--- +description: Namespaced command +--- + +<!-- +COMMAND NAME: plugin-name-command + +This command is namespaced with the plugin name to avoid +conflicts with commands from other plugins. + +Alternative naming approaches: +- Use plugin prefix: /plugin-command +- Use category: /category-command +- Use verb-noun: /verb-noun + +Chosen approach: plugin-name prefix +Reasoning: Clearest ownership, least likely to conflict +--> + +# Plugin Name Command + +[Implementation...] +``` + +**Document naming rationale:** + +```markdown +<!-- +NAMING DECISION: + +Command name: /deploy-app + +Alternatives considered: +- /deploy: Too generic, likely conflicts +- /app-deploy: Less intuitive ordering +- /my-plugin-deploy: Too verbose + +Final choice balances: +- Discoverability (clear purpose) +- Brevity (easy to type) +- Uniqueness (unlikely conflicts) +--> +``` + +### Configurability + +**User preferences:** + +```markdown +--- +description: Configurable command +allowed-tools: Read +--- + +# Load User Configuration + +Default configuration: +- verbose: false +- color: true +- max_results: 10 + +Checking for user config: .claude/plugin-name.local.md + +if [ -f ".claude/plugin-name.local.md" ]; then + # Parse YAML frontmatter for settings + VERBOSE=$(grep "^verbose:" .claude/plugin-name.local.md | cut -d: -f2 | tr -d ' ') + COLOR=$(grep "^color:" .claude/plugin-name.local.md | cut -d: -f2 | tr -d ' ') + MAX_RESULTS=$(grep "^max_results:" .claude/plugin-name.local.md | cut -d: -f2 | tr -d ' ') + + echo "✓ Using user configuration" +else + echo "Using default configuration" + echo "Create .claude/plugin-name.local.md to customize" +fi + +[Use configuration in command...] +``` + +**Sensible defaults:** + +```markdown +--- +description: Command with smart defaults +--- + +# Smart Defaults + +Configuration: +- Format: ${FORMAT:-json} # Defaults to json +- Output: ${OUTPUT:-stdout} # Defaults to stdout +- Verbose: ${VERBOSE:-false} # Defaults to false + +These defaults work for 80% of use cases. + +Override with arguments: + /command --format yaml --output file.txt --verbose + +Or set in .claude/plugin-name.local.md: +\`\`\`yaml +--- +format: yaml +output: custom.txt +verbose: true +--- +\`\`\` +``` + +### Version Compatibility + +**Version checking:** + +```markdown +--- +description: Version-aware command +--- + +<!-- +COMMAND VERSION: 2.1.0 + +COMPATIBILITY: +- Requires plugin version: >= 2.0.0 +- Breaking changes from v1.x documented in MIGRATION.md + +VERSION HISTORY: +- v2.1.0: Added --new-feature flag +- v2.0.0: BREAKING: Changed argument order +- v1.0.0: Initial release +--> + +# Version Check + +Command version: 2.1.0 +Plugin version: [detect from plugin.json] + +if [ "$PLUGIN_VERSION" < "2.0.0" ]; then + ❌ ERROR: Incompatible plugin version + + This command requires plugin version >= 2.0.0 + Current version: $PLUGIN_VERSION + + Update plugin: + /plugin update plugin-name + + Exit. +fi + +✓ Version compatible + +[Command continues...] +``` + +**Deprecation warnings:** + +```markdown +--- +description: Command with deprecation warnings +--- + +# Deprecation Check + +if [ "$1" = "--old-flag" ]; then + ⚠️ DEPRECATION WARNING + + The --old-flag option is deprecated as of v2.0.0 + It will be removed in v3.0.0 (est. June 2025) + + Use instead: --new-flag + + Example: + Old: /command --old-flag value + New: /command --new-flag value + + See migration guide: /command migrate + + Continuing with deprecated behavior for now... +fi + +[Handle both old and new flags during deprecation period...] +``` + +## Marketplace Presentation + +### Command Discovery + +**Descriptive naming:** + +```markdown +--- +description: Review pull request with security and quality checks +--- + +<!-- GOOD: Descriptive name and description --> +``` + +```markdown +--- +description: Do the thing +--- + +<!-- BAD: Vague description --> +``` + +**Searchable keywords:** + +```markdown +<!-- +KEYWORDS: security, code-review, quality, validation, audit + +These keywords help users discover this command when searching +for related functionality in the marketplace. +--> +``` + +### Showcase Examples + +**Compelling demonstrations:** + +```markdown +--- +description: Advanced code analysis command +--- + +# Code Analysis Command + +This command performs deep code analysis with actionable insights. + +## Demo: Quick Security Audit + +Try it now: +\`\`\` +/analyze-code src/ --security +\`\`\` + +**What you'll get:** +- Security vulnerability detection +- Code quality metrics +- Performance bottleneck identification +- Actionable recommendations + +**Sample output:** +\`\`\` +Security Analysis Results +========================= + +🔴 Critical (2): + - SQL injection risk in users.js:45 + - XSS vulnerability in display.js:23 + +🟡 Warnings (5): + - Unvalidated input in api.js:67 + ... + +Recommendations: +1. Fix critical issues immediately +2. Review warnings before next release +3. Run /analyze-code --fix for auto-fixes +\`\`\` + +--- + +Ready to analyze your code... + +[Command implementation...] +``` + +### User Reviews and Feedback + +**Feedback mechanism:** + +```markdown +--- +description: Command with feedback +--- + +# Command Complete + +[Command results...] + +--- + +**How was your experience?** + +This helps improve the command for everyone. + +Rate this command: +- 👍 Helpful +- 👎 Not helpful +- 🐛 Found a bug +- 💡 Have a suggestion + +Reply with an emoji or: +- /command feedback + +Your feedback matters! +``` + +**Usage analytics preparation:** + +```markdown +<!-- +ANALYTICS NOTES: + +Track for improvement: +- Most common arguments +- Failure rates +- Average execution time +- User satisfaction scores + +Privacy-preserving: +- No personally identifiable information +- Aggregate statistics only +- User opt-out respected +--> +``` + +## Quality Standards + +### Professional Polish + +**Consistent branding:** + +```markdown +--- +description: Branded command +--- + +# ✨ Command Name + +Part of the [Plugin Name] suite + +[Command functionality...] + +--- + +**Need Help?** +- Documentation: https://docs.example.com +- Support: support@example.com +- Community: https://community.example.com + +Powered by Plugin Name v2.1.0 +``` + +**Attention to detail:** + +```markdown +<!-- Details that matter --> + +✓ Use proper emoji/symbols consistently +✓ Align output columns neatly +✓ Format numbers with thousands separators +✓ Use color/formatting appropriately +✓ Provide progress indicators +✓ Show estimated time remaining +✓ Confirm successful operations +``` + +### Reliability + +**Idempotency:** + +```markdown +--- +description: Idempotent command +--- + +# Safe Repeated Execution + +Checking if operation already completed... + +if [ -f ".claude/operation-completed.flag" ]; then + ℹ️ Operation already completed + + Completed at: $(cat .claude/operation-completed.flag) + + To re-run: + 1. Remove flag: rm .claude/operation-completed.flag + 2. Run command again + + Otherwise, no action needed. + + Exit. +fi + +Performing operation... + +[Safe, repeatable operation...] + +Marking complete... +echo "$(date)" > .claude/operation-completed.flag +``` + +**Atomic operations:** + +```markdown +--- +description: Atomic command +--- + +# Atomic Operation + +This operation is atomic - either fully succeeds or fully fails. + +Creating temporary workspace... +TEMP_DIR=$(mktemp -d) + +Performing changes in isolated environment... +[Make changes in $TEMP_DIR] + +if [ $? -eq 0 ]; then + ✓ Changes validated + + Applying changes atomically... + mv $TEMP_DIR/* ./target/ + + ✓ Operation complete +else + ❌ Changes failed validation + + Rolling back... + rm -rf $TEMP_DIR + + No changes applied. Safe to retry. +fi +``` + +## Testing for Distribution + +### Pre-Release Checklist + +```markdown +<!-- +PRE-RELEASE CHECKLIST: + +Functionality: +- [ ] Works on macOS +- [ ] Works on Linux +- [ ] Works on Windows (WSL) +- [ ] All arguments tested +- [ ] Error cases handled +- [ ] Edge cases covered + +User Experience: +- [ ] Clear description +- [ ] Helpful error messages +- [ ] Examples provided +- [ ] First-run experience good +- [ ] Documentation complete + +Distribution: +- [ ] No hardcoded paths +- [ ] Dependencies documented +- [ ] Configuration options clear +- [ ] Version number set +- [ ] Changelog updated + +Quality: +- [ ] No TODO comments +- [ ] No debug code +- [ ] Performance acceptable +- [ ] Security reviewed +- [ ] Privacy considered + +Support: +- [ ] README complete +- [ ] Troubleshooting guide +- [ ] Support contact provided +- [ ] Feedback mechanism +- [ ] License specified +--> +``` + +### Beta Testing + +**Beta release approach:** + +```markdown +--- +description: Beta command (v0.9.0) +--- + +# 🧪 Beta Command + +**This is a beta release** + +Features may change based on feedback. + +BETA STATUS: +- Version: 0.9.0 +- Stability: Experimental +- Support: Limited +- Feedback: Encouraged + +Known limitations: +- Performance not optimized +- Some edge cases not handled +- Documentation incomplete + +Help improve this command: +- Report issues: /command report-issue +- Suggest features: /command suggest +- Join beta testers: /command join-beta + +--- + +[Command implementation...] + +--- + +**Thank you for beta testing!** + +Your feedback helps make this command better. +``` + +## Maintenance and Updates + +### Update Strategy + +**Versioned commands:** + +```markdown +<!-- +VERSION STRATEGY: + +Major (X.0.0): Breaking changes +- Document all breaking changes +- Provide migration guide +- Support old version briefly + +Minor (x.Y.0): New features +- Backward compatible +- Announce new features +- Update examples + +Patch (x.y.Z): Bug fixes +- No user-facing changes +- Update changelog +- Security fixes prioritized + +Release schedule: +- Patches: As needed +- Minors: Monthly +- Majors: Annually or as needed +--> +``` + +**Update notifications:** + +```markdown +--- +description: Update-aware command +--- + +# Check for Updates + +Current version: 2.1.0 +Latest version: [check if available] + +if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then + 📢 UPDATE AVAILABLE + + New version: $LATEST_VERSION + Current: $CURRENT_VERSION + + What's new: + - Feature improvements + - Bug fixes + - Performance enhancements + + Update with: + /plugin update plugin-name + + Release notes: https://releases.example.com/v$LATEST_VERSION +fi + +[Command continues...] +``` + +## Best Practices Summary + +### Distribution Design + +1. **Universal**: Works across platforms and environments +2. **Self-contained**: Minimal dependencies, clear requirements +3. **Graceful**: Degrades gracefully when features unavailable +4. **Forgiving**: Anticipates and handles user mistakes +5. **Helpful**: Clear errors, good defaults, excellent docs + +### Marketplace Success + +1. **Discoverable**: Clear name, good description, searchable keywords +2. **Professional**: Polished presentation, consistent branding +3. **Reliable**: Tested thoroughly, handles edge cases +4. **Maintainable**: Versioned, updated regularly, supported +5. **User-focused**: Great UX, responsive to feedback + +### Quality Standards + +1. **Complete**: Fully documented, all features working +2. **Tested**: Works in real environments, edge cases handled +3. **Secure**: No vulnerabilities, safe operations +4. **Performant**: Reasonable speed, resource-efficient +5. **Ethical**: Privacy-respecting, user consent + +With these considerations, commands become marketplace-ready and delight users across diverse environments and use cases. diff --git a/.agents/skills/command-development/references/plugin-features-reference.md b/.agents/skills/command-development/references/plugin-features-reference.md new file mode 100644 index 0000000..c89e906 --- /dev/null +++ b/.agents/skills/command-development/references/plugin-features-reference.md @@ -0,0 +1,609 @@ +# Plugin-Specific Command Features Reference + +This reference covers features and patterns specific to commands bundled in Claude Code plugins. + +## Table of Contents + +- [Plugin Command Discovery](#plugin-command-discovery) +- [CLAUDE_PLUGIN_ROOT Environment Variable](#claude_plugin_root-environment-variable) +- [Plugin Command Patterns](#plugin-command-patterns) +- [Integration with Plugin Components](#integration-with-plugin-components) +- [Validation Patterns](#validation-patterns) + +## Plugin Command Discovery + +### Auto-Discovery + +Claude Code automatically discovers commands in plugins using the following locations: + +``` +plugin-name/ +├── commands/ # Auto-discovered commands +│ ├── foo.md # /foo (plugin:plugin-name) +│ └── bar.md # /bar (plugin:plugin-name) +└── plugin.json # Plugin manifest +``` + +**Key points:** +- Commands are discovered at plugin load time +- No manual registration required +- Commands appear in `/help` with "(plugin:plugin-name)" label +- Subdirectories create namespaces + +### Namespaced Plugin Commands + +Organize commands in subdirectories for logical grouping: + +``` +plugin-name/ +└── commands/ + ├── review/ + │ ├── security.md # /security (plugin:plugin-name:review) + │ └── style.md # /style (plugin:plugin-name:review) + └── deploy/ + ├── staging.md # /staging (plugin:plugin-name:deploy) + └── prod.md # /prod (plugin:plugin-name:deploy) +``` + +**Namespace behavior:** +- Subdirectory name becomes namespace +- Shown as "(plugin:plugin-name:namespace)" in `/help` +- Helps organize related commands +- Use when plugin has 5+ commands + +### Command Naming Conventions + +**Plugin command names should:** +1. Be descriptive and action-oriented +2. Avoid conflicts with common command names +3. Use hyphens for multi-word names +4. Consider prefixing with plugin name for uniqueness + +**Examples:** +``` +Good: +- /mylyn-sync (plugin-specific prefix) +- /analyze-performance (descriptive action) +- /docker-compose-up (clear purpose) + +Avoid: +- /test (conflicts with common name) +- /run (too generic) +- /do-stuff (not descriptive) +``` + +## CLAUDE_PLUGIN_ROOT Environment Variable + +### Purpose + +`${CLAUDE_PLUGIN_ROOT}` is a special environment variable available in plugin commands that resolves to the absolute path of the plugin directory. + +**Why it matters:** +- Enables portable paths within plugin +- Allows referencing plugin files and scripts +- Works across different installations +- Essential for multi-file plugin operations + +### Basic Usage + +Reference files within your plugin: + +```markdown +--- +description: Analyze using plugin script +allowed-tools: Bash(node:*), Read +--- + +Run analysis: !`node ${CLAUDE_PLUGIN_ROOT}/scripts/analyze.js` + +Read template: @${CLAUDE_PLUGIN_ROOT}/templates/report.md +``` + +**Expands to:** +``` +Run analysis: !`node /path/to/plugins/plugin-name/scripts/analyze.js` + +Read template: @/path/to/plugins/plugin-name/templates/report.md +``` + +### Common Patterns + +#### 1. Executing Plugin Scripts + +```markdown +--- +description: Run custom linter from plugin +allowed-tools: Bash(node:*) +--- + +Lint results: !`node ${CLAUDE_PLUGIN_ROOT}/bin/lint.js $1` + +Review the linting output and suggest fixes. +``` + +#### 2. Loading Configuration Files + +```markdown +--- +description: Deploy using plugin configuration +allowed-tools: Read, Bash(*) +--- + +Configuration: @${CLAUDE_PLUGIN_ROOT}/config/deploy-config.json + +Deploy application using the configuration above for $1 environment. +``` + +#### 3. Accessing Plugin Resources + +```markdown +--- +description: Generate report from template +--- + +Use this template: @${CLAUDE_PLUGIN_ROOT}/templates/api-report.md + +Generate a report for @$1 following the template format. +``` + +#### 4. Multi-Step Plugin Workflows + +```markdown +--- +description: Complete plugin workflow +allowed-tools: Bash(*), Read +--- + +Step 1 - Prepare: !`bash ${CLAUDE_PLUGIN_ROOT}/scripts/prepare.sh $1` +Step 2 - Config: @${CLAUDE_PLUGIN_ROOT}/config/$1.json +Step 3 - Execute: !`${CLAUDE_PLUGIN_ROOT}/bin/execute $1` + +Review results and report status. +``` + +### Best Practices + +1. **Always use for plugin-internal paths:** + ```markdown + # Good + @${CLAUDE_PLUGIN_ROOT}/templates/foo.md + + # Bad + @./templates/foo.md # Relative to current directory, not plugin + ``` + +2. **Validate file existence:** + ```markdown + --- + description: Use plugin config if exists + allowed-tools: Bash(test:*), Read + --- + + !`test -f ${CLAUDE_PLUGIN_ROOT}/config.json && echo "exists" || echo "missing"` + + If config exists, load it: @${CLAUDE_PLUGIN_ROOT}/config.json + Otherwise, use defaults... + ``` + +3. **Document plugin file structure:** + ```markdown + <!-- + Plugin structure: + ${CLAUDE_PLUGIN_ROOT}/ + ├── scripts/analyze.js (analysis script) + ├── templates/ (report templates) + └── config/ (configuration files) + --> + ``` + +4. **Combine with arguments:** + ```markdown + Run: !`${CLAUDE_PLUGIN_ROOT}/bin/process.sh $1 $2` + ``` + +### Troubleshooting + +**Variable not expanding:** +- Ensure command is loaded from plugin +- Check bash execution is allowed +- Verify syntax is exact: `${CLAUDE_PLUGIN_ROOT}` + +**File not found errors:** +- Verify file exists in plugin directory +- Check file path is correct relative to plugin root +- Ensure file permissions allow reading/execution + +**Path with spaces:** +- Bash commands automatically handle spaces +- File references work with spaces in paths +- No special quoting needed + +## Plugin Command Patterns + +### Pattern 1: Configuration-Based Commands + +Commands that load plugin-specific configuration: + +```markdown +--- +description: Deploy using plugin settings +allowed-tools: Read, Bash(*) +--- + +Load configuration: @${CLAUDE_PLUGIN_ROOT}/deploy-config.json + +Deploy to $1 environment using: +1. Configuration settings above +2. Current git branch: !`git branch --show-current` +3. Application version: !`cat package.json | grep version` + +Execute deployment and monitor progress. +``` + +**When to use:** Commands that need consistent settings across invocations + +### Pattern 2: Template-Based Generation + +Commands that use plugin templates: + +```markdown +--- +description: Generate documentation from template +argument-hint: [component-name] +--- + +Template: @${CLAUDE_PLUGIN_ROOT}/templates/component-docs.md + +Generate documentation for $1 component following the template structure. +Include: +- Component purpose and usage +- API reference +- Examples +- Testing guidelines +``` + +**When to use:** Standardized output generation + +### Pattern 3: Multi-Script Workflow + +Commands that orchestrate multiple plugin scripts: + +```markdown +--- +description: Complete build and test workflow +allowed-tools: Bash(*) +--- + +Build: !`bash ${CLAUDE_PLUGIN_ROOT}/scripts/build.sh` +Validate: !`bash ${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh` +Test: !`bash ${CLAUDE_PLUGIN_ROOT}/scripts/test.sh` + +Review all outputs and report: +1. Build status +2. Validation results +3. Test results +4. Recommended next steps +``` + +**When to use:** Complex plugin workflows with multiple steps + +### Pattern 4: Environment-Aware Commands + +Commands that adapt to environment: + +```markdown +--- +description: Deploy based on environment +argument-hint: [dev|staging|prod] +--- + +Environment config: @${CLAUDE_PLUGIN_ROOT}/config/$1.json + +Environment check: !`echo "Deploying to: $1"` + +Deploy application using $1 environment configuration. +Verify deployment and run smoke tests. +``` + +**When to use:** Commands that behave differently per environment + +### Pattern 5: Plugin Data Management + +Commands that manage plugin-specific data: + +```markdown +--- +description: Save analysis results to plugin cache +allowed-tools: Bash(*), Read, Write +--- + +Cache directory: ${CLAUDE_PLUGIN_ROOT}/cache/ + +Analyze @$1 and save results to cache: +!`mkdir -p ${CLAUDE_PLUGIN_ROOT}/cache && date > ${CLAUDE_PLUGIN_ROOT}/cache/last-run.txt` + +Store analysis for future reference and comparison. +``` + +**When to use:** Commands that need persistent data storage + +## Integration with Plugin Components + +### Invoking Plugin Agents + +Commands can trigger plugin agents using the Task tool: + +```markdown +--- +description: Deep analysis using plugin agent +argument-hint: [file-path] +--- + +Initiate deep code analysis of @$1 using the code-analyzer agent. + +The agent will: +1. Analyze code structure +2. Identify patterns +3. Suggest improvements +4. Generate detailed report + +Note: This uses the Task tool to launch the plugin's code-analyzer agent. +``` + +**Key points:** +- Agent must be defined in plugin's `agents/` directory +- Claude will automatically use Task tool to launch agent +- Agent has access to same plugin resources + +### Invoking Plugin Skills + +Commands can reference plugin skills for specialized knowledge: + +```markdown +--- +description: API documentation with best practices +argument-hint: [api-file] +--- + +Document the API in @$1 following our API documentation standards. + +Use the api-docs-standards skill to ensure documentation includes: +- Endpoint descriptions +- Parameter specifications +- Response formats +- Error codes +- Usage examples + +Note: This leverages the plugin's api-docs-standards skill for consistency. +``` + +**Key points:** +- Skill must be defined in plugin's `skills/` directory +- Mention skill by name to hint Claude should invoke it +- Skills provide specialized domain knowledge + +### Coordinating with Plugin Hooks + +Commands can be designed to work with plugin hooks: + +```markdown +--- +description: Commit with pre-commit validation +allowed-tools: Bash(git:*) +--- + +Stage changes: !\`git add $1\` + +Commit changes: !\`git commit -m "$2"\` + +Note: This commit will trigger the plugin's pre-commit hook for validation. +Review hook output for any issues. +``` + +**Key points:** +- Hooks execute automatically on events +- Commands can prepare state for hooks +- Document hook interaction in command + +### Multi-Component Plugin Commands + +Commands that coordinate multiple plugin components: + +```markdown +--- +description: Comprehensive code review workflow +argument-hint: [file-path] +--- + +File to review: @$1 + +Execute comprehensive review: + +1. **Static Analysis** (via plugin scripts) + !`node ${CLAUDE_PLUGIN_ROOT}/scripts/lint.js $1` + +2. **Deep Review** (via plugin agent) + Launch the code-reviewer agent for detailed analysis. + +3. **Best Practices** (via plugin skill) + Use the code-standards skill to ensure compliance. + +4. **Documentation** (via plugin template) + Template: @${CLAUDE_PLUGIN_ROOT}/templates/review-report.md + +Generate final report combining all outputs. +``` + +**When to use:** Complex workflows leveraging multiple plugin capabilities + +## Validation Patterns + +### Input Validation + +Commands should validate inputs before processing: + +```markdown +--- +description: Deploy to environment with validation +argument-hint: [environment] +--- + +Validate environment: !`echo "$1" | grep -E "^(dev|staging|prod)$" || echo "INVALID"` + +$IF($1 in [dev, staging, prod], + Deploy to $1 environment using validated configuration, + ERROR: Invalid environment '$1'. Must be one of: dev, staging, prod +) +``` + +**Validation approaches:** +1. Bash validation using grep/test +2. Inline validation in prompt +3. Script-based validation + +### File Existence Checks + +Verify required files exist: + +```markdown +--- +description: Process configuration file +argument-hint: [config-file] +--- + +Check file: !`test -f $1 && echo "EXISTS" || echo "MISSING"` + +Process configuration if file exists: @$1 + +If file doesn't exist, explain: +- Expected location +- Required format +- How to create it +``` + +### Required Arguments + +Validate required arguments provided: + +```markdown +--- +description: Create deployment with version +argument-hint: [environment] [version] +--- + +Validate inputs: !`test -n "$1" -a -n "$2" && echo "OK" || echo "MISSING"` + +$IF($1 AND $2, + Deploy version $2 to $1 environment, + ERROR: Both environment and version required. Usage: /deploy [env] [version] +) +``` + +### Plugin Resource Validation + +Verify plugin resources available: + +```markdown +--- +description: Run analysis with plugin tools +allowed-tools: Bash(test:*) +--- + +Validate plugin setup: +- Config exists: !`test -f ${CLAUDE_PLUGIN_ROOT}/config.json && echo "✓" || echo "✗"` +- Scripts exist: !`test -d ${CLAUDE_PLUGIN_ROOT}/scripts && echo "✓" || echo "✗"` +- Tools available: !`test -x ${CLAUDE_PLUGIN_ROOT}/bin/analyze && echo "✓" || echo "✗"` + +If all checks pass, proceed with analysis. +Otherwise, report missing components and installation steps. +``` + +### Output Validation + +Validate command execution results: + +```markdown +--- +description: Build and validate output +allowed-tools: Bash(*) +--- + +Build: !`bash ${CLAUDE_PLUGIN_ROOT}/scripts/build.sh` + +Validate output: +- Exit code: !`echo $?` +- Output exists: !`test -d dist && echo "✓" || echo "✗"` +- File count: !`find dist -type f | wc -l` + +Report build status and any validation failures. +``` + +### Graceful Error Handling + +Handle errors gracefully with helpful messages: + +```markdown +--- +description: Process file with error handling +argument-hint: [file-path] +--- + +Try processing: !`node ${CLAUDE_PLUGIN_ROOT}/scripts/process.js $1 2>&1 || echo "ERROR: $?"` + +If processing succeeded: +- Report results +- Suggest next steps + +If processing failed: +- Explain likely causes +- Provide troubleshooting steps +- Suggest alternative approaches +``` + +## Best Practices Summary + +### Plugin Commands Should: + +1. **Use ${CLAUDE_PLUGIN_ROOT} for all plugin-internal paths** + - Scripts, templates, configuration, resources + +2. **Validate inputs early** + - Check required arguments + - Verify file existence + - Validate argument formats + +3. **Document plugin structure** + - Explain required files + - Document script purposes + - Clarify dependencies + +4. **Integrate with plugin components** + - Reference agents for complex tasks + - Use skills for specialized knowledge + - Coordinate with hooks when relevant + +5. **Provide helpful error messages** + - Explain what went wrong + - Suggest how to fix + - Offer alternatives + +6. **Handle edge cases** + - Missing files + - Invalid arguments + - Failed script execution + - Missing dependencies + +7. **Keep commands focused** + - One clear purpose per command + - Delegate complex logic to scripts + - Use agents for multi-step workflows + +8. **Test across installations** + - Verify paths work everywhere + - Test with different arguments + - Validate error cases + +--- + +For general command development, see main SKILL.md. +For command examples, see examples/ directory. diff --git a/.agents/skills/command-development/references/testing-strategies.md b/.agents/skills/command-development/references/testing-strategies.md new file mode 100644 index 0000000..7b482fb --- /dev/null +++ b/.agents/skills/command-development/references/testing-strategies.md @@ -0,0 +1,702 @@ +# Command Testing Strategies + +Comprehensive strategies for testing slash commands before deployment and distribution. + +## Overview + +Testing commands ensures they work correctly, handle edge cases, and provide good user experience. A systematic testing approach catches issues early and builds confidence in command reliability. + +## Testing Levels + +### Level 1: Syntax and Structure Validation + +**What to test:** +- YAML frontmatter syntax +- Markdown format +- File location and naming + +**How to test:** + +```bash +# Validate YAML frontmatter +head -n 20 .claude/commands/my-command.md | grep -A 10 "^---" + +# Check for closing frontmatter marker +head -n 20 .claude/commands/my-command.md | grep -c "^---" # Should be 2 + +# Verify file has .md extension +ls .claude/commands/*.md + +# Check file is in correct location +test -f .claude/commands/my-command.md && echo "Found" || echo "Missing" +``` + +**Automated validation script:** + +```bash +#!/bin/bash +# validate-command.sh + +COMMAND_FILE="$1" + +if [ ! -f "$COMMAND_FILE" ]; then + echo "ERROR: File not found: $COMMAND_FILE" + exit 1 +fi + +# Check .md extension +if [[ ! "$COMMAND_FILE" =~ \.md$ ]]; then + echo "ERROR: File must have .md extension" + exit 1 +fi + +# Validate YAML frontmatter if present +if head -n 1 "$COMMAND_FILE" | grep -q "^---"; then + # Count frontmatter markers + MARKERS=$(head -n 50 "$COMMAND_FILE" | grep -c "^---") + if [ "$MARKERS" -ne 2 ]; then + echo "ERROR: Invalid YAML frontmatter (need exactly 2 '---' markers)" + exit 1 + fi + echo "✓ YAML frontmatter syntax valid" +fi + +# Check for empty file +if [ ! -s "$COMMAND_FILE" ]; then + echo "ERROR: File is empty" + exit 1 +fi + +echo "✓ Command file structure valid" +``` + +### Level 2: Frontmatter Field Validation + +**What to test:** +- Field types correct +- Values in valid ranges +- Required fields present (if any) + +**Validation script:** + +```bash +#!/bin/bash +# validate-frontmatter.sh + +COMMAND_FILE="$1" + +# Extract YAML frontmatter +FRONTMATTER=$(sed -n '/^---$/,/^---$/p' "$COMMAND_FILE" | sed '1d;$d') + +if [ -z "$FRONTMATTER" ]; then + echo "No frontmatter to validate" + exit 0 +fi + +# Check 'model' field if present +if echo "$FRONTMATTER" | grep -q "^model:"; then + MODEL=$(echo "$FRONTMATTER" | grep "^model:" | cut -d: -f2 | tr -d ' ') + if ! echo "sonnet opus haiku" | grep -qw "$MODEL"; then + echo "ERROR: Invalid model '$MODEL' (must be sonnet, opus, or haiku)" + exit 1 + fi + echo "✓ Model field valid: $MODEL" +fi + +# Check 'allowed-tools' field format +if echo "$FRONTMATTER" | grep -q "^allowed-tools:"; then + echo "✓ allowed-tools field present" + # Could add more sophisticated validation here +fi + +# Check 'description' length +if echo "$FRONTMATTER" | grep -q "^description:"; then + DESC=$(echo "$FRONTMATTER" | grep "^description:" | cut -d: -f2-) + LENGTH=${#DESC} + if [ "$LENGTH" -gt 80 ]; then + echo "WARNING: Description length $LENGTH (recommend < 60 chars)" + else + echo "✓ Description length acceptable: $LENGTH chars" + fi +fi + +echo "✓ Frontmatter fields valid" +``` + +### Level 3: Manual Command Invocation + +**What to test:** +- Command appears in `/help` +- Command executes without errors +- Output is as expected + +**Test procedure:** + +```bash +# 1. Start Claude Code +claude --debug + +# 2. Check command appears in help +> /help +# Look for your command in the list + +# 3. Invoke command without arguments +> /my-command +# Check for reasonable error or behavior + +# 4. Invoke with valid arguments +> /my-command arg1 arg2 +# Verify expected behavior + +# 5. Check debug logs +tail -f ~/.claude/debug-logs/latest +# Look for errors or warnings +``` + +### Level 4: Argument Testing + +**What to test:** +- Positional arguments work ($1, $2, etc.) +- $ARGUMENTS captures all arguments +- Missing arguments handled gracefully +- Invalid arguments detected + +**Test matrix:** + +| Test Case | Command | Expected Result | +|-----------|---------|-----------------| +| No args | `/cmd` | Graceful handling or useful message | +| One arg | `/cmd arg1` | $1 substituted correctly | +| Two args | `/cmd arg1 arg2` | $1 and $2 substituted | +| Extra args | `/cmd a b c d` | All captured or extras ignored appropriately | +| Special chars | `/cmd "arg with spaces"` | Quotes handled correctly | +| Empty arg | `/cmd ""` | Empty string handled | + +**Test script:** + +```bash +#!/bin/bash +# test-command-arguments.sh + +COMMAND="$1" + +echo "Testing argument handling for /$COMMAND" +echo + +echo "Test 1: No arguments" +echo " Command: /$COMMAND" +echo " Expected: [describe expected behavior]" +echo " Manual test required" +echo + +echo "Test 2: Single argument" +echo " Command: /$COMMAND test-value" +echo " Expected: 'test-value' appears in output" +echo " Manual test required" +echo + +echo "Test 3: Multiple arguments" +echo " Command: /$COMMAND arg1 arg2 arg3" +echo " Expected: All arguments used appropriately" +echo " Manual test required" +echo + +echo "Test 4: Special characters" +echo " Command: /$COMMAND \"value with spaces\"" +echo " Expected: Entire phrase captured" +echo " Manual test required" +``` + +### Level 5: File Reference Testing + +**What to test:** +- @ syntax loads file contents +- Non-existent files handled +- Large files handled appropriately +- Multiple file references work + +**Test procedure:** + +```bash +# Create test files +echo "Test content" > /tmp/test-file.txt +echo "Second file" > /tmp/test-file-2.txt + +# Test single file reference +> /my-command /tmp/test-file.txt +# Verify file content is read + +# Test non-existent file +> /my-command /tmp/nonexistent.txt +# Verify graceful error handling + +# Test multiple files +> /my-command /tmp/test-file.txt /tmp/test-file-2.txt +# Verify both files processed + +# Test large file +dd if=/dev/zero of=/tmp/large-file.bin bs=1M count=100 +> /my-command /tmp/large-file.bin +# Verify reasonable behavior (may truncate or warn) + +# Cleanup +rm /tmp/test-file*.txt /tmp/large-file.bin +``` + +### Level 6: Bash Execution Testing + +**What to test:** +- !` commands execute correctly +- Command output included in prompt +- Command failures handled +- Security: only allowed commands run + +**Test procedure:** + +```bash +# Create test command with bash execution +cat > .claude/commands/test-bash.md << 'EOF' +--- +description: Test bash execution +allowed-tools: Bash(echo:*), Bash(date:*) +--- + +Current date: !`date` +Test output: !`echo "Hello from bash"` + +Analysis of output above... +EOF + +# Test in Claude Code +> /test-bash +# Verify: +# 1. Date appears correctly +# 2. Echo output appears +# 3. No errors in debug logs + +# Test with disallowed command (should fail or be blocked) +cat > .claude/commands/test-forbidden.md << 'EOF' +--- +description: Test forbidden command +allowed-tools: Bash(echo:*) +--- + +Trying forbidden: !`ls -la /` +EOF + +> /test-forbidden +# Verify: Permission denied or appropriate error +``` + +### Level 7: Integration Testing + +**What to test:** +- Commands work with other plugin components +- Commands interact correctly with each other +- State management works across invocations +- Workflow commands execute in sequence + +**Test scenarios:** + +**Scenario 1: Command + Hook Integration** + +```bash +# Setup: Command that triggers a hook +# Test: Invoke command, verify hook executes + +# Command: .claude/commands/risky-operation.md +# Hook: PreToolUse that validates the operation + +> /risky-operation +# Verify: Hook executes and validates before command completes +``` + +**Scenario 2: Command Sequence** + +```bash +# Setup: Multi-command workflow +> /workflow-init +# Verify: State file created + +> /workflow-step2 +# Verify: State file read, step 2 executes + +> /workflow-complete +# Verify: State file cleaned up +``` + +**Scenario 3: Command + MCP Integration** + +```bash +# Setup: Command uses MCP tools +# Test: Verify MCP server accessible + +> /mcp-command +# Verify: +# 1. MCP server starts (if stdio) +# 2. Tool calls succeed +# 3. Results included in output +``` + +## Automated Testing Approaches + +### Command Test Suite + +Create a test suite script: + +```bash +#!/bin/bash +# test-commands.sh - Command test suite + +TEST_DIR=".claude/commands" +FAILED_TESTS=0 + +echo "Command Test Suite" +echo "==================" +echo + +for cmd_file in "$TEST_DIR"/*.md; do + cmd_name=$(basename "$cmd_file" .md) + echo "Testing: $cmd_name" + + # Validate structure + if ./validate-command.sh "$cmd_file"; then + echo " ✓ Structure valid" + else + echo " ✗ Structure invalid" + ((FAILED_TESTS++)) + fi + + # Validate frontmatter + if ./validate-frontmatter.sh "$cmd_file"; then + echo " ✓ Frontmatter valid" + else + echo " ✗ Frontmatter invalid" + ((FAILED_TESTS++)) + fi + + echo +done + +echo "==================" +echo "Tests complete" +echo "Failed: $FAILED_TESTS" + +exit $FAILED_TESTS +``` + +### Pre-Commit Hook + +Validate commands before committing: + +```bash +#!/bin/bash +# .git/hooks/pre-commit + +echo "Validating commands..." + +COMMANDS_CHANGED=$(git diff --cached --name-only | grep "\.claude/commands/.*\.md") + +if [ -z "$COMMANDS_CHANGED" ]; then + echo "No commands changed" + exit 0 +fi + +for cmd in $COMMANDS_CHANGED; do + echo "Checking: $cmd" + + if ! ./scripts/validate-command.sh "$cmd"; then + echo "ERROR: Command validation failed: $cmd" + exit 1 + fi +done + +echo "✓ All commands valid" +``` + +### Continuous Testing + +Test commands in CI/CD: + +```yaml +# .github/workflows/test-commands.yml +name: Test Commands + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Validate command structure + run: | + for cmd in .claude/commands/*.md; do + echo "Testing: $cmd" + ./scripts/validate-command.sh "$cmd" + done + + - name: Validate frontmatter + run: | + for cmd in .claude/commands/*.md; do + ./scripts/validate-frontmatter.sh "$cmd" + done + + - name: Check for TODOs + run: | + if grep -r "TODO" .claude/commands/; then + echo "ERROR: TODOs found in commands" + exit 1 + fi +``` + +## Edge Case Testing + +### Test Edge Cases + +**Empty arguments:** +```bash +> /cmd "" +> /cmd '' '' +``` + +**Special characters:** +```bash +> /cmd "arg with spaces" +> /cmd arg-with-dashes +> /cmd arg_with_underscores +> /cmd arg/with/slashes +> /cmd 'arg with "quotes"' +``` + +**Long arguments:** +```bash +> /cmd $(python -c "print('a' * 10000)") +``` + +**Unusual file paths:** +```bash +> /cmd ./file +> /cmd ../file +> /cmd ~/file +> /cmd "/path with spaces/file" +``` + +**Bash command edge cases:** +```markdown +# Commands that might fail +!`exit 1` +!`false` +!`command-that-does-not-exist` + +# Commands with special output +!`echo ""` +!`cat /dev/null` +!`yes | head -n 1000000` +``` + +## Performance Testing + +### Response Time Testing + +```bash +#!/bin/bash +# test-command-performance.sh + +COMMAND="$1" + +echo "Testing performance of /$COMMAND" +echo + +for i in {1..5}; do + echo "Run $i:" + START=$(date +%s%N) + + # Invoke command (manual step - record time) + echo " Invoke: /$COMMAND" + echo " Start time: $START" + echo " (Record end time manually)" + echo +done + +echo "Analyze results:" +echo " - Average response time" +echo " - Variance" +echo " - Acceptable threshold: < 3 seconds for fast commands" +``` + +### Resource Usage Testing + +```bash +# Monitor Claude Code during command execution +# In terminal 1: +claude --debug + +# In terminal 2: +watch -n 1 'ps aux | grep claude' + +# Execute command and observe: +# - Memory usage +# - CPU usage +# - Process count +``` + +## User Experience Testing + +### Usability Checklist + +- [ ] Command name is intuitive +- [ ] Description is clear in `/help` +- [ ] Arguments are well-documented +- [ ] Error messages are helpful +- [ ] Output is formatted readably +- [ ] Long-running commands show progress +- [ ] Results are actionable +- [ ] Edge cases have good UX + +### User Acceptance Testing + +Recruit testers: + +```markdown +# Testing Guide for Beta Testers + +## Command: /my-new-command + +### Test Scenarios + +1. **Basic usage:** + - Run: `/my-new-command` + - Expected: [describe] + - Rate clarity: 1-5 + +2. **With arguments:** + - Run: `/my-new-command arg1 arg2` + - Expected: [describe] + - Rate usefulness: 1-5 + +3. **Error case:** + - Run: `/my-new-command invalid-input` + - Expected: Helpful error message + - Rate error message: 1-5 + +### Feedback Questions + +1. Was the command easy to understand? +2. Did the output meet your expectations? +3. What would you change? +4. Would you use this command regularly? +``` + +## Testing Checklist + +Before releasing a command: + +### Structure +- [ ] File in correct location +- [ ] Correct .md extension +- [ ] Valid YAML frontmatter (if present) +- [ ] Markdown syntax correct + +### Functionality +- [ ] Command appears in `/help` +- [ ] Description is clear +- [ ] Command executes without errors +- [ ] Arguments work as expected +- [ ] File references work +- [ ] Bash execution works (if used) + +### Edge Cases +- [ ] Missing arguments handled +- [ ] Invalid arguments detected +- [ ] Non-existent files handled +- [ ] Special characters work +- [ ] Long inputs handled + +### Integration +- [ ] Works with other commands +- [ ] Works with hooks (if applicable) +- [ ] Works with MCP (if applicable) +- [ ] State management works + +### Quality +- [ ] Performance acceptable +- [ ] No security issues +- [ ] Error messages helpful +- [ ] Output formatted well +- [ ] Documentation complete + +### Distribution +- [ ] Tested by others +- [ ] Feedback incorporated +- [ ] README updated +- [ ] Examples provided + +## Debugging Failed Tests + +### Common Issues and Solutions + +**Issue: Command not appearing in /help** + +```bash +# Check file location +ls -la .claude/commands/my-command.md + +# Check permissions +chmod 644 .claude/commands/my-command.md + +# Check syntax +head -n 20 .claude/commands/my-command.md + +# Restart Claude Code +claude --debug +``` + +**Issue: Arguments not substituting** + +```bash +# Verify syntax +grep '\$1' .claude/commands/my-command.md +grep '\$ARGUMENTS' .claude/commands/my-command.md + +# Test with simple command first +echo "Test: \$1 and \$2" > .claude/commands/test-args.md +``` + +**Issue: Bash commands not executing** + +```bash +# Check allowed-tools +grep "allowed-tools" .claude/commands/my-command.md + +# Verify command syntax +grep '!\`' .claude/commands/my-command.md + +# Test command manually +date +echo "test" +``` + +**Issue: File references not working** + +```bash +# Check @ syntax +grep '@' .claude/commands/my-command.md + +# Verify file exists +ls -la /path/to/referenced/file + +# Check permissions +chmod 644 /path/to/referenced/file +``` + +## Best Practices + +1. **Test early, test often**: Validate as you develop +2. **Automate validation**: Use scripts for repeatable checks +3. **Test edge cases**: Don't just test the happy path +4. **Get feedback**: Have others test before wide release +5. **Document tests**: Keep test scenarios for regression testing +6. **Monitor in production**: Watch for issues after release +7. **Iterate**: Improve based on real usage data |
