Files
claude-code-skills-reference/marketplace-dev/references/anti_patterns.md
daymade 2097ffb527 feat: add marketplace-dev skill for converting skills repos to plugin marketplaces
Encodes proven methodology from real marketplace development:
- 4-phase workflow: Analyze → Create → Validate → PR
- 8 schema hard-rules (verified against Claude Code source)
- 13 anti-patterns from production debugging
- Complete marketplace.json schema reference
- Marketplace maintenance rules (version bumping, description updates)

Also fixes: remove invalid metadata.homepage from our own marketplace.json

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:56:48 +08:00

4.8 KiB

Anti-Patterns: Marketplace Development Pitfalls

Every item below was encountered during real marketplace development. Not theoretical — each cost debugging time.

Schema Errors

Adding $schema field

  • Symptom: claude plugin validate fails with Unrecognized key: "$schema"
  • Fix: Do not include $schema. Unlike many JSON schemas, Claude Code rejects it.
  • Why it's tempting: Other marketplace examples (like daymade/claude-code-skills) include it, and it works for JSON Schema-aware editors. But the validator is strict.

Using metadata.homepage

  • Symptom: Silently ignored — no error, no effect.
  • Fix: metadata only supports description, version, pluginRoot. Put homepage on individual plugin entries if needed.
  • Why it's tricky: homepage IS valid on plugin entries (from plugin.json schema), so it looks correct but is wrong at the metadata level.

Conflicting strict: false with plugin.json

  • Symptom: Plugin fails to load with "conflicting manifests" error.
  • Fix: Choose one authority. strict: false means marketplace.json is the SOLE definition. Remove plugin.json or set strict: true and let plugin.json define components.

Version Confusion

Using marketplace version as plugin version

  • Symptom: All plugins show the same version (e.g., "2.3.0") even though each was introduced at different times.
  • Fix: metadata.version = marketplace catalog version (matches repo VERSION file). Each plugin entry version is independent. First time in marketplace = "1.0.0".

Not bumping version after changes

  • Symptom: Users don't receive updates after you push changes.
  • Fix: Claude Code uses version to detect updates. Same version = skip. Bump the plugin version in marketplace.json when you change skill content.

Description Errors

Rewriting or translating SKILL.md descriptions

  • Symptom: Descriptions don't match the actual skill behavior. English descriptions for a Chinese-audience repo feel foreign.
  • Fix: Copy the EXACT description field from each SKILL.md frontmatter. The author wrote it for their audience — preserve it.

Inventing features in descriptions

  • Symptom: Description promises "8,000+ consultations" or "auto-backup and rollback" when the SKILL.md doesn't mention these specifics.
  • Fix: Only state what the SKILL.md frontmatter says. If you want to add context, use the marketplace-level metadata.description, not individual plugin descriptions.

Installation Testing

Not testing after GitHub push

  • Symptom: Local validation passes, but claude plugin marketplace add <user>/<repo> fails because it clones the default branch which doesn't have the marketplace.json.
  • Fix: Push marketplace.json to the repo's default branch before testing GitHub install. Feature branches only work if the user specifies the ref.

Forgetting to clean up test installations

  • Symptom: Next test run finds stale marketplace/plugins and produces confusing results.
  • Fix: Always uninstall plugins and remove marketplace after testing:
    claude plugin uninstall <plugin>@<marketplace> 2>/dev/null
    claude plugin marketplace remove <marketplace> 2>/dev/null
    

PR Best Practices

Modifying existing files unnecessarily

  • Symptom: PR diff includes unrelated changes (empty lines in .gitignore, whitespace changes in README), making it harder to review and merge.
  • Fix: Only add new files. If modifying README, be surgical — only add the install section. Verify with git diff upstream/main that no unrelated files are touched.

Not squashing commits

  • Symptom: Git history has 15+ commits with iterative demo.gif changes, bloating the repo by megabytes. Users cloning the marketplace download all this history.
  • Fix: Squash all commits into one before creating the PR:
    git reset --soft upstream/main
    git commit -m "feat: add Claude Code plugin marketplace"
    

Discovery Misconceptions

Over-investing in keywords/tags

  • Symptom: Spending time crafting perfect keyword lists.
  • Reality: In the current Claude Code source (verified by reading DiscoverPlugins.tsx), the Discover tab searches ONLY name + description + marketplaceName. keywords is defined in the schema but never consumed. tags only affects UI for the specific value "community-managed". Include keywords for future-proofing but don't obsess over them.

Using tags for search optimization

  • Symptom: Adding tags: ["business", "diagnosis"] expecting search improvements.
  • Reality: Only tags: ["community-managed"] has any effect (shows a UI label). The official Anthropic marketplace (123 plugins) uses tags on only 3 plugins, all with the value ["community-managed"].