Your Claude Code memory. Everywhere you code. Sync skills, settings, hooks, and memory across all your machines via Git. Zero config.
curl -fsSL https://raw.githubusercontent.com/kasimmj/claude-code-memory-sync/main/install.sh | bashYou spent weeks tuning your Claude Code setup. Custom skills. Curated hooks. A settings.json that just works. Your memory files saying "the user prefers X over Y."
Then you open your laptop. None of it's there. Or worse β you tweaked the work machine and now they're out of sync.
claude-code-memory-sync keeps everything in a private Git repo and syncs it automatically.
# On machine A
$ cc-sync init
β Created repo at ~/.claude-sync
β Linked to github.com/yourname/claude-sync (private)
β Synced 24 skills, 12 hooks, 8 settings, 47 memory files
# On machine B (later)
$ cc-sync init
β Pulled 24 skills, 12 hooks, 8 settings, 47 memory files
β Watching for changes...That's it. Edit a skill on machine A, save, and it's on machine B in under 3 seconds.
curl -fsSL https://raw.githubusercontent.com/kasimmj/claude-code-memory-sync/main/install.sh | bashThen:
cc-sync init # First-time setup (asks for git remote)
cc-sync status # See sync state
cc-sync pull # Force pull
cc-sync push # Force push
cc-sync watch # Daemon mode (auto-sync on change) βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Machine A β β Private Git β β Machine B β
β ~/.claude/ β ββββββΊ β (GitHub) β ββββββΊ β ~/.claude/ β
β skills/ β β - skills/ β β skills/ β
β hooks/ β β - hooks/ β β hooks/ β
β settings.json β β - settings/ β β settings.json β
β memory/ β β - memory/ β β memory/ β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β β β
`cc-sync watch` Background `cc-sync watch`
pushes on change diff engine pulls every 30s
- π Private by default β your memory stays yours
- π― Selective sync β choose what to share (skills public, memory private)
- 𧬠3-way merge β handles edits from multiple machines gracefully
- β±οΈ Real-time β file watcher pushes within ~2 seconds
- π‘οΈ Secret scrubbing β auto-strips API keys before pushing
~/.claude-sync/config.yaml:
remote: github.com/yourname/claude-sync
visibility: private
sync:
skills: true # Share skills across machines
hooks: true # Share hooks
settings: true # Share settings.json
memory:
user: true # User memories
project: false # Project memories stay local (per-machine)
keybindings: true
filters:
exclude:
- "**/secrets/**"
- "**/.env"
- "**/credentials*"
machines:
laptop:
auto_pull_interval: 30s
desktop:
auto_pull_interval: 1m
work:
sync: skills, hooks # Don't sync personal memory at workcc-sync branch experiment/new-skill # try out something risky
cc-sync merge # promote when happy
cc-sync abandon # throw it awaycc-sync log # see history of every change
cc-sync restore <hash> # roll back to any pointcc-sync diff
# Diff against last sync β useful before pushingcc-sync profile personal # Switch to personal claude setup
cc-sync profile work # Switch to work setupShare skills/hooks with your team without sharing personal memory:
cc-sync team init --org acme-corpNow your team has a shared acme-corp/claude-team-shared repo. Skills and hooks contributed there are auto-pulled by every team member.
Personal memory stays in your private repo.
MIT.
Star β if you've ever lost your Claude setup.