This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", "SlashCommand tool", "programmatic command invocation", "disable-model-invocation", "prevent Claude from running command", "debug command", "command debugging", "troubleshoot command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, programmatic invocation control, debugging commands, or command development best practices for Claude Code.
/plugin marketplace add sjnims/plugin-dev/plugin install plugin-dev@plugin-dev-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
examples/plugin-commands.mdexamples/simple-commands.mdreferences/advanced-workflows.mdreferences/documentation-patterns.mdreferences/frontmatter-reference.mdreferences/interactive-commands.mdreferences/marketplace-considerations.mdreferences/plugin-features-reference.mdreferences/plugin-integration.mdreferences/slashcommand-tool.mdreferences/testing-strategies.mdscripts/check-frontmatter.shscripts/validate-command.shSlash commands are frequently-used prompts defined as Markdown files that Claude executes during interactive sessions. Master command structure, frontmatter options, and dynamic features to create powerful, reusable workflows.
Key concepts:
A slash command is a Markdown file containing a prompt that Claude executes when invoked. Commands provide:
Commands are written for agent consumption, not human consumption.
When a user invokes /command-name, the command content becomes Claude's instructions. Write commands as directives TO Claude about what to do, not as messages TO the user.
Correct approach (instructions for Claude):
Review this code for security vulnerabilities including:
- SQL injection
- XSS attacks
- Authentication issues
Provide specific line numbers and severity ratings.
Incorrect approach (messages to user):
This command will review your code for security issues.
You'll receive a report with vulnerability details.
The first example tells Claude what to do. The second tells the user what will happen but doesn't instruct Claude. Always use the first approach.
Project commands (shared with team):
.claude/commands//helpPersonal commands (available everywhere):
~/.claude/commands//helpPlugin commands (bundled with plugins):
plugin-name/commands//helpCommands are Markdown files with .md extension:
.claude/commands/
├── review.md # /review command
├── test.md # /test command
└── deploy.md # /deploy command
Simple command:
Review this code for security vulnerabilities including:
- SQL injection
- XSS attacks
- Authentication bypass
- Insecure data handling
No frontmatter needed for basic commands.
Add configuration using YAML frontmatter:
---
description: Review code for security issues
allowed-tools: Read, Grep, Bash(git:*)
model: sonnet
---
Review this code for security vulnerabilities...
Purpose: Brief description shown in /help
Type: String
Default: First line of command prompt
---
description: Review pull request for code quality
---
Best practice: Clear, actionable description (under 60 characters)
Purpose: Specify which tools command can use Type: String or Array Default: Inherits from conversation
---
allowed-tools: Read, Write, Edit, Bash(git:*)
---
Patterns:
Read, Write, Edit - Specific toolsBash(git:*) - Bash with git commands only* - All tools (rarely needed)Use when: Command requires specific tool access
Purpose: Specify model for command execution
Type: String
Values: Shorthand (sonnet, opus, haiku) or full model ID (e.g., claude-sonnet-4-5-20250929)
Default: Inherits from conversation
---
model: haiku
---
Use cases:
haiku - Fast, simple commandssonnet - Standard workflowsopus - Complex analysisShorthand names use the current default version of each model family.
Purpose: Document expected arguments for autocomplete Type: String Default: None
---
argument-hint: [pr-number] [priority] [assignee]
---
Benefits:
Purpose: Prevent SlashCommand tool from programmatically calling command Type: Boolean Default: false
---
disable-model-invocation: true
---
Use when: Command should only be manually invoked
Capture all arguments as single string:
---
description: Fix issue by number
argument-hint: [issue-number]
---
Fix issue #$ARGUMENTS following our coding standards and best practices.
Usage:
> /fix-issue 123
> /fix-issue 456
Expands to:
Fix issue #123 following our coding standards...
Fix issue #456 following our coding standards...
Capture individual arguments with $1, $2, $3, etc.:
---
description: Review PR with priority and assignee
argument-hint: [pr-number] [priority] [assignee]
---
Review pull request #$1 with priority level $2.
After review, assign to $3 for follow-up.
Usage:
> /review-pr 123 high alice
Expands to:
Review pull request #123 with priority level high.
After review, assign to alice for follow-up.
Mix positional and remaining arguments:
Deploy $1 to $2 environment with options: $3
Usage:
> /deploy api staging --force --skip-tests
Expands to:
Deploy api to staging environment with options: --force --skip-tests
Include file contents in command:
---
description: Review specific file
argument-hint: [file-path]
---
Review @$1 for:
- Code quality
- Best practices
- Potential bugs
Usage:
> /review-file src/api/users.ts
Effect: Claude reads src/api/users.ts before processing command
Reference multiple files:
Compare @src/old-version.js with @src/new-version.js
Identify:
- Breaking changes
- New features
- Bug fixes
Reference known files without arguments:
Review @package.json and @tsconfig.json for consistency
Ensure:
- TypeScript version matches
- Dependencies are aligned
- Build configuration is correct
Commands can execute bash commands inline to dynamically gather context before Claude processes the command. This is useful for including repository state, environment information, or project-specific context.
[BANG] PrefixIn actual command files, use [BANG] (exclamation mark) before backticks for pre-execution:
Current branch: [BANG]`git branch --show-current`
Files changed: [BANG]`git diff --name-only`
Environment: [BANG]`echo $NODE_ENV`
How it works:
[BANG]command`` blocks[BANG]command`` expressionExample expansion:
Command file contains:
Review the [BANG]`git diff --name-only | wc -l | tr -d ' '` changed files on branch [BANG]`git branch --show-current`.
Claude receives (after pre-execution):
Review the 3 changed files on branch feature/add-auth.
[BANG]Examples in skill documentation use plain backticks without [BANG]:
Files changed: `git diff --name-only`
This is intentional. When skill content loads into Claude's context, [BANG] followed by [command name] would actually execute. Skill examples show the conceptual pattern; add the [BANG] prefix when writing actual command files.
When to use:
Implementation details:
For advanced patterns, environment-specific configurations, and plugin integration, see references/plugin-features-reference.md
Simple organization for small command sets:
.claude/commands/
├── build.md
├── test.md
├── deploy.md
├── review.md
└── docs.md
Use when: 5-15 commands, no clear categories
Organize commands in subdirectories:
.claude/commands/
├── ci/
│ ├── build.md # /build (project:ci)
│ ├── test.md # /test (project:ci)
│ └── lint.md # /lint (project:ci)
├── git/
│ ├── commit.md # /commit (project:git)
│ └── pr.md # /pr (project:git)
└── docs/
├── generate.md # /generate (project:docs)
└── publish.md # /publish (project:docs)
Benefits:
/helpUse when: 15+ commands, clear categories
/helpallowed-tools when neededargument-hint---
argument-hint: [pr-number]
---
$IF($1,
Review PR #$1,
Please provide a PR number. Usage: /review-pr [number]
)
Bash(git:*) not Bash(*)---
description: Review code changes
allowed-tools: Read, Bash(git:*)
---
Files changed: `git diff --name-only`
Review each file for code quality, bugs, test coverage, documentation needs.
---
description: Run tests for specific file
argument-hint: [test-file]
allowed-tools: Bash(npm:*)
---
Run tests: `npm test $1`
Analyze results and suggest fixes for failures.
---
description: Complete PR workflow
argument-hint: [pr-number]
allowed-tools: Bash(gh:*), Read
---
PR #$1 Workflow:
1. Fetch PR: `gh pr view $1`
2. Review changes
3. Run checks
4. Approve or request changes
Command not appearing:
.md extension presentArguments not working:
$1, $2 syntax correctargument-hint matches usageBash execution failing:
allowed-tools includes BashFile references not working:
@ syntax correctPlugin commands have access to ${CLAUDE_PLUGIN_ROOT}, an environment variable that resolves to the plugin's absolute path.
Purpose:
Basic usage:
---
description: Analyze using plugin script
allowed-tools: Bash(node:*)
---
Run analysis: `node ${CLAUDE_PLUGIN_ROOT}/scripts/analyze.js $1`
Review results and report findings.
Common patterns:
# Execute plugin script
`bash ${CLAUDE_PLUGIN_ROOT}/scripts/script.sh`
# Load plugin configuration
@${CLAUDE_PLUGIN_ROOT}/config/settings.json
# Use plugin template
@${CLAUDE_PLUGIN_ROOT}/templates/report.md
# Access plugin resources
@${CLAUDE_PLUGIN_ROOT}/docs/reference.md
Why use it:
Plugin commands discovered automatically from commands/ directory:
plugin-name/
├── commands/
│ ├── foo.md # /foo (plugin:plugin-name)
│ ├── bar.md # /bar (plugin:plugin-name)
│ └── utils/
│ └── helper.md # /helper (plugin:plugin-name:utils)
└── plugin.json
Namespace benefits:
/help outputNaming conventions:
Configuration-based pattern:
---
description: Deploy using plugin configuration
argument-hint: [environment]
allowed-tools: Read, Bash(*)
---
Load configuration: @${CLAUDE_PLUGIN_ROOT}/config/$1-deploy.json
Deploy to $1 using configuration settings.
Monitor deployment and report status.
Template-based pattern:
---
description: Generate docs from template
argument-hint: [component]
---
Template: @${CLAUDE_PLUGIN_ROOT}/templates/docs.md
Generate documentation for $1 following template structure.
Multi-script pattern:
---
description: Complete build workflow
allowed-tools: Bash(*)
---
Build: `bash ${CLAUDE_PLUGIN_ROOT}/scripts/build.sh`
Test: `bash ${CLAUDE_PLUGIN_ROOT}/scripts/test.sh`
Package: `bash ${CLAUDE_PLUGIN_ROOT}/scripts/package.sh`
Review outputs and report workflow status.
See references/plugin-features-reference.md for detailed patterns.
Commands integrate with other plugin components for powerful workflows:
plugin/agents/)See references/plugin-integration.md for detailed patterns and examples.
Commands should validate inputs and resources before processing:
Best practices: Validate early, provide helpful errors, suggest corrections.
See references/plugin-integration.md for validation examples.
For detailed frontmatter field specifications, see references/frontmatter-reference.md.
For SlashCommand tool, programmatic invocation, and permission configuration, see references/slashcommand-tool.md.
For plugin-specific features and patterns, see references/plugin-features-reference.md.
For plugin integration and validation patterns, see references/plugin-integration.md.
For interactive user input patterns using AskUserQuestion, see references/interactive-commands.md.
For multi-step command sequences and state management, see references/advanced-workflows.md.
For self-documenting command patterns and maintenance docs, see references/documentation-patterns.md.
For testing approaches from syntax validation to user acceptance, see references/testing-strategies.md.
For distribution guidelines and quality standards, see references/marketplace-considerations.md.
For command pattern examples, see examples/ directory.
Utility scripts for validating commands (execute without loading into context):
# Validate command file structure
./scripts/validate-command.sh .claude/commands/my-command.md
# Validate YAML frontmatter fields
./scripts/check-frontmatter.sh .claude/commands/my-command.md
# Validate multiple files
./scripts/validate-command.sh commands/*.md
./scripts/check-frontmatter.sh commands/*.md
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.