SpyBara
Go Premium

plugins.md 2026-01-30 18:07 UTC to 2026-01-31 03:42 UTC

2 added, 2 removed.

2026
Sat 31 03:42 Fri 30 18:07 Thu 29 21:03 Wed 28 15:06 Tue 27 21:01 Mon 26 21:03 Sun 25 03:34 Sat 24 03:29 Fri 23 21:01 Thu 22 21:03 Wed 21 21:05 Tue 20 21:03 Mon 19 21:01 Fri 16 21:01 Wed 14 06:02 Mon 12 21:02 Sun 11 18:02 Sat 10 21:01 Fri 9 21:01 Thu 8 21:02 Wed 7 21:01 Tue 6 21:01 Sat 3 18:02

Create plugins

Create custom plugins to extend Claude Code with skills, agents, hooks, and MCP servers.

Plugins let you extend Claude Code with custom functionality that can be shared across projects and teams. This guide covers creating your own plugins with skills, agents, hooks, and MCP servers.

Looking to install existing plugins? See Discover and install plugins. For complete technical specifications, see Plugins reference.

When to use plugins vs standalone configuration

Claude Code supports two ways to add custom skills, agents, and hooks:

Approach Skill names Best for
Standalone (.claude/ directory) /hello Personal workflows, project-specific customizations, quick experiments
Plugins (directories with .claude-plugin/plugin.json) /plugin-name:hello Sharing with teammates, distributing to community, versioned releases, reusable across projects

Use standalone configuration when:

  • You're customizing Claude Code for a single project
  • The configuration is personal and doesn't need to be shared
  • You're experimenting with skills or hooks before packaging them
  • You want short skill names like /hello or /review

Use plugins when:

  • You want to share functionality with your team or community
  • You need the same skills/agents across multiple projects
  • You want version control and easy updates for your extensions
  • You're distributing through a marketplace
  • You're okay with namespaced skills like /my-plugin:hello (namespacing prevents conflicts between plugins)

Quickstart

This quickstart walks you through creating a plugin with a custom skill. You'll create a manifest (the configuration file that defines your plugin), add a skill, and test it locally using the --plugin-dir flag.

Prerequisites

Create your first plugin

1

Create the plugin directory

Every plugin lives in its own directory containing a manifest and your skills, agents, or hooks. Create one now:

mkdir my-first-plugin
2

Create the plugin manifest

The manifest file at .claude-plugin/plugin.json defines your plugin's identity: its name, description, and version. Claude Code uses this metadata to display your plugin in the plugin manager.

Create the .claude-plugin directory inside your plugin folder:

mkdir my-first-plugin/.claude-plugin

Then create my-first-plugin/.claude-plugin/plugin.json with this content:

{
"name": "my-first-plugin",
"description": "A greeting plugin to learn the basics",
"version": "1.0.0",
"author": {
"name": "Your Name"
}
}
Field Purpose
name Unique identifier and skill namespace. Skills are prefixed with this (e.g., /my-first-plugin:hello).
description Shown in the plugin manager when browsing or installing plugins.
version Track releases using semantic versioning.
author Optional. Helpful for attribution.

For additional fields like homepage, repository, and license, see the full manifest schema.

3

Add a skill

Skills live in the skills/ directory. Each skill is a folder containing a SKILL.md file. The folder name becomes the skill name, prefixed with the plugin's namespace (hello/ in a plugin named my-first-plugin creates /my-first-plugin:hello).

Create a skill directory in your plugin folder:

mkdir -p my-first-plugin/skills/hello

Then create my-first-plugin/skills/hello/SKILL.md with this content:

---
description: Greet the user with a friendly message
disable-model-invocation: true
---

Greet the user warmly and ask how you can help them today.
4

Test your plugin

Run Claude Code with the --plugin-dir flag to load your plugin:

claude --plugin-dir ./my-first-plugin

Once Claude Code starts, try your new command:

/my-first-plugin:hello

You'll see Claude respond with a greeting. Run /help to see your command listed under the plugin namespace.

5

Add skill arguments

Make your skill dynamic by accepting user input. The $ARGUMENTS placeholder captures any text the user provides after the skill name.

Update your hello.md file:

---
description: Greet the user with a personalized message
---

# Hello Command

Greet the user named "$ARGUMENTS" warmly and ask how you can help them today. Make the greeting personal and encouraging.

Restart Claude Code to pick up the changes, then try the command with your name:

/my-first-plugin:hello Alex

Claude will greet you by name. For more on passing arguments to skills, see Skills.

You've successfully created and tested a plugin with these key components:

  • Plugin manifest (.claude-plugin/plugin.json): describes your plugin's metadata
  • Commands directory (commands/): contains your custom skills
  • Skill arguments ($ARGUMENTS): captures user input for dynamic behavior

Plugin structure overview

You've created a plugin with a skill, but plugins can include much more: custom agents, hooks, MCP servers, and LSP servers.

Directory Location Purpose
.claude-plugin/ Plugin root Contains only plugin.json manifest (required)
commands/ Plugin root Skills as Markdown files
agents/ Plugin root Custom agent definitions
skills/ Plugin root Agent Skills with SKILL.md files
hooks/ Plugin root Event handlers in hooks.json
.mcp.json Plugin root MCP server configurations
.lsp.json Plugin root LSP server configurations for code intelligence

Develop more complex plugins

Once you're comfortable with basic plugins, you can create more sophisticated extensions.

Add Skills to your plugin

Plugins can include Agent Skills to extend Claude's capabilities. Skills are model-invoked: Claude automatically uses them based on the task context.

Add a skills/ directory at your plugin root with Skill folders containing SKILL.md files:

my-plugin/
├── .claude-plugin/
│   └── plugin.json
└── skills/
    └── code-review/
        └── SKILL.md

Each SKILL.md needs frontmatter with name and description fields, followed by instructions:

---
name: code-review
description: Reviews code for best practices and potential issues. Use when reviewing code, checking PRs, or analyzing code quality.
---

When reviewing code, check for:
1. Code organization and structure
2. Error handling
3. Security concerns
4. Test coverage

After installing the plugin, restart Claude Code to load the Skills. For complete Skill authoring guidance including progressive disclosure and tool restrictions, see Agent Skills.

Add LSP servers to your plugin

LSP (Language Server Protocol) plugins give Claude real-time code intelligence. If you need to support a language that doesn't have an official LSP plugin, you can create your own by adding an .lsp.json file to your plugin:

{
  "go": {
    "command": "gopls",
    "args": ["serve"],
    "extensionToLanguage": {
      ".go": "go"
    }
  }
}

Users installing your plugin must have the language server binary installed on their machine.

For complete LSP configuration options, see LSP servers.

Organize complex plugins

For plugins with many components, organize your directory structure by functionality. For complete directory layouts and organization patterns, see Plugin directory structure.

Test your plugins locally

Use the --plugin-dir flag to test plugins during development. This loads your plugin directly without requiring installation.

claude --plugin-dir ./my-plugin

As you make changes to your plugin, restart Claude Code to pick up the updates. Test your plugin components:

  • Try your commands with /command-name
  • Check that agents appear in /agents
  • Verify hooks work as expected

Debug plugin issues

If your plugin isn't working as expected:

  1. Check the structure: Ensure your directories are at the plugin root, not inside .claude-plugin/
  2. Test components individually: Check each command, agent, and hook separately
  3. Use validation and debugging tools: See Debugging and development tools for CLI commands and troubleshooting techniques

Share your plugins

When your plugin is ready to share:

  1. Add documentation: Include a README.md with installation and usage instructions
  2. Version your plugin: Use semantic versioning in your plugin.json
  3. Create or use a marketplace: Distribute through plugin marketplaces for installation
  4. Test with others: Have team members test the plugin before wider distribution

Once your plugin is in a marketplace, others can install it using the instructions in Discover and install plugins.

Convert existing configurations to plugins

If you already have skills or hooks in your .claude/ directory, you can convert them into a plugin for easier sharing and distribution.

Migration steps

1

Create the plugin structure

Create a new plugin directory:

mkdir -p my-plugin/.claude-plugin

Create the manifest file at my-plugin/.claude-plugin/plugin.json:

{
"name": "my-plugin",
"description": "Migrated from standalone configuration",
"version": "1.0.0"
}
2

Copy your existing files

Copy your existing configurations to the plugin directory:

# Copy commands
cp -r .claude/commands my-plugin/

# Copy agents (if any)
cp -r .claude/agents my-plugin/

# Copy skills (if any)
cp -r .claude/skills my-plugin/
3

Migrate hooks

If you have hooks in your settings, create a hooks directory:

mkdir my-plugin/hooks

Create my-plugin/hooks/hooks.json with your hooks configuration. Copy the hooks object from your .claude/settings.json or settings.local.json, since the format is the same. The command receives hook input as JSON on stdin, so use jq to extract the file path:

{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix" }]
}
]
}
}
4

Test your migrated plugin

Load your plugin to verify everything works:

claude --plugin-dir ./my-plugin

Test each component: run your commands, check agents appear in /agents, and verify hooks trigger correctly.

What changes when migrating

Standalone (.claude/) Plugin
Only available in one project Can be shared via marketplaces
Files in .claude/commands/ Files in plugin-name/commands/
Hooks in settings.json Hooks in hooks/hooks.json
Must manually copy to share Install with /plugin install

Next steps

Now that you understand Claude Code's plugin system, here are suggested paths for different goals:

For plugin users

For plugin developers