agent-command-sync
v2.1.0
Published
Bidirectionally convert and sync Custom Slash Commands between Claude Code and Gemini CLI with intuitive visual feedback
Maintainers
Readme
agent-command-sync
Bidirectionally convert and sync Custom Slash Commands between Claude Code, Gemini CLI, and Codex CLI with intuitive visual feedback.
CHANGELOG
Installation
npm install -g agent-command-syncQuick Start
# Convert Claude Code → Gemini CLI
acsync -s claude -d gemini
# Convert Gemini CLI → Claude Code
acsync -s gemini -d claude
# Preview changes without applying
acsync -n -s claude -d geminiScreenshots
Usage Example

Conversion Example

Features
- Colorful Output - Clear visual feedback with color-coded status indicators
- Fast Conversion - Efficiently sync commands between Claude Code and Gemini CLI
- Bidirectional - Convert in both directions (Claude ↔ Gemini)
- Safe by Default - Preview changes with dry-run mode before applying
- Short Command - Use
acsyncinstead ofagent-command-sync - Selective Sync - Convert specific files or all commands at once
Options
| Option | Description |
| --------------------------- | --------------------------------------------------------------------- |
| -s, --src <product> | Required. Source product: claude, gemini, or codex |
| -d, --dest <product> | Required. Destination product: claude, gemini, or codex |
| -f, --file <filename> | Convert specific file only (supports .md, .toml extensions) |
| -n, --noop | Preview changes without applying them |
| -v, --verbose | Show detailed debug information |
| --claude-dir <path> | Claude base directory (default: ~/.claude) |
| --gemini-dir <path> | Gemini base directory (default: ~/.gemini) |
| --codex-dir <path> | Codex base directory (default: ~/.codex) |
| --no-overwrite | Skip existing files in target directory |
| --sync-delete | Delete orphaned files in target directory |
| --remove-unsupported | Remove fields not supported by target format |
Examples
# Convert all commands with preview
acsync -n -s claude -d gemini
# Convert specific file
acsync -s gemini -d claude -f analyze-code
# Full sync with cleanup
acsync -s claude -d gemini --sync-delete --remove-unsupported
# Use custom directories (base directories, /commands will be added automatically)
acsync -s claude -d gemini --claude-dir ~/my-claude --gemini-dir ~/my-gemini
# Show verbose output for debugging
acsync -s claude -d gemini -vDefault File Locations
- Claude Code:
~/.claude/commands/*.md - Gemini CLI:
~/.gemini/commands/*.toml - Codex CLI:
~/.codex/prompts/*.md
Format Comparison and Conversion Specification
File Structure and Metadata
| Feature | Claude Code | Gemini CLI | Codex CLI | Conversion Notes |
| ----------------------------------------- | ------------- | ------------- | ------------- | -------------------------------------------- |
| File format | Markdown | TOML | Markdown | Automatically converted |
| Content field | Body content | prompt | Body content | Main command content |
| Description metadata | description | description | description | Preserved across formats |
| allowed-tools, argument-hint, model | Supported | - | - | Claude-specific (use --remove-unsupported) |
Content Placeholders and Syntax
| Feature | Claude Code | Gemini CLI | Codex CLI | Conversion Behavior |
| --------------------- | -------------- | -------------- | -------------- | -------------------------------------- |
| All arguments | $ARGUMENTS | {{args}} | $ARGUMENTS | Converted between formats |
| Individual arguments | $1 ... $9 | - | $1 ... $9 | Preserved (not supported in Gemini) |
| Shell command | !command | !{command} | - | Converted between Claude/Gemini |
| File reference | @path/to/file| @{path/to/file} | - | Converted between Claude/Gemini |
Individual Arguments
The placeholders $1 through $9 allow referencing individual command arguments. For example, $1 refers to the first argument, $2 to the second, and so on. This feature is supported in Claude Code and Codex CLI, but not in Gemini CLI. During conversion, these placeholders are preserved as-is.
File References
File references allow embedding file contents inline within the command. The syntax differs between tools:
- Claude Code uses
@path/to/file.txt - Gemini CLI uses
@{path/to/file.txt} - Codex CLI does not support this feature
During conversion between Claude and Gemini, the syntax is automatically converted. When converting to/from Codex, the file reference syntax is preserved unchanged.
Official Documents
- Slash commands - Claude Docs
- gemini-cli/docs/cli/custom-commands.md at main · google-gemini/gemini-cli
- codex/docs/prompts.md at main · openai/codex
Status Indicators
[A]Created (Green) - New files created in target directory[M]Modified (Yellow) - Existing files updated[D]Deleted (Red) - Files removed with--sync-delete[-]Skipped (Gray) - Files skipped with--no-overwrite
Requirements
- Node.js >= 18.0.0
- npm or compatible package manager
Development
# Install dependencies
npm install
# Build the project
npm run build
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Lint and format code
npm run lint
npm run format
# Type check
npm run lint:tsc
# Development mode (watch)
npm run devPublishing
# Check package contents
npm run release:dry
# Publish patch version (1.0.0 → 1.0.1)
npm run release:patch
# Publish minor version (1.0.0 → 1.1.0)
npm run release:minor
# Publish major version (1.0.0 → 2.0.0)
npm run release:majorLicense
MIT
