Plugin Support

Manage Claude Code plugins with ccmd. Install, create, and share plugins that extend Claude Code’s capabilities.

ccmd supports not only slash commands but also Claude Code plugins — packages that extend Claude Code’s own capabilities through its plugin system.

Commands vs Plugins

CommandsPlugins
PurposeDefine reusable slash commands (/name)Extend Claude Code itself
Installation dir.claude/commands/{name}.claude/plugins/{name}
ccmd.yaml type(omitted, default)type: plugin
Entry fieldRequiredNot required
RegistrationLock file onlyLock file + settings.json
MarketplaceNoYes

Use commands to define AI instructions invoked via /slash-command.

Use plugins to add tools, integrations, or context sources that Claude Code loads at startup.

Installing a Plugin

ccmd automatically detects whether a repository is a plugin or a command by reading the type field in its ccmd.yaml. No special flags required.

# Install a plugin (auto-detected)
ccmd install gifflet/review-plugin

# Install a specific version
ccmd install gifflet/review-plugin@1.0.0

After installation, the plugin appears in ccmd list with type plugin:

NAME            VERSION  TYPE     DESCRIPTION
hello-world     1.0.0    command  Simple demo command
review-plugin   1.0.0    plugin   AI-powered code review

What Happens During Installation

  1. Plugin repository is cloned to .claude/plugins/{name}/
  2. Plugin is registered in .claude/settings.json:
    {
      "enabledPlugins": {
        "review-plugin@ccmd": true
      },
      "extraKnownMarketplaces": {
        "ccmd": { ... }
      }
    }
    
  3. Marketplace is updated at .claude/plugins/.claude-plugin/marketplace.json
  4. Claude Code discovers the plugin automatically on next startup

Installing All Plugins from ccmd.yaml

When your project declares plugins in ccmd.yaml, run:

ccmd install

This installs all commands and plugins entries simultaneously.

Project ccmd.yaml Example

name: my-project
version: 1.0.0
commands:
  - gifflet/hello-world@1.0.0
plugins:
  - gifflet/review-plugin@1.0.0

Removing a Plugin

ccmd remove review-plugin

This removes the plugin directory, unregisters it from settings.json, and updates the marketplace.

Creating a Plugin

1. Initialize

mkdir my-plugin && cd my-plugin
ccmd init --plugin
# or shorthand
ccmd init -p

2. Resulting Structure

my-plugin/
├── ccmd.yaml                    # Plugin metadata with type: plugin
├── .claude-plugin/
│   └── plugin.json              # Claude Code plugin manifest
└── README.md

3. ccmd.yaml

type: plugin
name: my-plugin
version: 1.0.0
description: My Claude Code plugin
author: Your Name
repository: https://github.com/username/my-plugin
tags:
  - productivity
license: MIT

4. Plugin Manifest (.claude-plugin/plugin.json)

{
  "name": "my-plugin",
  "version": "1.0.0",
  "description": "My Claude Code plugin",
  "author": {
    "name": "Your Name"
  },
  "repository": "https://github.com/username/my-plugin",
  "license": "MIT"
}

5. Publishing

git init && git add . && git commit -m "feat: initial plugin"
git remote add origin https://github.com/username/my-plugin
git push -u origin main
git tag v1.0.0 && git push --tags

Users install it with:

ccmd install username/my-plugin

Example Plugin

review-plugin — AI-powered code review plugin for Claude Code.

ccmd install gifflet/review-plugin

See Also