Skip to content

Plugins & marketplaces

A plugin is the packaging unit that bundles a CLI’s extension primitives — skills, hooks, subagents, MCP servers, commands — into one installable thing. Instead of dropping six files in six different directories, you install one plugin and the whole set lands together, namespaced so it doesn’t collide with anything else.

Across the tools in scope:

  • Claude Code has plugins and marketplaces (hosted plugin collections you browse from inside the CLI).
  • Copilot has the densest surface: Extensions (Chat-centric, GitHub Marketplace) and plugins (bundle skills + agents + hooks + MCP + LSP, distributed via marketplaces — preview in 2026).
  • opencode has plugins as JS/TS modules; no marketplace concept of its own, but an awesome-opencode community index.
  • Cursor inherits the VS Code extension model (OpenVSX-backed) plus an MCP Marketplace, but has no first-class “bundle of rules + skills + agents + hooks” plugin format yet.
  • Codex has no first-class plugin format — you compose its primitives (skills, MCP, SDK) directly. That’s a deliberate design choice as much as a gap.

You’ve spent the last month building up the way you use Claude Code: a deploy-checklist skill, a security-reviewer subagent, a hook that runs the linter after every edit, an MCP server pointed at your Linear, three slash commands for the team’s pre-merge workflow. It all lives in .claude/ inside one repo. It works beautifully.

Then you start a second repo. You want the same setup. So you copy .claude/ across. Then a new teammate joins — “how do you get this stuff?” — and the answer is “clone my dotfiles, copy these directories, edit your settings.json, install these MCP servers, oh, you also need…” The setup that worked beautifully in one repo doesn’t survive contact with anyone else’s filesystem.

That’s the gap plugins close. The same skill + subagent + hook + MCP bundle becomes one installable thing, namespaced so two plugins don’t fight, distributable through a marketplace so your teammate runs /plugin install team-stack@our-marketplace and gets the whole setup. Sharing your way of working with the agent shifts from “follow these eleven steps” to “install this.”

Real-world examples of what teams actually package as plugins:

  • Team conventions bundle — your repo’s style guide as a skill, a pre-commit linting hook, a code-review subagent, an MCP server for your issue tracker. One install, whole-team consistency.
  • Domain plugins — a “payments” plugin with PCI-aware skills, an audit-log hook, and a subagent that knows the payment processor’s API.
  • Personal toolkit — your own /tldr, /skeptic, /pre-ship commands plus your favourite review subagent. Install on every machine you use, kept in sync via the marketplace.
  • Open-source plugins — community-maintained bundles for a specific stack (Rust + Tokio, Next.js + Drizzle, Django + Celery). Skill + agent + permissions tuned for that stack.
  • Org-wide standards — managed-scope plugin installed on every dev’s machine: enforce the security hook, the audit MCP server, the approved-subagent list. The team has no choice about installing it.
  • Workshop / tutorial materials — pin a known-good toolkit for a workshop so every attendee starts from the same baseline.

The test: if you’ve ever found yourself emailing someone a zip of your .claude/ folder, or telling them “first, copy these files…”, you wanted a plugin.

You want to…Reach forNot
Bundle multiple primitives (skills + hooks + agents + MCP) as one unitPluginLoose files
Share that bundle with teammates / a communityPlugin (via a marketplace)A README with copy-paste instructions
Distribute just a single skillA standalone skill folder (especially SKILL.md is cross-tool portable)Wrapping it in a plugin
Add one MCP serverMCP config directlyPlugin-wrapping it
Enforce a configuration across the orgManaged-scope plugin (Claude Code) / managed configPlugin marketplace alone
Add live event-handling code (opencode)opencode plugin (JS/TS)Static skill

A plugin pays its weight when there are multiple extension pieces that belong together. A single skill or single hook doesn’t need a plugin wrapper — keep it as a loose file until you find yourself shipping it alongside something else.

A plugin is a directory bundling some combination of:

  • Skills (skills/<name>/SKILL.md)
  • Subagents (agents/<name>.md)
  • Hooks
  • MCP servers
  • Commands

Each plugin’s skills/commands are namespaced when installed — they appear as /my-plugin:cmd so multiple plugins coexist without colliding.

Marketplaces are hosted collections of plugins. You point Claude Code at a marketplace URL and browse/install from inside the CLI.

Marketplace commands:

/plugin marketplace add <owner/repo | git-url | local-path | marketplace.json-url>
/plugin marketplace list
/plugin marketplace update <marketplace-name>
/plugin marketplace remove <marketplace-name>

(/plugin market is a shortcut for /plugin marketplace; rm aliases remove.)

Plugin commands:

/plugin install <plugin>@<marketplace>
/plugin enable|disable <plugin>@<marketplace>
/plugin uninstall <plugin>@<marketplace>
/reload-plugins # hot-reload without restart
claude plugin install <plugin>@<marketplace> --scope project

Scopes: user (default), project (committed to .claude/settings.json), local (this repo, not shared), managed (admin-set).

On-disk layout: installed plugins are copied into a cache rooted at ~/.claude/plugins/cache/. Because plugins live in the cache (not their source repo), paths referencing files outside the plugin directory don’t work. Plugin skills are namespaced under the plugin (e.g. commit-commands exposes /commit-commands:commit). Project-scope marketplaces are registered in .claude/settings.json under extraKnownMarketplaces. The official Anthropic marketplace claude-plugins-official is auto-available.

AspectClaude CodeCodexopencodeCursorCopilot
First-class plugin formatYes (static bundle)NoYes (live JS/TS)No (bundle of rules + skills + agents)Yes (preview, 2026)
Bundles skills + hooks + agents + MCPYesYes (via plugin code)Yes (skills + agents + hooks + MCP + LSP)
Namespacing/plugin:cmdSlash commands not a documented plugin capabilityPlugin-scoped
Distribution mechanismMarketplacesnpm + community awesome-opencode indexOpenVSX extensions + MCP Marketplace (cursor.directory)GitHub Marketplace (Extensions), plus plugin marketplaces (default: github/copilot-plugins, github/awesome-copilot)
Closest analogue (if no native plugins)Skills + MCP + SDKShare .cursor/* files directly
Separate @-invocable extension surfaceCopilot Extensions (Skillsets / Agents) via GitHub Marketplace
  • A Claude Code plugin is a static bundle of files. An opencode plugin is live JS/TS code. They are not the same abstraction layer — one is content packaging, the other is event-driven code.
  • Codex’s lack of plugins isn’t an oversight — the design treats skills + MCP + SDK as a sufficient composition surface. Don’t recommend “wait for plugins”; recommend the existing primitives.
  • In Copilot, Extensions and plugins are two distinct primitives that both ship in 2026. Extensions are @-invocable Chat agents distributed via GitHub Marketplace; plugins are marketplace-registered bundles (skills + agents + hooks + MCP + LSP) for VS Code Chat and Copilot CLI. Don’t conflate them.
  • Cursor doesn’t yet have a “bundle of rules + skills + subagents + hooks” plugin abstraction. Its plugin-like surfaces are inherited from the VS Code extension model and the MCP Marketplace, not a Cursor-native packaging format.