Automatic daily backups of your AI coding assistant memories, configs, and instruction files to a private GitHub repo.
Supports Claude Code, OpenAI Codex, Gemini CLI, Cursor, and any custom AI tool you add.
setup.sh detects installed AI tools, creates a private GitHub backup repo, and configures everythinginclude patterns in config.json control exactly which files get backed up. Sane defaults for the top AI tools out of the box.sync(claude,codex): 2026-08-24 15:00:00AI coding assistants store persistent memories, custom agents, instruction files, and config locally. This tool syncs them to a private GitHub repo so you never lose them.
Default include lists per tool:
| Tool | Source directory | Files backed up |
|---|---|---|
| Claude Code | ~/.claude | CLAUDE.md, settings.json, config.json, projects/*/memory/**, agents/**, commands/**, hooks/**, skills/** |
| OpenAI Codex | ~/.codex | AGENTS.md, AGENTS.override.md, config.toml, *.config.toml, memories/** |
| Gemini CLI | ~/.gemini | GEMINI.md, settings.json, commands/**, extensions/** |
| Cursor | ~/.cursor | rules/** (.mdc files), mcp.json, permissions.json |
Setup auto-detects which tools are installed and enables them. All include lists are fully configurable.
brew install gh), authenticatedgit, python3, rsync (pre-installed on macOS)git clone https://github.com/DiegoSalazar/AiSyncing.git ~/AiSyncing
cd ~/AiSyncing
bash setup.sh
Setup will walk you through:
ghThe AiSyncing template repo is saved as the upstream remote so you can pull updates later.
bash ~/AiSyncing/sync.sh
sync.sh reads the include list from config.jsondata/<source>/sync(claude,gemini): 2026-08-24 15:00:00Sources with missing directories are skipped with a warning, not fatal. If no sources sync, you get a notification about it.
Everything is in config.json (created by setup.sh). See config.example.json for the full schema.
Each source has an include array of glob patterns. Edit it to add or remove files:
{
"sources": {
"claude": {
"enabled": true,
"source_dir": "~/.claude",
"include": [
"CLAUDE.md",
"projects/*/memory/**",
"agents/**",
"my-custom-dir/**"
]
}
}
}
Patterns follow rsync include syntax. Parent directories are auto-included for nested paths. Anything not matched is excluded.
Add a new entry to sources with any name, its config directory, and the files you want backed up. For example, to add Windsurf (Codeium):
{
"sources": {
"windsurf": {
"enabled": true,
"source_dir": "~/.codeium/windsurf",
"include": [
".windsurfrules",
"memories/**",
"config.json",
"settings.json",
"prompts/**"
]
}
}
}
The sync script handles any number of sources. Each gets its own data/<name>/ subdirectory in the backup.
Edit schedule_hour in config.json, then re-run bash setup.sh to update the LaunchAgent.
On macOS, each sync sends a banner notification showing the result. Click it to open your backup's commit history on GitHub.
The notification helper is a minimal Swift app (notifier.swift) compiled into AiSyncing.app during setup. It runs as a background process (no dock icon) and uses macOS UserNotifications for proper banner support with click actions.
On first notification, macOS will ask to allow notifications from "AI Syncing". Click Allow.
Falls back to osascript if the app isn't built (no click-to-open in fallback mode).
Logs: ~/Library/Logs/ai-syncing.log
Clone your backup repo on a new machine and copy the data back:
git clone git@github.com:you/ai-backup.git ~/AiSyncing
rsync -av ~/AiSyncing/data/claude/ ~/.claude/
rsync -av ~/AiSyncing/data/codex/ ~/.codex/
rsync -av ~/AiSyncing/data/gemini/ ~/.gemini/
rsync -av ~/AiSyncing/data/cursor/ ~/.cursor/
# Re-enable scheduled sync:
bash ~/AiSyncing/setup.sh
A test script proves the full backup-restore cycle works without touching your real files. It syncs ~/.claude to a temp directory, restores to a second temp directory, and diffs the two:
bash scripts/test-restore.sh
The test verifies every backed-up file is restored byte-for-byte and checks that key files (memories, config, settings) are present. Both directories are cleaned up automatically.
bash ~/AiSyncing/uninstall.sh
Stops the LaunchAgent and removes the compiled notification app. Your backup data and config are left in place.
A weekly GitHub Action (Research AI Tools) monitors official documentation for all supported tools. It fetches doc pages from each tool's repo, hashes the content, and compares against stored baselines. If any docs change or become unreachable, it opens a GitHub issue for review. Can also be triggered manually from the Actions tab.
Setup saves the AiSyncing template as the upstream remote:
cd ~/AiSyncing
git fetch upstream
git merge upstream/main
MIT
20 commits
Shell
79.0%
Python
14.4%
Swift
6.6%
Automatic daily backups of your AI coding assistant memories, configs, and instruction files to a private GitHub repo.
Supports Claude Code, OpenAI Codex, Gemini CLI, Cursor, and any custom AI tool you add.
setup.sh detects installed AI tools, creates a private GitHub backup repo, and configures everythinginclude patterns in config.json control exactly which files get backed up. Sane defaults for the top AI tools out of the box.sync(claude,codex): 2026-08-24 15:00:00AI coding assistants store persistent memories, custom agents, instruction files, and config locally. This tool syncs them to a private GitHub repo so you never lose them.
Default include lists per tool:
| Tool | Source directory | Files backed up |
|---|---|---|
| Claude Code | ~/.claude | CLAUDE.md, settings.json, config.json, projects/*/memory/**, agents/**, commands/**, hooks/**, skills/** |
| OpenAI Codex | ~/.codex | AGENTS.md, AGENTS.override.md, config.toml, *.config.toml, memories/** |
| Gemini CLI | ~/.gemini | GEMINI.md, settings.json, commands/**, extensions/** |
| Cursor | ~/.cursor | rules/** (.mdc files), mcp.json, permissions.json |
Setup auto-detects which tools are installed and enables them. All include lists are fully configurable.
brew install gh), authenticatedgit, python3, rsync (pre-installed on macOS)git clone https://github.com/DiegoSalazar/AiSyncing.git ~/AiSyncing
cd ~/AiSyncing
bash setup.sh
Setup will walk you through:
ghThe AiSyncing template repo is saved as the upstream remote so you can pull updates later.
bash ~/AiSyncing/sync.sh
sync.sh reads the include list from config.jsondata/<source>/sync(claude,gemini): 2026-08-24 15:00:00Sources with missing directories are skipped with a warning, not fatal. If no sources sync, you get a notification about it.
Everything is in config.json (created by setup.sh). See config.example.json for the full schema.
Each source has an include array of glob patterns. Edit it to add or remove files:
{
"sources": {
"claude": {
"enabled": true,
"source_dir": "~/.claude",
"include": [
"CLAUDE.md",
"projects/*/memory/**",
"agents/**",
"my-custom-dir/**"
]
}
}
}
Patterns follow rsync include syntax. Parent directories are auto-included for nested paths. Anything not matched is excluded.
Add a new entry to sources with any name, its config directory, and the files you want backed up. For example, to add Windsurf (Codeium):
{
"sources": {
"windsurf": {
"enabled": true,
"source_dir": "~/.codeium/windsurf",
"include": [
".windsurfrules",
"memories/**",
"config.json",
"settings.json",
"prompts/**"
]
}
}
}
The sync script handles any number of sources. Each gets its own data/<name>/ subdirectory in the backup.
Edit schedule_hour in config.json, then re-run bash setup.sh to update the LaunchAgent.
On macOS, each sync sends a banner notification showing the result. Click it to open your backup's commit history on GitHub.
The notification helper is a minimal Swift app (notifier.swift) compiled into AiSyncing.app during setup. It runs as a background process (no dock icon) and uses macOS UserNotifications for proper banner support with click actions.
On first notification, macOS will ask to allow notifications from "AI Syncing". Click Allow.
Falls back to osascript if the app isn't built (no click-to-open in fallback mode).
Logs: ~/Library/Logs/ai-syncing.log
Clone your backup repo on a new machine and copy the data back:
git clone git@github.com:you/ai-backup.git ~/AiSyncing
rsync -av ~/AiSyncing/data/claude/ ~/.claude/
rsync -av ~/AiSyncing/data/codex/ ~/.codex/
rsync -av ~/AiSyncing/data/gemini/ ~/.gemini/
rsync -av ~/AiSyncing/data/cursor/ ~/.cursor/
# Re-enable scheduled sync:
bash ~/AiSyncing/setup.sh
A test script proves the full backup-restore cycle works without touching your real files. It syncs ~/.claude to a temp directory, restores to a second temp directory, and diffs the two:
bash scripts/test-restore.sh
The test verifies every backed-up file is restored byte-for-byte and checks that key files (memories, config, settings) are present. Both directories are cleaned up automatically.
bash ~/AiSyncing/uninstall.sh
Stops the LaunchAgent and removes the compiled notification app. Your backup data and config are left in place.
A weekly GitHub Action (Research AI Tools) monitors official documentation for all supported tools. It fetches doc pages from each tool's repo, hashes the content, and compares against stored baselines. If any docs change or become unreachable, it opens a GitHub issue for review. Can also be triggered manually from the Actions tab.
Setup saves the AiSyncing template as the upstream remote:
cd ~/AiSyncing
git fetch upstream
git merge upstream/main
MIT
20 commits
Shell
79.0%
Python
14.4%
Swift
6.6%