home / skills / davila7 / claude-code-templates / command-creator

This skill guides creating Claude Code slash commands, generating optimized, executable command files with clear structure and best-practice guidance.

This is most likely a fork of the command-creator skill from softaworks
npx playbooks add skill davila7/claude-code-templates --skill command-creator

Review the files below or copy the command above to add this skill to your agents.

Files (5)
SKILL.md
6.8 KB
---
name: command-creator
description: This skill should be used when creating a Claude Code slash command. Use when users ask to "create a command", "make a slash command", "add a command", or want to document a workflow as a reusable command. Essential for creating optimized, agent-executable slash commands with proper structure and best practices.
---

# Command Creator

This skill guides the creation of Claude Code slash commands - reusable workflows that can be invoked with `/command-name` in Claude Code conversations.

## About Slash Commands

Slash commands are markdown files stored in `.claude/commands/` (project-level) or `~/.claude/commands/` (global/user-level) that get expanded into prompts when invoked. They're ideal for:

- Repetitive workflows (code review, PR submission, CI fixing)
- Multi-step processes that need consistency
- Agent delegation patterns
- Project-specific automation

## When to Use This Skill

Invoke this skill when users:

- Ask to "create a command" or "make a slash command"
- Want to automate a repetitive workflow
- Need to document a consistent process for reuse
- Say "I keep doing X, can we make a command for it?"
- Want to create project-specific or global commands

## Bundled Resources

This skill includes reference documentation for detailed guidance:

- **references/patterns.md** - Command patterns (workflow automation, iterative fixing, agent delegation, simple execution)
- **references/examples.md** - Real command examples with full source (submit-stack, ensure-ci, create-implementation-plan)
- **references/best-practices.md** - Quality checklist, common pitfalls, writing guidelines, template structure

Load these references as needed when creating commands to understand patterns, see examples, or ensure quality.

## Command Structure Overview

Every slash command is a markdown file with:

```markdown
---
description: Brief description shown in /help (required)
argument-hint: <placeholder> (optional, if command takes arguments)
---

# Command Title

[Detailed instructions for the agent to execute autonomously]
```

## Command Creation Workflow

### Step 1: Determine Location

**Auto-detect the appropriate location:**

1. Check git repository status: `git rev-parse --is-inside-work-tree 2>/dev/null`
2. Default location:
   - If in git repo → Project-level: `.claude/commands/`
   - If not in git repo → Global: `~/.claude/commands/`
3. Allow user override:
   - If user explicitly mentions "global" or "user-level" → Use `~/.claude/commands/`
   - If user explicitly mentions "project" or "project-level" → Use `.claude/commands/`

Report the chosen location to the user before proceeding.

### Step 2: Show Command Patterns

Help the user understand different command types. Load **references/patterns.md** to see available patterns:

- **Workflow Automation** - Analyze → Act → Report (e.g., submit-stack)
- **Iterative Fixing** - Run → Parse → Fix → Repeat (e.g., ensure-ci)
- **Agent Delegation** - Context → Delegate → Iterate (e.g., create-implementation-plan)
- **Simple Execution** - Run command with args (e.g., codex-review)

Ask the user: "Which pattern is closest to what you want to create?" This helps frame the conversation.

### Step 3: Gather Command Information

Ask the user for key information:

#### A. Command Name and Purpose

Ask:

- "What should the command be called?" (for filename)
- "What does this command do?" (for description field)

Guidelines:

- Command names MUST be kebab-case (hyphens, NOT underscores)
  - ✅ CORRECT: `submit-stack`, `ensure-ci`, `create-from-plan`
  - ❌ WRONG: `submit_stack`, `ensure_ci`, `create_from_plan`
- File names match command names: `my-command.md` → invoked as `/my-command`
- Description should be concise, action-oriented (appears in `/help` output)

#### B. Arguments

Ask:

- "Does this command take any arguments?"
- "Are arguments required or optional?"
- "What should arguments represent?"

If command takes arguments:

- Add `argument-hint: <placeholder>` to frontmatter
- Use `<angle-brackets>` for required arguments
- Use `[square-brackets]` for optional arguments

#### C. Workflow Steps

Ask:

- "What are the specific steps this command should follow?"
- "What order should they happen in?"
- "What tools or commands should be used?"

Gather details about:

- Initial analysis or checks to perform
- Main actions to take
- How to handle results
- Success criteria
- Error handling approach

#### D. Tool Restrictions and Guidance

Ask:

- "Should this command use any specific agents or tools?"
- "Are there any tools or operations it should avoid?"
- "Should it read any specific files for context?"

### Step 4: Generate Optimized Command

Create the command file with agent-optimized instructions. Load **references/best-practices.md** for:

- Template structure
- Best practices for agent execution
- Writing style guidelines
- Quality checklist

Key principles:

- Use imperative/infinitive form (verb-first instructions)
- Be explicit and specific
- Include expected outcomes
- Provide concrete examples
- Define clear error handling

### Step 5: Create the Command File

1. Determine full file path:
   - Project: `.claude/commands/[command-name].md`
   - Global: `~/.claude/commands/[command-name].md`

2. Ensure directory exists:

   ```bash
   mkdir -p [directory-path]
   ```

3. Write the command file using the Write tool

4. Confirm with user:
   - Report the file location
   - Summarize what the command does
   - Explain how to use it: `/command-name [arguments]`

### Step 6: Test and Iterate (Optional)

If the user wants to test:

1. Suggest testing: `You can test this command by running: /command-name [arguments]`
2. Be ready to iterate based on feedback
3. Update the file with improvements as needed

## Quick Tips

**For detailed guidance, load the bundled references:**

- Load **references/patterns.md** when designing the command workflow
- Load **references/examples.md** to see how existing commands are structured
- Load **references/best-practices.md** before finalizing to ensure quality

**Common patterns to remember:**

- Use Bash tool for `pytest`, `pyright`, `ruff`, `prettier`, `make`, `gt` commands
- Use Task tool to invoke subagents for specialized tasks
- Check for specific files first (e.g., `.PLAN.md`) before proceeding
- Mark todos complete immediately, not in batches
- Include explicit error handling instructions
- Define clear success criteria

## Summary

When creating a command:

1. **Detect location** (project vs global)
2. **Show patterns** to frame the conversation
3. **Gather information** (name, purpose, arguments, steps, tools)
4. **Generate optimized command** with agent-executable instructions
5. **Create file** at appropriate location
6. **Confirm and iterate** as needed

Focus on creating commands that agents can execute autonomously, with clear steps, explicit tool usage, and proper error handling.

Overview

This skill helps create Claude Code slash commands—reusable, agent-executable workflows invoked with /command-name. It guides you through choosing storage location, selecting a command pattern, collecting name/arguments/steps, and generating an optimized markdown command file. The goal is a concise, reliable command that agents can run autonomously with explicit error handling and success criteria.

How this skill works

It detects whether you are in a git repository to choose project-level (.claude/commands/) or global (~/.claude/commands/) placement, then prompts you to pick a command pattern (workflow automation, iterative fixing, agent delegation, or simple execution). It gathers required metadata (kebab-case name, description, argument hints), workflow steps, tool constraints, and success criteria, then generates a frontmatter-markdown command file formatted for agent execution. It reports the path and usage and can iterate after testing.

When to use it

  • When you ask “create a command”, “make a slash command”, or “add a command”.
  • When you want to automate a repetitive workflow or multi-step process.
  • When you need a consistent, reusable agent workflow for a project or user-level automation.
  • When you want to document a routine as an executable command for other team members or agents.
  • When you need a structured way to delegate tasks to subagents or tools.

Best practices

  • Use kebab-case for command filenames and names (no underscores).
  • Prefer verb-first, imperative instructions and explicit success criteria.
  • Include argument-hint in frontmatter when arguments exist; mark required vs optional with <> vs [].
  • Be specific about allowed tools, file reads, and operations to avoid unintended behavior.
  • Add clear error handling steps and what constitutes a retry or failure before reporting completion.

Example use cases

  • Create /submit-stack to gather PR info, run checks, submit PR, and report results.
  • Create /ensure-ci to run tests, parse failures, attempt fixes, and iterate until CI passes.
  • Create /create-implementation-plan to gather context, delegate subtasks to agents, and produce a plan file.
  • Create /codex-review to run linters and produce a focused code review summary.
  • Create a global helper (/format-commit) for formatting commit messages and enforcing conventions.

FAQ

How does the skill choose project vs global location?

It auto-detects git repository presence. If inside a git repo it defaults to .claude/commands/; otherwise it uses ~/.claude/commands/. You can override by requesting “project” or “global.”

What format must command filenames use?

Filenames must be kebab-case and end in .md. The command invoked is /filename-without-extension.

How do I include arguments?

Add argument-hint: <placeholder> to frontmatter. Use angle brackets for required args and square brackets for optional args.