Developing Claude Code Plugins
Overview
This skill provides efficient workflows for creating Claude Code plugins. Use it to make plugin development fast and correct - it synthesizes official docs into actionable steps and provides working examples.
When to Use
Use this skill when:
- Creating a new Claude Code plugin from scratch
- Adding components to an existing plugin (skills, commands, hooks, MCP servers)
- Setting up a development marketplace for testing
- Troubleshooting plugin structure issues
- Understanding plugin architecture and patterns
- Releasing a plugin (versioning, tagging, marketplace distribution)
- Publishing updates or maintaining existing plugins
For comprehensive official documentation, use the working-with-claude-code skill to access full docs.
Quick Reference
| Need to... | Read This | Official Docs |
|---|---|---|
| Understand directory structure | references/plugin-structure.md | plugins.md |
| Choose a plugin pattern | references/common-patterns.md | plugins.md |
| Make hooks work cross-platform | references/polyglot-hooks.md | hooks.md |
| Debug plugin issues | references/troubleshooting.md | Various |
| See working examples | examples/ directory | N/A |
Plugin Development Workflow
Phase 1: Plan
Before writing code:
- Define your plugin's purpose
- What problem does it solve? - Who will use it? - What components will it need?
- Choose your pattern (read
references/common-patterns.md)
- Simple plugin with one skill? - MCP integration with guidance? - Command collection? - Full-featured platform?
- Review examples
- examples/simple-greeter-plugin/ - Minimal plugin - examples/full-featured-plugin/ - All components - Installed plugins in ~/.claude/plugins/
Phase 2: Create Structure
- Create directories (see
references/plugin-structure.mdfor details):mkdir -p my-plugin/.claude-plugin mkdir -p my-plugin/skills # Add other component directories as needed - Write plugin.json (required):
{"name": "my-plugin", "version": "1.0.0", "description": "What your plugin does", "author": {"name": "Your Name"}}Seereferences/plugin-structure.mdfor complete format. - Create development marketplace (for local testing): Create
.claude-plugin/marketplace.json:{"name": "my-dev", "plugins": [{"name": "my-plugin", "source": "./"}]}Seereferences/plugin-structure.mdfor complete format.
Phase 3: Add Components
Use TodoWrite to track component creation:
Example:
- Create skill: main-workflow
- Add command: /hello
- Configure hooks
- Write README
- Test installationFor each component type, see:
- Format/syntax:
references/plugin-structure.md - When to use:
references/common-patterns.md - Working code:
examples/directory
Phase 4: Test Locally
- Install for testing:
/plugin marketplace add /path/to/my-plugin /plugin install my-plugin@my-devThen restart Claude Code. - Test each component:
- Skills: Ask for tasks matching skill descriptions - Commands: Run /your-command - MCP servers: Check tools are available - Hooks: Trigger relevant events
- Iterate:
/plugin uninstall my-plugin@my-dev # Make changes /plugin install my-plugin@my-dev # Restart Claude Code
Phase 5: Debug and Refine
If something doesn't work, read references/troubleshooting.md for:
- Plugin not loading
- Skill not triggering
- Command not appearing
- MCP server not starting
- Hooks not firing
Common issues are usually:
- Wrong directory structure
- Hardcoded paths (use
${CLAUDE_PLUGIN_ROOT}) - Forgot to restart Claude Code
- Missing executable permissions on scripts
Phase 6: Release and Distribute
- Write README with:
- What the plugin does - Installation instructions - Usage examples - Component descriptions
- Version your release using semantic versioning:
- Update version in .claude-plugin/plugin.json - Document changes in CHANGELOG.md or RELEASE-NOTES.md - Example: "version": "1.2.1" (major.minor.patch)
- Commit and tag your release:
git add. git commit -m "Release v1.2.1: [brief description]" git tag v1.2.1 git push origin main git push origin v1.2.1 - Choose distribution method: Option A: Direct GitHub distribution Option B: Marketplace distribution (recommended for multi-plugin collections) Option C: Private/team distribution
- Users add: /plugin marketplace add your-org/your-plugin-repo - Your plugin.json serves as the manifest - Create separate marketplace repository - Add .claude-plugin/marketplace.json with plugin references: {"name": "my-marketplace", "owner": {"name": "Your Name"}, "plugins": [{"name": "your-plugin", "source": {"source": "url", "url": "https://github.com/your-org/your-plugin.git"}, "version": "1.2.1", "description": "Plugin description"}]} - Users add: /plugin marketplace add your-org/your-marketplace - Update marketplace manifest for each plugin release - Configure in team's .claude/settings.json: {"extraKnownMarketplaces": {"team-tools": {"source": {"source": "github", "repo": "your-org/plugins"}}}}
- Test the release:
# Test fresh installation /plugin marketplace add your-marketplace-source /plugin install your-plugin@marketplace-name # Verify functionality, then clean up /plugin uninstall your-plugin@marketplace-name - Announce and maintain:
- GitHub releases (optional) - Team notifications - Monitor for issues and user feedback - Plan maintenance updates
Critical Rules
Always follow these (from references/plugin-structure.md):
.claude-plugin/contains ONLY manifests (plugin.jsonand optionallymarketplace.json)
- ❌ Don't put skills, commands, or other components inside - ✅ Put them at plugin root
- Use
${CLAUDE_PLUGIN_ROOT}for all paths in config files
- Makes plugin portable across systems - Required for hooks, MCP servers, scripts
- Use relative paths in
plugin.json
- Start with ./ - Relative to plugin root
- Make scripts executable
- chmod +x script.sh - Required for hooks and MCP servers
Resources in This Skill
references/plugin-structure.md- Directory layout, file formats, component syntaxreferences/common-patterns.md- When to use each plugin pattern, examplesreferences/polyglot-hooks.md- Cross-platform hook wrapper for Windows/macOS/Linuxreferences/troubleshooting.md- Debug guide for common issuesexamples/simple-greeter-plugin/- Minimal working plugin (one skill)examples/full-featured-plugin/- Complete plugin with all components (includesrun-hook.cmd)
Cross-References
For deep dives into official documentation, use the working-with-claude-code skill to access:
plugins.md- Plugin development overviewplugins-reference.md- Complete API referenceskills.md- Skill authoring guideslash-commands.md- Command formathooks.md,hooks-guide.md- Hook systemmcp.md- MCP server integrationplugin-marketplaces.md- Distribution
Best Practices
- Start simple - Begin with minimal structure, add complexity when needed
- Test frequently - Install → test → uninstall → modify → repeat
- Use examples - Copy patterns from working plugins
- Follow conventions - Match style of existing plugins
- Document everything - Clear README helps users and future you
- Version properly - Use semantic versioning (major.minor.patch)
Workflow Summary
Plan → Choose pattern, review examples
Create → Make structure, write manifests
Add → Build components (skills, commands, etc.)
Test → Install via dev marketplace
Debug → Use troubleshooting guide
Release → Version, tag, distribute via marketplace
Maintain → Monitor, update, support usersThe correct path is the fast path. Use references, follow patterns, test frequently.