8.0 KiB
Command Frontmatter Reference
Complete reference for all frontmatter fields in Claude Code slash commands.
Overview
Frontmatter is optional YAML metadata at the start of command files. It configures how the command appears in /help, what tools it can use, and how it behaves.
---
description: Brief description for /help
argument-hint: <required> [optional]
allowed-tools: Read, Grep, Glob
model: haiku
disable-model-invocation: true
---
Fields
description
Type: string
Default: First line of command content
Purpose: Brief explanation shown in /help list
description: Deploy application to target environment with health checks
Best practices:
- Keep under 80 characters
- Action-oriented (start with verb)
- Specific about what it does
- Avoid vague terms like "helps with" or "stuff"
Examples:
# Good
description: Create git commit from staged changes with conventional format
description: Review PR for security vulnerabilities and best practices
description: Generate API documentation from TypeScript source files
# Bad
description: Deploy stuff
description: Helps with git
description: Command for reviewing things
argument-hint
Type: string Default: none Purpose: Show expected arguments in autocomplete
argument-hint: <environment> [--skip-tests] [--no-notify]
Conventions:
<required>- Required arguments (angle brackets)[optional]- Optional arguments (square brackets)--flag- Boolean flags<arg1|arg2>- Alternatives (pipe-separated)
Examples:
# Single required argument
argument-hint: <issue-number>
# Multiple arguments
argument-hint: <file1> <file2>
# Optional with defaults
argument-hint: [environment=staging]
# Flags
argument-hint: <branch> [--force] [--no-verify]
# Alternatives
argument-hint: <staging|production>
allowed-tools
Type: string (comma-separated) Default: Inherits from conversation Purpose: Restrict which tools Claude can use
allowed-tools: Read, Grep, Glob, Bash(git *)
Tool names (case-sensitive):
File Operations
| Tool | Purpose | Returns |
|---|---|---|
Read |
Read file contents, images, PDFs, Jupyter notebooks | File content with line numbers |
Write |
Create new files or overwrite existing files | Confirmation |
Edit |
Make targeted string replacements in existing files | Updated file snippet |
MultiEdit |
Multiple edits to a single file in one atomic operation | Updated file |
NotebookEdit |
Edit, insert, or delete Jupyter notebook cells | Updated notebook |
LS |
List directory contents | Directory listing |
Search & Discovery
| Tool | Purpose | Returns |
|---|---|---|
Grep |
Search file contents using regex patterns | Matching lines, file paths, or counts |
Glob |
Find files by name/path glob patterns (e.g., **/*.ts) |
List of matching file paths |
Execution
| Tool | Purpose | Returns |
|---|---|---|
Bash |
Execute shell commands with optional timeout | Command stdout/stderr |
Task |
Launch subagents for complex, parallel, or specialized work | Agent result or task ID (if background) |
TaskOutput |
Retrieve output from background tasks | Task output and status |
KillShell |
Terminate a running background shell process | Confirmation |
Context & Skills
| Tool | Purpose | Returns |
|---|---|---|
Skill |
Load a skill's instructions into context | Skill content |
TaskCreate |
Create tasks for tracking progress | Task ID |
TaskUpdate |
Update task status (in_progress, completed) | Confirmation |
TaskList |
List all tasks | Task summaries |
TaskGet |
Get full task details | Task details |
Planning
| Tool | Purpose | Returns |
|---|---|---|
EnterPlanMode |
Transition to plan mode for complex implementation tasks | User approval prompt |
ExitPlanMode |
Signal plan completion and request user approval | Plan review prompt |
User Interaction
| Tool | Purpose | Returns |
|---|---|---|
AskUserQuestion |
Present choices or gather input with structured options | User's selection(s) or custom input |
SlashCommand |
Invoke slash commands programmatically (controlled via disable-model-invocation) |
Command result |
Web
| Tool | Purpose | Returns |
|---|---|---|
WebSearch |
Search the web for current information | Search results with URLs |
WebFetch |
Fetch URL content and process with AI | Processed/summarized content |
MCP Tools
MCP (Model Context Protocol) tools follow the naming pattern mcp__<server>__<tool>. Examples:
mcp__github__create_issue- GitHub MCP servermcp__memory__search- Memory MCP servermcp__filesystem__read- Filesystem MCP server
Use regex patterns to match MCP tools: mcp__.*__.* matches all MCP tools.
Bash patterns:
# All bash commands
allowed-tools: Bash(*)
# All git commands
allowed-tools: Bash(git *)
# Specific git commands only
allowed-tools: Bash(git add:*), Bash(git commit:*), Bash(git status:*)
# Multiple command types
allowed-tools: Bash(git *), Bash(npm *), Bash(bun *)
Common patterns:
# Read-only analysis
allowed-tools: Read, Grep, Glob
# Git workflow
allowed-tools: Read, Write, Edit, Bash(git *)
# Safe code review
allowed-tools: Read, Grep, Glob, Bash(git diff:*), Bash(git show:*)
# Full development
allowed-tools: Read, Write, Edit, Bash(*), Grep, Glob
Behavior:
- Without
allowed-tools: inherits conversation permissions - With
allowed-tools: only listed tools allowed without asking - Other tools blocked or require explicit permission
model
Type: string Default: Inherits from conversation Purpose: Override model for this command
model: haiku
Available models:
# Fast, low-cost (simple tasks)
model: haiku
# Balanced (default for most)
model: sonnet
# Most capable (complex analysis)
model: opus
Use cases:
- Simple commands (formatting, simple lookups) -> haiku
- Standard development tasks -> sonnet (default)
- Complex analysis, security review -> opus
disable-model-invocation
Type: boolean Default: false Purpose: Prevent SlashCommand tool from invoking this command automatically
disable-model-invocation: true
When to use:
- Interactive commands requiring user input
- Destructive operations (delete, deploy to production)
- Commands with side effects that shouldn't be automated
- Testing or debugging commands
Behavior:
- When
true: Command can only be invoked explicitly by user - When
false(default): Claude can invoke via SlashCommand tool
Complete Example
---
description: Deploy application with full validation pipeline
argument-hint: <environment> [--skip-tests] [--force]
allowed-tools: Read, Bash(kubectl *), Bash(docker *), Bash(git *)
model: sonnet
disable-model-invocation: true
---
# Deployment Pipeline
Environment: $1
Options: $ARGUMENTS
## Pre-flight Checks
...
Validation Checklist
- Frontmatter opens with
---on line 1 - Frontmatter closes with
---before content - Uses spaces, not tabs
- Special characters in strings are quoted
- Field names are lowercase with hyphens
- Tool names in
allowed-toolsare case-sensitive - Model identifier is valid if specified
- Description is action-oriented and specific
Common Errors
Tab characters:
# Bad (tabs)
description: Deploy to staging
# Good (spaces)
description: Deploy to staging
Unquoted special characters:
# Bad (colon in value)
description: Review: code quality check
# Good (quoted)
description: "Review: code quality check"
Wrong tool names:
# Bad (lowercase)
allowed-tools: read, grep, glob
# Good (proper case)
allowed-tools: Read, Grep, Glob
Invalid model:
# Bad (non-existent)
model: gpt-4
# Good (valid Claude model)
model: haiku