Hero Background

Next-Gen App & Browser Testing Cloud

Trusted by 2 Mn+ QAs & Devs to accelerate their release cycles

Next-Gen App & Browser Testing Cloud
AIToolsCoding

Claude Code Plugins: Install, Build, and Verify

How Claude Code plugins package skills, agents, hooks, and MCP servers into one installable unit, where they live on disk, and how to prove one actually works.

Author

Anubhav Singhmaar

Author

Author

Samyak Goyal

Reviewer

Published on: August 27, 2026

Overview

Claude Code plugins are the packaging layer for Claude Code extensions. A plugin is a directory that bundles skills, subagents, hooks, and MCP server configurations into one installable, versioned unit you can share across repositories or publish to a marketplace. A plugin adds no capability of its own; it distributes the components that do.

What is the difference between a Claude Code plugin and a skill?

  • Claude Code Skill - a single SKILL.md file of instructions Claude loads when a task matches its description. It is one capability, and on its own it has no version and no distribution path.
  • Claude Code Plugin - the container that ships skills, subagents, hooks, and MCP servers together. Plugin skills are namespaced as /plugin-name:skill-name, so two plugins can both provide a skill called review without colliding.
  • Claude Code Marketplace - a .claude-plugin/marketplace.json catalog in a repository that lists plugins and where to fetch each one. Adding a marketplace registers the catalog; it installs nothing until you pick a plugin.

Are Claude Code plugins safe to install?

Treat every plugin as a supply-chain dependency. A plugin can ship hooks that run shell commands on lifecycle events and a bin directory whose executables join the Bash tool's PATH. Review the Will install panel before you confirm, and remember that passing schema validation says nothing about behaviour, which is where a verification layer such as TestMu AI's Kane CLI earns its place.

You install a plugin that promises to review your code for accessibility issues. Claude confirms it loaded. Three pull requests later, nobody can point to a single issue it caught, because the skill inside it never did anything except reply with the word done.

That plugin passes claude plugin validate with a clean exit code. The check reads the manifest, not the behaviour. This guide covers what Claude Code plugins actually are, where their files belong, how to install and build one, and how to close the gap between a plugin that validates and a plugin that works.

What Is a Claude Code Plugin?

A Claude Code plugin is a directory that bundles skills, subagents, hooks, MCP servers, LSP servers, and executables into one installable, versioned unit. Anthropic's plugin documentation frames the choice as standalone configuration in a .claude/ directory versus a plugin, and the split is about distribution rather than capability.

Everything a plugin contains can already live loose in .claude/. Packaging it changes three things:

  • Namespacing - a standalone skill is invoked as /hello, while the same skill inside a plugin becomes /plugin-name:hello. Two plugins can ship a skill with the same name and neither shadows the other.
  • Versioning - the version field in the manifest pins the plugin, and users only receive updates when you bump it.
  • Distribution - a plugin can be published to a marketplace, installed with one command, and updated in the background, which loose files in a repository cannot.

The manifest itself is optional. A directory whose components sit in the default locations loads without a plugin.json, though you need one to set the name, description, and version that the plugin manager displays.

Plugins vs Skills, Subagents, and MCP Servers

These five names get used interchangeably in forum threads, and they are not interchangeable. Four of them are capabilities. One of them is the box the other four ship in.

ComponentWhat it isWhere it lives in a plugin
PluginThe packaging and distribution unit. Carries the other four and gives them a name, a version, and an install path.The directory itself
SkillInstructions Claude loads when the task matches the description in its frontmatter. Model-invoked, or called directly by name.skills/name/SKILL.md
SubagentA separate agent definition with its own system prompt, tool restrictions, and model, spawned for a scoped task.agents/
HookA shell command bound to a lifecycle event such as PostToolUse, receiving the event payload as JSON on stdin.hooks/hooks.json
MCP serverAn external tool connection over the Model Context Protocol, giving Claude access to a service's API surface..mcp.json

If you are weighing whether a capability belongs in a plugin at all, the same trade-off shows up one layer down in MCP vs CLI for AI agents. For the components themselves, we cover how Agent Skills work, Claude Code subagents and agent teams, and how the Model Context Protocol works in dedicated guides.

One naming detail trips people up. A plugin can also contain a commands/ directory, which holds skills as flat Markdown files. It is the older layout, and the documentation directs new plugins to use skills/ instead.

What Goes Inside a Plugin Directory

This is where most first plugins break, and Anthropic flags it as a common mistake in the documentation: only plugin.json goes inside .claude-plugin/. Every other directory sits at the plugin root, one level up.

my-plugin/
├── .claude-plugin/
│   └── plugin.json          # the ONLY file that belongs in here
├── skills/
│   └── code-review/
│       └── SKILL.md
├── agents/                  # subagent definitions
├── hooks/
│   └── hooks.json           # lifecycle event handlers
├── monitors/
│   └── monitors.json        # background watchers
├── bin/                     # executables added to the Bash tool PATH
├── .mcp.json                # MCP server configuration
├── .lsp.json                # language server configuration
└── settings.json            # defaults applied when the plugin is enabled

The plugin root means that plugin's own directory, never your global ~/.claude/. A .mcp.json dropped at ~/.claude/.mcp.json is not read at all. A plugin that ships exactly one skill can skip the skills/ folder and put SKILL.md at the plugin root.

The manifest is small. Only name is doing real work, because it sets the namespace prefix for every skill the plugin provides:

{
  "name": "my-first-plugin",
  "description": "A greeting plugin to learn the basics",
  "version": "1.0.0",
  "author": { "name": "Your Name" }
}
Note

Note: Plugins standardize how AI coding agents get their capabilities. TestMu AI applies the same idea to verification, running agent-authored changes against real browsers and devices before they ship. Try TestMu AI free!

How to Install a Claude Code Plugin

Installing is two steps that people often collapse into one: register a catalog, then install a plugin from it. Adding a marketplace installs nothing by itself.

The official Anthropic marketplace is the exception, because Claude Code registers it the first time you start it interactively. On a machine with no plugins installed, that is the entire starting state:

$ claude --version
2.1.119 (Claude Code)

$ claude plugin marketplace list
Configured marketplaces:

  ❯ claude-plugins-official
    Source: GitHub (anthropics/claude-plugins-official)

$ claude plugin list
No plugins installed. Use `claude plugin install` to install a plugin.

From there, installing takes the plugin name and the marketplace name, joined by an at sign:

/plugin install github@claude-plugins-official

Adding a Marketplace

A marketplace is a catalog of plugins that someone else created and shared. Alongside the official one there is a community marketplace, hosting third-party plugins that have passed automated validation and safety screening, and the discover and install guide documents four source types:

# GitHub shorthand, owner/repo
/plugin marketplace add anthropics/claude-plugins-community

# any git host, full URL, optional #ref for a branch or tag
/plugin marketplace add https://gitlab.com/company/plugins.git#v1.0.0

# a local directory, useful while developing the catalog
/plugin marketplace add ./my-marketplace

# a hosted marketplace.json
/plugin marketplace add https://example.com/marketplace.json

Plugins from the community catalog install with the @claude-community suffix rather than the repository name. Removing a marketplace uninstalls every plugin you took from it, so treat /plugin marketplace remove as destructive.

Install Scopes and Where Plugins Live

Every install asks for a scope, and the scope decides who else gets the plugin:

  • User scope - just you, across every project. The default for the shell command.
  • Project scope - written into .claude/settings.json and committed, so every collaborator on the repository gets it.
  • Local scope - just you, just this repository, kept out of shared settings.
  • Managed scope - pushed by an administrator through managed settings, and not modifiable by the user.

On disk, marketplace plugins are cached per version at ~/.claude/plugins/cache/{marketplace}/{plugin-name}/{version}/, with data that survives updates in ~/.claude/plugins/data/. The enabled list itself is a settings key, which is why a project can share plugins by committing it:

{
  "enabledPlugins": {
    "formatter@my-marketplace": true,
    "code-reviewer@synced": false
  }
}

How to Build Your Own Plugin

The fastest path is to scaffold, load the directory directly, and iterate without installing anything. The --plugin-dir flag points Claude Code at a folder for that session, and it accepts a .zip archive as well as a directory.

# scaffold a plugin into your skills directory
claude plugin init my-tool --with skills,hooks

# or load any directory for one session while you iterate
claude --plugin-dir ./my-plugin

# pick up edits without restarting the session
/reload-plugins

One version caveat worth knowing before you copy that first line: claude plugin init is a recent addition. On Claude Code v2.1.119 it is absent, and running it prints the plugin help rather than an error, which reads like nothing happened. Run claude plugin --help to see what your build supports; --plugin-dir works either way, so scaffold by hand if init is missing.

When the plugin is ready to share, publishing means listing it in a catalog rather than uploading it anywhere. A marketplace.json needs a name, an owner, and a plugins array, and each entry points at a source that can be a relative path, a GitHub repository, a git URL, an npm package, or a zip archive.

{
  "name": "company-tools",
  "owner": { "name": "DevTools Team" },
  "plugins": [
    {
      "name": "code-formatter",
      "source": "./plugins/formatter",
      "description": "Automatic code formatting on save"
    }
  ]
}

Push that to a repository your team can read and they run /plugin marketplace add owner/repo. A private repository keeps the catalog internal, which is the supported path for org-only tooling.

How to Verify a Plugin Actually Works

Anthropic ships a validator, and the plugins reference lists claude plugin validate among its debugging and development tools.

Anthropic's plugin authoring guide separately tells authors to run it locally before submitting to the community marketplace, so it is worth being precise about what it covers.

To test the boundary, I built a plugin whose only skill is deliberately dishonest. Its description claims it checks accessibility; its instruction body says to reply with the word done and do nothing else. Running the validator against it on Claude Code v2.1.119 produced this:

$ claude plugin validate ./demo-plugin
Validating plugin manifest: ./demo-plugin/.claude-plugin/plugin.json

⚠ Found 1 warning:

  ❯ author: No author information provided. Consider adding author details for plugin attribution

✔ Validation passed with warnings

Exit code zero. The single complaint is a missing author field. The validator reads the manifest and the structure, which is exactly what it is documented to do, and it has no opinion about whether the skill inside does what it claims.

That gap matters more as plugins move into shared repositories, because a project-scope install applies to everyone who clones the repo. The checks worth adding sit outside the manifest:

  • Component inventory - open the plugin detail view, or run claude plugin details, and confirm the commands, agents, hooks, and servers it contributes match what the description promised.
  • Trigger each component - invoke the skill by its namespaced name, check agents appear in /context, and cause the event a hook matches so you can see it fire in the debug log.
  • Behavioural assertion - for any plugin that touches your product's UI, the question is not whether the skill ran but whether the resulting change is correct in a real browser.

That last one is the gap TestMu AI's Kane CLI is built for. It is a deterministic browser agent that takes a natural-language objective, drives a real Chrome instance through the Chrome DevTools Protocol, and returns an evidence-backed verdict rather than a log of clicks. Because it runs from the terminal and in CI, it slots into the same loop as the coding agent: the plugin makes a change, and a separate agent confirms the rendered result. We walk through that pairing in verifying what Claude Code ships, and the Kane CLI documentation covers installation and CI setup.

Get Kane CLI certified for free with TestMu AI

Why Your Plugins Are Not Showing Up

Almost every report of a plugin that installed but did nothing resolves to one of four causes. Work them in order.

  • It installed but never activated - the install summary tells you which. If it says Run /reload-plugins to activate, run that. If the reload warns it will re-read the conversation, rerun it as /reload-plugins --force.
  • Directories are in the wrong place - skills/, agents/, and hooks/ inside .claude-plugin/ produce a plugin that loads with none of its components.
  • Something failed at load time - open /plugin and read the Errors tab. A language server whose binary is missing reports Executable not found in $PATH there.
  • The cache is stale - clear it with rm -rf ~/.claude/plugins/cache, restart Claude Code, and reinstall the plugin.

A fifth cause is worth knowing before it confuses you: an invalid configuration entry is skipped silently rather than reported. Launch with claude --debug to see why one was dropped.

Detect and fix flaky tests with TestMu AI

Are Claude Code Plugins Safe to Install?

Anthropic's own framing is direct: plugins and marketplaces are highly trusted components that can execute arbitrary code on your machine with your user privileges. Two mechanisms explain why that is the accurate description rather than a cautious one.

  • Hooks run shell commands - a hook bound to PostToolUse executes on your machine every time Claude edits a file, with whatever command the plugin author wrote.
  • bin/ joins your PATH - executables in that directory are added to the Bash tool's PATH for as long as the plugin is enabled.

The practical control is the detail pane shown before you confirm an install. It lists the commands, agents, skills, hooks, and MCP and LSP servers the plugin will add, alongside a context-cost estimate and a last-updated date. A plugin that asks for hooks when its description only promised a slash command is worth a closer read of the source.

Scope discipline helps too. Install to local scope while you evaluate something, and promote it to project scope only once you trust it, because project scope commits the decision for everyone who clones the repository.

What to Do First

Run /plugin and open the Discover tab. The official marketplace is already registered, so you can install one plugin to local scope, trigger its main skill, and read the Errors tab before you decide anything else. Ten minutes there teaches more than any catalog listing.

If you are testing your own product, the catalog gap is worth knowing about. Counting the plugins array in the official Anthropic marketplace catalog on 27 August 2026 returned 289 entries, of which 275 carry a category label. Anyone can reproduce the count by fetching that file. Development accounts for 119 of them and database for 38, while the testing category holds 2. Plenty of test-adjacent tooling is filed elsewhere, but the labelled testing shelf is close to empty.

Claude Code plugins reward the same discipline as any other dependency: package the workflow your team repeats, keep the manifest honest, and put a real check behind anything that touches the UI. Start with the agentic coding CLI tools your team already runs, then add verification with Kane CLI so an agent-authored change is confirmed in a real browser before it merges.

Author

...

Anubhav Singhmaar

Blogs: 12

  • Linkedin

Anubhav Singhmaar is an AI Product Manager at TestMu AI driving Kane CLI, the command-line tool that brings browser automation to the terminal, turning natural-language flows into runs in a real Chrome browser that return pass or fail with shareable proof. He owns the roadmap and prioritization and works with engineering to ship developer-facing features. Before TestMu AI, he spent over four years at Sprinklr owning enterprise voice AI across APAC and EMEA. A mechanical engineer turned product manager, he grounds guidance in real QA workflows.

Reviewer

...

Samyak Goyal

Reviewer

  • Linkedin

Samyak Goyal is a Senior Member of Technical Staff at TestMu AI engineering Kane CLI, the command-line tool that runs browser automation from the terminal, where a flow described in natural language executes in a real Chrome browser and returns pass or fail with shareable proof. He is a backend engineer with 4+ years of experience, previously an SDE at Innovaccer, where he built APIs, introduced Kafka, and cut deployment from weeks to hours. Samyak also builds multi-agent systems, skill-orchestration frameworks, and a personal copilot that indexes 200+ microservice repositories.

Add to Google preferred sources

Summarise with AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Claude Code Plugins FAQs

Did you find this page helpful?

More Related Blogs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests