Command Reference
This document provides detailed information about all ccmd commands, their options, and usage examples.
Table of Contents
- Overview
- Global Options
- Commands:
Overview
ccmd is a command-line tool for managing Claude Code commands. It provides a package manager-like experience for installing, updating, and managing custom commands from Git repositories.
Command Structure
All ccmd commands follow this general pattern:
ccmd <command> [arguments] [flags]
Getting Help
To see available commands:
ccmd --help
To see help for a specific command:
ccmd <command> --help
Global Options
These options are available for all ccmd commands:
--version- Display ccmd version information--help- Display help information
ccmd init
Initialize a new Claude Code Command or Plugin project by creating the necessary configuration files and directory structure.
Usage
ccmd init [flags]
Description
This interactive command guides you through setting up a new ccmd project. It prompts for essential metadata and generates the appropriate project structure.
For commands, generates:
ccmd.yaml- Command configuration file.claude/commands/- Directory structure for commands
For plugins (--plugin flag), generates:
ccmd.yaml- Plugin configuration file withtype: plugin.claude-plugin/plugin.json- Claude Code plugin manifest
Options
-p, --plugin- Initialize as a Claude Code plugin instead of a command
Interactive Prompts
- name: Command/plugin name (defaults to current directory name)
- version: Semantic version (defaults to “1.0.0”)
- description: Brief description of what your command/plugin does
- author: Your name or organization
- repository: Git repository URL
- entry: Entry point file (defaults to “index.md”) — not prompted for plugins
- tags: Comma-separated list of tags
Examples
# Initialize a new command project
cd my-command
ccmd init
# Initialize a new plugin project
cd my-plugin
ccmd init --plugin
# or shorthand
ccmd init -p
Notes
- If a
ccmd.yamlfile already exists, it will load existing values as defaults - After initializing a command, create your
index.mdfile with command instructions - After initializing a plugin, edit
.claude-plugin/plugin.jsonwith your plugin manifest
ccmd install
Install a command or plugin from a Git repository, or install all entries from ccmd.yaml.
Usage
ccmd install [repository] [flags]
Description
When no repository is provided, installs all commands and plugins defined in the project’s ccmd.yaml. When a repository is provided, ccmd reads the repository’s ccmd.yaml and automatically determines whether to install it as a command or a plugin based on the type field.
type: plugin→ installed to.claude/plugins/and registered in Claude Code settings- no type (default) → installed to
.claude/commands/as a slash command
Options
-v, --version <version>- Version/tag to install (defaults to latest)-n, --name <name>- Override command/plugin name-f, --force- Force reinstall if already exists--plugin- Force installation as a plugin (optional; only needed when the repository does not declaretype: plugin)
Examples
# Install all commands and plugins from ccmd.yaml
ccmd install
# Install a command (auto-detected)
ccmd install github.com/user/my-command
# Install a plugin (auto-detected via type: plugin in the repo's ccmd.yaml)
ccmd install gifflet/review-plugin
# Install specific version
ccmd install github.com/user/repo@v1.0.0
ccmd install github.com/user/repo --version v1.0.0
# Install with custom name
ccmd install github.com/user/repo --name mycommand
# Force reinstall
ccmd install github.com/user/repo --force
Supported Repository Formats
github.com/user/repohttps://github.com/user/repogit@github.com:user/repohttps://github.com/user/repo.gitgit@github.com:user/repo.gituser/repo(assumes GitHub)
ccmd list
List all commands and plugins managed by ccmd with their versions, sources, and metadata.
Usage
ccmd list [flags]
Description
Shows commands and plugins tracked in the ccmd-lock.yaml file. Commands must have entries in .claude/commands/ and plugins in .claude/plugins/.
Options
-l, --long- Show detailed output including metadata
Examples
# List all commands and plugins in table format
ccmd list
# Show detailed information
ccmd list --long
Output Format
Simple format shows:
- NAME - Command or plugin name
- VERSION - Installed version
- TYPE -
commandorplugin - DESCRIPTION - Brief description
- UPDATED - Last update time
Long format includes:
- All simple format fields
- Author information
- Tags
- License
- Homepage
- Installation timestamps
- Structure verification status
Notes
- Entries with broken structure are marked with ⚠
- Use
--longflag to see details about structure issues
ccmd update
Update installed commands to their latest versions.
Usage
ccmd update [command] [flags]
Description
Updates a specific command or all commands to their latest versions from their source repositories.
Options
-a, --all- Update all installed commands-c, --check- Only check for updates without installing-f, --force- Force update even if version appears current
Examples
# Update a specific command
ccmd update my-command
# Update all commands
ccmd update --all
# Check for updates without installing
ccmd update --check
ccmd update my-command --check
# Force update
ccmd update my-command --force
Notes
- Without
--allflag, you must specify a command name - The
--checkflag shows available updates without making changes - Updates preserve any local configuration in ccmd.yaml
ccmd remove
Remove an installed command or plugin and clean up all associated files.
Usage
ccmd remove <name> [flags]
Description
Removes a command from .claude/commands/ or a plugin from .claude/plugins/. For plugins, also removes the entry from .claude/settings.json and updates the marketplace registry. Optionally updates configuration files.
Options
-f, --force- Force removal without confirmation-s, --save- Update ccmd.yaml and ccmd-lock.yaml files
Examples
# Remove a command with confirmation prompt
ccmd remove my-command
# Remove a plugin with confirmation prompt
ccmd remove review-plugin
# Force removal without confirmation
ccmd remove my-command --force
# Remove and update config files
ccmd remove my-command --save
Confirmation
Unless --force is used, the command will display:
- Name and version
- Description (if available)
- Confirmation prompt
ccmd search
Search for installed commands by keyword, tags, or author.
Usage
ccmd search [keyword] [flags]
Description
Searches through locally installed commands. This command searches metadata including names, descriptions, tags, and authors.
Options
-t, --tags <tags>- Filter by tags (comma-separated)-a, --author <author>- Filter by author--all- Show all commands (ignore keyword)
Examples
# Search by keyword
ccmd search review
# Search by tags
ccmd search --tags code-review,quality
# Search by author
ccmd search --author "John Doe"
# List all installed commands
ccmd search --all
# Combine filters
ccmd search review --tags automation --author "Jane Doe"
Output
Each result shows:
- Command name and version
- Description
- Author (if available)
- Tags (if available)
- Repository URL
ccmd info
Display detailed information about an installed command.
Usage
ccmd info <command-name> [flags]
Description
Shows comprehensive information about a specific installed command, including metadata and structure verification.
Options
--json- Output in JSON format
Examples
# Show command information
ccmd info my-command
# Output as JSON
ccmd info my-command --json
Information Displayed
Command Information:
- Name, version, author
- Description
- Repository URL
- Homepage (if available)
- License (if specified)
- Tags
- Entry point file
Installation Details:
- Source repository
- Installation timestamp
- Last update timestamp
Structure Verification:
- Command directory status
- Standalone .md file status
- ccmd.yaml presence
- index.md presence
- Any structure issues
Content Preview:
- First 10 lines of the command’s index.md file
ccmd sync
Synchronize installed commands with ccmd.yaml configuration.
Usage
ccmd sync [flags]
Description
Analyzes the difference between ccmd.yaml and installed commands, then:
- Installs commands listed in ccmd.yaml but not installed
- Removes commands installed but not in ccmd.yaml
- Updates ccmd-lock.yaml to reflect current state
Options
-n, --dry-run- Show what would be done without making changes-f, --force- Force sync without confirmation
Examples
# Analyze and sync commands
ccmd sync
# Preview changes without executing
ccmd sync --dry-run
# Force sync without confirmation
ccmd sync --force
Sync Analysis Output
Shows:
- Commands to install (marked with +)
- Commands to remove (marked with -)
- Summary of operations to be performed
Notes
- Useful after cloning a project with existing ccmd.yaml
- Helps maintain consistency between configuration and installed commands
- The
--dry-runflag is recommended to preview changes first
Common Workflows
Setting Up a New Project
# 1. Initialize ccmd in your project
cd my-project
ccmd init
# 2. Install some commands
ccmd install github.com/user/command1
ccmd install github.com/user/command2
# 3. Commit the configuration
git add ccmd.yaml ccmd-lock.yaml
git commit -m "Add ccmd commands"
Cloning an Existing Project
# 1. Clone the repository
git clone https://github.com/user/project
cd project
# 2. Install all commands
ccmd install
# or
ccmd sync
Keeping Commands Updated
# Check for updates
ccmd update --all --check
# Update all commands
ccmd update --all
# Update specific command
ccmd update my-command
See Also
- Plugin Support - Installing and creating Claude Code plugins
- Creating Commands - Guide for creating your own commands
- Examples - Real-world use cases and patterns
- FAQ - Common questions and troubleshooting