Before you begin, ensure you have:
Choose your preferred installation method:
npm install -g @gifflet/ccmd
go install github.com/gifflet/ccmd/cmd/ccmd@latest
After installation, verify ccmd is working:
ccmd --version
Navigate to your project directory and initialize ccmd:
cd your-project
ccmd init
This creates the necessary directory structure for managing Claude Code commands.
Let’s install a simple hello-world command to test:
ccmd install gifflet/hello-world
Open Claude Code in your project and type:
/hello-world
The command will execute and provide its functionality!
After initialization, your project will have:
your-project/
├── .claude/
│ └── commands/ # Installed commands live here
├── ccmd.yaml # Project configuration
└── ccmd-lock.yaml # Lock file (like package-lock.json)
ccmd.yaml - Defines your project’s command dependencies:
name: my-project
version: 1.0.0
description: My awesome project
commands:
- github.com/user/command1
- github.com/user/command2@v1.2.0
ccmd-lock.yaml - Locks specific versions for reproducible installs:
version: 1
commands:
command1:
version: v1.0.0
repository: https://github.com/user/command1
installed_at: "2024-01-15T10:30:00Z"
Install from various sources:
# Install latest version
ccmd install github.com/user/repo
# Install specific version
ccmd install github.com/user/repo@v1.0.0
# Install with custom name
ccmd install github.com/user/repo --name mycommand
# Install all from ccmd.yaml
ccmd install
# List installed commands
ccmd list
# Update a command
ccmd update command-name
# Remove a command
ccmd remove command-name
# Search installed commands
ccmd search keyword
To share your command configuration with your team:
ccmd.yaml
and ccmd-lock.yaml
to version controlccmd install
to get all commandsccmd.yaml
and ccmd-lock.yaml
ccmd update
ccmd list
to verify installation.claude/commands/
directoryccmd info command-name
/command-name
)Now that you have ccmd installed and working: