# Command Development

> This skill guides creating slash commands for Claude Code—reusable Markdown-based prompts with YAML configuration. Use when building custom commands, designing command workflows, or extending Claude Code functionality.

- Skill: `majiayu000/command-development` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/command-development`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/command-development/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/command-development

---


# Command Development

## Overview

Commands are reusable prompts defined as Markdown files with optional YAML frontmatter.

**Critical**: Commands are instructions FOR Claude, not messages TO users.

## Command File Structure

```markdown
---
description: Brief help text shown in /help
allowed-tools: Bash(git:*), Read
model: sonnet
argument-hint: [file-path] [options]
---

Instructions for Claude here.

Analyze the file at $1 and provide...
```

## File Locations

| Location | Scope |
|----------|-------|
| `.claude/commands/` | Project (shared via git) |
| `~/.claude/commands/` | Personal (all projects) |
| `plugin/commands/` | Plugin distribution |

## Frontmatter Fields

| Field | Purpose |
|-------|---------|
| `description` | Help text for `/help` command |
| `allowed-tools` | Restrict tool access (e.g., `Bash(git:*)`) |
| `model` | Specify model: haiku, sonnet, opus |
| `argument-hint` | Document expected arguments |
| `disable-model-invocation` | Prevent programmatic calls |

## Dynamic Features

### Arguments

```markdown
# All arguments as single string
Process: $ARGUMENTS

# Positional arguments
File: $1
Options: $2
Mode: $3
```

### File References

```markdown
# Include file contents
Review this code: @src/main.ts

# Argument-based reference
Analyze: @$1
```

### Inline Bash Execution

```markdown
# Current context
Current branch: !`git branch --show-current`
Recent commits: !`git log --oneline -5`
```

## Naming Conventions

Use verb-noun format:
- `review-pr.md`
- `generate-tests.md`
- `fix-issue.md`

## Organization

```
.claude/commands/
├── review-pr.md           # Flat for <15 commands
├── git/                   # Namespaced for 15+
│   ├── commit.md          # Becomes /git-commit
│   └── push.md            # Becomes /git-push
└── testing/
    └── run-tests.md       # Becomes /testing-run-tests
```

## Best Practices

1. **Single responsibility** - One task per command
2. **Document arguments** - Always use `argument-hint`
3. **Validate inputs** - Check before processing
4. **Restrict tools** - Use `allowed-tools` appropriately
5. **Clear naming** - Verb-noun format

