--- name: developing-claude-code-plugins description: Use when working on Claude Code plugins (creating, modifying, testing, releasing, or maintaining) - provides streamlined workflows, patterns, and examples for the complete plugin lifecycle --- # 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` | | Debug plugin issues | `references/troubleshooting.md` | Various | | See working examples | `examples/` directory | N/A | ## Plugin Development Workflow ### Phase 1: Plan Before writing code: 1. **Define your plugin's purpose** - What problem does it solve? - Who will use it? - What components will it need? 2. **Choose your pattern** (read `references/common-patterns.md`) - Simple plugin with one skill? - MCP integration with guidance? - Command collection? - Full-featured platform? 3. **Review examples** - `examples/simple-greeter-plugin/` - Minimal plugin - `examples/full-featured-plugin/` - All components - Installed plugins in `~/.claude/plugins/` ### Phase 2: Create Structure 1. **Create directories** (see `references/plugin-structure.md` for details): ```bash mkdir -p my-plugin/.claude-plugin mkdir -p my-plugin/skills # Add other component directories as needed ``` 2. **Write plugin.json** (required): ```json { "name": "my-plugin", "version": "1.0.0", "description": "What your plugin does", "author": {"name": "Your Name"} } ``` See `references/plugin-structure.md` for complete format. 3. **Create development marketplace** (for local testing): Create `.claude-plugin/marketplace.json`: ```json { "name": "my-dev", "plugins": [{ "name": "my-plugin", "source": "./" }] } ``` See `references/plugin-structure.md` for 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 installation ``` For 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 1. **Install for testing**: ```bash /plugin marketplace add /path/to/my-plugin /plugin install my-plugin@my-dev ``` Then restart Claude Code. 2. **Test each component**: - Skills: Ask for tasks matching skill descriptions - Commands: Run `/your-command` - MCP servers: Check tools are available - Hooks: Trigger relevant events 3. **Iterate**: ```bash /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 1. **Write README** with: - What the plugin does - Installation instructions - Usage examples - Component descriptions 2. **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) 3. **Commit and tag your release**: ```bash 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 ``` 4. **Choose distribution method**: **Option A: Direct GitHub distribution** - Users add: `/plugin marketplace add your-org/your-plugin-repo` - Your plugin.json serves as the manifest **Option B: Marketplace distribution** (recommended for multi-plugin collections) - Create separate marketplace repository - Add `.claude-plugin/marketplace.json` with plugin references: ```json { "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 **Option C: Private/team distribution** - Configure in team's `.claude/settings.json`: ```json { "extraKnownMarketplaces": { "team-tools": { "source": {"source": "github", "repo": "your-org/plugins"} } } } ``` 5. **Test the release**: ```bash # 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 ``` 6. **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`): 1. **`.claude-plugin/` contains ONLY manifests** (`plugin.json` and optionally `marketplace.json`) - ❌ Don't put skills, commands, or other components inside - ✅ Put them at plugin root 2. **Use `${CLAUDE_PLUGIN_ROOT}` for all paths in config files** - Makes plugin portable across systems - Required for hooks, MCP servers, scripts 3. **Use relative paths in `plugin.json`** - Start with `./` - Relative to plugin root 4. **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 syntax - **`references/common-patterns.md`** - When to use each plugin pattern, examples - **`references/troubleshooting.md`** - Debug guide for common issues - **`examples/simple-greeter-plugin/`** - Minimal working plugin (one skill) - **`examples/full-featured-plugin/`** - Complete plugin with all components ## Cross-References For deep dives into official documentation, use the `working-with-claude-code` skill to access: - `plugins.md` - Plugin development overview - `plugins-reference.md` - Complete API reference - `skills.md` - Skill authoring guide - `slash-commands.md` - Command format - `hooks.md`, `hooks-guide.md` - Hook system - `mcp.md` - MCP server integration - `plugin-marketplaces.md` - Distribution ## Best Practices 1. **Start simple** - Begin with minimal structure, add complexity when needed 2. **Test frequently** - Install → test → uninstall → modify → repeat 3. **Use examples** - Copy patterns from working plugins 4. **Follow conventions** - Match style of existing plugins 5. **Document everything** - Clear README helps users and future you 6. **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 users ``` **The correct path is the fast path.** Use references, follow patterns, test frequently.