$npx -y skills add krzysztofsurdy/code-virtuoso --skill plugin-creatorInteractive tool to scaffold a complete Claude Code plugin - plugin.json manifest, skills, agents, hooks, MCP servers, LSP servers, and an optional marketplace.json catalog entry. Use when the user asks to create a plugin, build a Claude Code plugin, scaffold a plugin marketplace
| 1 | # Plugin Creator |
| 2 | |
| 3 | Scaffold a well-formed Claude Code plugin with exactly the components the user wants - no more, no less. A plugin is a self-contained directory with a manifest (`.claude-plugin/plugin.json`) plus any of: skills, agents, hooks, MCP servers, LSP servers, bin executables, output styles, default settings. This tool generates the correct structure, writes a valid manifest, adds a marketplace entry when requested, and explains how to test locally with `--plugin-dir`. |
| 4 | |
| 5 | ## Core Principles |
| 6 | |
| 7 | | Principle | Meaning | |
| 8 | |---|---| |
| 9 | | **Manifest is optional, but recommended** | If omitted, the directory name becomes the plugin name and components auto-discover at default locations. Provide one whenever metadata, versioning, or custom paths matter. | |
| 10 | | **Default locations first** | Prefer `skills/`, `agents/`, `hooks/hooks.json`, `.mcp.json`, `.lsp.json` at plugin root. Only override paths in `plugin.json` when there is a real reason. | |
| 11 | | **Components live at the root, not in `.claude-plugin/`** | Only `plugin.json` belongs inside `.claude-plugin/`. Everything else (`skills/`, `agents/`, etc.) is at the plugin root. This is the single most common mistake. | |
| 12 | | **Use `${CLAUDE_PLUGIN_ROOT}` for every plugin-internal path** | Absolute paths break when the plugin is cached. `${CLAUDE_PLUGIN_ROOT}` resolves to the installed plugin directory at runtime. Use `${CLAUDE_PLUGIN_DATA}` for state that must survive updates. | |
| 13 | | **Namespacing is automatic** | Plugin skills are always invoked as `/plugin-name:skill-name`. Names are derived from the `name` field in `plugin.json` (or directory name if no manifest). | |
| 14 | | **Semantic versioning in one place** | Set `version` in `plugin.json` OR in the marketplace entry - not both. When present in both, `plugin.json` wins. | |
| 15 | |
| 16 | --- |
| 17 | |
| 18 | ## Workflow |
| 19 | |
| 20 | This skill uses **guided phases** - each phase is a separate file loaded one at a time. Every phase ends with a gate where you must wait for user confirmation before proceeding. Do not skip phases or merge them. |
| 21 | |
| 22 | If the user aborts at any phase, discard progress and exit without writing a partial plugin. |
| 23 | |
| 24 | | Phase | File | What it covers | |
| 25 | |---|---|---| |
| 26 | | 1 | [Plugin Identity](phases/01-plugin-identity.md) | Name, description, version, author, optional metadata | |
| 27 | | 2 | [Component Selection](phases/02-component-selection.md) | Which component types to include (skills, agents, hooks, etc.) | |
| 28 | | 3 | [Component Details](phases/03-component-details.md) | Per-component sub-questionnaires (skills, agents, hooks, MCP, LSP, bin, styles, settings) | |
| 29 | | 4 | [Distribution](phases/04-distribution.md) | Standalone, new marketplace, or add to existing marketplace | |
| 30 | | 5 | [Write Files](phases/05-write-files.md) | Validate, confirm, write all files to disk | |
| 31 | | 6 | [Test Instructions](phases/06-test-instructions.md) | Test commands, reload, validation, next steps | |
| 32 | |
| 33 | **Start by loading Phase 1.** After the user confirms each phase, load the next. Never load multiple phases at once. Never skip a phase. |
| 34 | |
| 35 | --- |
| 36 | |
| 37 | ## Rules & Guardrails |
| 38 | |
| 39 | - **Never put components inside `.claude-plugin/`**. Only `plugin.json` lives there. |
| 40 | - **Never use absolute paths** in `plugin.json`, hooks, or MCP configs. All plugin-internal paths must start with `./` or use `${CLAUDE_PLUGIN_ROOT}`. |
| 41 | - **Never reference files outside the plugin directory** via `../` - the plugin cache will not copy them. Symlinks are preserved, so use those if cross-plugin sharing is truly needed. |
| 42 | - **Never set `hooks`, `mcpServers`, or `permissionMode` on a plugin-shipped agent** - these are blocked for security. |
| 43 | - **Never set both `version` in `plugin.json` and in the marketplace entry.** Pick one authoritative location. |
| 44 | - **Always bump the version when the plugin content changes.** The Claude Code cache uses the version to decide whether to update. Forgetting this is why users do not see plugin updates. |
| 45 | - **Reject reserved marketplace names** (`claude-code-marketplace`, `anthropic-marketplace`, etc. - full list in [references/marketplace-manifest.md](references/marketplace-manifest.md)). |
| 46 | - **Validate JSON before writing**. A corrupt `plugin.json` breaks the plugin silently in some cases and loudly in others - both waste the user's time. |
| 47 | |
| 48 | --- |
| 49 | |
| 50 | ## Quick Reference: Minimal Plugin |
| 51 | |
| 52 | The smallest valid plugin is a directory with one SKILL.md: |
| 53 | |
| 54 | ``` |
| 55 | my-plugin/ |
| 56 | └── skills/ |
| 57 | └── hello/ |
| 58 | └── SKILL.md |
| 59 | ``` |
| 60 | |
| 61 | No `plugin.json` is required - the d |