create-command
Create a new Claude Code slash command with proper YAML frontmatter structure. Use when the user wants to add a custom slash command to a plugin. Handles command file creation with description, argument hints, allowed tools, and all advanced features.
Best use case
create-command is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Create a new Claude Code slash command with proper YAML frontmatter structure. Use when the user wants to add a custom slash command to a plugin. Handles command file creation with description, argument hints, allowed tools, and all advanced features.
Teams using create-command should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/create-command/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How create-command Compares
| Feature / Agent | create-command | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Create a new Claude Code slash command with proper YAML frontmatter structure. Use when the user wants to add a custom slash command to a plugin. Handles command file creation with description, argument hints, allowed tools, and all advanced features.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Create Command Skill
Create new Claude Code slash commands with proper configuration and advanced features.
## Command Types
### Project Commands
Commands stored in your repository and shared with your team.
**Location**: `.claude/commands/` or `plugins/<plugin>/commands/`
Shows "(project)" in `/help`.
### Personal Commands
Commands available across all your projects.
**Location**: `~/.claude/commands/`
Shows "(user)" in `/help`.
## Command File Format
Commands are markdown files with YAML frontmatter:
```markdown
---
description: Short description shown in /help
argument-hint: <required-arg> [optional-arg]
---
# Command Name
Instructions for Claude when this command is invoked...
```
## Frontmatter Fields
| Field | Purpose | Default |
|-------|---------|---------|
| `description` | Brief description of the command | Uses first line from prompt |
| `argument-hint` | Arguments shown in autocomplete | None |
| `allowed-tools` | List of tools the command can use | Inherits from conversation |
| `model` | Specific model string | Inherits from conversation |
| `disable-model-invocation` | Prevent SlashCommand tool from calling | false |
## Argument Placeholders
### All Arguments: `$ARGUMENTS`
Captures all arguments passed to the command:
```markdown
---
description: Fix a GitHub issue
argument-hint: <issue-number> [priority]
---
Fix issue #$ARGUMENTS following our coding standards.
# Usage: /fix-issue 123 high-priority
# $ARGUMENTS becomes: "123 high-priority"
```
### Positional Arguments: `$1`, `$2`, etc.
Access specific arguments individually:
```markdown
---
description: Review pull request
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"
```
## Bash Command Execution
Execute bash commands before the slash command runs using the `!` prefix.
**IMPORTANT**: You MUST include `allowed-tools` with the `Bash` tool.
```markdown
---
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`
## Your task
Based on the above changes, create a single git commit.
```
## File References
Include file contents using the `@` prefix:
```markdown
---
description: Review implementation
---
# Reference a specific file
Review the implementation in @src/utils/helpers.js
# Reference multiple files
Compare @src/old-version.js with @src/new-version.js
```
## Namespacing
Organize commands in subdirectories. The subdirectory appears in the description but not the command name.
```
.claude/commands/
├── frontend/
│ └── component.md # Creates /component (project:frontend)
└── backend/
└── api.md # Creates /api (project:backend)
```
## Argument Hint Conventions
| Syntax | Meaning |
|--------|---------|
| `<name>` | Required argument |
| `[name]` | Optional argument |
| `[--flag]` | Optional flag |
| `[--option <value>]` | Optional flag with value |
| `""` or omit | No arguments |
## Examples
### Simple Command
```markdown
---
description: Show project status overview
---
Show a summary of the current project status including:
- Git branch and recent commits
- Open issues and PRs
- Build status
```
### Command with Tools
```markdown
---
allowed-tools: Bash(npm:*), Bash(yarn:*)
description: Run tests with coverage
argument-hint: [--watch] [--coverage]
---
Run the test suite with the following options:
- If --watch is passed, run in watch mode
- If --coverage is passed, generate coverage report
Use npm or yarn based on the lock file present.
```
### Git Commit Command
```markdown
---
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*)
description: Create a conventional commit
argument-hint: [message]
---
## Context
- Current status: !`git status --short`
- Staged changes: !`git diff --cached --stat`
- Recent commits: !`git log --oneline -5`
## Task
Create a git commit following conventional commit format:
- type(scope): description
- Types: feat, fix, docs, style, refactor, test, chore
If $ARGUMENTS is provided, use it as the commit message.
Otherwise, analyze the changes and generate an appropriate message.
```
### Deploy Command
```markdown
---
allowed-tools: Bash(docker:*), Bash(kubectl:*)
description: Deploy to environment
argument-hint: <environment> [--dry-run]
model: claude-sonnet-4-20250514
---
Deploy to $1 environment.
## Pre-flight checks
- Verify current branch: !`git branch --show-current`
- Check for uncommitted changes: !`git status --porcelain`
## Process
1. Build Docker image
2. Push to registry
3. Update Kubernetes deployment
4. Verify rollout status
If --dry-run is in $ARGUMENTS, only show what would be done.
```
### Code Review Command
```markdown
---
description: Review code changes
argument-hint: [file-path]
---
Review the code for:
- Security vulnerabilities
- Performance issues
- Code style violations
- Best practices
If a file path is provided ($1), focus on that file.
Otherwise, review all changed files:
!`git diff --name-only HEAD~1`
Reference style guide: @.claude/STYLE_GUIDE.md
```
## Thinking Mode
Include extended thinking keywords to trigger deeper analysis:
```markdown
---
description: Analyze architecture deeply
---
Think step by step about the architecture of this codebase.
Consider:
- Design patterns used
- Potential improvements
- Scalability concerns
```
## SlashCommand Tool Integration
For commands to be invocable by Claude via the SlashCommand tool:
1. **Must have `description`** frontmatter field
2. **Use `disable-model-invocation: true`** to prevent automatic invocation
3. **Built-in commands** (like `/compact`) are NOT supported
### Permission Rules
```
SlashCommand:/commit # Exact match only
SlashCommand:/review-pr:* # Prefix match with any arguments
```
## File Location
| Type | Location |
|------|----------|
| Plugin commands | `plugins/<plugin>/commands/<name>.md` |
| Project commands | `.claude/commands/<name>.md` |
| Personal commands | `~/.claude/commands/<name>.md` |
The filename (without `.md`) becomes the slash command name.
## Slash Commands vs Skills
| Aspect | Slash Commands | Skills |
|--------|---------------|--------|
| **Complexity** | Simple prompts | Complex capabilities |
| **Structure** | Single .md file | Directory with SKILL.md + resources |
| **Discovery** | Explicit (`/command`) | Automatic (context-based) |
| **Files** | One file only | Multiple files, scripts, templates |
**Use slash commands** when:
- You invoke the same prompt repeatedly
- The prompt fits in a single file
- You want explicit control over when it runs
**Use Skills** when:
- Claude should discover automatically
- Multiple files or scripts needed
- Complex workflows with validationRelated Skills
review-django-commands
Review Django management commands for proper structure and refactor if needed
create-qa-test
Create a new QA test procedure for a feature
create-prd
Interactive PRD creation wizard with comprehensive question flow
create-prd-feature
Create a feature-specific PRD (FRD) for individual features
create-persona
Create detailed user persona with guided questions
create-tech-spec
Create a new Technical Specification for implementation details
create-rfc
Create a new RFC (Request for Comments) technical specification
integrate-command
Integrate a user or project command into Product Forge
create-skill
Create a new Claude Code agent skill with proper folder structure and SKILL.md format. Use when the user wants to add a model-invoked skill that Claude uses autonomously based on context. Handles skill folder creation with SKILL.md and optional reference files.
create-plugin
Create a new Claude Code plugin with proper directory structure and manifest. Use when the user wants to create a new plugin from scratch. Sets up plugin.json, directory structure, and optional components.
copy-command
Copy a command from Product Forge to user or project level
zod
Zod schema validation patterns and type inference. Auto-loads when validating schemas, parsing data, validating forms, checking types at runtime, or using z.object/z.string/z.infer in TypeScript.