Bidirectionally convert and sync Custom Slash Commands between Claude Code, Gemini CLI, and Codex CLI with intuitive visual feedback.
npm install -g agent-command-sync
# 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 gemini
- 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
acsync
instead ofagent-command-sync
- Selective Sync - Convert specific files or all commands at once
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 |
# 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 -v
- Claude Code:
~/.claude/commands/*.md
- Gemini CLI:
~/.gemini/commands/*.toml
- Codex CLI:
~/.codex/prompts/*.md
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 ) |
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 |
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 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.
- 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
[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
- Node.js >= 18.0.0
- npm or compatible package manager
# 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 dev
# Check package contents
npm pack --dry-run
# Update patch version (1.0.0 → 1.0.1)
npm version patch
# Update minor version (1.0.0 → 1.1.0)
npm version minor
# Update major version (1.0.0 → 2.0.0)
npm version major
# Publish a package
npm publish
MIT