From cc
Guide for creating and editing Claude Code skills. Use when user wants to create a new skill, update an existing skill, or needs help structuring a SKILL.md file.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cc:skill-creatorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Ask the user:
Ask the user:
If the user's description is already clear, skip straight to drafting.
Infer from context, ask only if ambiguous:
~/.claude/skills/) - across all projects<project>/.claude/skills/) - repo-specific<plugin>/plugins/<name>/skills/) - distributed via marketplaceSimple (just write the SKILL.md):
Full (skill with bundled resources):
Simple path: Create the directory and write SKILL.md directly.
Full path:
Present draft and iterate. Skills improve most after real usage.
skill-name/
├── SKILL.md # Main instructions (required)
├── references/ # Docs loaded into context on demand (optional)
│ ├── api-reference.md
│ └── schema.md
├── scripts/ # Deterministic code (optional)
│ └── helper.py
└── assets/ # Files used in output (optional)
└── template.html
Reference supporting files from SKILL.md so Claude knows they exist:
- For API details, see [references/api-reference.md](references/api-reference.md)
- For schema docs, see [references/schema.md](references/schema.md)
---
name: skill-name
description: Brief description of capability. Use when [specific triggers].
---
# Skill Name
[Core instructions, workflows, and guidance]
| Field | Description |
|---|---|
name | Skill identifier, becomes /slash-command. Lowercase, hyphens, max 64 chars. |
description | What it does + when to trigger. Claude uses this to decide when to load the skill. |
disable-model-invocation | true to prevent Claude auto-loading (manual /invoke only). Use for side-effect workflows like deploy, commit. |
user-invocable | false to hide from / menu. Use for background knowledge Claude should load automatically but users shouldn't invoke. |
allowed-tools | Tools Claude can use without permission prompts when skill is active. E.g. Read, Grep, Glob. |
context | fork to run in an isolated subagent. Skill content becomes the subagent's task. |
agent | Subagent type when context: fork. Options: Explore, Plan, general-purpose, or custom agent name. |
argument-hint | Autocomplete hint, e.g. [issue-number] or [filename]. |
Use in skill content for dynamic values:
$ARGUMENTS - all arguments passed when invoking (/skill-name arg1 arg2)$0, $1, $2 - individual arguments by position${CLAUDE_SESSION_ID} - current session ID!`command` - preprocesses shell command output into the prompt before Claude sees itDescription is the most important field. It's the only thing Claude sees when deciding which skill to load. Include:
Two types of skill content:
disable-model-invocation: true.Body should contain:
Keep SKILL.md lean. Aim for under 200 lines, hard max 500. Move detailed material to supporting files.
Add scripts/ when:
Scripts save tokens and improve reliability vs regenerating code each time.
Path resolution: For plugin skills, reference scripts with ${CLAUDE_SKILL_DIR}/scripts/helper.js (relative paths won't resolve). Use ${CLAUDE_PLUGIN_ROOT} only when referencing files outside the skill's own directory. For global/project skills, relative paths work fine.
Split content out of SKILL.md when:
Prefer multiple focused files over one large reference file. E.g. api-reference.md, schema.md, examples.md rather than a single reference.md with everything.
For large files (>10k words), include grep patterns in SKILL.md so Claude can search efficiently.
After drafting, verify:
npx claudepluginhub lttr/claude-marketplace --plugin ccGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.