command-creator
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