Skip to content

kaldown/ccpm

Repository files navigation

CCPM - Claude Code Plugin Manager

CI License: MIT Rust

CCPM UI

A terminal user interface (TUI) application for managing Claude Code plugins. Built with Rust and Ratatui, CCPM provides a lazygit-style experience for enabling, disabling, and managing your Claude Code plugins.

Features

  • Interactive TUI: Navigate and manage plugins with vim-style keybindings
  • Three-Scope Support: Manage plugins at user, project, and local scope
  • Plugin Discovery: Automatically discovers installed plugins from Claude Code configuration
  • Project Awareness: Shows which project plugins are installed in via projectPath
  • CWD Display: Header shows current working directory for context
  • Search & Filter: Quickly find plugins by name, marketplace, or description
  • CLI Mode: Non-interactive commands for scripting and automation
  • Safe Operations: Atomic file writes and file locking for concurrent safety

Installation

From Source (Recommended)

cargo install --path .

From Cargo

cargo install ccpm

From Homebrew (macOS)

brew tap ccpm/homebrew-ccpm
brew install ccpm

Usage

TUI Mode

Launch the interactive interface:

ccpm

Keybindings

Key Action
j / Move down
k / Move up
g Go to first
G Go to last
Enter View plugin details (modal)
Space Toggle enable/disable
e Enable plugin
d Disable plugin
s Cycle scope filter (All/User/Project/Local)
/ Start search
Esc Clear search / Exit mode
? Toggle help
r Reload plugins
q Quit

Scope Indicators

In the plugin list, each plugin shows a scope indicator:

Indicator Meaning
[U] (blue) User scope - installed in ~/.claude (global)
[P] (cyan) Project scope - installed in current project (shared in git)
[P*] (yellow) Project scope - installed in a different project
[L] (magenta) Local scope - installed in current project (gitignored)
[L*] (yellow) Local scope - installed in a different project

The detail panel shows:

  • Installed: Where the plugin files are physically located
  • Enabled in: Which settings files have the plugin enabled (User, Project, Local, or combinations)
  • Project: For project/local scopes, shows the project path (format: ~/relative/path)

CLI Mode

List all plugins:

ccpm list
ccpm list --scope user
ccpm list --enabled

Example output:

NAME                           MARKETPLACE               STATUS   INSTALLED  ENABLED IN
------------------------------------------------------------------------------------------
context7                       claude-plugins-official   enabled  user       User only
agent-orchestration            claude-code-workflows     enabled  local      Local only
my-custom-plugin               local-dev                 disabled local*     Disabled

Enable/disable plugins:

ccpm enable plugin-name@marketplace
ccpm disable plugin-name@marketplace --scope local

Show plugin details:

ccpm info plugin-name@marketplace

Example output:

Name:        context7
Marketplace: claude-plugins-official
ID:          context7@claude-plugins-official
Status:      enabled
Installed:   User (~/.claude)
Enabled in:  User only
Version:     1.0.0
Path:        /Users/you/.claude/plugins/marketplaces/claude-plugins-official/context7

Configuration

CCPM reads Claude Code configuration from three scopes:

Scope Settings File Purpose
User ~/.claude/settings.json Global settings, applies to all projects
Project ./.claude/settings.json Team-shared settings, committed to git
Local ./.claude/settings.local.json Personal settings, gitignored

Plugin installation data is read from:

  • ~/.claude/plugins/installed_plugins.json (includes projectPath for project/local scopes)
  • ~/.claude/plugins/known_marketplaces.json

Settings Precedence

Precedence order: Local > Project > User (per Claude Code docs)

When a plugin has settings in multiple scopes, the highest-priority scope wins:

Local Setting Project Setting User Setting Result
true any any Enabled (Local wins)
false any any Disabled (Local wins)
none true any Enabled (Project wins)
none false any Disabled (Project wins)
none none true Enabled (User wins)
none none false Disabled
none none none Disabled (no setting)

Example: If your team enables a plugin in settings.json (project), but you disable it in settings.local.json (local), the plugin will be disabled for you because local takes precedence.

This allows you to:

  • Override team settings for personal preference
  • Test plugins locally before sharing with the team
  • Disable problematic plugins without affecting others

Building from Source

Requirements:

  • Rust 1.70 or newer
git clone https://github.com/ccpm/ccpm
cd ccpm
cargo build --release

The binary will be at target/release/ccpm.

Cross-Platform Support

CCPM works on:

  • macOS (x86_64 and arm64)
  • Linux (x86_64 and arm64)
  • Windows (x86_64)

License

MIT License

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

About

Claude code plugin manager

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages