Command Creator
Create custom slash commands for Claude Code. Commands are Markdown files that define reusable prompts with support for arguments, bash execution, file references, and tool permissions.
Command Locations
| Type | Location | Scope |
|---|---|---|
| Project | .claude/commands/ | Shared with team via git |
| Personal | ~/.claude/commands/ | Available across all projects |
Project commands take precedence over personal commands with the same name.
Basic Structure
--- description: Brief description shown in /help --- Your prompt instructions here.
Filename becomes the command name: review.md → /review
Frontmatter Options
| Field | Purpose | Default |
|---|---|---|
description | Brief description for /help | First line of prompt |
allowed-tools | Tools the command can use | Inherits from conversation |
argument-hint | Shows usage hint in autocomplete | None |
model | Specific model to use | Inherits from conversation |
disable-model-invocation | Prevent Skill tool from calling this | false |
hooks | Command-scoped hooks (PreToolUse, PostToolUse, Stop) | None |
Arguments
All arguments: $ARGUMENTS
--- description: Fix an issue --- Fix issue #$ARGUMENTS following our coding standards
Usage: /fix-issue 123 high-priority → $ARGUMENTS = "123 high-priority"
Positional: $1, $2, etc.
--- argument-hint: [pr-number] [priority] [assignee] description: Review pull request --- Review PR #$1 with priority $2 and assign to $3.
Usage: /review-pr 456 high alice
Bash Execution
Execute bash before the command runs using the exclamation mark prefix. Output is included in context.
--- allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*) description: Create a git commit --- ## Context - Current git status: !\`git status\` - Current git diff: !\`git diff HEAD\` - Current branch: !\`git branch --show-current\` - Recent commits: !\`git log --oneline -10\` ## Task Create a git commit based on the above changes.
Required: Include allowed-tools with the Bash tool when using bang execution (the exclamation mark prefix).
File References
Include file contents using the @ prefix:
Review the implementation in @src/utils/helpers.js Compare @src/old-version.js with @src/new-version.js
Namespacing
Subdirectories group related commands. The subdirectory appears in the description:
- •
.claude/commands/frontend/component.md→/component(project:frontend) - •
.claude/commands/backend/test.md→/test(project:backend)
Commands in different subdirectories can share names.
Example: Complete Command
--- allowed-tools: Bash(npm:*), Bash(git:*), Read, Edit, Write argument-hint: [component-name] description: Create a new React component with tests model: claude-sonnet-4-20250514 --- ## Context - Existing components: !\`ls src/components/\` - Project structure: !\`ls -la src/\` ## Task Create a new React component named $1: 1. Create component file at @src/components/$1.tsx 2. Create test file at @src/components/$1.test.tsx 3. Export from @src/components/index.ts 4. Follow patterns in existing components
Hooks in Commands
Define command-scoped hooks that run during execution:
---
description: Deploy with validation
hooks:
PreToolUse:
- matcher: "Bash"
hooks:
- type: command
command: "./scripts/validate.sh"
once: true
---
Deploy to staging environment.
The once: true option runs the hook only once per session.
Best Practices
- •Keep prompts concise - Claude is smart; don't over-explain
- •Use bash execution for context - Gather relevant state before the task
- •Specify allowed-tools - Limit to what the command needs
- •Add argument-hint - Help users understand expected arguments
- •Use file references - Point to relevant files with
@ - •Namespace related commands - Use subdirectories for organization