Skip to content

Marketplace plugin system

The marketplace system lets you discover, install, and manage plugins from Git-hosted catalogs. It is compatible with the Claude Code plugin registry format.

Quick start

/marketplace add anthropics/claude-plugins-official
/marketplace install wordpress.com@claude-plugins-official

Or just type /marketplace with no arguments to open the interactive plugin browser.

Concepts

A marketplace is a Git repository (or local directory) containing a catalog file at .claude-plugin/marketplace.json. The catalog lists available plugins with their sources, descriptions, and metadata.

A plugin is a directory containing skills, commands, hooks, MCP servers, or LSP servers. Plugins are identified by name@marketplace (e.g. code-review@claude-plugins-official).

Scopes: plugins can be installed at two scopes:

  • user (default) -- available in all projects, stored in ~/.pisces/plugins/installed_plugins.json
  • project -- available only in the current project, stored in .pisces/installed_plugins.json

Project-scoped installs shadow user-scoped installs of the same plugin.

Commands

Interactive mode

CommandEffect
/marketplaceOpen interactive plugin browser (install)

Marketplace management

CommandEffect
/marketplace add <source>Add a marketplace source
/marketplace remove <name>Remove a marketplace
/marketplace update [name]Re-fetch catalog(s); omit name to update all
/marketplace listList configured marketplaces

Plugin operations

CommandEffect
/marketplace discover [marketplace]Browse available plugins
/marketplace install [--force] [--scope user|project] name@marketplaceInstall a plugin
/marketplace uninstall [--scope user|project] name@marketplaceUninstall a plugin
/marketplace installedList installed marketplace plugins
/marketplace upgrade [--scope user|project] [name@marketplace]Upgrade one or all plugins

CLI equivalents

The same operations are available from the command line:

pisces plugin marketplace add <source>
pisces plugin marketplace remove <name>
pisces plugin marketplace update [name]
pisces plugin marketplace list
pisces plugin discover [marketplace]
pisces plugin install --scope project name@marketplace

Marketplace sources

When you run /marketplace add <source>, the system classifies the source:

Source formatTypeExample
owner/repoGitHub shorthandanthropics/claude-plugins-official
https://...*.jsonDirect catalog URLhttps://example.com/marketplace.json
https://...*.git or git@...Git repositoryhttps://github.com/org/repo.git
./path or ~/path or /pathLocal directory./my-marketplace

The system clones the repository (or reads the local directory), locates .claude-plugin/marketplace.json, validates it, and caches the catalog locally.

Catalog format (marketplace.json)

A marketplace catalog lives at .claude-plugin/marketplace.json in the repository root:

json
{
  "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
  "name": "my-marketplace",
  "owner": {
    "name": "Your Name",
    "email": "you@example.com"
  },
  "description": "A collection of plugins",
  "plugins": [
    {
      "name": "my-plugin",
      "description": "What this plugin does",
      "source": "./plugins/my-plugin",
      "category": "development",
      "homepage": "https://github.com/you/my-plugin"
    }
  ]
}

Required fields

FieldDescription
nameMarketplace name. Lowercase alphanumeric, hyphens, and dots. Must start and end with alphanumeric. Max 64 chars.
owner.nameMarketplace owner name
pluginsArray of plugin entries

Plugin entry fields

FieldRequiredDescription
nameyesPlugin name (same rules as marketplace name)
sourceyesWhere to find the plugin (see below)
descriptionnoShort description
versionnoVersion string
authorno{ name, email? }
homepagenoURL
categorynoCategory string (e.g. development, productivity, security)
tagsnoArray of string tags
strictnoBoolean
commandsnoSlash commands provided
agentsnoAgents provided
hooksnoHook definitions
mcpServersnoMCP server definitions
lspServersnoLSP server definitions

Plugin source formats

The source field supports several formats:

Relative path (within the marketplace repo):

json
"source": "./plugins/my-plugin"

Git repository URL:

json
"source": {
  "source": "url",
  "url": "https://github.com/org/repo.git",
  "sha": "abc123..."
}

GitHub shorthand:

json
"source": {
  "source": "github",
  "repo": "org/repo",
  "ref": "main",
  "sha": "abc123..."
}

Git subdirectory (monorepo):

json
"source": {
  "source": "git-subdir",
  "url": "https://github.com/org/monorepo.git",
  "path": "plugins/my-plugin",
  "ref": "main",
  "sha": "abc123..."
}

npm package:

json
"source": {
  "source": "npm",
  "package": "@scope/my-plugin",
  "version": "1.0.0"
}

On-disk layout

~/.pisces/
  config/
    marketplaces.json          # Registry of added marketplaces
  plugins/
    installed_plugins.json     # User-scoped installed plugins
    cache/
      marketplaces/            # Cached marketplace catalogs
      plugins/                 # Cached plugin directories

<project>/.pisces/
  installed_plugins.json       # Project-scoped installed plugins

## Naming rules

Marketplace and plugin names must:

- Start and end with a lowercase letter or digit
- Contain only lowercase letters, digits, hyphens, and dots
- Be at most 64 characters

Plugin IDs (`name@marketplace`) must be at most 128 characters total.

Valid examples: `my-plugin`, `code-review`, `wordpress.com`, `ai-firstify`
Invalid examples: `-bad`, `bad-`, `.bad`, `Bad`, `under_score`