--- name: plugin-master description: | Complete Claude Code plugin development system. PROACTIVELY activate when users want to: (1) Create/build/make plugins with 2025 features (2) Add skills/commands/agents to plugins (3) Package existing code as plugins (4) Publish plugins to marketplace (5) Validate plugin structure (6) Get plugin development guidance Autonomously creates production-ready plugins with proper structure and best practices. license: MIT --- # Plugin Development Guide ## Quick Reference | Component | Location | Required | |-----------|----------|----------| | Plugin manifest | `.claude-plugin/plugin.json` | Yes | | Commands | `commands/*.md` | No (auto-discovered) | | Agents | `agents/*.md` | No (auto-discovered) | | Skills | `skills/*/SKILL.md` | No (auto-discovered) | | Hooks | `hooks/hooks.json` | No | | MCP Servers | `.mcp.json` | No | | Task | Action | |------|--------| | Create plugin | Ask: "Create a plugin for X" | | Validate plugin | Run: `/validate-plugin` | | Install from marketplace | `/plugin marketplace add user/repo` then `/plugin install name@user` | ## Critical Rules ### Directory Structure ``` plugin-name/ ├── .claude-plugin/ │ └── plugin.json # MUST be inside .claude-plugin/ ├── agents/ │ └── domain-expert.md ├── commands/ ├── skills/ │ └── skill-name/ │ ├── SKILL.md │ ├── references/ │ └── examples/ └── README.md ``` ### Plugin.json Schema ```json { "name": "plugin-name", "version": "1.0.0", "description": "Complete [domain] expertise. PROACTIVELY activate for: (1) ...", "author": { "name": "Author Name", "email": "email@example.com" }, "license": "MIT", "keywords": ["keyword1", "keyword2"] } ``` **Validation Rules:** - `author` MUST be an object `{ "name": "..." }` - NOT a string - `version` MUST be a string `"1.0.0"` - NOT a number - `keywords` MUST be an array `["word1", "word2"]` - NOT a string - Do NOT include `agents`, `skills`, `slashCommands` - these are auto-discovered ### YAML Frontmatter (REQUIRED) ALL markdown files in agents/, commands/, skills/ MUST begin with frontmatter: ```markdown --- description: Brief description of what this component does --- # Content... ``` **Without frontmatter, components will NOT load.** ## Plugin Design Philosophy (2025) ### Agent-First Design - **Primary interface**: ONE expert agent named `{domain}-expert` - **Minimal commands**: Only 0-2 for automation workflows - **Why**: Users want conversational interaction, not command menus **Naming Standard:** - `docker-master` → agent named `docker-expert` - `terraform-master` → agent named `terraform-expert` ### Progressive Disclosure for Skills Skills use three-tier loading: 1. **Frontmatter** - Loaded at startup for triggering 2. **SKILL.md body** - Loaded when skill activates 3. **references/** - Loaded only when specific detail needed This enables unbounded capacity without context bloat. ## Creating a Plugin ### Step 1: Detect Repository Context Before creating files, check: ```bash # Check if in marketplace repo if [[ -f .claude-plugin/marketplace.json ]]; then PLUGIN_DIR="plugins/PLUGIN_NAME" else PLUGIN_DIR="PLUGIN_NAME" fi # Get author from git config AUTHOR_NAME=$(git config user.name) AUTHOR_EMAIL=$(git config user.email) ``` ### Step 2: Create Structure ```bash mkdir -p $PLUGIN_DIR/.claude-plugin mkdir -p $PLUGIN_DIR/agents mkdir -p $PLUGIN_DIR/skills/domain-knowledge ``` ### Step 3: Create Files 1. **plugin.json** - Manifest with metadata 2. **agents/domain-expert.md** - Primary expert agent 3. **skills/domain-knowledge/SKILL.md** - Core knowledge 4. **README.md** - Documentation ### Step 4: Register in Marketplace **CRITICAL**: If `.claude-plugin/marketplace.json` exists at repo root, you MUST add the plugin: ```json { "plugins": [ { "name": "plugin-name", "source": "./plugins/plugin-name", "description": "Same as plugin.json description", "version": "1.0.0", "author": { "name": "Author" }, "keywords": ["same", "as", "plugin.json"] } ] } ``` ## Component Types ### Commands User-initiated slash commands in `commands/*.md`: ```markdown --- description: What this command does --- # Command Name Instructions for Claude to execute... ``` ### Agents Autonomous subagents in `agents/*.md`: ```markdown --- name: agent-name description: | Use this agent when... Examples: Context: ... user: "..." assistant: "..." Why trigger model: inherit color: blue --- System prompt for agent... ``` ### Skills Dynamic knowledge in `skills/skill-name/SKILL.md`: ```markdown --- name: skill-name description: When to use this skill... --- # Skill content with progressive disclosure... ``` ### Hooks Event automation in `hooks/hooks.json`: ```json { "PostToolUse": [{ "matcher": "Write|Edit", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/scripts/lint.sh" }] }] } ``` **Events**: PreToolUse, PostToolUse, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification, Stop, SubagentStop ## Best Practices ### Naming Conventions - **Plugins**: `kebab-case` (e.g., `code-review-helper`) - **Commands**: verb-based (e.g., `review-pr`, `run-tests`) - **Agents**: role-based (e.g., `code-reviewer`, `test-generator`) - **Skills**: topic-based (e.g., `api-design`, `error-handling`) ### Portability Use `${CLAUDE_PLUGIN_ROOT}` for all internal paths: ```json "command": "${CLAUDE_PLUGIN_ROOT}/scripts/run.sh" ``` Never use hardcoded absolute paths. ### Platform Notes - **Windows**: Use GitHub marketplace installation (local paths may fail) - **Git Bash/MinGW**: Detect with `$MSYSTEM`, use GitHub method - **Mac/Linux**: All installation methods work ## Troubleshooting | Issue | Solution | |-------|----------| | Plugin not loading | Check plugin.json is in `.claude-plugin/` | | Commands missing | Verify frontmatter has `description` field | | Agent not triggering | Add `` blocks to description | | Marketplace not found | Ensure repo is public, check path in marketplace.json | ## Additional Resources For detailed information, see: - **`references/manifest-reference.md`** - Complete plugin.json fields - **`references/component-patterns.md`** - Advanced component patterns - **`references/publishing-guide.md`** - Marketplace publishing details - **`examples/minimal-plugin.md`** - Simplest working plugin - **`examples/full-plugin.md`** - Complete plugin with all features