Simple command-line tool for managing custom commands in Claude Code. Install and share commands from Git repositories with the ease of a package manager.
Managing custom Claude Code commands across multiple projects can be challenging. ccmd solves this by treating commands as versioned, reusable packages:
- Keep commands out of your codebase: Store command definitions (.md files and AI context) in separate repositories, keeping your project repositories clean
- Version control: Each command has its own version, allowing you to use different versions in different projects
- Reusability: Install the same command in multiple projects without duplication
- Easy sharing: Share commands with your team or the community through Git repositories
- Simple management: Install, update, and remove commands with familiar package manager semantics
Think of ccmd as "npm for Claude Code commands and plugins" - centralize your AI tooling configurations and use them anywhere.
npm install -g @gifflet/ccmdgo install github.com/gifflet/ccmd/cmd/ccmd@latestcd your-project
ccmd initccmd install gifflet/hello-world/hello-world
That's it! You've just installed and used your first ccmd command.
| Command | Description |
|---|---|
ccmd init |
Initialize a new command project |
ccmd init --plugin |
Initialize a new plugin project |
ccmd install <repo> |
Install a command or plugin from a Git repository (auto-detected) |
ccmd install |
Install all commands and plugins from ccmd.yaml |
ccmd list |
List installed commands and plugins |
ccmd update <command> |
Update a specific command |
ccmd remove <command> |
Remove an installed command or plugin |
ccmd search <keyword> |
Search for commands in the registry |
ccmd info <command> |
Show detailed command information |
For detailed usage and options, see commands reference
Creating a command for ccmd is simple. Your repository needs:
- ccmd.yaml - Command metadata (created by
ccmd init) - index.md - Command instructions for Claude
mkdir my-command && cd my-command
ccmd init # Creates ccmd.yaml interactivelymy-command/
├── ccmd.yaml # Command metadata (required)
└── index.md # Command for Claude (required)
name: my-command
version: 1.0.0
description: Automates tasks in Claude Code
author: Your Name
repository: https://github.com/username/my-command
entry: index.md # Optional, defaults to index.mdFor complete guide with examples, see Creating Commands
ccmd also manages Claude Code plugins — packages that extend Claude Code itself rather than defining slash commands.
ccmd install gifflet/review-pluginccmd automatically detects whether a repository is a plugin or a command by reading the type field in its ccmd.yaml. No special flags are needed.
mkdir my-plugin && cd my-plugin
ccmd init --plugintype: plugin
name: my-plugin
version: 1.0.0
description: Extends Claude Code with custom capabilities
author: Your Name
repository: https://github.com/username/my-pluginFor complete guide, see Creating Plugins
Here are some commands you can install and try:
- hello-world: Simple demo command
ccmd install https://github.com/gifflet/hello-world
Here are some plugins you can install and try:
- review-plugin: AI-powered code review plugin for Claude Code
ccmd install gifflet/review-plugin
- Full Documentation - Complete guides and references
- Command Creation Guide - Create your own commands
- Plugin Creation Guide - Create your own plugins
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Contributing: See CONTRIBUTING.md
MIT License - see LICENSE for details
