Guide for creating and managing Claude Code skills. Use when creating a new skill, updating an existing skill, or validating skill structure. Enforces ABOUTME headers, proper frontmatter format, and progressive disclosure patterns. Triggers on "create skill", "new skill", "skill template", "init skill", "validate skill", "skill structure", "update skill", "modify skill", "edit skill", "add to skill", "change skill", "SKILL.md", "skill frontmatter", "skill description", "skill triggers", "allowed-tools", "skill file", "claude code skill", "custom skill", "personal skill", "project skill".
Create effective Claude Code skills following established conventions.
| Script | Purpose |
|--------|---------|
| init_skill.py | Create new skill with proper structure |
| validate_skill.py | Validate skill frontmatter and structure |
Run with --help for full options:
uv run ~/.claude/skills/skill-creator/scripts/init_skill.py --help
Every skill consists of:
skill-name/
├── SKILL.md (required)
│ ├── YAML frontmatter (name, description, allowed-tools)
│ ├── ABOUTME headers (after closing ---)
│ └── Markdown body (instructions)
└── Optional resources/
├── scripts/ - Executable code (Python/Bash)
├── references/ - Documentation loaded on demand
└── assets/ - Files used in output (templates, etc.)
---
name: skill-name
description: >-
What the skill does and WHEN to use it. Include trigger phrases.
Triggers on "keyword1", "keyword2", "keyword3".
allowed-tools: Read, Write, Edit, Bash
---
Allowed frontmatter keys: name, description, allowed-tools, license, metadata
MUST appear immediately after the closing ---:
---
name: my-skill
description: What it does. Triggers on "x", "y".
allowed-tools: Read, Write
---
# ABOUTME: [Brief description of file purpose]
# ABOUTME: [Key context or dependencies]
# Skill Title
Write instructions Claude needs to execute the skill effectively.
When a session is resumed from context compaction, verify skill creation state:
┌─────────────────────────────────────────────────────────────┐
│ SESSION RESUMED - SKILL CREATION VERIFICATION │
│ │
│ Before continuing skill creation/update work: │
│ │
│ 1. Was I in the middle of creating/updating a skill? │
│ → Check summary for skill names being worked on │
│ → Check ~/.claude/skills/ for partial skills │
│ │
│ 2. Did the skill pass validation? │
│ → Run: uv run validate_skill.py <skill-path> │
│ │
│ 3. Are ABOUTME headers correct? │
│ → Must appear AFTER closing --- of frontmatter │
│ → Must have 2 lines describing purpose and context │
│ │
│ If skill creation was in progress: │
│ → Re-validate the skill structure │
│ → Check description is under 1024 chars │
│ → Ensure trigger phrases are included │
└─────────────────────────────────────────────────────────────┘
uv run ~/.claude/skills/skill-creator/scripts/init_skill.py \
my-new-skill \
--path ~/.claude/skills
🚨 IMPORTANT: When creating scripts, invoke the appropriate language skill FIRST:
.sh files → /bash.py files → /python.go files → /golanguv run ~/.claude/skills/skill-creator/scripts/validate_skill.py \
~/.claude/skills/my-new-skill
Test the skill by invoking it in a Claude Code session with trigger phrases.
When modifying an existing skill (adding features, fixing issues, improving documentation):
Read the existing SKILL.md to understand:
# Check current structure
head -50 ~/.claude/skills/<skill-name>/SKILL.md
Before editing, identify:
Follow these rules when editing:
uv run ~/.claude/skills/skill-creator/scripts/validate_skill.py \
~/.claude/skills/<skill-name>
Verify the skill triggers correctly with both old and new trigger phrases.
Context window is shared. Only include what Claude does NOT already know. Prefer examples over verbose explanations.
| Level | When Loaded | Size Target | |-------|-------------|-------------| | Frontmatter | Always | ~100 words | | SKILL.md body | When triggered | <500 lines | | References | On demand | Unlimited |
Match specificity to task fragility:
See references/patterns.md for:
The validate script checks:
| Issue | Solution |
|-------|----------|
| Skill not triggering | Add trigger phrases to description |
| Skill not triggering on updates | Add "update skill", "modify skill" to triggers |
| ABOUTME before frontmatter | Move ABOUTME after closing --- |
| Description too long | Move details to SKILL.md body |
| Missing allowed-tools | Add tools the skill needs |
| Style inconsistency after edit | Read existing skill first; match patterns |
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer