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.
- 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
cargo install --path .cargo install ccpmbrew tap ccpm/homebrew-ccpm
brew install ccpmLaunch the interactive interface:
ccpm| 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 |
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)
List all plugins:
ccpm list
ccpm list --scope user
ccpm list --enabledExample 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 localShow plugin details:
ccpm info plugin-name@marketplaceExample 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
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(includesprojectPathfor project/local scopes)~/.claude/plugins/known_marketplaces.json
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
Requirements:
- Rust 1.70 or newer
git clone https://github.com/ccpm/ccpm
cd ccpm
cargo build --releaseThe binary will be at target/release/ccpm.
CCPM works on:
- macOS (x86_64 and arm64)
- Linux (x86_64 and arm64)
- Windows (x86_64)
MIT License
Contributions are welcome! Please feel free to submit a Pull Request.