meta-command-creator
Create custom slash commands for Claude Code with markdown and YAML frontmatter. Use when building workflow automations, creating reusable prompts, or defining custom /commands. Use for slash commands, argument handling, file references, bash execution.
Works with
Agent Skills format with YAML frontmatter. Claude Code reads it as-is.
---
name: "meta-command-creator"
description: "Create custom slash commands for Claude Code with markdown and YAML frontmatter. Use when building workflow automations, creating reusable prompts, or defining custom /commands. Use for slash commands, argument handling, file references, bash execution."
license: "MIT"
---
# Custom Slash Command Creator
## Overview
Claude Code slash commands are markdown files with optional YAML frontmatter that create reusable `/command` workflows. Commands and skills are unified: `.claude/commands/` files and `.claude/skills/` directories both create slash commands. Skills are the recommended approach since they support additional features like supporting files, but single-file commands still work.
**When to use:** Repeatable prompts, team workflow standardization, guardrailed operations (deploy, commit), multi-phase tasks, dynamic context injection with bash output.
**When NOT to use:** Complex capabilities needing multiple files and scripts (use a full skill directory instead), one-off prompts, built-in commands that already exist (`/compact`, `/help`, `/init`).
## Quick Reference
| Feature | Syntax / Location | Key Points |
| ----------------------- | ----------------------------------- | ------------------------------------------------------- |
| Project command | `.claude/commands/name.md` | Shows "(project)" in `/help` |
| Project skill | `.claude/skills/name/SKILL.md` | Recommended over commands, supports extra files |
| Personal command | `~/.claude/commands/name.md` | Available across all projects |
| Personal skill | `~/.claude/skills/name/SKILL.md` | Available across all projects |
| Plugin command | `<plugin>/skills/name/SKILL.md` | Namespaced as `plugin-name:skill-name` |
| Subdirectory commands | `.claude/commands/git/commit.md` | Shows "(project:git)" in `/help` |
| All arguments | `$ARGUMENTS` | Entire argument string |
| Positional arguments | `$0`, `$1`, `$2` or `$ARGUMENTS[0]` | Zero-based index |
| Bash injection | `` !`git status` `` | Runs before prompt is sent, output replaces placeholder |
| File reference | `@src/file.ts` | Inlines file contents into prompt |
| Extended thinking | Include "ultrathink" in content | Triggers deeper reasoning mode |
| Session ID | `${CLAUDE_SESSION_ID}` | Current session identifier for logging |
| Frontmatter description | `description: What it does` | Required for `/help` listing and Skill tool |
| Tool restrictions | `allowed-tools: Read, Grep, Glob` | Limits tools without per-use approval |
| Manual-only invocation | `disable-model-invocation: true` | Prevents Claude from auto-triggering |
| Hide from menu | `user-invocable: false` | Background knowledge only Claude loads |
| Argument hint | `argument-hint: [issue-number]` | Shown in autocomplete |
| Model override | `model: claude-sonnet-4-20250514` | Specific model for this command |
| Subagent execution | `context: fork` | Runs in isolated context |
| Subagent type | `agent: Explore` | Built-in or custom agent when `context: fork` |
## Priority Order
When commands share the same name across levels, higher-priority locations win:
1. **Enterprise** (managed settings)
2. **Personal** (`~/.claude/`)
3. **Project** (`.claude/`)
Plugin commands use namespacing (`plugin:name`) so they never conflict. If a skill and a command share the same name, the skill takes precedence.
## Common Mistakes
| Mistake | Impact | Correct Pattern |
| ---------------------------------------- | ----------------------------------- | ---------------------------------------------------------- |
| Adding `name` field in command files | Ignored for `.md` commands | Name is inferred from filename |
| Missing `description` frontmatter | Invisible in `/help` and Skill tool | Always include `description` |
| Using `category` or `tags` fields | Silently ignored | Use subdirectories for organization |
| `$ARGUMENTS` without handling empty case | Unexpected behavior | Check if empty and provide default |
| `` !`bash` `` without `allowed-tools` | Commands fail to execute | Add `allowed-tools: Bash(...)` to frontmatter |
| Expecting project to override personal | Personal wins over project | Personal commands take priority; rename to avoid conflicts |
| Using `context: fork` without a task | Subagent has no actionable work | Only fork skills with explicit step-by-step instructions |
| Overriding built-in command names | Built-ins cannot be overridden | Use different names (`/my-help` not `/help`) |
## Delegation
- **Command pattern discovery**: Use `Explore` agent to find existing commands in `.claude/commands/` or `.claude/skills/`
- **Complex workflow skills**: For multi-file capabilities, create a full skill directory with `SKILL.md` and supporting files
## References
- [Command anatomy: markdown structure, YAML frontmatter fields, file locations, and priority order](references/command-anatomy.md)
- [Arguments and references: $ARGUMENTS, positional args, bash injection, and file references](references/arguments-and-refs.md)
- [Templates: ready-to-use command templates for common patterns](references/templates.md)More General & Other skills
find-skills
vercel-labs/skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
grill-me
mattpocock/skills
A relentless interview to sharpen a plan or design.
grill-with-docs
mattpocock/skills
A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.

