Smithery Logo
MCPsSkillsDocsPricing
Login
Smithery Logo

Accelerating the Agent Economy

Resources

DocumentationPrivacy PolicySystem Status

Company

PricingAboutBlog

Connect

© 2026 Smithery. All rights reserved.

    pr-pm

    creating-claude-commands

    pr-pm/creating-claude-commands
    Coding
    85
    2 installs

    About

    SKILL.md

    Install

    Install via Skills CLI

    or add to your agent
    • Claude Code
      Claude Code
    • Codex
      Codex
    • OpenClaw
      OpenClaw
    • Cursor
      Cursor
    • Amp
      Amp
    • GitHub Copilot
      GitHub Copilot
    • Gemini CLI
      Gemini CLI
    • Kilo Code
      Kilo Code
    • Junie
      Junie
    • Replit
      Replit
    • Windsurf
      Windsurf
    • Cline
      Cline
    • Continue
      Continue
    • OpenCode
      OpenCode
    • OpenHands
      OpenHands
    • Roo Code
      Roo Code
    • Augment
      Augment
    • Goose
      Goose
    • Trae
      Trae
    • Zencoder
      Zencoder
    • Antigravity
      Antigravity
    ├─
    ├─
    └─

    About

    Expert guidance for creating Claude Code slash commands with correct frontmatter, structure, and best practices

    SKILL.md

    Creating Claude Code Slash Commands

    Expert guidance for creating Claude Code slash commands - quick actions triggered by /command-name.

    When to Use This Skill

    Activate this skill when:

    • User wants to create a new slash command
    • User needs to understand slash command structure
    • User asks about frontmatter fields for commands
    • User wants validation guidance for commands
    • User needs examples of command patterns

    Quick Reference

    Field Required Type Description
    description No string Brief description shown in autocomplete
    allowed-tools No string Comma-separated list of tools (inherits if not specified)
    argument-hint No string Expected arguments (e.g., add [tagId] | remove [tagId] | list)
    model No string Specific model (sonnet, opus, haiku, inherit)
    disable-model-invocation No boolean Prevent SlashCommand tool from calling this
    commandType No string Set to "slash-command" for round-trip conversion

    Special Features

    File Referencing with @

    Reference files directly in command prompts using @ prefix:

    Review the implementation in @src/utils/helpers.js
    Compare @src/old-version.js with @src/new-version.js
    

    Bash Execution with !

    Execute bash commands inline using ! prefix (requires Bash in allowed-tools):

    ---
    allowed-tools: Bash(git *)
    ---
    
    Current git status: !`git status`
    Last 5 commits: !`git log --oneline -5`
    

    Arguments

    • $ARGUMENTS - All arguments passed to command
    • $1, $2, $3... $9 - Individual positional arguments

    Namespacing

    • Use subdirectories in .claude/commands/ to organize commands
    • Commands appear as /subdirectory.command-name
    • Example: .claude/commands/git/quick-commit.md → /git.quick-commit

    File Location

    Slash commands must be saved as Markdown files:

    Project commands (shared with team):

    .claude/commands/command-name.md
    

    Personal commands (individual use):

    ~/.claude/commands/command-name.md
    

    Format Requirements

    Basic Structure

    ---
    description: Generate documentation for code
    allowed-tools: Read, Edit
    model: sonnet
    ---
    
    # 📝 Documentation Generator
    
    Generate comprehensive documentation for the selected code.
    
    ## Instructions
    
    - Analyze code structure and purpose
    - Generate clear, concise documentation
    - Include parameter descriptions
    - Add usage examples
    - Follow JSDoc/TSDoc format for TypeScript
    

    With Arguments

    ---
    description: Manage tags for files
    argument-hint: add [tagId] | remove [tagId] | list
    allowed-tools: Read, Write
    ---
    
    # Tag Manager
    
    Manage tags for project files.
    
    ## Usage
    
    - `/tags add <tagId>` - Add a tag (use $1 for tagId)
    - `/tags remove <tagId>` - Remove a tag (use $1 for tagId)
    - `/tags list` - List all tags
    
    ## Implementation
    
    Action: $1
    Tag ID: $2
    All arguments: $ARGUMENTS
    

    With File References

    ---
    description: Compare two files and suggest improvements
    allowed-tools: Read, Edit
    argument-hint: <file1> <file2>
    ---
    
    # File Comparator
    
    Compare @$1 with @$2 and identify:
    - Differences in approach
    - Which implementation is better
    - Suggested improvements
    

    With Bash Execution

    ---
    description: Create commit with git status context
    argument-hint: <commit-message>
    allowed-tools: Bash(git *)
    ---
    
    # Smart Git Commit
    
    ## Current Status
    !`git status --short`
    
    ## Recent Changes
    !`git diff --stat`
    
    Create a commit with message: $ARGUMENTS
    
    Ensure the commit message follows conventional commit format.
    

    Minimal Command

    ---
    description: Quick code review
    ---
    
    Review the current file for:
    - Code quality issues
    - Security vulnerabilities
    - Performance bottlenecks
    - Best practice violations
    

    Frontmatter Fields

    description (optional)

    Brief description of what the command does. Shown in autocomplete. Defaults to first line from prompt if not specified.

    ---
    description: Generate comprehensive documentation for selected code
    ---
    

    allowed-tools (optional)

    Comma-separated string of tools the command can use. Inherits from conversation if not specified.

    Valid tools: Read, Write, Edit, Grep, Glob, Bash, WebSearch, WebFetch, Task, Skill, SlashCommand, TodoWrite, AskUserQuestion

    ---
    allowed-tools: Read, Edit, Grep
    ---
    

    With Bash restrictions:

    ---
    allowed-tools: Bash(git status:*), Bash(git diff:*), Read
    ---
    

    argument-hint (optional)

    Expected arguments for the command. Shown when auto-completing.

    ---
    argument-hint: [file-path]
    ---
    
    ---
    argument-hint: add [tagId] | remove [tagId] | list
    ---
    

    model (optional)

    Specific model to use for this command. Inherits from conversation if not specified.

    Valid values:

    • sonnet - General purpose (Claude Sonnet 3.5)
    • haiku - Fast, simple tasks (Claude Haiku 3.5)
    • opus - Complex reasoning (Claude Opus 4)
    • inherit - Use conversation model (default)
    ---
    model: sonnet
    ---
    

    disable-model-invocation (optional)

    Set to true to prevent Claude from automatically invoking this command via the SlashCommand tool.

    ---
    disable-model-invocation: true
    ---
    

    commandType (optional)

    Set to "slash-command" for explicit type preservation in round-trip conversion (PRPM extension).

    ---
    commandType: slash-command
    ---
    

    Content Format

    The content after frontmatter contains the command prompt and instructions.

    H1 Title (optional)

    Can include emoji icon for visual identification:

    # 📝 Documentation Generator
    
    # 🔍 Code Reviewer
    

    Instructions

    Clear, actionable guidance for what the command should do:

    ## Instructions
    
    - Analyze code structure and purpose
    - Generate clear, concise documentation
    - Include parameter descriptions
    - Add usage examples
    

    Output Format

    Specify expected output format:

    ## Output Format
    
    Return formatted documentation ready to paste above the code:
    
    /**
     * Function description
     * @param {string} name - Parameter description
     * @returns {Promise<User>} Return value description
     */
    

    Examples

    Show Claude what good output looks like:

    ## Example Output
    
    ```typescript
    /**
     * Creates a new user with the provided data
     * @param {UserData} userData - User information (email, name)
     * @returns {Promise<User>} Created user with ID
     * @throws {ValidationError} If email format is invalid
     */
    async function createUser(userData: UserData): Promise<User> {
      // ...
    }
    
    
    ## Schema Validation
    
    Commands are validated against the JSON Schema:
    
    **Schema Location:** https://github.com/pr-pm/prpm/blob/main/packages/converters/schemas/claude-slash-command.schema.json
    
    **Required structure:**
    ```json
    {
      "frontmatter": {
        "description": "string (optional)",
        "allowed-tools": "string (optional)",
        "argument-hint": "string (optional)",
        "model": "string (optional)",
        "disable-model-invocation": "boolean (optional)",
        "commandType": "slash-command (optional)"
      },
      "content": "string (markdown content)"
    }
    

    Common Mistakes

    Mistake Problem Solution
    Using array for tools allowed-tools: [Read, Write] Use string: allowed-tools: Read, Write
    Wrong field names tools:, arguments: Use allowed-tools, argument-hint
    Missing frontmatter delimiters Frontmatter not parsed Use --- before and after YAML
    Invalid tool names bash, grep (lowercase) Use capitalized: Bash, Grep
    Invalid model values 3.5-sonnet, claude-opus Use: sonnet, opus, haiku, inherit
    Icons in frontmatter icon: 📝 Put icon in H1: # 📝 Title
    No description Autocomplete shows filename Add description field

    Best Practices

    1. Keep Commands Focused

    Each command should do ONE thing well:

    Good:

    ---
    description: Generate JSDoc comments for functions
    ---
    

    Bad:

    ---
    description: Generate docs, fix linting, add tests, refactor code
    ---
    

    2. Use Clear Descriptions

    Make descriptions specific and actionable:

    Good:

    description: Generate comprehensive JSDoc documentation for selected code
    

    Bad:

    description: Make docs
    

    3. Specify Tool Permissions

    Only request tools actually needed:

    Good:

    allowed-tools: Read, Edit
    

    Bad:

    allowed-tools: Read, Write, Edit, Grep, Glob, Bash, WebSearch
    

    4. Document Expected Arguments

    Use argument-hint to show expected arguments:

    argument-hint: [file-path]
    
    argument-hint: <feature-name>
    
    argument-hint: add [item] | remove [item] | list
    

    5. Include Usage Examples

    Show users how to invoke the command:

    ## Usage
    
    - `/generate-docs path/to/file.ts` - Generate docs for specific file
    - `/generate-docs` - Generate docs for current selection
    

    6. Specify Output Format

    Tell Claude what format you want:

    ## Output Format
    
    Generate TypeScript interfaces with JSDoc comments:
    
    ```typescript
    /**
     * User account information
     */
    interface User {
      /** Unique identifier */
      id: string;
      /** User email address */
      email: string;
    }
    
    
    ### 7. Add Examples to Prompt
    
    Show Claude examples of good output:
    
    ```markdown
    ## Example
    
    Good documentation:
    
    ```typescript
    /**
     * Calculates total price with tax
     * @param price - Base price before tax
     * @param taxRate - Tax rate as decimal (e.g., 0.08 for 8%)
     * @returns Total price including tax
     */
    function calculateTotal(price: number, taxRate: number): number {
      return price * (1 + taxRate);
    }
    
    
    ### 8. Use Icons for Visual Identification
    
    Add emoji to H1 heading for quick recognition:
    
    ```markdown
    # 📝 Documentation Generator
    # 🔍 Code Reviewer
    # 🧪 Test Generator
    # 🔧 Refactoring Assistant
    # 🐛 Bug Finder
    

    Namespaced Commands

    Organize related commands using subdirectories:

    File: .claude/commands/git/status.md

    ---
    description: Show enhanced git status
    allowed-tools: Bash(git *)
    ---
    
    # Git Status
    
    !`git status`
    
    Branch: !`git branch --show-current`
    Recent commits: !`git log --oneline -3`
    

    Invoke with: /git.status

    File: .claude/commands/git/quick-commit.md

    ---
    description: Quick commit with conventional format
    argument-hint: <type> <message>
    allowed-tools: Bash(git *)
    ---
    
    # Quick Commit
    
    Create conventional commit: $1($2): $ARGUMENTS
    
    !`git add -A && git commit -m "$1: $ARGUMENTS"`
    

    Invoke with: /git.quick-commit feat "add user auth"

    Common Patterns

    Code Review Command

    ---
    description: Review code for quality, security, and performance issues
    allowed-tools: Read, Grep
    ---
    
    # 🔍 Code Reviewer
    
    Review the selected code or current file for:
    
    ## Code Quality
    - Clean, readable code
    - Proper naming conventions
    - DRY principle adherence
    - SOLID principles
    
    ## Security
    - Input validation
    - SQL injection risks
    - XSS vulnerabilities
    - Authentication/authorization
    
    ## Performance
    - Inefficient algorithms
    - Unnecessary computations
    - Memory leaks
    - Database query optimization
    
    ## Output Format
    
    Provide specific file:line references for all issues:
    
    **[Issue Type]** (file.ts:42) - Issue description and suggested fix
    

    Documentation Generator

    ---
    description: Generate comprehensive documentation for selected code
    allowed-tools: Read, Edit
    model: sonnet
    ---
    
    # 📝 Documentation Generator
    
    Generate comprehensive documentation for the selected code.
    
    ## Instructions
    
    - Analyze code structure and purpose
    - Generate clear, concise documentation
    - Include parameter descriptions with types
    - Add usage examples
    - Follow JSDoc/TSDoc format for TypeScript
    - Document error conditions and edge cases
    
    ## Output Format
    
    Return formatted documentation ready to paste above the code.
    
    For TypeScript/JavaScript:
    ```typescript
    /**
     * Function description
     * @param {Type} paramName - Parameter description
     * @returns {ReturnType} Return value description
     * @throws {ErrorType} Error conditions
     */
    
    
    ### Test Generator
    
    ```markdown
    ---
    description: Generate test cases for selected code
    allowed-tools: Read, Write
    ---
    
    # 🧪 Test Generator
    
    Generate comprehensive test cases for the selected code.
    
    ## Test Coverage
    
    Create tests covering:
    - Happy path scenarios
    - Edge cases
    - Error conditions
    - Boundary values
    - Invalid input handling
    
    ## Structure
    
    Follow the project's testing conventions:
    - Use existing test framework (Jest, Mocha, etc.)
    - Match naming patterns
    - Follow setup/teardown patterns
    - Use appropriate matchers
    
    ## Example
    
    ```typescript
    describe('calculateTotal', () => {
      it('should calculate total with valid inputs', () => {
        const result = calculateTotal(100, 0.08);
        expect(result).toBe(108);
      });
    
      it('should handle zero tax rate', () => {
        const result = calculateTotal(100, 0);
        expect(result).toBe(100);
      });
    
      it('should throw for negative price', () => {
        expect(() => calculateTotal(-100, 0.08)).toThrow();
      });
    });
    
    
    ### Git Workflow Command
    
    ```markdown
    ---
    description: Create and push feature branch
    argument-hint: <feature-name>
    allowed-tools: Bash(git *)
    ---
    
    # 🌿 Feature Branch Creator
    
    Create and push a new feature branch.
    
    ## Process
    
    1. Create branch: `feature/$1`
    2. Switch to new branch
    3. Push to origin with upstream tracking
    
    ## Usage
    
    ```bash
    /feature user-authentication
    /feature api-optimization
    

    Implementation

    git checkout -b feature/$1
    git push -u origin feature/$1
    
    
    ### Refactoring Command
    
    ```markdown
    ---
    description: Refactor code while preserving behavior
    allowed-tools: Read, Edit, Bash
    ---
    
    # 🔧 Refactoring Assistant
    
    Refactor the selected code while maintaining functionality.
    
    ## Guidelines
    
    - Preserve existing behavior exactly
    - Improve code structure and readability
    - Extract reusable functions
    - Reduce complexity
    - Follow project conventions
    - Update related tests
    
    ## Process
    
    1. Read and understand current implementation
    2. Identify refactoring opportunities
    3. Propose changes with explanations
    4. Update code with improvements
    5. Verify tests still pass
    6. Update documentation if needed
    
    ## Safety
    
    - Run tests after refactoring
    - Commit changes incrementally
    - Keep changes focused and atomic
    

    Validation Checklist

    Before finalizing a slash command:

    • Command name is clear and concise
    • Description is specific and actionable
    • Argument hints provided if arguments expected
    • Tool permissions are minimal and specific
    • Model selection appropriate for task complexity
    • Frontmatter uses correct field names
    • Frontmatter values match allowed types
    • allowed-tools is comma-separated string, not array
    • H1 title includes icon (optional but recommended)
    • Instructions are clear and actionable
    • Expected output format is specified
    • Examples included in prompt
    • File saved to .claude/commands/*.md
    • Command tested and working

    Related Documentation

    • Schema: https://github.com/pr-pm/prpm/blob/main/packages/converters/schemas/claude-slash-command.schema.json
    • Claude Docs: https://docs.claude.com/claude-code
    • PRPM Docs: /Users/khaliqgant/Projects/prpm/app/packages/converters/docs/claude.md
    Repository
    pr-pm/prpm
    Files