https://github.com/gifflet/ccmd
The package manager for Claude Code commands
https://github.com/gifflet/ccmd
claude-code cli command-line developer-tools git go golang package-manager
Last synced: 2 months ago
JSON representation
The package manager for Claude Code commands
- Host: GitHub
- URL: https://github.com/gifflet/ccmd
- Owner: gifflet
- License: mit
- Created: 2025-06-17T18:41:08.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2026-03-18T21:57:28.000Z (3 months ago)
- Last Synced: 2026-03-19T09:49:28.417Z (3 months ago)
- Topics: claude-code, cli, command-line, developer-tools, git, go, golang, package-manager
- Language: Go
- Homepage: http://gifflet.is-a.dev/ccmd/
- Size: 12.1 MB
- Stars: 29
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# ccmd - Claude Command Manager
[](https://go.dev)
[](LICENSE)
[](https://goreportcard.com/report/github.com/gifflet/ccmd)
[](https://sonarcloud.io/summary/new_code?id=gifflet_ccmd)
[](https://www.npmjs.com/package/@gifflet/ccmd)
[](https://github.com/sponsors/gifflet)
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.

## Why ccmd?
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.
## Installation
### Via NPM (Recommended)
```bash
npm install -g @gifflet/ccmd
```
### Via Go
```bash
go install github.com/gifflet/ccmd/cmd/ccmd@latest
```
## Quick Start
### 1. Initialize your project
```bash
cd your-project
ccmd init
```
### 2. Install a demo command
```bash
ccmd install gifflet/hello-world
```
### 3. Use it in Claude Code
```
/hello-world
```
That's it! You've just installed and used your first ccmd command.
## Commands
| Command | Description |
|---------|-------------|
| `ccmd init` | Initialize a new command project |
| `ccmd init --plugin` | Initialize a new plugin project |
| `ccmd install ` | 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 ` | Update a specific command |
| `ccmd remove ` | Remove an installed command or plugin |
| `ccmd search ` | Search for commands in the registry |
| `ccmd info ` | Show detailed command information |
> For detailed usage and options, see [commands reference](docs/commands.md)
## Creating Your Own Commands
Creating a command for ccmd is simple. Your repository needs:
1. **ccmd.yaml** - Command metadata (created by `ccmd init`)
2. **index.md** - Command instructions for Claude
### Quick Start
```bash
mkdir my-command && cd my-command
ccmd init # Creates ccmd.yaml interactively
```
### Example Structure
```
my-command/
├── ccmd.yaml # Command metadata (required)
└── index.md # Command for Claude (required)
```
### Example ccmd.yaml
```yaml
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.md
```
> For complete guide with examples, see [Creating Commands](docs/creating-commands.md)
## Plugin Support
ccmd also manages Claude Code plugins — packages that extend Claude Code itself rather than defining slash commands.
### Installing a Plugin
```bash
ccmd install gifflet/review-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 are needed.
### Creating a Plugin
```bash
mkdir my-plugin && cd my-plugin
ccmd init --plugin
```
### Example ccmd.yaml for a Plugin
```yaml
type: plugin
name: my-plugin
version: 1.0.0
description: Extends Claude Code with custom capabilities
author: Your Name
repository: https://github.com/username/my-plugin
```
> For complete guide, see [Creating Plugins](docs/creating-commands.md)
## Example Commands
Here are some commands you can install and try:
- **hello-world**: Simple demo command
```bash
ccmd install https://github.com/gifflet/hello-world
```
## Example Plugins
Here are some plugins you can install and try:
- **review-plugin**: AI-powered code review plugin for Claude Code
```bash
ccmd install gifflet/review-plugin
```
## Documentation
- **[Full Documentation](docs/)** - Complete guides and references
- **[Command Creation Guide](docs/creating-commands.md)** - Create your own commands
- **[Plugin Creation Guide](examples/creating_plugins.md)** - Create your own plugins
## Community
- **Issues**: [GitHub Issues](https://github.com/gifflet/ccmd/issues)
- **Discussions**: [GitHub Discussions](https://github.com/gifflet/ccmd/discussions)
- **Contributing**: See [CONTRIBUTING.md](CONTRIBUTING.md)
## License
MIT License - see [LICENSE](LICENSE) for details