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
Type: object

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

name string required

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).

Examples: "deploy", "fix-issue", "review-pr"
maxLength=64pattern=^[a-z0-9][a-z0-9-]*$
description string

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.

Examples: "Deploy the application to a target environment.", "Fix a GitHub issue by number. Use when the user provides an issue number.", "Review a pull request for quality and correctness."
argument-hint string

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.

Examples: "[environment]", "[issue-number]", "[pr-number]"
model string

Which Claude model to use when this command is active. If omitted, inherits from the current session.

Examples: "sonnet", "opus", "haiku"
allowed-tools string | Permission[]

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.

Examples: "Read, Grep, Glob, Bash", "Bash, Read", ["Read","Grep","Glob"]
disable-model-invocation boolean

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.

Default: false
Examples: true
user-invocable boolean

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.

Default: true
Examples: false
context string

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.

Values: "fork"
Examples: "fork"
agent string

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.

Examples: "Explore", "Plan", "general-purpose"
hooks Hooks

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.