Meta-skill for creating and managing Claude Code skills
Skill Developer
Meta-skill for creating new Claude Code skills, including skills that wrap MCP pipelines.
When to Use
"Create a skill for X"
"Help me make a new skill"
"Turn this script into a skill"
"How do I create a skill?"
Skill Structure
Skills live in .claude/skills/<skill-name>/:
.claude/skills/my-skill/
├── SKILL.md # Required: Main skill definition
├── scripts/ # Optional: Supporting scripts
└── templates/ # Optional: Templates, examples
SKILL.md Format
---
name: skill-name
description: Brief description (shown in skill list)
allowed-tools: [Bash, Read, Write] # Optional: restrict tools
---
# Skill Name
## When to Use
[When Claude should discover this skill]
## Instructions
[Step-by-step instructions for Claude to follow]
## Examples
[Usage examples]
Creating an MCP Pipeline Skill
To create a new MCP chain script and wrap it as a skill:
Step 1: Use the Template
Copy the multi-tool-pipeline template:
cp $CLAUDE_PROJECT_DIR/scripts/multi_tool_pipeline.py $CLAUDE_PROJECT_DIR/scripts/my_pipeline.py
Reference the template pattern:
cat $CLAUDE_PROJECT_DIR/.claude/skills/multi-tool-pipeline/SKILL.md
cat $CLAUDE_PROJECT_DIR/scripts/multi_tool_pipeline.py
Step 2: Customize the Script
Edit your new script to chain the MCP tools you need:
async def main():
from runtime.mcp_client import call_mcp_tool
args = parse_args()
# Chain your MCP tools (serverName__toolName)
result1 = await call_mcp_tool("server1__tool1", {"param": args.arg1})
result2 = await call_mcp_tool("server2__tool2", {"input": result1})
print(result2)
Step 2: Create the Skill
Create .claude/skills/my-pipeline/SKILL.md:
---
name: my-pipeline
description: What the pipeline does
allowed-tools: [Bash, Read]
---
# My Pipeline Skill
## When to Use
- [Trigger conditions]
## Instructions
Run the pipeline:
\`\`\`bash
uv run python -m runtime.harness scripts/my_pipeline.py --arg1 "value"
\`\`\`
### Parameters
- `--arg1`: Description
## MCP Servers Required
- server1: For tool1
- server2: For tool2
Step 3: Add Triggers (Optional)
Add to .claude/skills/skill-rules.json:
{
"skills": {
"my-pipeline": {
"type": "domain",
"enforcement": "suggest",
"priority": "medium",
"description": "What it does",
"promptTriggers": {
"keywords": ["keyword1", "keyword2"],
"intentPatterns": ["(pattern).*?(match)"]
}
}
}
}
Reference Files
For full details, read:
cat $CLAUDE_PROJECT_DIR/.claude/rules/skill-development.md
cat $CLAUDE_PROJECT_DIR/.claude/rules/mcp-scripts.md
Quick Checklist
SKILL.md has frontmatter (name, description)
"When to Use" section is clear
Instructions are copy-paste ready
MCP servers documented if needed
Triggers added to skill-rules.json (optional)
Examples in This Repo
Look at existing skills for patterns:
ls $CLAUDE_PROJECT_DIR/.claude/skills/
cat $CLAUDE_PROJECT_DIR/.claude/skills/commit/SKILL.md
cat $CLAUDE_PROJECT_DIR/.claude/skills/firecrawl-scrape/SKILL.mddon't have the plugin yet? install it then click "run inline in claude" again.
restructured original linear guide into implexa's 6-component format, made decision logic explicit (guardrail vs domain, false positive vs negative handling, skip conditions), documented all external files as inputs with setup guidance, added edge cases (false positives, performance, hook timeout), clarified enforcement levels with clear if-else branches.
This skill guides you through creating, configuring, testing, and managing skills in Claude Code. Use it when you're building a new skill from scratch, adding trigger rules to skill-rules.json, debugging why a skill isn't activating, understanding the two-hook architecture (UserPromptSubmit and PreToolUse), or learning Anthropic's best practices around the 500-line rule and progressive disclosure. It covers the full lifecycle from conception through testing and deployment.
Existing skill infrastructure:
.claude/skills/ directory (skill files live here).claude/skills/skill-rules.json (master config, defines all triggers and enforcement).claude/hooks/skill-activation-prompt.ts (UserPromptSubmit hook, runs before Claude sees prompt).claude/hooks/skill-verification-guard.ts (PreToolUse hook, runs before file edit/write).claude/hooks/error-handling-reminder.ts (Stop hook, runs after response).claude/hooks/state/ directory (session tracking for repeat-nag prevention).claude/settings.json (hook registration)Reference files (for detailed info, not required input but helpful context):
TRIGGER_TYPES.md (keyword, intent pattern, file path, content pattern details)SKILL_RULES_REFERENCE.md (TypeScript schema, validation, examples)HOOK_MECHANISMS.md (flow diagrams, exit codes, performance)TROUBLESHOOTING.md (debugging checklist)PATTERNS_LIBRARY.md (copy-paste regex and glob patterns)ADVANCED.md (future enhancements, versioning ideas)What you bring:
Decide skill type and enforcement level
Create skill file with proper frontmatter
.claude/skills/{skill-name}/SKILL.mdAdd skill entry to skill-rules.json
.claude/skills/skill-rules.jsonjq . skill-rules.json (must exit 0)Test UserPromptSubmit trigger (proactive suggestions)
echo '{"session_id":"test","prompt":"your test prompt"}' | npx tsx .claude/hooks/skill-activation-prompt.tsTest PreToolUse trigger (guardrail blocking, if applicable)
cat <<'EOF' | npx tsx .claude/hooks/skill-verification-guard.ts with JSON containing tool_name "Edit" and file_path matching your glob patternsrc/**/*.ts vs **/*.ts)Refine patterns based on testing results
Configure skip conditions for repeat-nag prevention (guardrail skills)
// @skip-validation file marker option for verified filesexport SKIP_SKILL_GUARDRAILS=true or export SKIP_{SKILL_NAME}=trueRun full testing checklist before deploy
If creating a guardrail skill (enforcement: "block"):
// @skip-validation file marker option for verified filesIf SKILL.md grows over 500 lines:
If trigger patterns cause false positives (skill activates too often):
(create|add).*skill instead of just skill)If hook execution is slow (>200ms):
time command, cache pattern compilation if possibleIf user needs to disable a skill in their session:
// @skip-validation marker on specific file (permanent), set env var SKIP_{SKILL_NAME}=true (session-only), or set SKIP_SKILL_GUARDRAILS=true (all guardrails off, emergency only).claude/skills/{skill-name}/SKILL.md, valid YAML frontmatter with name and description, 6 sections (intent, inputs, procedure, decision points, output contract, outcome signal), under 500 lines, no em-dashes, lowercase tech-bro prosejq . .claude/skills/skill-rules.json exits 0, all test prompts in step 4 trigger correctly, no false positives in 5+ manual tests, block messages (if guardrail) are actionablejq, no JSON syntax errors