From watzon-claude-code
Use when creating new skills, updating existing skills, or understanding skill structure. Triggers: "create a skill", "write a skill", "new skill for", "skill that does", "how do skills work". Provides complete workflow from concept to deployment with progressive disclosure.
npx claudepluginhub joshuarweaver/cascade-code-languages-misc-2 --plugin watzon-claude-codeThis skill uses the workspace's default tool permissions.
Create effective, well-structured skills for Claude Code and OpenCode.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Create effective, well-structured skills for Claude Code and OpenCode.
bash scripts/init_skill.sh <skill-name> [output-dir]skill-name/
├── SKILL.md # Required - frontmatter + instructions
├── scripts/ # Executable code (Python/Bash)
├── references/ # Documentation loaded on-demand
└── assets/ # Templates, images, static files
Frontmatter (YAML) - only two fields:
name: Lowercase, hyphens, max 64 chars (must match directory name)description: What it does + when to use it, max 1024 charsFor complete structure details, see references/skill-anatomy.md.
Answer these questions:
# Create new skill with proper structure
bash scripts/init_skill.sh my-skill-name ~/.claude/skills
# Or manually:
mkdir -p ~/.claude/skills/my-skill-name
touch ~/.claude/skills/my-skill-name/SKILL.md
---
name: my-skill-name
description: |
Use when [specific triggers and symptoms].
Provides [what it does] for [use case].
---
Critical: Description is the PRIMARY trigger mechanism. Include:
Keep SKILL.md lean (<500 lines, ~1500-2000 words):
| Type | Location | When to Use |
|---|---|---|
| Scripts | scripts/ | Deterministic operations, reusable code |
| References | references/ | Detailed docs, API specs, schemas |
| Assets | assets/ | Templates, images, static files |
Skills use three-level loading to conserve context:
| Level | What Loads | When |
|---|---|---|
| Metadata | name + description (~100 words) | Always in context |
| SKILL.md body | Instructions (<5k words) | When skill triggers |
| Resources | scripts/, references/, assets/ | When explicitly needed |
Key principle: Only load what's needed. Reference files from SKILL.md clearly:
For API details, see [references/api.md](references/api.md).
For form handling, see [references/forms.md](references/forms.md).
The description field is CRITICAL for skill discovery.
Pattern: Use when [triggers] - [what it provides]
# Bad - vague, no triggers
description: Helps with testing
# Bad - implementation details, not triggers
description: Uses Jest and React Testing Library
# Good - specific triggers + value
description: |
Use when tests fail intermittently, have race conditions, or
timing dependencies - provides condition-based polling patterns
that replace arbitrary timeouts.
| Mistake | Fix |
|---|---|
| Everything in SKILL.md | Move detailed content to references/ |
| Vague description | Add specific triggers and symptoms |
| No "Use when" triggers | Description must tell Claude WHEN to use it |
| Deeply nested references | Keep references one level from SKILL.md |
| Missing cross-references | Point to references/ files explicitly |
Before deploying a skill:
name in frontmatter matches directory namedescription starts with "Use when..." and includes triggers