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>
4.8 KiB
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 validatefails withUnrecognized 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:
metadataonly supportsdescription,version,pluginRoot. Puthomepageon individual plugin entries if needed. - Why it's tricky:
homepageIS 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: falsemeans marketplace.json is the SOLE definition. Remove plugin.json or setstrict: trueand 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 entryversionis 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
versionin 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
descriptionfield 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/mainthat 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.keywordsis defined in the schema but never consumed.tagsonly 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"].