--- name: slash-commands description: Create and use Claude Code slash commands - quick prompts, bash execution, file references allowed-tools: [Read, Write, Bash] user-invocable: false --- # Slash Commands Reference Create and use user-triggered prompts with `/command-name` syntax. ## When to Use - "How do I create a slash command?" - "What slash commands are available?" - "Add bash to my command" - "Use file references in commands" - "Slash commands vs skills" ## Built-in Commands | Command | Purpose | |---------|---------| | `/clear` | Clear conversation history | | `/compact` | Compact conversation with focus | | `/config` | Open settings interface | | `/cost` | Show token usage | | `/agents` | Manage sub-agents | | `/mcp` | Manage MCP servers | | `/memory` | Edit CLAUDE.md files | | `/model` | Select AI model | | `/review` | Request code review | | `/resume` | Resume session | | `/help` | Get usage help | ## Creating Commands ### Project Commands ```bash mkdir -p .claude/commands cat > .claude/commands/optimize.md << 'EOF' --- description: Analyze code for performance issues --- Review this code for: - Performance bottlenecks - Memory leaks - Caching opportunities EOF ``` ### Personal Commands ```bash mkdir -p ~/.claude/commands cat > ~/.claude/commands/review.md << 'EOF' --- description: Security-focused code review --- Check for vulnerabilities: - Input validation - SQL injection - XSS risks EOF ``` ## Command File Format ```yaml --- description: Brief description for /help allowed-tools: [Bash, Read, Write] # Optional argument-hint: "[file] [type]" # Optional --- Your markdown instructions here. Use $1, $2 for arguments or $ARGUMENTS for all. ``` ## Bash Execution Run bash before loading prompt with `!` prefix: ```yaml --- allowed-tools: Bash(git:*), Bash(grep:*) description: Git commit helper --- Current status: !`git status` Staged changes: !`git diff --staged` Recent commits: !`git log --oneline -5` Based on these changes, suggest a commit message. ``` **Rules:** - Must declare `allowed-tools: Bash(...)` in frontmatter - Use backticks: `` !`command` `` - Output is included in Claude's context ## File References Include files with `@` prefix: ```markdown Review against @.claude/STYLE_GUIDE.md Compare: - @src/old.js - @src/new.js Refactor files matching @src/**/*.util.ts ``` ## Arguments ```yaml --- argument-hint: "[pr-number] [priority]" --- Review PR #$1 with priority: $2 # Or use all arguments: Fix issue #$ARGUMENTS ``` **Usage:** ```bash /review-pr 456 high # $1 = "456", $2 = "high" ``` ## Namespacing Organize with subdirectories: ``` .claude/commands/ ├── frontend/ │ └── component.md → /component (project:frontend) └── backend/ └── endpoint.md → /endpoint (project:backend) ``` ## MCP Slash Commands MCP servers expose prompts as commands: ```bash /mcp__github__list_prs /mcp__github__pr_review 456 /mcp__jira__create_issue "Bug" high ``` ## Slash Commands vs Skills | Aspect | Slash Commands | Skills | |--------|----------------|--------| | Invocation | Explicit: `/command` | Auto-discovered | | Files | Single .md file | Directory with SKILL.md | | Use Case | Quick prompts | Complex workflows | **Use slash commands for:** Frequently typed prompts, simple templates **Use skills for:** Complex workflows, multiple files, auto-discovery ## Example: Complete Git Commit Command ```yaml --- description: Generate semantic commit message allowed-tools: Bash(git:*), Read argument-hint: "[type]" --- # Semantic Commit Generator Staged files: !`git diff --name-only --cached` Diff preview: !`git diff --cached | head -100` Generate a conventional commit message. Type: $1 (feat/fix/docs/style/refactor/perf/test/chore) Format: `(): ` ``` **Usage:** `/commit feat`