cync
Backup and sync your Claude Code settings to the cloud via Git.

Overview
cync is a Claude Code plugin that versions your ~/.claude/ directory in a private Git repository. Push from one machine, pull on another — keeping your settings, skills, commands, and memory in sync across all your devices.
Features
- Git-based backup & restore — Version-control your
~/.claude/ settings. Push from one device and pull on another.
- Module-based sync — Choose only what you need:
core, skills, commands, memory, plugins, plans, or a full backup.
- Sensitive data scanning — Automatically scans files for API keys, tokens, and secrets before every push. Shows a masked preview with a warning if anything is detected.
- AES-256-GCM encryption (optional) — Set
CC_SYNC_KEY in your environment to encrypt synced files at rest.
- Dry-run mode — Preview push/pull results without making any changes.
- Conflict resolution — When pulling, decide file-by-file whether to overwrite with remote or keep local.
Prerequisites
Installation
Via Claude Code marketplace
claude plugin add cync
Local install (development / testing)
git clone https://github.com/dev-gyus/cync.git
claude plugin add /path/to/cync
Quick Start
1. Create a private repository on GitHub (or any Git host), then initialize sync:
/sync-init git@github.com:you/claude-settings.git
2. Push your settings:
/sync-push
3. Pull on another machine:
/sync-pull
Commands
| Command | Description |
|---|
/sync-init <remote-url> | Connect to a Git repository and initialize sync |
/sync-push [options] | Push local settings to remote |
/sync-pull [options] | Pull remote settings to local |
/sync-status | Show sync status and per-module change counts |
/sync-help | Display help and usage examples |
/sync-init <remote-url>
/sync-init git@github.com:you/claude-settings.git
/sync-init --module core,skills,commands,memory https://github.com/you/claude-settings.git
Clones (or initializes) a sync repository at ~/.claude/.cc-sync-repo/ and creates a config file.
/sync-push [options]
| Option | Description |
|---|
--module <names> | Modules to push (comma-separated; default: all enabled) |
--message <msg> | Custom commit message |
--dry-run | Preview changes without pushing |
--force | Force push |
/sync-pull [options]
| Option | Description |
|---|
--module <names> | Modules to pull (comma-separated) |
--dry-run | Preview changes without applying |
--backup | Create a timestamped backup of current settings before pulling |
--keep-local | Keep all local files on conflict |
Conflict resolution
When local and remote files differ, each conflict is resolved interactively:
| Status | Meaning | Action |
|---|
new | Remote-only file | Copied automatically |
identical | Both sides match | Skipped |
conflict | Both sides differ | You choose: overwrite or keep local |
local-only | Local-only file | Left untouched |
/sync-status
Displays remote URL, branch, machine ID, last sync time, and per-module changed file counts.
Configuration
Settings are stored in ~/.claude/.cc-sync.yml. Auto-created by /sync-init; you can also edit it directly.
# Git remote URL
remote: "git@github.com:you/claude-settings.git"
# Sync branch
branch: "main"
# Modules to sync
modules:
core: true # CLAUDE.md, framework docs, settings.json
skills: true # ~/.claude/skills/
commands: true # ~/.claude/commands/
memory: false # Per-project memory files
plugins: false # Plugin install manifest
plans: false # Plan files
full: false # Full backup (exclusion patterns applied)
# Sensitive data handling
sensitive:
encrypt: false # AES-256-GCM encryption (requires CC_SYNC_KEY)
exclude: # Patterns excluded from sync
- "*.jsonl"
- "debug/"
- "telemetry/"
- "shell-snapshots/"
- "file-history/"
- "*.lock"
- "*.highwatermark"
- "paste-cache/"
- "sessions/"
- "statsig/"
- "chrome/"
- "ide/"
- "cache/"
- "todos/"
- "backups/"
# Machine identifier included in commit messages
machine_id: ""
Modules