TL;DR A Claude Code plugin isn't a new technology. It's a directory that bundles skills, subagents, hooks, MCP servers, and settings — everything you already know — into an installable, shareable format with a single command.
If you see "plugins" and think "another thing to learn," relax. There's no new API, no new syntax, no new concept. A plugin is literally your .claude/ directory packaged up: the same skills, the same agents, the same hooks. The difference is you can now share it with your team or the community via /plugin install.
Think of it as a package.json for Claude Code configuration: a manifest declaring what's inside and a directory structure that Claude Code knows how to read.
Result — a plugin's structure:
my-plugin/
├── .claude-plugin/
│ └── plugin.json # Manifest: name, version, description
├── skills/
│ └── code-review/
│ └── SKILL.md # Skill with its prompt
├── agents/
│ └── reviewer.md # Custom subagent
├── hooks/
│ └── hooks.json # Lifecycle hooks
├── .mcp.json # MCP servers
└── settings.json # Default settings
How to use it
1. Install an existing plugin
/plugin install code-review@claude-plugins-official
Anthropic's official marketplace is claude-plugins-official. Teams can create their own.
2. Create a plugin from scratch
mkdir -p my-plugin/.claude-plugin
// my-plugin/.claude-plugin/plugin.json
{
"name": "my-plugin",
"description": "My team workflows packaged up",
"version": "1.0.0"
}
Add skills in skills/, agents in agents/, hooks in hooks/hooks.json. Same syntax you already use in .claude/.
3. Test locally
claude --plugin-dir ./my-plugin
Skills appear namespaced: /my-plugin:skill-name.
4. Convert existing configuration to a plugin
If you already have skills and hooks in .claude/, it's copy and paste:
cp -r .claude/commands my-plugin/
cp -r .claude/agents my-plugin/
cp -r .claude/skills my-plugin/
Reference
| Component | Plugin location | Standalone equivalent |
|---|---|---|
| Skills | skills/ |
.claude/skills/ |
| Subagents | agents/ |
.claude/agents/ |
| Hooks | hooks/hooks.json |
settings.json → hooks |
| MCP servers | .mcp.json |
Project .mcp.json |
| Settings | settings.json |
.claude/settings.json |
| Manifest | .claude-plugin/plugin.json |
Doesn't exist — this is the new part |
| Aspect | Detail |
|---|---|
| Install | /plugin install name@marketplace |
| Test locally | claude --plugin-dir ./path |
| Reload | /reload-plugins (no restart needed) |
| Namespace | /plugin-name:skill |
| Versioning | Semver in plugin.json |
Official docs: Create plugins