plugin-dev
SKILL.md
Claude Code Plugin Development
Comprehensive guidance for creating well-structured plugins, skills, hooks, agents, commands, and MCP integrations.
Core Principles (Anthropic Official)
- Composable - Multiple skills work together seamlessly, Claude coordinates automatically
- Portable - Same format works across Claude apps, Claude Code, and Claude API
- Efficient - Progressive disclosure loads only what's needed (description → SKILL.md → references)
- Powerful - Combines prompts + executable code for complete workflows
- Secure - Never hardcode secrets, use
${CLAUDE_PLUGIN_ROOT}for paths
Critical Budget Limits
| Limit | Value | Consequence if Exceeded |
|---|---|---|
| All skill descriptions combined | 15,000 chars | Silent filtering, skills won't activate |
| Individual description | 1,024 chars | Truncation |
| SKILL.md body | 5,000 words | Context saturation, partial execution |
| Target per description | 300-400 chars | Allows ~40 skills safely |
Quick Start
Create a New Plugin
mkdir -p my-plugin/.claude-plugin
mkdir -p my-plugin/skills/my-skill/references
cat > my-plugin/.claude-plugin/plugin.json << 'PLUGIN'
{
"name": "my-plugin",
"version": "1.0.0",
"description": "What this plugin does"
}
PLUGIN
cat > my-plugin/skills/my-skill/SKILL.md << 'SKILL'
---
name: my-skill
description: Use when creating X, configuring Y, or analyzing Z
---
# My Skill
Instructions for Claude when this skill activates...
SKILL
Install and Test
# Symlink to Claude's plugin directory
ln -s $(pwd)/my-plugin ~/.claude/plugins/my-plugin
# Restart Claude Code to load
/restart
# Test the skill
/my-plugin:my-skill
Component Reference
Choose a topic for detailed guidance:
📁 @references/structure.md - Plugin Directory Structure
- Standard plugin layout
- Marketplace vs standalone patterns
- Auto-discovery rules
- Portable path references (
${CLAUDE_PLUGIN_ROOT}) - Common troubleshooting
🎯 @references/skills-reference.md - Creating Skills
- SKILL.md format and frontmatter
- Progressive disclosure patterns
- Bundled resources (scripts/, references/, assets/)
- Description best practices with trigger phrases
- Writing style (imperative, not second person)
- Validation checklist
💬 @references/commands-reference.md - Slash Commands
- Command file format with frontmatter
- Dynamic arguments (
$1,$2,@$1) - Bash execution inline
- Tool restrictions (allowed-tools)
- Organization (flat vs namespaced)
- Plugin command portability
🤖 @references/agents-reference.md - Subagents
- Agent frontmatter (name, description, model, color, tools)
- Name validation rules
- Description with examples
- Color guidelines by purpose
- Tool restriction patterns
- System prompt best practices
🎣 @references/hooks-reference.md - Event Hooks
- Hook types (prompt-based vs command)
- Event types (PreToolUse, PostToolUse, Stop, etc.)
- Configuration (hooks.json format)
- Matchers (exact, wildcard, regex)
- Output structure and exit codes
- Security best practices
- Environment variables
🔌 @references/mcp-reference.md - MCP Integration
- MCP server configuration (.mcp.json)
- Server types (stdio, SSE, HTTP, WebSocket)
- Tool naming conventions
- Environment variable usage
- Security and testing
🏪 @references/marketplace-reference.md - Marketplaces
- Standalone vs marketplace patterns
- marketplace.json schema
- Skills array pattern
- Bundle plugin pattern
- Common mistakes to avoid
- Team configuration
📋 @references/plugin-reference.md - Plugin Manifest
- plugin.json required fields
- Optional metadata
- Custom component paths
- Installation and deployment
⚙️ @references/settings.md - Plugin Settings
- .local.md settings files
- YAML frontmatter for configuration
- Reading settings in hooks
- Best practices and gitignore
Common Patterns
Minimal Skill
---
name: simple-skill
description: Use when user asks to "do X" or "configure Y"
---
# Simple Skill
Step-by-step instructions...
1. Check if condition exists
2. Execute action
3. Verify result
For detailed patterns, see @references/advanced-patterns.md
Command with Arguments
---
description: Review code for security issues
allowed-tools: Read, Grep
argument-hint: [file] [severity]
---
Review @$1 for security issues.
Focus on severity level: $2
Use these patterns:
- SQL injection
- XSS vulnerabilities
- Hardcoded credentials
Hook with Validation
{
"hooks": {
"PreToolUse": [{
"matcher": "Write|Edit",
"hooks": [{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh",
"timeout": 30
}]
}]
}
}
File Organization
my-plugin/
├── .claude-plugin/
│ └── plugin.json # Manifest
├── commands/ # Slash commands
│ └── action.md
├── agents/ # Subagents
│ └── analyzer.md
├── skills/ # Skills
│ └── my-skill/
│ ├── SKILL.md # Main skill file
│ ├── references/ # Detailed docs
│ ├── scripts/ # Executable code
│ └── assets/ # Templates, images
├── hooks/
│ └── hooks.json # Event handlers
└── .mcp.json # MCP servers
Development Workflow
- Plan - Identify what your plugin should do
- Structure - Create directory layout (see @references/structure.md)
- Implement - Write skills, commands, or agents
- Configure - Add hooks or MCP servers if needed
- Test - Install and verify functionality
- Iterate - Refine based on usage
- Document - Update README and examples
Best Practices
| Practice | Reason |
|---|---|
| Keep SKILL.md under 2000 words | Move details to references/ for progressive disclosure |
| Use specific trigger phrases | "when user asks to 'create X'" not "provides guidance" |
| Imperative writing style | "Parse the config" not "You should parse" |
| Portable paths | ${CLAUDE_PLUGIN_ROOT} not hardcoded |
| Test after changes | /restart then invoke skill/command |
| Single responsibility | One focused purpose per component |
Common Mistakes
| Mistake | Solution |
|---|---|
| Vague skill descriptions | Add specific trigger phrases users would say |
| 8000-word SKILL.md | Move content to references/, keep SKILL.md brief |
| Hardcoded paths | Use ${CLAUDE_PLUGIN_ROOT} for portability |
| Missing frontmatter | All components need valid YAML frontmatter |
| Wrong directory structure | See @references/structure.md for correct layout |
Validation
Before releasing a plugin:
- plugin.json has required
namefield - All SKILL.md files have
nameanddescription - Descriptions include specific trigger phrases
- All referenced files exist
- No hardcoded paths (use
${CLAUDE_PLUGIN_ROOT}) - Skills under 2000 words (details in references/)
- Commands have
argument-hintif they take args - Agents have valid name (3-50 chars, lowercase-hyphens)
- Hooks return valid JSON with proper exit codes
- README documents installation and usage
Related Tools
/plugin-dev:create-plugin- Interactive plugin scaffolding command/plugin-dev:plugin-cli- CLI commands for plugin management/skill-creator:skill-creation- Focused skill creation workflow/agent-creator:agent-design- Subagent design patterns/mcp-builder:mcp-servers- MCP server development
Quick Navigation:
| Need to... | See |
|---|---|
| Understand plugin layout | @references/structure.md |
| Create a skill | @references/skills-reference.md |
| Add a slash command | @references/commands-reference.md |
| Configure a subagent | @references/agents-reference.md |
| Set up hooks | @references/hooks-reference.md |
| Integrate MCP server | @references/mcp-reference.md |
| Build a marketplace | @references/marketplace-reference.md |
Status: Consolidated plugin development skill with progressive disclosure pattern
Weekly Installs
1
Repository
ggprompts/my-pluginsGitHub Stars
2
First Seen
Today
Security Audits
Installed on
amp1
cline1
opencode1
cursor1
kimi-cli1
codex1