Create and manage Claude Code skills following Anthropic best practices...
Comprehensive guide for creating and managing skills in Claude Code with auto-activation system, following Anthropic's official best practices including the 500-line rule and progressive disclosure pattern.
Automatically activates when you mention:
1. UserPromptSubmit Hook (Proactive Suggestions)
.claude/hooks/skill-activation-prompt.tsenforcement: "block" skills are marked MANDATORY; suggest/warn skills always appear as recommendations2. PreToolUse Hook - Skill Verification Guard (Enforcement)
.claude/hooks/skill-verification-guard.tsenforcement: "block" skills can block3. PostToolUse Hook - Edit Tracker
.claude/hooks/post-tool-use-tracker.sh4. PostToolUse Hook - Skill Activation Tracker
.claude/hooks/skill-activation-tracker.ts5. Stop Hook - Session Doc Updater
.claude/hooks/session-doc-updater.tsOptional (shipped but not wired): error-handling-reminder.ts (Stop) ā a gentle post-response self-check that analyzes edited files for risky patterns instead of blocking edits.
Philosophy Change (2025-10-27): We moved away from blocking PreToolUse for Sentry/error handling. Instead, use gentle post-response reminders that don't block workflow but maintain code quality awareness.
Location: .claude/skills/skill-rules.json
Defines:
Purpose: Enforce critical best practices that prevent errors
Characteristics:
"guardrail""block""critical" or "high"Examples:
frontend-dev-guidelines - Enforce React/TypeScript patterns (the shipped block guardrail)database-verification skill verifying table/column names before Prisma queries (hypothetical)When to Use:
Purpose: Provide comprehensive guidance for specific areas
Characteristics:
"domain""suggest""high" or "medium"Examples:
backend-dev-guidelines - Node.js/Express/TypeScript patternsfrontend-dev-guidelines - React/TypeScript best practiceserror-tracking - Sentry integration guidanceWhen to Use:
Location: .claude/skills/{skill-name}/SKILL.md
Template:
---
name: my-new-skill
description: Brief description including keywords that trigger this skill. Mention topics, file types, and use cases. Be explicit about trigger terms.
---
# My New Skill
## Purpose
What this skill helps with
## When to Use
Specific scenarios and conditions
## Key Information
The actual guidance, documentation, patterns, examples
Best Practices:
See SKILL_RULES_REFERENCE.md for complete schema.
Basic Template:
{
"my-new-skill": {
"type": "domain",
"enforcement": "suggest",
"priority": "medium",
"promptTriggers": {
"keywords": ["keyword1", "keyword2"],
"intentPatterns": ["(create|add).*?something"]
}
}
}
Test UserPromptSubmit:
echo '{"session_id":"test","prompt":"your test prompt"}' | \
npx tsx .claude/hooks/skill-activation-prompt.ts
Test PreToolUse:
cat <<'EOF' | npx tsx .claude/hooks/skill-verification-guard.ts
{"session_id":"test","tool_name":"Edit","tool_input":{"file_path":"test.ts"}}
EOF
Based on testing:
ā Keep SKILL.md under 500 lines ā Use progressive disclosure with reference files ā Add table of contents to reference files > 100 lines ā Write detailed description with trigger keywords ā Test with 3+ real scenarios before documenting ā Iterate based on actual usage
enforcement: "block" skills can hard-block ā in both the UserPromptSubmit mandatory list and the PreToolUse guardrail checks. suggest/warn matches are always advisory.Example: Database column name verification
Example: Frontend development guidelines
Rarely used - most skills are either BLOCK or SUGGEST.
Purpose: Don't nag repeatedly in same session
How it works:
State File: .claude/hooks/state/skills-used-{session_id}.json
Purpose: Permanent skip for verified files
Marker: // @skip-validation
Usage:
// @skip-validation
import { PrismaService } from './prisma';
// This file has been manually verified
NOTE: Use sparingly - defeats the purpose if overused
Purpose: Emergency disable, temporary override
Global disable:
export SKIP_MANDATORY_SKILLS=true # Disables mandatory-skill blocking
export SKIP_PRETOOLUSE_AI=true # Disables AI edit analysis in the guard
Skill-specific (via skipConditions.envOverride in skill-rules.json):
export SKIP_FRONTEND_GUIDELINES=true
export SKIP_ERROR_REMINDER=true # Optional Stop-hook reminder
When creating a new skill, verify:
.claude/skills/{name}/SKILL.mdskill-rules.jsonjq . skill-rules.jsonFor detailed information on specific topics, see:
Complete guide to all trigger types:
Complete skill-rules.json schema:
Deep dive into hook internals:
Comprehensive debugging guide:
Ready-to-use pattern collection:
Future enhancements and ideas:
.claude/skills/{name}/SKILL.md with frontmatter.claude/skills/skill-rules.jsonnpx tsx commandsSee TRIGGER_TYPES.md for complete details.
// @skip-validation (permanent skip)SKIP_MANDATORY_SKILLS, per-skill envOverride (emergency disable)ā 500-line rule: Keep SKILL.md under 500 lines ā Progressive disclosure: Use reference files for details ā Table of contents: Add to reference files > 100 lines ā One level deep: Don't nest references deeply ā Rich descriptions: Include all trigger keywords (max 1024 chars) ā Test first: Build 3+ evaluations before extensive documentation ā Gerund naming: Prefer verb + -ing (e.g., "processing-pdfs")
Test hooks manually:
# UserPromptSubmit
echo '{"prompt":"test"}' | npx tsx .claude/hooks/skill-activation-prompt.ts
# PreToolUse
cat <<'EOF' | npx tsx .claude/hooks/skill-verification-guard.ts
{"tool_name":"Edit","tool_input":{"file_path":"test.ts"}}
EOF
See TROUBLESHOOTING.md for complete debugging guide.
Configuration:
.claude/skills/skill-rules.json - Master configuration.claude/hooks/state/ - Session tracking.claude/settings.json - Hook registrationHooks:
.claude/hooks/skill-activation-prompt.ts - UserPromptSubmit.claude/hooks/skill-verification-guard.ts - PreToolUse (Edit|MultiEdit|Write).claude/hooks/post-tool-use-tracker.sh - PostToolUse (Edit|MultiEdit|Write).claude/hooks/skill-activation-tracker.ts - PostToolUse (Skill).claude/hooks/session-doc-updater.ts - Stop.claude/hooks/error-handling-reminder.ts - Stop (optional, not wired by default)All Skills:
.claude/skills/*/SKILL.md - Skill content filesSkill Status: COMPLETE - Restructured following Anthropic best practices ā Line Count: < 500 (following 500-line rule) ā Progressive Disclosure: Reference files for detailed information ā
Next: Create more skills, refine patterns based on usage