Your Claude Code setup, everywhere
Skills, plugins, hooks, and settings — backed up to a folder or git repo you control, restored on any machine with one command. Never your chats, never your secrets.
$ uvx claude-code-sync init ~/claude-backup --yes
Note: if you back up from multiple machines to the same repo, their
histories can diverge. claude-code-sync never merges automatically — it
detects divergence and walks you through choosing which version to keep.
First backup: ok → /Users/you/claude-backup
Redacted from settings.json (never leaves this machine): ANTHROPIC_AUTH_TOKEN
$ git -C ~/claude-backup log --oneline
405e7ec claude-sync: yourmachine.local 2026-08-14T12:49:04Z
What syncs — and what never does
The whole tool is built around this line. Configuration crosses machines; everything personal stays where it is.
Synced
skills/— your custom skillshooks/— your hook scriptsagents/— your agent definitionskeybindings.jsonand globalCLAUDE.mdsettings.json— with secrets redacted first- Plugin list — as a manifest, reinstalled on restore
Never synced
- Chat history and transcripts
- Sessions and project data
- Credentials, API keys, tokens
- Plugin caches and downloads
- Shell snapshots, telemetry, IDE state
Three steps, whole story
- Back up once.
uvx claude-code-sync initwalks you through choosing a destination — a git repo gets a commit per change, a cloud-synced folder just mirrors. - Forget about it. A Claude Code session-end hook runs a quiet backup whenever your settings might have changed. No daemons, no schedulers.
- Restore anywhere. On a new machine,
uvx claude-code-sync restore <your-repo-url>brings back your skills, settings, and plugins — and prints a checklist of the env vars you need to re-supply by hand.
The installed command is claude-sync
claude-code-sync is the package name on PyPI; both claude-sync and
claude-code-sync work as commands once installed. The docs use the
package name in uvx examples so they work verbatim.
Ready? Set up your first backup →