Use this skill when the user wants to create a new Claude Code plugin marketplace from scratch, scaffold a marketplace repository, initialize a marketplace structure, set up a new plugin distribution repo, or asks "how do I create a marketplace". Produces the full directory tree, marketplace.json, plugin.json stubs, and an instructions README.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-marketplace-tools:claude-marketplace-initThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Scaffold a complete, git-distributable Claude Code plugin marketplace from scratch.
Scaffold a complete, git-distributable Claude Code plugin marketplace from scratch.
Create the following directory tree relative to the path the user specifies (default: current directory):
<marketplace-root>/
├── .claude-plugin/
│ └── marketplace.json ← marketplace catalog
├── plugins/
│ └── example-plugin/
│ ├── .claude-plugin/
│ │ └── plugin.json ← plugin identity
│ ├── skills/
│ │ └── example-skill/
│ │ └── SKILL.md
│ └── README.md
└── README.md ← marketplace instructions
Ask (or infer from context) before writing any files:
@marketplace-name suffix users type when installing plugins. Must not be one of the reserved names: claude-code-marketplace, claude-code-plugins, claude-plugins-official, anthropic-marketplace, anthropic-plugins, agent-skills, knowledge-work-plugins, life-sciences.example-plugin if they have nothing yet..claude-plugin/marketplace.json{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "<marketplace-name>",
"description": "<one-line description of what this marketplace provides>",
"owner": {
"name": "<owner-name>",
"email": "<owner-email-optional>"
},
"metadata": {
"pluginRoot": "./plugins"
},
"plugins": [
{
"name": "example-plugin",
"source": "./plugins/example-plugin",
"description": "Example plugin — replace or remove this entry",
"author": {
"name": "<owner-name>"
}
}
]
}
Key rules to apply:
"source" is a path relative to the marketplace root (the directory containing .claude-plugin/), NOT relative to marketplace.json itself.pluginRoot is set to "./plugins", plugin source paths can be shortened to "./example-plugin" instead of "./plugins/example-plugin" — mention this in the README.version field in the marketplace entry unless the user asks for explicit versioning; omitting it means every new commit is treated as a new version automatically.plugins/example-plugin/.claude-plugin/plugin.json{
"name": "example-plugin",
"description": "Example plugin — replace with real description",
"author": {
"name": "<owner-name>"
}
}
Rules:
plugin.json is identity only — no skills, commands, or hooks config goes here.version field unless the user wants explicit version pinning. Explain: if both plugin.json and marketplace.json have version, plugin.json silently wins, which can mask marketplace version bumps.plugins/example-plugin/skills/example-skill/SKILL.md---
name: example-skill
description: Replace this description with clear trigger phrases. Describe when Claude should use this skill. Example: "Use when the user asks to X, Y, or Z."
version: 1.0.0
---
# Example Skill
Replace this content with your skill's instructions.
Describe what Claude should do when this skill is active.
plugins/example-plugin/README.mdBrief placeholder:
# example-plugin
Describe what this plugin does.
## Skills
- `/marketplace-name:example-skill` — describe what it does
## Installation
```shell
/plugin install example-plugin@<marketplace-name>
### 6. Create root `README.md`
Include:
```markdown
# <marketplace-name>
<description>
## Add this marketplace
```shell
# From GitHub (recommended after pushing)
/plugin marketplace add <github-owner>/<repo-name>
# Local testing before pushing
/plugin marketplace add ./path/to/this/repo
| Plugin | Description |
|---|---|
example-plugin | Example plugin — replace me |
/plugin install example-plugin@<marketplace-name>
claude plugin validate .
<marketplace-root>/
├── .claude-plugin/
│ └── marketplace.json ← catalog: lists plugins + their source paths
└── plugins/
└── <plugin-name>/
├── .claude-plugin/
│ └── plugin.json ← plugin identity only (name, description, author)
├── skills/ ← model-invoked (Claude uses automatically)
│ └── <skill>/
│ └── SKILL.md
├── commands/ ← user-invoked (/plugin-name:command-name)
├── agents/
├── hooks/
│ └── hooks.json
└── .mcp.json ← MCP server connections
skills/, commands/, agents/, hooks/, .mcp.json) live at the plugin root, never inside .claude-plugin/.source paths in marketplace.json resolve from the marketplace root (next to .claude-plugin/), not from inside .claude-plugin/.${CLAUDE_PLUGIN_ROOT} in .mcp.json and hooks/hooks.json for paths — plugins are copied to a cache dir on install.claude plugin validate . before pushing.
### 7. Post-scaffold summary
After creating all files, show the user:
1. The exact tree that was created.
2. The next steps:
claude plugin validate .
/plugin marketplace add ./this-directory /plugin install example-plugin@
/plugin marketplace add /
3. Remind them:
- Relative `source` paths only work when the marketplace is added via git (not via direct URL to `marketplace.json`).
- Plugin caches at `~/.claude/plugins/cache` — use `/reload-plugins` after local edits.
- To share with a team, commit `.claude/settings.json` with `extraKnownMarketplaces`.
npx claudepluginhub budzikt/company-claude-marketplace --plugin claude-marketplace-toolsCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.