Agent skill

maintaining-a-marketplace

Use when creating, releasing, or maintaining a Claude Code Plugin Marketplace - covers marketplace.json schema, version management, release checklists, changelog conventions, and validation to prevent sync drift between plugin.json and marketplace.json

Stars 170
Forks 21

Install this agent skill to your Project

npx add-skill https://github.com/ed3dai/ed3d-plugins/tree/main/plugins/ed3d-extending-claude/skills/maintaining-a-marketplace

SKILL.md

Maintaining a Marketplace

Overview

A Claude Code Plugin Marketplace is a git repository containing .claude-plugin/marketplace.json that catalogs plugins for discovery and installation. The primary maintenance challenge is sync drift — keeping versions, descriptions, and metadata consistent across plugin.json, marketplace.json, and CHANGELOG.md.

When to Use

  • Setting up a new marketplace from scratch
  • Releasing a new plugin version
  • Adding a plugin to an existing marketplace
  • Auditing marketplace consistency
  • Troubleshooting plugin installation failures

Marketplace Structure

my-marketplace/
  .claude-plugin/
    marketplace.json       # Required: marketplace catalog
  plugins/
    plugin-a/
      .claude-plugin/
        plugin.json        # Required: plugin manifest
      skills/
      commands/
      agents/
    plugin-b/
      .claude-plugin/
        plugin.json

marketplace.json Schema

json
{
  "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
  "name": "my-marketplace",
  "owner": {
    "name": "Your Name",
    "email": "you@example.com"
  },
  "metadata": {
    "description": "Brief marketplace description",
    "version": "1.0.0",
    "pluginRoot": "./plugins"
  },
  "plugins": [
    {
      "name": "my-plugin",
      "source": "./plugins/my-plugin",
      "description": "What this plugin does",
      "version": "1.0.0",
      "author": {
        "name": "Your Name",
        "email": "you@example.com"
      },
      "license": "MIT",
      "keywords": ["category1", "category2"],
      "category": "development"
    }
  ]
}

Required fields:

  • name — Kebab-case marketplace identifier. Users see this: /plugin install my-tool@marketplace-name
  • owner.name — Maintainer name (string, not bare string for owner)
  • plugins — Array of plugin entries

Each plugin entry requires:

  • name — Kebab-case plugin identifier
  • source — Where to fetch the plugin (see Source Formats below)

Common optional fields: description, version, author, license, keywords, category, tags, homepage, repository

Fields that DO NOT exist (do not invent these): displayName, installUrl, path, marketplace (as wrapper object)

Source Formats

json
// Relative path (monorepo — only works with git-based marketplace add)
"source": "./plugins/my-plugin"

// GitHub repository
"source": { "source": "github", "repo": "owner/repo" }

// GitHub with pinned version
"source": { "source": "github", "repo": "owner/repo", "ref": "v2.0.0", "sha": "a1b2c3..." }

// Git URL (GitLab, Bitbucket, self-hosted)
"source": { "source": "url", "url": "https://gitlab.com/team/plugin.git" }

Release Checklist

When releasing a new plugin version, update these files in this order:

  1. plugins/<name>/.claude-plugin/plugin.json — Bump version
  2. .claude-plugin/marketplace.json — Update matching plugin entry's version to the same value
  3. CHANGELOG.md — Add entry at the top (after # Changelog heading)
  4. Validate — Run claude plugin validate . or /plugin validate . from the marketplace root
  5. Commit and push — Single commit with all three file changes

Changelog Format

markdown
## plugin-name X.Y.Z

Brief description of the release (1-2 sentences).

**New:**
- Specific new features or additions

**Changed:**
- Modifications to existing behavior

**Fixed:**
- Bug fixes

Only include sections that apply. Be specific — "Added code-review-checklist skill for systematic code review" not "Added new skill."

Version Sync Verification

After editing, verify these match:

  • plugins/<name>/.claude-plugin/plugin.jsonversion
  • .claude-plugin/marketplace.json → plugin entry's version
  • CHANGELOG.md → entry header ## plugin-name X.Y.Z

All three MUST show the same version string.

Creating a New Marketplace

From Scratch

  1. Create directory structure with .claude-plugin/marketplace.json
  2. Add plugin entries with name and source at minimum
  3. Add $schema field for validation
  4. Validate: claude plugin validate .
  5. Test locally: /plugin marketplace add ./my-marketplace
  6. Push to git host for distribution

Adding a Plugin to Existing Marketplace

  1. Read the plugin's plugin.json to extract metadata
  2. Add entry to plugins array in marketplace.json with fields matching plugin.json
  3. Validate: claude plugin validate .
  4. Add changelog entry for the marketplace update

Distribution

Users add your marketplace by its git location:

bash
# GitHub
/plugin marketplace add owner/repo

# Other git hosts
/plugin marketplace add https://gitlab.com/company/plugins.git

# Specific branch/tag
/plugin marketplace add https://gitlab.com/company/plugins.git#v1.0.0

# Local (development)
/plugin marketplace add ./my-marketplace

Users install plugins from your marketplace:

bash
/plugin install plugin-name@marketplace-name

Auto-Updates

  • Official Anthropic marketplaces auto-update by default
  • Third-party marketplaces have auto-update disabled by default
  • Users toggle auto-update per marketplace in /plugin → Marketplaces tab

Team Configuration

Add to .claude/settings.json in a project repo to prompt team members to install:

json
{
  "extraKnownMarketplaces": {
    "company-tools": {
      "source": { "source": "github", "repo": "your-org/claude-plugins" }
    }
  },
  "enabledPlugins": {
    "formatter@company-tools": true
  }
}

Private Repositories

Manual install uses existing git credential helpers. For background auto-updates, set environment tokens:

Provider Variables
GitHub GITHUB_TOKEN or GH_TOKEN
GitLab GITLAB_TOKEN or GL_TOKEN
Bitbucket BITBUCKET_TOKEN

Common Mistakes

Mistake Symptom Fix
Version drift between plugin.json and marketplace.json Old version installed despite push Verify both files show same version
Skipping validation JSON syntax errors, missing fields Run claude plugin validate . before every push
Generic changelog entries Users can't evaluate upgrade value Describe specific changes, name affected skills/agents
Inventing schema fields Validation errors, plugins not found Only use fields from the schema above
Using owner as string Validation error owner must be object: {"name": "...", "email": "..."}
Missing source in plugin entry Plugin can't be installed Every plugin entry needs source
Relative paths in URL-based marketplace "path not found" errors Only use relative paths with git-based marketplace add
Not committing all sync files together Partial release, version mismatch Single commit for plugin.json + marketplace.json + CHANGELOG.md
Forgetting to push Local changes, users see old version Commit AND push after release

Quick Reference

Task Files to Touch
New plugin version plugin.json + marketplace.json + CHANGELOG.md
New plugin added marketplace.json + CHANGELOG.md
New marketplace .claude-plugin/marketplace.json only
Description update plugin.json + marketplace.json (keep in sync)
Validate claude plugin validate . or /plugin validate .

Expand your agent's capabilities with these related and highly-rated skills.

ed3dai/ed3d-plugins

doing-a-simple-two-stage-fanout

Use when analyzing a large corpus of text, code, or data that exceeds a single agent's effective context - orchestrates parallel Worker subagents, Critic review subagents, and a final Summarizer subagent with task tracking and failure recovery

170 21
Explore
ed3dai/ed3d-plugins

using-generic-agents

Use to decide what kind of generic agent you should use

170 21
Explore
ed3dai/ed3d-plugins

investigating-a-codebase

Use when planning or designing features and need to understand current codebase state, find existing patterns, or verify assumptions about what exists; when design makes assumptions about file locations, structure, or existing code that need verification - prevents hallucination by grounding plans in reality

170 21
Explore
ed3dai/ed3d-plugins

researching-on-the-internet

Use when planning features and need current API docs, library patterns, or external knowledge; when testing hypotheses about technology choices or claims; when verifying assumptions before design decisions - gathers well-sourced, current information from the internet to inform technical decisions

170 21
Explore
ed3dai/ed3d-plugins

creating-an-agent

Use when creating specialized subagents for Claude Code plugins or the Task tool - covers description writing for auto-delegation, tool selection, prompt structure, and testing agents

170 21
Explore
ed3dai/ed3d-plugins

maintaining-project-context

Use when completing development phases or branches to identify and update CLAUDE.md or AGENTS.md files that may have become stale - analyzes what changed, determines affected contracts and documentation, and coordinates updates

170 21
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results