What a plugin contains
A skill does one job. A plugin ships a working set: say, a review skill, a /review command, a reviewer subagent and a hook that runs the linter after edits. Enable the plugin and all of it appears; disable it and all of it goes away.
Folder layout per the reference:
my-plugin/ .claude-plugin/plugin.json manifest (optional) skills/<name>/SKILL.md commands/*.md agents/*.md hooks/hooks.json .mcp.json .lsp.json output-styles/ settings.json
Components are namespaced as plugin:component, so two plugins can both ship /review without a clash. A CLAUDE.md at the plugin root is not loaded; put instructions in skills.
How to install a Claude Code plugin
Add the marketplace first, then install from it:
/plugin marketplace add owner/repo /plugin install plugin-name@marketplace-name
From a shell: claude plugin marketplace add <owner>/<repo> (or a URL, or a local folder) and claude plugin install <name>@<marketplace>. Plain /plugin opens a menu with installed plugins and known marketplaces.
The official Anthropic marketplace is added by default. The anthropics/skills repo also installs as a marketplace: /plugin marketplace add anthropics/skills.
For a team, declare marketplaces and plugins in project settings (extraKnownMarketplaces, enabledPlugins) and teammates get them without manual installs.
Official Anthropic plugin catalogs
Numbers taken on 2026-10-24.
CatalogSizeNotesanthropics/claude-plugins-official315 entries in marketplace.json, 40 plugins hosted in the repo itself; 44,260★default marketplace; the other entries point to partner reposanthropics/claude-plugins-community2,283 plugins; 4,759★read-only mirror synced nightly; every plugin passed an automated Anthropic security scan; submissions go through a form on claude.aiclaude.com/plugins548 on the pagea storefront showing a subset of the two repos; some plugins carry an "Anthropic verified" badgeThird-party marketplaces on GitHub number in the thousands: awesomeclaudeplugins.com counted 136,291 plugins across 51,324 repos on the same date. An automated scan is not your review. A plugin hook runs code on your machine. Vetted plugins with license and stars in the trust passport are in Plugins and the best Claude Code plugins list.
plugin.json: the plugin manifest
.claude-plugin/plugin.json is optional; without it Claude Code finds components in the default folders. If it exists, only name is required, in kebab-case. Prefixes such as claude-, anthropic- and cc-plugin- are not allowed.
{
"name": "team-review",
"version": "0.1.0",
"description": "Pre-commit review: skill, command and linter hook",
"license": "MIT"
}Optional fields: version, description, author, license, keywords, dependencies, userConfig, mcpServers. Hook and MCP paths can use ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PROJECT_DIR}.
One catch: subagents shipped in a plugin ignore hooks, mcpServers and permissionMode.
marketplace.json: running your own marketplace
A marketplace is any git repo with .claude-plugin/marketplace.json. Required: name, owner with a name, and a plugins array where each entry has name and source.
{
"name": "acme-tools",
"owner": { "name": "Acme" },
"plugins": [
{ "name": "team-review", "source": "./plugins/team-review" },
{ "name": "db-guard", "source": { "source": "github", "repo": "acme/db-guard" } }
]
}source can be a relative path, a GitHub repo, a git subdirectory, a URL, an archive, an npm package or a command. Official marketplace names such as claude-plugins-official are reserved. Details in the marketplace docs.
Testing a plugin before you publish
claude plugin validate ./my-pluginchecks the structure and manifest;claude --plugin-dir ./my-pluginstarts a session with the plugin loaded from disk, no marketplace needed;- after changes, reload and confirm the commands show up under the plugin prefix.
Planning to support other agents too? Cursor imports GitHub plugins through its own .cursor-plugin/marketplace.json, Gemini CLI has extensions with gemini-extension.json, and Codex installs plugins via /plugins. What ports as is: mostly the skills, because every agent reads SKILL.md. The config formats guide covers the rest.