Plugins
Package and distribute skills, agents, hooks, and MCP servers as shareable bundles
title: "Plugins" description: "Package and distribute skills, agents, hooks, and MCP servers as shareable bundles" section: "Core" readTime: "9 min" badge: "NEW"
Plugins
Plugins bundle skills, custom agents, hooks, and MCP servers into a single unit that Claude Code installs and loads together. Most plugins come from a marketplace — a catalog that lists plugins and where to fetch each one. Share them with your team, publish them for your organization, or have IT/DevOps require them through managed settings.
Skills, agents, hooks, and MCP servers all work standalone. Reach for a plugin when you want to share a setup with teammates, install it in many projects, or publish versioned releases.
What a Plugin Contains
my-plugin/
├── .claude-plugin/
│ └── plugin.json # Manifest (only this file goes here)
├── skills/
│ ├── deploy/
│ │ └── SKILL.md
│ └── code-review/
│ └── SKILL.md
├── agents/
│ └── security-reviewer.md
├── hooks/
│ └── hooks.json # Same shape as "hooks" in settings.json
└── .mcp.json # MCP server definitions
Component directories live at the plugin root, not inside .claude-plugin/ — anything saved there doesn't load. A legacy commands/ directory of flat Markdown files also works, but use skills/ for new plugins.
Skills from a plugin use a namespaced command: /plugin-name:skill-name. This prevents conflicts with project or personal skills of the same name.
An enabled plugin is part of every session: each auto-invocable skill and agent adds its name and description to context on every turn, its MCP servers run, and its hooks fire. Plugins run code as you, so review them before installing.
Install a Plugin
Inside a session, /plugin opens the plugin manager (tabs: Discover, Installed, Marketplaces, Errors). Anthropic's official marketplace, claude-plugins-official, is added automatically the first time you start an interactive session.
# In a session: open the plugin's details, then pick a scope
/plugin install commit-commands@claude-plugins-official
# Add another marketplace first (GitHub repo, git URL, local path, or marketplace.json URL)
/plugin marketplace add your-org/plugins
/plugin install deploy-helper@<marketplace-name> # name from its marketplace.json
# Apply changes made on disk or pending installs
/reload-pluginsFrom your shell (scripts, CI):
claude plugin install formatter@your-org --scope project
claude plugin list
claude plugin disable formatter@your-org
claude plugin enable formatter@your-org
claude plugin update formatter@your-org
claude plugin uninstall formatter@your-org
claude plugin marketplace add your-org/pluginsInstall scopes
| Scope | Enabled for | Written to |
|---|---|---|
| User (default) | You, in every project | ~/.claude/settings.json |
| Project | Everyone in the repo | .claude/settings.json (committed) |
| Local | You, in this repo only | .claude/settings.local.json |
Local overrides project, and project overrides user. A project-scoped plugin is enabled for collaborators via the committed settings, but each person still installs it once with claude plugin install <name>@<marketplace> --scope project.
Plugins from Anthropic's official marketplaces auto-update by default; third-party and local marketplaces don't (toggle per marketplace in the Marketplaces tab).
Create a Plugin
1. Create the directory and manifest
mkdir -p my-plugin/.claude-pluginmy-plugin/.claude-plugin/plugin.json:
{
"name": "my-plugin",
"description": "ACME internal Claude Code skills",
"version": "1.0.0",
"author": { "name": "ACME Platform Team" }
}Only name is required (no spaces) — it becomes the prefix for every skill and agent. Setting version pins users to that version until you bump it.
2. Add skills
mkdir -p my-plugin/skills/deploy
cat > my-plugin/skills/deploy/SKILL.md << 'EOF'
---
name: deploy
description: Deploy the application to production
disable-model-invocation: true
allowed-tools: Bash(./scripts/deploy.sh *)
---
Run the deployment pipeline:
1. Run tests: `./scripts/test.sh`
2. Build: `./scripts/build.sh`
3. Deploy: `./scripts/deploy.sh $ARGUMENTS`
4. Verify: check health endpoint
EOF3. Validate and test locally
claude plugin validate ./my-plugin
claude --plugin-dir ./my-plugin # loads for this session onlyThen run /my-plugin:deploy staging. Edit files and run /reload-plugins to pick up changes; check the Errors tab in /plugin if something doesn't load.
Already have skills, agents, or hooks under .claude/? Copy commands/, agents/, and skills/ into the plugin root and move the hooks object from your settings into hooks/hooks.json. Remove the originals afterwards — otherwise hooks run twice.
4. Share it
Send the folder or a .zip to a few people (they load it with --plugin-dir), or list it in a marketplace. A marketplace is just a repo with .claude-plugin/marketplace.json:
{
"name": "acme-tools",
"owner": { "name": "ACME Platform Team" },
"plugins": [
{
"name": "my-plugin",
"source": "./plugins/my-plugin",
"description": "ACME internal Claude Code skills"
}
]
}Push it to a git host; teammates run claude plugin marketplace add acme/claude-plugins and then claude plugin install my-plugin@acme-tools. Plugin sources can also be github, git-subdir, url, npm, and others. You can also submit a plugin to Anthropic's directory.
Enterprise-Managed Plugins
IT/DevOps can require plugins on every machine via managed settings (server-managed from the claude.ai admin console, MDM, or managed-settings.json). Users can't override them.
{
"extraKnownMarketplaces": {
"acme-tools": {
"source": { "source": "github", "repo": "acme/claude-plugins" },
"autoUpdate": true
}
},
"enabledPlugins": {
"security-standards@acme-tools": true,
"deployment-tools@acme-tools": true
}
}extraKnownMarketplaces registers the marketplace and enabledPlugins force-enables plugins (false blocks one everywhere). Other managed controls:
| Key | Effect |
|---|---|
strictKnownMarketplaces | Allowlist of marketplace sources ([] blocks all, including the official one) |
blockedMarketplaces | Blocklist of marketplace sources, checked first |
disableSideloadFlags | Rejects --plugin-dir, --plugin-url, and similar flags |
strictPluginOnlyCustomization | Blocks skills, agents, hooks, or MCP servers that don't come from a plugin or managed settings |
This ensures every developer has the same security hooks, company coding standards, and deployment workflows — without each person installing them manually.
Plugin Skill Namespace
Plugin skills appear in the / menu as plugin-name:skill-name (the plugin's name, not the marketplace's). You can invoke them directly:
/my-plugin:deploy staging
/my-plugin:code-review src/api/
Plugin agents are namespaced the same way, e.g. my-plugin:security-reviewer.
skillOverrides does not apply to plugin skills. Manage them via /plugin instead.
Scope Priority
When skills share the same name across levels, this is the resolution order:
- Enterprise managed (always wins)
- Personal (
~/.claude/skills/) - Project (
.claude/skills/) - Plugin (namespaced, so no conflict)