Use this skill when the user wants to verify their marketplace or plugin will work correctly after pushing to a remote git repository, check if their marketplace structure is valid, audit their plugin distribution setup, or asks "will my marketplace work on GitHub", "is my plugin structure correct", "validate my marketplace before publishing", "check my plugin before distributing", or "marketplace readiness check".
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-marketplace-tools:claude-marketplace-verify-structureThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Audit a Claude Code plugin marketplace to confirm it will work correctly when hosted on a remote git repository (GitHub, GitLab, etc.). This goes beyond JSON syntax — it checks the structural contracts that Claude Code enforces at install time.
Audit a Claude Code plugin marketplace to confirm it will work correctly when hosted on a remote git repository (GitHub, GitLab, etc.). This goes beyond JSON syntax — it checks the structural contracts that Claude Code enforces at install time.
Read the project directory structure. Start from the user's specified root, or scan upward from the current directory to find .claude-plugin/marketplace.json.
Run every check below. Report results as a table or checklist with PASS / WARN / FAIL per item, then a summary with specific fixes for anything that isn't PASS.
PASS: .claude-plugin/marketplace.json exists at the marketplace root.
FAIL: File is missing, or placed at the wrong path (e.g., marketplace.json at root without the .claude-plugin/ directory).
Fix: Create .claude-plugin/ directory and move marketplace.json inside it.
Read .claude-plugin/marketplace.json and verify:
name field present, kebab-case (lowercase letters, digits, hyphens only — no spaces, no underscores, no uppercase)name is not a reserved name: claude-code-marketplace, claude-code-plugins, claude-plugins-official, anthropic-marketplace, anthropic-plugins, agent-skills, knowledge-work-plugins, life-sciencesowner object present with name fieldplugins array present and non-empty (warn if empty)WARN (non-blocking): Missing metadata.description.
For each plugin entry in plugins:
Relative path sources (strings starting with ./):
.claude-plugin/), NOT from inside .claude-plugin/.
"source": "./plugins/my-plugin" → check <marketplace-root>/plugins/my-plugin/ exists..claude-plugin/ would look for .claude-plugin/plugins/my-plugin/ — that's wrong... segments in the path — these are blocked and will fail at install time.WARN: Relative paths only work when the marketplace is added via git clone (i.e., owner/repo or git URL). If the user plans to distribute via a direct URL to marketplace.json, relative paths will not resolve — they must switch to github, url, or npm sources.
Remote sources (github, url, git-subdir, npm): These resolve at install time from the network. Verify the object has required fields:
github: repo field present in owner/repo formaturl: url field present, starts with https:// or git@git-subdir: url and path fields both presentnpm: package field presentFor each plugin that has a local path source (relative ./ path):
Verify <plugin-dir>/.claude-plugin/plugin.json exists and:
name field present and matches the plugin entry name in marketplace.jsondescription field presentWARN if version is set in both plugin.json and the marketplace entry for the same plugin — plugin.json silently wins, which can mask version bumps in the marketplace.
For each local plugin, verify no component directories are inside .claude-plugin/:
Scan for these paths and flag if found:
.claude-plugin/skills/ → FAIL (must be at plugin root: skills/).claude-plugin/commands/ → FAIL.claude-plugin/agents/ → FAIL.claude-plugin/hooks/ → FAIL.claude-plugin/.mcp.json → FAILThese directories must be at the plugin root level, not inside .claude-plugin/.
For each skills/<name>/ directory found in any local plugin:
SKILL.md file exists inside the skill folderSKILL.md has YAML frontmatter (starts with ---)description field — WARN if missing (Claude won't know when to auto-invoke)description is non-empty and describes trigger conditionsWARN: If description doesn't include trigger phrases or conditions, the skill may never be auto-invoked by Claude.
For each commands/ directory in local plugins:
.md formatdescription field (warn if missing — shown in /help)SKILL.md inside commands/ (that's the skills/ pattern; mixing them is confusing)For each local plugin with a hooks/hooks.json:
hooks keymatcher and hooks array with type and command fieldscommand values (e.g., ./scripts/lint.sh). These will break after install because plugins are copied to a cache directory.
${CLAUDE_PLUGIN_ROOT} prefix../scripts/lint.sh with ${CLAUDE_PLUGIN_ROOT}/scripts/lint.shFor each local plugin with a .mcp.json:
type (http or sse) and urlcommand and argscommand or args values that don't use ${CLAUDE_PLUGIN_ROOT}. Flag with FAIL if found — these break after install.
"./server/index.js" → "${CLAUDE_PLUGIN_ROOT}/server/index.js"${MY_API_KEY} are fine — WARN to document them in the plugin README so users know to set them.Review the version setup across plugin.json and marketplace entries:
version is in plugin.json only → PASS (standard)version is in marketplace entry only → PASS (standard)version is in both for the same plugin → WARN: plugin.json version silently overrides the marketplace version; bump plugin.json on every release or remove it from one locationversion is in neither → PASS (git SHA auto-versioning); note that users get updates on every commitVerify the repo is ready for git distribution:
.claude-plugin/marketplace.json is not in .gitignore.gitignore../ in .mcp.json, hooks.json, or skill files)git-subdir source type: the plugin directory must be self-contained (no deps on sibling dirs)After running all checks, present:
MARKETPLACE VERIFICATION REPORT
================================
Marketplace: <name>
Path: <path>
CHECKS
------
[ PASS ] Manifest location (.claude-plugin/marketplace.json)
[ PASS ] JSON valid + required fields
[ FAIL ] Plugin source paths — plugins/my-plugin/ not found
[ PASS ] Plugin manifest files
[ WARN ] Skills missing description frontmatter — skills/my-skill/SKILL.md
[ PASS ] Component placement (nothing inside .claude-plugin/)
[ FAIL ] Hook command uses relative path — replace ./scripts/lint.sh with ${CLAUDE_PLUGIN_ROOT}/scripts/lint.sh
[ WARN ] Version in both plugin.json and marketplace entry for "my-plugin"
[ PASS ] Git-distributability
RESULT: NOT READY (2 failures, 2 warnings)
FIXES REQUIRED
--------------
1. plugins/my-plugin/ directory does not exist — create it or fix the source path in marketplace.json
2. hooks/hooks.json line 8: "./scripts/lint.sh" must be "${CLAUDE_PLUGIN_ROOT}/scripts/lint.sh"
After the report, offer to fix any FAIL items automatically if the user consents.
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.