Guide for creating effective skills and commands. Use when users want to create a new skill or command, when updating an existing one, or when asking "how do I make a skill" or "create a command for X".
Content & Writing
1.8K Stars
144 Forks
Updated Jan 13, 2026, 09:21 PM
Why Use This
This skill provides specialized capabilities for heyitsnoah's codebase.
Use Cases
Developing new features in the heyitsnoah repository
Refactoring existing code to follow heyitsnoah standards
Understanding and working with heyitsnoah's codebase structure
---
name: skill-creator
description: Guide for creating effective skills and commands. Use when users want to create a new skill or command, when updating an existing one, or when asking "how do I make a skill" or "create a command for X".
---
# Creating Skills and Commands
This skill provides guidance for creating effective skills and commands in
Claude Code projects.
## Skills vs Commands
| Aspect | Skills (`.claude/skills/`) | Commands (`.claude/commands/`) |
|--------|---------------------------|-------------------------------|
| Trigger | Auto-triggered by context | Explicit `/command` invocation |
| Purpose | Background knowledge, domain expertise | Interactive workflows, multi-step tasks |
| Example | Obsidian markdown syntax reference | `/daily-review` workflow |
| Format | `SKILL.md` in named folder | `command-name.md` file |
## Core Principles
### Concise is Key
The context window is a public good. Skills share it with system prompts,
conversation history, and the user's actual request.
**Default assumption: Claude is already very smart.** Only add context Claude
doesn't already have. Challenge each piece: "Does Claude really need this?"
Prefer concise examples over verbose explanations.
### Set Appropriate Degrees of Freedom
Match specificity to the task's fragility:
**High freedom (text instructions)**: Multiple approaches valid, context-dependent
**Medium freedom (pseudocode/templates)**: Preferred pattern exists, some variation OK
**Low freedom (specific scripts)**: Operations fragile, consistency critical
## Skill Structure
```
skill-name/
├── SKILL.md (required)
│ ├── YAML frontmatter (name, description - required)
│ └── Markdown instructions
└── Optional resources
├── references/ # Documentation loaded as needed
├── scripts/ # Executable code
└── assets/ # Templates, images, etc.
```
### SKILL.md Frontmatter
```yaml
---
name: skill-name
description:
What this skill does and when to use it. This is the PRIMARY trigger -
Claude reads this to decide when to load the skill. Include specific
scenarios and keywords that should activate it.
---
```
**Important**: The description is loaded into context ALWAYS. The body is only
loaded AFTER the skill triggers. Put "when to use" in the description, not the
body.
## Command Structure
Commands are simpler - single markdown files:
```
.claude/commands/
├── daily-review.md
├── release.md
└── new-command.md
```
### Command Frontmatter
```yaml
---
name: command-name
description: 'Brief description shown in /help'
argument-hint: '[optional] [args]'
allowed-tools: [Read, Glob, Bash(git:*)] # Optional: restrict tools
---
```
## Progressive Disclosure
Use layered loading to manage context efficiently:
1. **Metadata (name + description)** - Always in context (~100 words)
2. **SKILL.md body** - When skill triggers (<500 lines ideal)
3. **References** - As needed by Claude (unlimited)
### Pattern: Reference Files
Keep SKILL.md lean, link to detailed references:
```markdown
# Skill Name
## Quick Reference
Basic usage here.
## Detailed Guides
- **Complex Topic A**: See `references/topic-a.md`
- **Complex Topic B**: See `references/topic-b.md`
```
Claude reads reference files only when needed.
## Creating a New Skill
### Step 1: Understand the Use Case
Ask:
- "What functionality should this skill support?"
- "What would trigger someone to need this?"
- "What does Claude NOT already know that this should teach?"
### Step 2: Plan the Contents
Analyze concrete examples:
- What code/scripts get rewritten each time?
- What documentation would help?
- What assets (templates, examples) are needed?
### Step 3: Create the Skill
```bash
mkdir -p .claude/skills/my-skill
```
Write `SKILL.md`:
```yaml
---
name: my-skill
description:
What it does. When to use it. Keywords that trigger it.
---
# My Skill
## Overview
Brief explanation.
## Quick Reference
Essential information here.
## Advanced Topics
Link to references if complex.
```
### Step 4: Test and Iterate
1. Start a new Claude session
2. Ask questions that should trigger the skill
3. Verify Claude uses the skill appropriately
4. Refine based on gaps
## Creating a New Command
### Step 1: Define the Workflow
Commands are for explicit multi-step workflows:
- What steps does this workflow include?
- What tools are needed?
- What output should the user see?
### Step 2: Create the Command
```bash
touch .claude/commands/my-command.md
```
Write the command:
```yaml
---
name: my-command
description: 'Brief description for /help'
argument-hint: '[--flag] [arg]'
---
# My Command
## Instructions
1. First step
2. Second step
3. Verify result
## Handling Edge Cases
What to do when X happens.
```
### Step 3: Test
Run `/my-command` and verify the workflow executes correctly.
## Common Patterns
### Workflow with Verification
```markdown
## Workflow
1. Gather context
2. Perform action
3. **Verify result before claiming success**
4. Report outcome
## Verification
Always run `<command>` and check output before claiming complete.
```
### Reference Hub
```markdown
# API Reference Hub
| API | Purpose | Reference |
|-----|---------|-----------|
| API A | Feature X | `references/api-a.md` |
| API B | Feature Y | `references/api-b.md` |
## When to Use Each
Brief guidance on which reference to consult.
```
### Decision Matrix
```markdown
## Approach Selection
| Condition | Approach |
|-----------|----------|
| Simple case | Do X |
| Complex case | Do Y |
| Edge case | Ask user |
```
## What NOT to Include
- README.md, CHANGELOG.md (just clutter)
- Obvious information Claude already knows
- Overly detailed explanations (use examples instead)
- User-facing documentation (skills are for Claude)
## Skill vs Command Decision
**Use a Skill when:**
- Providing background knowledge
- Teaching domain expertise
- Reference material that applies across tasks
**Use a Command when:**
- Interactive workflow with user
- Multi-step process needing explicit invocation
- Specific task with defined start/end