<plugin-root> names the directory that holds this plugin's .codex-plugin/plugin.json. Resolve it once from where this file was loaded, then substitute it into every path below that starts with it.
Marketplace Audit
Run a comprehensive structural validation of any Claude Code plugin marketplace. Works against any project that follows the standard .claude-plugin/marketplace.json + plugins/<name>/ layout.
Audit steps
Step 1: Run the validation script
Execute the audit script to get a machine-readable report:
# Validate only
python "<plugin-root>/skills/marketplace-audit/scripts/audit_marketplace.py"
# Validate and auto-fix color issues (invalid, missing, disharmonious)
python "<plugin-root>/skills/marketplace-audit/scripts/audit_marketplace.py" --fix
The script resolves the target project root by walking up from the script location, or respects a --project-root <path> flag if invoking it from a different marketplace than where the plugin is installed.
Step 2: Review findings
The script checks:
- File existence -- every path in marketplace.json
agents / skills / commands arrays resolves to a real file or directory
- Orphaned files -- agent
.md files, skill directories, or command .md files on disk not registered in any plugin
- Frontmatter validation
- Agents: must have
name, description, model, color
- Skills: must have
name, description
- Commands: must have
description
- Color consistency and harmony
- All agents within a plugin should use the same color
- Warn when a single color is overused across too many plugins (threshold configurable)
- Report color distribution across all plugins
- Valid colors: red, blue, green, yellow, purple, orange, pink, cyan
- Use
--fix to auto-correct invalid or missing colors
- Naming conventions
- All names are kebab-case
- Agent filename matches frontmatter
name field
- Plugin directory name matches marketplace.json
name field
- Skill directory name matches frontmatter
name field
- Workflow command output directories match command filename (e.g.,
feature-e2e.md typically writes to .feature-e2e/)
- No naming collisions between commands in different plugins
- No em dash characters anywhere (use hyphen
- or double hyphen --)
- Cross-reference consistency (project-specific, best-effort)
- If a git remote is configured, suggest that the marketplace
name align with the repo name (warning only)
- If a
CLAUDE.md is present at the project root, suggest that its project header match the marketplace name (warning only)
- These are advisory -- different marketplace maintainers have different conventions
- Marketplace.json schema
- Every plugin has:
name, source, description, version, author, license, keywords, category, strict
- No duplicate plugin names
- Duplicate keywords across plugins (warning only -- may be intentional)
- Version sanity
- All versions are valid semver (
MAJOR.MINOR.PATCH)
metadata.version is present at the root
- Dependency resolution and acyclicity
- An unqualified
dependencies entry must name a plugin in this marketplace
- A cross-marketplace entry must use the qualified
name@marketplace form, which is checked for shape only, since it is unresolvable from here by design. A bare name silently resolves against the local marketplace and fails the whole plugin load, so the qualified form is mandatory, not stylistic
- The hard-dependency graph must be acyclic. Optional dependencies are excluded from the cycle walk on purpose: they exist precisely to express an edge that would otherwise close a loop
- External marketplaces are reported as info, grouped by which plugins require them
- Documentation count drift
- Per-plugin agent, skill, and command counts restated in
docs/README.md's index table and in README.md's plugin table must match what marketplace.json declares
- Rows naming a plugin that is not registered, and registered plugins missing from a table that already lists the others, are both flagged
- Every
N plugins phrase in README.md, docs/README.md, CLAUDE.md, and the marketplace metadata.description must match the real plugin count
- This is the check that catches the most common silent decay: adding or removing one file leaves every table that counted it stale, and nothing else fails. Each sub-check is skipped when the file or the table is absent, so it stays valid for marketplaces with a different documentation layout
Step 3: Fix issues
Address findings by severity:
- CRITICAL: Missing referenced files, broken paths, missing required frontmatter fields, duplicate plugin names
- WARNING: Orphaned files, naming mismatches, overlapping keywords, color inconsistencies, git/CLAUDE.md alignment
- INFO: Suggestions for improvement, consolidation opportunities
Step 4: Evaluate color harmony
After the script passes, review the color distribution and evaluate semantic harmony:
- Read each plugin's description and category from marketplace.json
- Consider domain: similar domains should have visually related colors; distinct domains should contrast
- Guiding principles:
- Warm colors (red, orange, yellow, pink) for creative / outward-facing plugins
- Cool colors (blue, cyan, purple) for analytical / development plugins
- Neutral (green) for tooling / infrastructure
- If colors feel disharmonious, propose a new assignment with reasoning and apply after user confirmation
Step 5: Re-validate
Run the script again after fixes to confirm a clean audit.
Notes for marketplace maintainers
- This skill is marketplace-agnostic. It assumes the standard Claude Code plugin layout (
.claude-plugin/marketplace.json + plugins/<name>/) but makes no assumption about which plugins, authors, or upstream sources are specific to your marketplace.
- Plugin categories, default author, upstream sources, and any project-specific conventions should be documented in your
CLAUDE.md at the project root. The script and this skill respect those conventions but do not enforce a particular taxonomy.
1---2name: marketplace-audit-33description: Validates the integrity of any Claude Code plugin marketplace. Use PROACTIVELY before any commit that modifies plugin files or marketplace.json. TRIGGER WHEN: verifying marketplace.json integrity, finding orphan plugins/skills/agents/commands, checking dependency resolution or cycles, confirming documented plugin counts still match README and docs tables, or checking naming conventions. DO NOT TRIGGER WHEN: content quality review (use marketplace-review) or scaffolding new plugins (use marketplace-scaffold-plugin / skills-creator).4---56> `<plugin-root>` names the directory that holds this plugin's `.codex-plugin/plugin.json`. Resolve it once from where this file was loaded, then substitute it into every path below that starts with it.78# Marketplace Audit910Run a comprehensive structural validation of any Claude Code plugin marketplace. Works against any project that follows the standard `.claude-plugin/marketplace.json` + `plugins/<name>/` layout.1112## Audit steps1314### Step 1: Run the validation script1516Execute the audit script to get a machine-readable report:1718```bash19# Validate only20python "<plugin-root>/skills/marketplace-audit/scripts/audit_marketplace.py"2122# Validate and auto-fix color issues (invalid, missing, disharmonious)23python "<plugin-root>/skills/marketplace-audit/scripts/audit_marketplace.py" --fix24```2526The script resolves the target project root by walking up from the script location, or respects a `--project-root <path>` flag if invoking it from a different marketplace than where the plugin is installed.2728### Step 2: Review findings2930The script checks:31321. **File existence** -- every path in marketplace.json `agents` / `skills` / `commands` arrays resolves to a real file or directory332. **Orphaned files** -- agent `.md` files, skill directories, or command `.md` files on disk not registered in any plugin343. **Frontmatter validation**35 - Agents: must have `name`, `description`, `model`, `color`36 - Skills: must have `name`, `description`37 - Commands: must have `description`384. **Color consistency and harmony**39 - All agents within a plugin should use the same color40 - Warn when a single color is overused across too many plugins (threshold configurable)41 - Report color distribution across all plugins42 - Valid colors: red, blue, green, yellow, purple, orange, pink, cyan43 - Use `--fix` to auto-correct invalid or missing colors445. **Naming conventions**45 - All names are kebab-case46 - Agent filename matches frontmatter `name` field47 - Plugin directory name matches marketplace.json `name` field48 - Skill directory name matches frontmatter `name` field49 - Workflow command output directories match command filename (e.g., `feature-e2e.md` typically writes to `.feature-e2e/`)50 - No naming collisions between commands in different plugins51 - No em dash characters anywhere (use hyphen `-` or double hyphen `--`)526. **Cross-reference consistency (project-specific, best-effort)**53 - If a git remote is configured, suggest that the marketplace `name` align with the repo name (warning only)54 - If a `CLAUDE.md` is present at the project root, suggest that its project header match the marketplace name (warning only)55 - These are advisory -- different marketplace maintainers have different conventions567. **Marketplace.json schema**57 - Every plugin has: `name`, `source`, `description`, `version`, `author`, `license`, `keywords`, `category`, `strict`58 - No duplicate plugin names59 - Duplicate keywords across plugins (warning only -- may be intentional)608. **Version sanity**61 - All versions are valid semver (`MAJOR.MINOR.PATCH`)62 - `metadata.version` is present at the root639. **Dependency resolution and acyclicity**64 - An unqualified `dependencies` entry must name a plugin in this marketplace65 - A cross-marketplace entry must use the qualified `name@marketplace` form, which is checked for shape only, since it is unresolvable from here by design. A bare name silently resolves against the local marketplace and fails the whole plugin load, so the qualified form is mandatory, not stylistic66 - The hard-dependency graph must be acyclic. Optional dependencies are excluded from the cycle walk on purpose: they exist precisely to express an edge that would otherwise close a loop67 - External marketplaces are reported as info, grouped by which plugins require them6810. **Documentation count drift**69 - Per-plugin agent, skill, and command counts restated in `docs/README.md`'s index table and in `README.md`'s plugin table must match what marketplace.json declares70 - Rows naming a plugin that is not registered, and registered plugins missing from a table that already lists the others, are both flagged71 - Every `N plugins` phrase in `README.md`, `docs/README.md`, `CLAUDE.md`, and the marketplace `metadata.description` must match the real plugin count72 - This is the check that catches the most common silent decay: adding or removing one file leaves every table that counted it stale, and nothing else fails. Each sub-check is skipped when the file or the table is absent, so it stays valid for marketplaces with a different documentation layout7374### Step 3: Fix issues7576Address findings by severity:7778- **CRITICAL**: Missing referenced files, broken paths, missing required frontmatter fields, duplicate plugin names79- **WARNING**: Orphaned files, naming mismatches, overlapping keywords, color inconsistencies, git/CLAUDE.md alignment80- **INFO**: Suggestions for improvement, consolidation opportunities8182### Step 4: Evaluate color harmony8384After the script passes, review the color distribution and evaluate semantic harmony:85861. Read each plugin's description and category from marketplace.json872. Consider domain: similar domains should have visually related colors; distinct domains should contrast883. Guiding principles:89 - Warm colors (red, orange, yellow, pink) for creative / outward-facing plugins90 - Cool colors (blue, cyan, purple) for analytical / development plugins91 - Neutral (green) for tooling / infrastructure924. If colors feel disharmonious, propose a new assignment with reasoning and apply after user confirmation9394### Step 5: Re-validate9596Run the script again after fixes to confirm a clean audit.9798## Notes for marketplace maintainers99100- This skill is marketplace-agnostic. It assumes the standard Claude Code plugin layout (`.claude-plugin/marketplace.json` + `plugins/<name>/`) but makes no assumption about which plugins, authors, or upstream sources are specific to your marketplace.101- Plugin categories, default author, upstream sources, and any project-specific conventions should be documented in your `CLAUDE.md` at the project root. The script and this skill respect those conventions but do not enforce a particular taxonomy.