writing-slash-commands by CaptainCrouton89
Create and use custom slash commands to automate Claude Code workflows. Learn argument passing, frontmatter configuration, bash integration, and file references for building reusable prompts.
Content & Writing
497 Stars
69 Forks
Updated Oct 16, 2025, 06:19 PM
Why Use This
This skill provides specialized capabilities for CaptainCrouton89's codebase.
Use Cases
- Developing new features in the CaptainCrouton89 repository
- Refactoring existing code to follow CaptainCrouton89 standards
- Understanding and working with CaptainCrouton89's codebase structure
Install Guide
2 steps- 1
Skip this step if Ananke is already installed.
- 2
Skill Snapshot
Auto scan of skill assets. Informational only.
Valid SKILL.md
Checks against SKILL.md specification
Source & Community
Skill Stats
SKILL.md 343 Lines
Total Files 1
Total Size 8.4 KB
License NOASSERTION
---
name: Writing Slash Commands
description: Create and use custom slash commands to automate Claude Code workflows. Learn argument passing, frontmatter configuration, bash integration, and file references for building reusable prompts.
allowed-tools: Bash
---
# Slash Commands Guide
Slash commands are reusable prompt templates that automate recurring tasks in Claude Code. Define them once, invoke them anytime with `/command-name [args]`.
## Quick Start
### Create a Command
**Project-scoped** (shared with team):
```bash
mkdir -p .claude/commands
echo "Analyze this code for performance issues:" > .claude/commands/optimize.md
```
**Personal** (across all projects):
```bash
mkdir -p ~/.claude/commands
echo "Review this code for security vulnerabilities:" > ~/.claude/commands/security-review.md
```
Invoke with `/optimize` or `/security-review`.
---
## Custom Commands Architecture
| Scope | Location | Scope | Shareable |
|:---:|:---:|:---:|:---:|
| **Project** | `.claude/commands/` | Repository-specific | Yes (team) |
| **Personal** | `~/.claude/commands/` | All projects | No |
### Namespacing
Organize commands in subdirectories (no effect on invocation):
```
.claude/commands/
├── frontend/
│ └── component.md # Invokes as `/component` (shows "project:frontend")
├── backend/
│ └── api.md # Invokes as `/api` (shows "project:backend")
└── security-review.md # Invokes as `/security-review`
```
**Note:** User-level and project-level commands with the same name conflict; only one is available.
---
## Arguments & Placeholders
### Capture All Arguments with `$ARGUMENTS`
Use `$ARGUMENTS` when you need all arguments as a single string:
```markdown
---
description: Fix issue with optional priority
argument-hint: [issue-number] [optional-priority]
---
Fix issue #$ARGUMENTS following our coding standards.
```
**Usage:** `/fix-issue 123` → `$ARGUMENTS` = `"123"`
**Usage:** `/fix-issue 123 high-priority` → `$ARGUMENTS` = `"123 high-priority"`
### Access Individual Arguments with `$1, $2, ...`
Use positional parameters for structured commands:
```markdown
---
description: Review pull request with priority and assignee
argument-hint: [pr-number] [priority] [assignee]
---
Review PR #$1 with priority $2 and assign to $3.
Focus on security, performance, and code style.
```
**Usage:** `/review-pr 456 high alice` → `$1="456"`, `$2="high"`, `$3="alice"`
**When to use positional:**
- Arguments have distinct roles (ID, priority, owner)
- Need defaults: `${3:-unassigned}`
- Reference arguments separately throughout command
---
## Frontmatter Configuration
All options are optional; commands work without frontmatter.
| Field | Purpose | Example |
|:---:|:---|:---|
| `description` | Shown in `/help` (required for SlashCommand tool) | `"Fix security issues"` |
| `argument-hint` | Argument syntax hint for autocomplete | `"[issue] [priority]"` |
| `allowed-tools` | Tools this command can invoke | `Bash(git add:*), Bash(git status:*)` |
| `model` | Override default model for this command | `"claude-3-5-haiku-20241022"` |
| `disable-model-invocation` | Prevent SlashCommand tool from triggering | `true` |
### Example with Full Frontmatter
```markdown
---
description: Create a git commit with staged changes
argument-hint: [message]
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*)
model: claude-3-5-haiku-20241022
---
Create a git commit with message: $ARGUMENTS
```
---
## Bash Execution & File References
### Run Bash Commands with `!`
Prefix inline commands with `!` to execute before the command runs. Requires `allowed-tools` with `Bash`:
```markdown
---
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*), Bash(git log:*)
description: Create a git commit
---
## Context
- Current status: !`git status`
- Staged changes: !`git diff --cached`
- Recent commits: !`git log --oneline -5`
## Your Task
Create a single commit summarizing the changes.
```
**Output from bash commands is included in the prompt context.**
### Reference Files with `@`
Include file contents in commands:
```markdown
Review the implementation in @src/utils/helpers.js
Compare @src/old-version.js with @src/new-version.js
```
Use standard file references (e.g., `@docs/`, `@src/`).
---
## Pattern Examples
### Example 1: Priority-Based Issue Fix
```markdown
---
description: Fix issue with priority level
argument-hint: [issue-number] [priority-level]
---
Fix GitHub issue #$1 with priority "$2".
Steps:
1. Understand the issue context
2. Write minimal, focused fix
3. Consider edge cases
4. Ensure tests pass
```
**Usage:** `/fix-issue 42 high`
---
### Example 2: Bash-Powered Code Review
```markdown
---
allowed-tools: Bash(git diff:*), Bash(git log:*)
description: Review recent commits for code quality
argument-hint: "[number-of-commits]"
---
## Context
Recent changes:
!`git log --oneline -${1:-5}`
Full diff:
!`git diff HEAD~${1:-5}...HEAD`
## Your Task
Provide a code quality review focusing on readability, performance, and best practices.
```
**Usage:** `/review-commits 3` → Reviews last 3 commits
---
### Example 3: Multi-Argument Configuration Command
```markdown
---
description: Set up feature flags for testing
argument-hint: feature [enable|disable] [environment]
---
Configure feature "$1" to be $2 in the $3 environment.
Verify:
- Feature flag exists in @src/config/features.ts
- Environment is valid (dev, staging, production)
- Changes are tested before deployment
```
**Usage:** `/feature dark-mode enable staging`
---
## SlashCommand Tool Integration
The `SlashCommand` tool allows Claude to invoke your custom commands programmatically.
### Enable Auto-Invocation
Add to CLAUDE.md or project instructions:
```markdown
When appropriate, use /optimize to analyze code performance.
When fixing bugs, use /fix-issue with the issue number.
```
### Requirements for Tool Access
1. Command must have `description` frontmatter
2. Command must NOT have `disable-model-invocation: true`
3. User must allow `SlashCommand` tool in permissions
### Disable Specific Commands
Prevent Claude from auto-invoking a command:
```markdown
---
disable-model-invocation: true
description: Manual review only
---
Your command content...
```
### Permission Rules
Fine-grained control via `/permissions`:
```
SlashCommand:/commit # Exact match: /commit only
SlashCommand:/review-pr:* # Prefix match: /review-pr with any args
```
Deny `SlashCommand` entirely to disable all auto-invocation.
---
## Best Practices
✅ **Do:**
- Use descriptive names matching functionality (e.g., `/optimize`, `/security-review`)
- Include `description` for discoverability via `/help` and SlashCommand tool
- Add `argument-hint` for clear usage patterns
- Keep commands focused on a single responsibility
- Use bash execution for context that changes (git status, timestamps)
❌ **Don't:**
- Embed static content that belongs in code (use file references instead)
- Create commands without descriptions (breaks tool integration)
- Overload with too many positional arguments (>3 becomes hard to remember)
- Assume tools are available without declaring `allowed-tools`
---
## Built-in Slash Commands (Reference)
Essential commands you get for free:
| Command | Purpose |
|:---|:---|
| `/help` | List all commands (built-in + custom) |
| `/config` | Open Settings interface |
| `/status` | Show version, model, account |
| `/cost` | Token usage statistics |
| `/model` | Switch AI model |
| `/memory` | Edit CLAUDE.md |
| `/rewind` | Rewind conversation or code |
| `/clear` | Clear history |
| `/agents` | Manage custom AI subagents |
| `/mcp` | Manage MCP server connections |
---
## Workflow Integration
**In CLAUDE.md or project instructions:**
```markdown
## Custom Commands
Use these commands to accelerate development:
- `/optimize [file]` — Analyze code performance
- `/security-review [file]` — Check for vulnerabilities
- `/commit [message]` — Create atomic commits
- `/test [suite]` — Run tests with focus
```
**In conversations:**
```
> I'll use /optimize to check this function for performance issues.
```
Claude recognizes the slash and may auto-invoke if `SlashCommand` tool is enabled.
---
## See Also
- **MCP Slash Commands**: Commands exposed by MCP servers (pattern: `/mcp__server__prompt`)
- **Plugin Commands**: Commands from installed plugins (pattern: `/plugin-name:command` or just `/command`)
- **Interactive Mode**: Keyboard shortcuts and input modes
- **Permissions**: Fine-grained tool and command access control
Name Size