skills/skill-coach/SKILL.md
Guides creation of high-quality Agent Skills with domain expertise, anti-pattern detection, and progressive disclosure best practices. Activate on keywords: create skill, review skill, skill quality, skill best practices, skill anti-patterns, improve skill, skill audit. NOT for general coding advice, slash commands, MCP development, or non-skill Claude Code features.
npx skillsauth add curiositech/windags-skills skill-coachInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Encode real domain expertise, not just surface-level instructions. Focus on shibboleths - the deep knowledge that separates novices from experts.
Use for:
NOT for:
Immediate improvements for existing skills:
Great skills are progressive disclosure machines that:
Critical: Keep SKILL.md under 500 lines. Split details into /references.
[What] [Use for] [Keywords] NOT for [Exclusions]
❌ Bad: "Helps with images"
⚠️ Better: "Image processing with CLIP"
✅ Good: "CLIP semantic search. Use for image-text matching.
Activate on 'CLIP', 'embeddings'. NOT for counting, spatial reasoning."
---
name: your-skill-name
description: [What] [When] [Triggers]. NOT for [Exclusions].
allowed-tools: Read,Write # Minimal only
---
# Skill Name
[One sentence purpose]
## When to Use
✅ Use for: [A, B, C]
❌ NOT for: [D, E, F]
## Core Instructions
[Step-by-step, decision trees, not templates]
## Common Anti-Patterns
### [Pattern]
**Symptom**: [Recognition]
**Problem**: [Why wrong]
**Solution**: [Better approach]
Only these frontmatter keys are allowed by Claude's skill marketplace:
| Key | Required | Purpose |
|-----|----------|---------|
| name | ✅ | Lowercase-hyphenated identifier |
| description | ✅ | Activation keywords + NOT clause |
| allowed-tools | ⚠️ | Comma-separated tool names |
| license | ❌ | e.g., "MIT" |
| metadata | ❌ | Custom key-value pairs |
Invalid keys that will FAIL upload:
# ❌ WRONG - These will break skill upload
integrates_with:
- orchestrator
triggers:
- "activate on this"
tools: Read,Write
outputs: formatted text
coordinates_with: other-skill
python_dependencies:
- numpy
Move custom info to the body:
## Integrations
Works with: orchestrator, team-builder
## Activation Triggers
Responds to: "create skill", "review skill", "skill quality"
Validation command:
# Find invalid frontmatter keys
for skill in .claude/skills/*/SKILL.md; do
sed -n '/^---$/,/^---$/p' "$skill" | grep -E "^[a-zA-Z_-]+:" | cut -d: -f1 | \
grep -vE "^(name|description|license|allowed-tools|metadata)$" && \
echo " ^ in $(basename $(dirname $skill))"
done
Mandatory:
your-skill/
└── SKILL.md # Core instructions (max 500 lines)
Strongly Recommended (self-contained skills):
├── scripts/ # Working code - NOT templates
├── mcp-server/ # Custom MCP if external APIs needed
├── agents/ # Subagent definitions if orchestration needed
├── references/ # Deep dives on domain knowledge
└── CHANGELOG.md # Version history
Skills with working tools are immediately useful. See references/self-contained-tools.md for full patterns.
Quick decision: External APIs? → MCP. Multi-step workflow? → Subagents. Repeatable operations? → Scripts.
When to create a NEW skill?
Skill vs Subagent vs MCP?
Follow these steps in order when creating a new skill:
Skip only if usage patterns are already clear. Ask:
For each example, analyze:
Example analyses:
pdf-editor for "rotate this PDF" → Needs scripts/rotate_pdf.pyfrontend-webapp-builder → Needs assets/hello-world/ templatebig-query skill → Needs references/schema.md for table schemasCreate the skill directory structure:
your-skill/
├── SKILL.md # Core instructions (max 500 lines)
├── scripts/ # Working code - NOT templates
├── references/ # Deep dives on domain knowledge
└── assets/ # Files used in output (templates, icons)
# Validate skill structure and content
python scripts/validate_skill.py <path>
# Check for self-contained tool completeness
python scripts/check_self_contained.py <path>
After real-world use:
Create Skill from Expertise:
Debug Activation Issues (flowchart):
Skill not activating when expected?
├── Check description has specific keywords
│ ├── NO → Add "Activate on: keyword1, keyword2"
│ └── YES → Check if query contains those keywords
│ ├── NO → Add missing keyword variations
│ └── YES → Check for conflicting NOT clause
│ ├── YES → Narrow exclusion scope
│ └── NO → Check file structure
│ ├── SKILL.md missing → Create it
│ └── Wrong location → Move to .claude/skills/
Skill activating when it shouldn't?
├── Missing NOT clause?
│ ├── YES → Add "NOT for: exclusion1, exclusion2"
│ └── NO → NOT clause too narrow
│ └── Expand exclusions based on false positive queries
Run python scripts/test_activation.py <path> to validate
Recursive Self-Improvement (use this skill to improve skills):
python scripts/validate_skill.py <path> → Get validation reportpython scripts/check_self_contained.py <path> → Check tool completenessGuidelines:
Read,Grep,GlobRead,Write,EditRead,Write,Bash(npm:*,git:*)Bash for untrusted skills| Metric | Target | |--------|--------| | Correct activation | >90% | | False positive rate | <5% | | Token usage | <5k typical |
| File | Contents |
|------|----------|
| references/antipatterns.md | Domain shibboleths and anti-pattern catalog with case studies |
| references/shibboleths.md | Expert vs novice knowledge patterns |
| references/validation-checklist.md | Complete review and testing guide |
| references/self-contained-tools.md | Scripts, MCP servers, and subagent implementation patterns |
| references/scoring-rubric.md | Quantitative skill evaluation (0-10 scoring) |
| references/skill-composition.md | Cross-skill dependencies and composition patterns |
| references/skill-lifecycle.md | Maintenance, versioning, and deprecation guidance |
| references/mcp_vs_scripts.md | Architectural decision guide: Skills vs Agents vs MCPs vs Scripts |
This skill guides: Skill creation | Skill auditing | Anti-pattern detection | Progressive disclosure | Domain expertise encoding
data-ai
license: Apache-2.0 NOT for unrelated tasks outside this domain.
development
Use when designing caching strategies (cache-aside, write-through, write-behind), implementing distributed locks, building rate limiters, leaderboards, real-time streams (XADD/consumer groups), pub/sub, or tuning eviction policies. Triggers: thundering-herd on cache miss, dogpile on key expiry, Redlock vs SET-NX-PX choice, sliding-window rate limiter, hot-key on a single cluster slot, big-key blowup, MULTI/EXEC across slots, KEYS in production. NOT for Redis Cluster operations/admin (different domain), embedded KV (SQLite, leveldb), in-process LRU caches, or Memcached.
tools
Drawing the `'use client'` boundary correctly in React Server Components apps (Next.js App Router, RSC frameworks) — leaf-pushing, slot composition, serialization rules, and environment poisoning prevention. Grounded in react.dev and Next.js 16 docs.
development
Use when designing rate limiting for an API, choosing between token bucket / sliding window / leaky bucket / fixed window, implementing it in Redis, deciding edge (Cloudflare/Upstash) vs origin enforcement, sizing per-user vs per-IP vs per-endpoint quotas, returning the right 429 response with Retry-After, or fixing the boundary-burst bug in fixed-window limiters. Triggers: 429 too many requests, INCR + EXPIRE, ZADD + ZREMRANGEBYSCORE + ZCARD, X-RateLimit-Remaining header, Cloudflare WAF rate limiting rules, Upstash @upstash/ratelimit, leaky bucket shaping vs policing, distributed rate limiter consistency. NOT for DDoS mitigation specifically (different scale), CAPTCHA / bot management, full WAF design, or per-user quota billing.