The marketplace system lets you discover, install, and manage plugins from Git, local, or direct-catalog sources. 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

In the TUI, /marketplace with no arguments opens the interactive plugin browser. In non-TUI command handling, /marketplace lists configured marketplaces; use /marketplace discover to browse.

Concepts

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

A plugin is a directory containing Claude/OMP plugin content such as skills, commands, agents, hooks, tools, MCP servers, or LSP servers. Extension modules (package.json omp.extensions entry points) are not loaded from marketplace installs — they only load for npm-installed or omp plugin linked plugins. Plugins are identified by name@marketplace (e.g. code-review@claude-plugins-official).

Scopes: marketplace plugins can be installed at two scopes:

  • user (default) — available in all projects, stored in ~/.omp/plugins/installed_plugins.json
  • project — available only in the active project, stored in the nearest project .omp/plugins/installed_plugins.json

Enabled project-scoped installs shadow enabled user-scoped installs of the same plugin. A disabled project install does not shadow the user install.

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; no args opens the TUI selector
/marketplace installedList installed marketplace plugins
/marketplace upgrade [--scope user|project] [name@marketplace]Upgrade one or all plugins
/plugins listList npm/link and marketplace plugins
/plugins enable [--scope user|project] name@marketplaceEnable a marketplace plugin
/plugins disable [--scope user|project] name@marketplaceDisable a marketplace plugin

CLI equivalents

The same operations are available from the command line:

omp plugin marketplace add <source>
omp plugin marketplace remove <name>
omp plugin marketplace update [name]
omp plugin marketplace list
omp plugin discover [marketplace]
omp plugin install [--force] [--scope user|project] name@marketplace
omp plugin uninstall [--scope user|project] name@marketplace
omp plugin upgrade [--scope user|project] [name@marketplace]
omp plugin enable [--scope user|project] name@marketplace
omp plugin disable [--scope user|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://... / http://...Git repository unless the URL path ends in .jsonhttps://github.com/org/repo
git@... / ssh://...Git repositorygit@github.com:org/repo.git
./path or ~/path or /pathLocal directory./my-marketplace

Git and local sources must contain a catalog at .omp-plugin/marketplace.json (preferred) or .claude-plugin/marketplace.json (Claude Code-compatible fallback). Direct catalog URLs cache only the JSON catalog; plugins in URL-sourced catalogs cannot use relative string sources like "./plugins/foo".

Catalog format (marketplace.json)

A marketplace catalog lives at .omp-plugin/marketplace.json in the repository root. When omp is the only intended consumer, prefer this path. To remain Claude Code-compatible (omp loads the same shape from either path), publish at .claude-plugin/marketplace.json instead — omp uses it as a fallback when .omp-plugin/marketplace.json is absent. A repository may ship both: omp reads the .omp-plugin/ copy, Claude Code reads the .claude-plugin/ copy. Same catalog format either way:

{
  "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
  "name": "my-marketplace",
  "owner": {
    "name": "Your Name",
    "email": "you@example.com"
  },
  "metadata": {
    "description": "A collection of plugins",
    "version": "1.0.0",
    "pluginRoot": "plugins"
  },
  "plugins": [
    {
      "name": "my-plugin",
      "description": "What this plugin does",
      "source": "./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

Top-level metadata.description, metadata.version, and metadata.pluginRoot are optional. When metadata.pluginRoot is set, it is prepended to relative plugin source paths.

Plugin entry fields

FieldRequiredDescription
nameyesPlugin name (same rules as marketplace name)
sourceyesWhere to find the plugin (see below)
descriptionnoShort description
versionnoVersion string; install version falls back to plugin manifest, source SHA, then 0.0.0
authorno{ name, email? }
homepagenoURL
repositorynoRepository URL/string
licensenoLicense string
keywordsnoArray of string keywords
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 or path; copied to .lsp.json on install

Plugin source formats

The source field supports these formats. String sources must start with ./ and are resolved inside the marketplace root, after optional metadata.pluginRoot is prepended:

Relative path (within the marketplace repo):

"source": "./my-plugin"

Git repository URL:

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

GitHub shorthand:

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

Git subdirectory (monorepo):

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

npm package (parsed but not installable yet):

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

Current installer behavior rejects npm marketplace sources with npm plugin sources are not yet supported; use relative, GitHub, URL, or git-subdir sources.

On-disk layout

~/.omp/
  marketplaces.json              # Registry of added marketplaces
  plugins/
    installed_plugins.json       # User-scoped marketplace plugins (version: 2)
    cache/
      marketplaces/<name>/       # Cached marketplace clone/catalog
      plugins/<marketplace>___<plugin>___<version>/  # Cached plugin directories

<project>/.omp/
  plugins/
    installed_plugins.json       # Project-scoped marketplace plugins (version: 2)

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