CLI tool for migrating AI CLI configurations between machines via SSH/SCP or local backup archives.
Versioning:
- Package uses semver (
1.2.0, etc.) - Git release tags use
vX.Y.Z(example:v1.2.0)
Launch providers:
claude(~/.claude)codex(~/.codex)
Shared skills are migrated from ~/.agents/skills and ~/.agents/lazy-skills when any provider is active.
ccm push uses overlay semantics: it overwrites/adds the selected portable config on the
target host, but does not delete remote-only runtime state such as sessions, auth, logs, history,
or cache.
After pushing Codex, ccm normalizes path-based Codex MCP command values when the same binary is
available on the remote PATH.
bun install
bun linkccm config --init
# Edit ~/.config/claude-code-migrate/config.tomlccm backup # all enabled providers + shared
ccm backup codex # codex + shared
ccm backup codex ./out.tar.gz # codex + shared to custom path
ccm backup ./out.tar.gz # all enabled providers + shared
ccm backup --dry-runccm push # all enabled providers + shared (host from config)
ccm push codex # codex + shared
ccm push user@host # all enabled providers + shared
ccm push claude user@host # claude + shared
ccm push --all user@host # all providers + shared, regardless of config enablement
ccm push --providers claude,codex user@host
ccm push --dry-runccm restore ./ccm-backup.tar.gz # restore all providers in archive
ccm restore ./ccm-backup.tar.gz codex # restore only codex
ccm restore ./ccm-backup.tar.gz --dry-runLocation: ~/.config/claude-code-migrate/config.toml
[target]
type = "ssh"
host = "user@example.com"
[providers.claude]
enabled = true
settings_local = false
mcp_config = true
[providers.codex]
enabled = true
[backup]
path = "~/backups/ccm"bun run full-gatefull-gate runs Biome lint, Biome format check, TypeScript typecheck, and Vitest.
Useful scripts:
bun run test # Vitest once
bun run test:watch # Vitest watch mode
bun run check # alias for gateMIT