Claude Code Command
Frontmatter for Claude Code custom slash commands.
| Type | object |
|---|---|
| File match |
**/.claude/commands/*.md
.claude/commands/*.md
**/commands/*.md
|
| Schema URL | https://catalog.lintel.tools/schemas/claude-code/command/latest.json |
Validate with Lintel
npx @lintel/lintel check
Frontmatter schema for Claude Code custom slash commands (.claude/commands/*.md). Commands are the legacy format for skills — they support identical frontmatter fields and behavior. New projects should prefer the skill format (.claude/skills/*/SKILL.md) for better organization and support for companion files. A file at .claude/commands/review.md and a skill at .claude/skills/review/SKILL.md both create /review and work the same way. If a skill and a command share the same name, the skill takes precedence. Use $ARGUMENTS, $ARGUMENTS[N], or $N for argument substitution in the body.
Properties
Display name for the command using lowercase letters, numbers, and hyphens only (max 64 characters). This becomes the /slash-command name. If omitted, defaults to the file name without extension (e.g. review.md creates /review).
Describes what the command does and when to use it. Claude uses this to decide when to automatically load the command, so write it as a triggering guide — include concrete examples of user requests that should activate it. Command descriptions are always loaded into Claude's context so it knows they exist, but full command content only loads when invoked. If omitted, defaults to the first paragraph of the markdown body. Note: descriptions share a context budget (2% of the context window, minimum 16KB). Override with the SLASH_COMMAND_TOOL_CHAR_BUDGET environment variable.
Hint shown during / autocomplete to indicate expected arguments. Purely cosmetic — does not enforce argument structure. Arguments are accessed via $ARGUMENTS, $ARGUMENTS[N], or $N in the markdown body.
Which Claude model to use when this command is active. If omitted, inherits from the current session.
Tools Claude can use without asking permission when this command is active. Built-in tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, Task, Skill. Supports patterns like Bash(git *) to allow only specific subcommands, or Skill(commit) to allow invoking a specific skill. MCP tools use the pattern mcp__<server>__<tool>. If omitted, all tools are available with normal permission prompts. This field only grants auto-approval — it does not override denials.
When true, prevents Claude from automatically loading this command based on its description — the command's description is not included in Claude's context, so Claude will never know it exists unless the user invokes it. The command can only be triggered manually via its /slash-command. Use for manual-only workflows like /deploy or /commit.
When false, hides the command from the / autocomplete menu so users cannot invoke it directly. The command can still be loaded automatically by Claude based on its description. Use for background knowledge that Claude should apply silently.
Set to fork to run the command in an isolated subagent context instead of inline. When forked, the command's markdown body becomes the subagent's task prompt. The subagent runs in a separate conversation fork with its own context window — it does not have access to the main conversation history.
Which subagent type to use when context is set to fork. Built-in types: Explore, Plan, general-purpose. Can also be the name of a custom agent defined in .claude/agents/. Ignored if context is not fork. Defaults to general-purpose. See built-in subagents.
Lifecycle hooks scoped to this command. Hooks defined here only fire when this command is active and are cleaned up when the command is unloaded. See hooks in skills and agents.