Use this skill when the user wants to convert an existing skill, command, set of skills, or standalone `.claude/` configuration into a distributable Claude Code marketplace plugin. Triggers on phrases like "convert my skills to a marketplace", "package my commands for distribution", "make my skills shareable", "wrap my skill in a plugin", "I want to distribute my existing skill", or "how do I publish my skill".
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-marketplace-tools:claude-marketplace-convert-skill-to-marketplaceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Convert existing standalone skills or `.claude/` configurations into a distributable marketplace plugin with the correct structure.
Convert existing standalone skills or .claude/ configurations into a distributable marketplace plugin with the correct structure.
Before creating any files, inspect the project:
Check .claude/ for existing standalone config:
.claude/commands/ — flat .md files (user-invoked slash commands).claude/skills/ — <name>/SKILL.md folders (model-invoked skills).claude/settings.json — check for hooks key.claude/agents/ — agent definitionsCheck the project root for any loose skill or command files the user may be pointing to.
Ask the user if discovery is ambiguous:
./plugins/<plugin-name>/)marketplace.json be created too, or just the plugin directory?.claude/commands/ → plugins/<name>/commands/Flat .md files map 1:1. Copy them as-is — the format is identical.
.claude/commands/deploy.md → plugins/<name>/commands/deploy.md
After conversion the command becomes /plugin-name:deploy instead of /deploy. Tell the user this and note they can remove the original to avoid duplicates.
.claude/skills/<skill-name>/SKILL.md → plugins/<name>/skills/<skill-name>/SKILL.mdCopy entire skill directories. Content is identical; only the invocation namespace changes.
.claude/settings.json → plugins/<name>/hooks/hooks.jsonExtract the hooks object from settings.json and write it to hooks/hooks.json with this wrapper:
{
"hooks": {
<paste the hooks object content here>
}
}
The format inside is the same — no transformation needed.
.claude/agents/ → plugins/<name>/agents/Copy agent .md files directly.
plugins/<name>/.claude-plugin/plugin.json{
"name": "<plugin-name>",
"description": "<concise description of what these skills/commands do>",
"author": {
"name": "<infer from git config or ask>"
}
}
Do NOT copy skills/commands config into plugin.json — it is identity metadata only. The directory structure is what Claude Code reads.
marketplace.json (create or update)If a .claude-plugin/marketplace.json already exists, add the new plugin entry to the plugins array. If none exists, create it at the project root's .claude-plugin/marketplace.json:
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "<marketplace-name>",
"owner": { "name": "<owner>" },
"plugins": [
{
"name": "<plugin-name>",
"source": "./plugins/<plugin-name>",
"description": "<description>"
}
]
}
Source path rule: relative to the marketplace root (where .claude-plugin/ lives), not relative to marketplace.json itself.
<marketplace-root>/
├── .claude-plugin/
│ └── marketplace.json
└── plugins/
└── <plugin-name>/
├── .claude-plugin/
│ └── plugin.json
├── skills/ ← from .claude/skills/ (model-invoked)
│ └── <skill-name>/
│ └── SKILL.md
├── commands/ ← from .claude/commands/ (user-invoked)
│ └── deploy.md
├── agents/ ← from .claude/agents/
└── hooks/ ← extracted from .claude/settings.json
└── hooks.json
| Before | After |
|---|---|
/deploy | /plugin-name:deploy |
/skill-name | /plugin-name:skill-name |
| Only available in this project | Installable from marketplace |
Hooks in settings.json | Hooks in hooks/hooks.json |
claude plugin validate ./plugin marketplace add ./ then /plugin install <plugin-name>@<marketplace-name>/reload-plugins after any local edits.claude/ to avoid duplicate invocations (optional — plugin takes precedence when loaded, but duplicates can confuse)/plugin marketplace add <github-owner>/<repo>SKILL.md missing description frontmatter: warn the user — Claude won't know when to auto-invoke the skill without it.$ARGUMENTS: these work identically in plugins, no change needed../scripts/lint.sh): replace with ${CLAUDE_PLUGIN_ROOT}/scripts/lint.sh — plugins are copied to a cache dir, so relative paths from the project root won't resolve.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.