Sync Claude Code memory files across machines via GitHub
Project description
claude-memory-sync
Sync Claude Code memory files across machines via GitHub.
Claude Code stores per-project memory in ~/.claude/projects/<dirname>/memory/. When you switch between a Windows desktop and a MacBook, that memory stays behind. This tool syncs it to a private GitHub repo so your memory follows you everywhere.
Features
- Cross-platform sync — Works across Windows, macOS, and Linux via GitHub
- Smart conflict resolution — Section-aware markdown merging (not last-write-wins)
- Cross-device alias system — Maps machine-specific dirnames (
C--Users-ktanmon Windows,-Users-phoenixon Mac) to shared alias names - Auto-sync hooks — Memory syncs automatically on Claude Code session start/stop
- Secret scanning — Blocks push if API keys, tokens, or private keys are detected
- Diff before sync — Preview what would change with
claude-memory diff - Security audit — Scan all memory files for leaked secrets with
claude-memory scan - Zero infrastructure — Just a private GitHub repo, no servers or databases
- Single dependency — Only requires
requests
Install
pip install claude-memory-sync
Quickstart
# 1. Run setup (needs gh CLI authenticated or a GitHub token)
claude-memory setup
# 2. Push your local memory to GitHub
claude-memory push
# 3. Pull memory on another machine
claude-memory pull
# 4. Bidirectional sync (pull then push)
claude-memory sync
How It Works
Machine A (Windows) GitHub (private repo) Machine B (Mac)
~/.claude/projects/ projects/home/ ~/.claude/projects/
C--Users-ktanm/memory/ push --> MEMORY.md pull --> -Users-phoenix/memory/
MEMORY.md <-- pull patterns.md push --> MEMORY.md
patterns.md debugging.md patterns.md
- Push uploads changed memory files to
projects/<alias>/in your GitHub repo - Pull downloads remote changes to your local memory directory
- Aliases map different machine dirnames to the same project (e.g., both point to
home) - Conflict resolution merges edits from different machines at the section level
Cross-Device Setup
Different machines encode project paths differently. Aliases map these to a shared name so syncing works seamlessly.
# Auto-create aliases from matching project names
claude-memory alias auto
# Or manually add an alias
claude-memory alias add home --dirname C--Users-ktanm
# See what aliases exist
claude-memory alias list
# Sync aliases to/from remote
claude-memory alias sync
When you run claude-memory setup on a new device, the setup wizard will automatically discover remote projects and let you map them to local ones.
Migrating Existing Data
If you already pushed data under a raw dirname and want to consolidate under an alias:
claude-memory alias migrate --dirname C--Users-ktanm --alias home
Auto-Sync with Claude Code Hooks
Install hooks so memory syncs automatically when Claude Code sessions start and stop:
# Install hooks into ~/.claude/settings.json
claude-memory hooks install
# Remove hooks
claude-memory hooks remove
Security
claude-memory-sync takes security seriously:
- Secret scanning — Before every push, files are scanned for GitHub tokens (
ghp_,gho_), API keys (sk-), AWS keys (AKIA), and private keys. Pushes are blocked if secrets are detected. - Audit command — Run
claude-memory scanto check all memory files for leaked secrets. - Public repo warning — Setup wizard warns if your target repo is public.
- Path traversal prevention — Alias/dirname names are validated to prevent directory traversal attacks.
- Token privacy — Token values are never printed; only the source is shown (e.g., "gh auth token (CLI)").
Commands
| Command | Description |
|---|---|
setup |
Interactive setup wizard |
push |
Upload local memory to GitHub |
pull |
Download memory from GitHub |
sync |
Bidirectional sync (pull then push) |
diff |
Preview differences between local and remote |
scan |
Audit memory files for secrets |
alias |
Manage project aliases (add, remove, list, suggest, auto, sync, migrate) |
hooks |
Install/remove Claude Code auto-sync hooks |
status |
Show configuration and sync state |
doctor |
Diagnose configuration issues |
All sync commands support --dry-run, --project <alias>, and --verbose flags.
Configuration
Config is stored at ~/.claude-memory-sync/config.json:
- device_name: Identifier for this machine
- github_repo: GitHub repo in
owner/repoformat - conflict_strategy: How to handle conflicts (
merge,latest-wins, orask)
GitHub token is resolved from (in order):
CLAUDE_MEMORY_SYNC_TOKENenv varGH_TOKENenv vargh auth tokenCLI
FAQ
Q: Do I need a GitHub account? A: Yes. The tool stores memory files in a private GitHub repo using the GitHub Contents API.
Q: Is my data private? A: Yes, if you use a private repo (recommended). The setup wizard warns you if the repo is public.
Q: What happens if I edit memory on two machines?
A: The default merge strategy combines edits at the section level. Bullets are deduplicated. You can also set conflict_strategy to latest-wins or ask.
Q: Does this sync settings.json or CLAUDE.md?
A: Currently, it syncs only ~/.claude/projects/*/memory/*.md files. Full config sync is planned.
Q: Does it work with Claude Code Teams?
A: It works with any Claude Code installation that uses the standard ~/.claude/projects/ directory structure.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file claude_memory_sync-0.3.0.tar.gz.
File metadata
- Download URL: claude_memory_sync-0.3.0.tar.gz
- Upload date:
- Size: 38.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a79ecb4153b6a2cdd84d2a89c73c3487e5fc393ca5ebdfbf14a9dc87b111c395
|
|
| MD5 |
6cd4daa8631f0845ad1947db42909649
|
|
| BLAKE2b-256 |
1b09b6bde9fe365f92d73afb28b47ef82425bd8d1e6427f8af92030780e437a2
|
File details
Details for the file claude_memory_sync-0.3.0-py3-none-any.whl.
File metadata
- Download URL: claude_memory_sync-0.3.0-py3-none-any.whl
- Upload date:
- Size: 27.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2032f3dbe7e9a493ba7cf27381bf216ad124bf43cda52f34593ffae1fd554e99
|
|
| MD5 |
a18a6c8bc621e87c090d13f0511345b0
|
|
| BLAKE2b-256 |
845c594d36897495d9e444ffb19e4044a65d76bc0a477e99b9b3edcbd0415189
|