cloud-sync skill
Set up or check claude-mem cloud sync with cmem.ai Pro. Use when the user says "set up cloud sync", "sync my memories", "cmem pro", "cloud backup", "sync status", or wants their memory database backed up or synced to their cmem.ai account.
Is the cloud-sync skill safe?
Clean: nothing in its files matched our rules. We read 1 file in the folder on 2026-11-12.
No findings.
Install the cloud-sync skill
A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.
git clone --depth 1 https://github.com/thedotmack/claude-mem.git /tmp/claude-mem mkdir -p ~/.claude/skills cp -r /tmp/claude-mem/plugin/skills/cloud-sync ~/.claude/skills/cloud-sync
In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub
The instructions your agent would load
SKILL.md as published, without the frontmatter. Read it on GitHub
Cloud Sync (cmem.ai Pro)
The installed worker syncs through SyncHub. There is one client, one durable operation log, and no separate sync daemon. This skill checks status and points the user to the installer's cmem.ai sign-in, which writes the connection.
Security rule: never ask the user to paste the sync token into this chat, and never put it in a command you write, print it, put it in argv, or log it. A secret pasted into a chat lands in the transcript, which claude-mem itself can capture and sync. The installer writes the token to ~/.claude-mem/settings.json (mode 0600) without it ever passing through this conversation.
1. Check status
Resolve the worker port and query the always-registered status route:
PORT="${CLAUDE_MEM_WORKER_PORT:-$(node -e "const fs=require('fs'),p=require('path'),os=require('os');const uid=(typeof process.getuid==='function'?process.getuid():77);const fallback=String(37700+(uid%100));try{const s=JSON.parse(fs.readFileSync(p.join(os.homedir(),'.claude-mem','settings.json'),'utf-8'));process.stdout.write(String(s.CLAUDE_MEM_WORKER_PORT||fallback));}catch{process.stdout.write(fallback);}" 2>/dev/null)}"
# With CLAUDE_MEM_LOCAL_API_TOKEN set, the worker wants the token: node prints the header from
# settings.json (nothing when unset) and curl reads it from stdin, so it stays out of argv and chat.
node -e "try{const t=String(JSON.parse(require('fs').readFileSync(require('path').join(require('os').homedir(),'.claude-mem','settings.json'),'utf-8')).CLAUDE_MEM_LOCAL_API_TOKEN||'').trim();if(t)process.stdout.write('X-Claude-Mem-Token: '+t+'\\n')}catch{}" | curl -s -H @- "http://127.0.0.1:${PORT}/api/sync/status"authenticated GET /v1/sync/status against SyncHub. Report deviceId, pending counts, lastFlushAt, lastError, and the Hub head/checkpoint; stop unless the user asked to replace the connection.
- configured: true and hub.reachable: true → the worker completed an
the SyncHub connection is not verified. A zero pending count or lastError: null is not success because an empty queue performs no push.
- configured: true and hub.reachable: false → report hub.error and say
three seconds for about 30 seconds before diagnosing the worker.
- configured: false → continue.
- Connection refused, 404, or 503 immediately after restart → retry every
2. Connect through the installer
Ask the user to run this in their own terminal:
npx claude-mem installand to choose CMEM Pro when the installer asks. The installer signs them in through the browser (they approve a device code), then writes the sync token, user id and SyncHub URL into ~/.claude-mem/settings.json itself and restarts the worker. Nothing secret is typed into this chat.
If the user cannot run the installer interactively (CI, a remote box), point them to the headless setup guide, https://docs.claude-mem.ai/cmem-pro-headless, and let them apply its manual recipe in their own terminal or editor. Do not collect the values yourself.
The worker mints and persists a device id on first start and defaults the device name to the hostname.
3. Verify
Once the installer finishes, poll the status route every five seconds for up to 30 seconds. If the worker was not restarted, restart it first:
node -e "try{const t=String(JSON.parse(require('fs').readFileSync(require('path').join(require('os').homedir(),'.claude-mem','settings.json'),'utf-8')).CLAUDE_MEM_LOCAL_API_TOKEN||'').trim();if(t)process.stdout.write('X-Claude-Mem-Token: '+t+'\\n')}catch{}" | curl -s -H @- -X POST "http://127.0.0.1:${PORT}/api/admin/restart"Success means configured: true, hub.reachable: true, and lastError: null. The local route always makes an authenticated, read-only SyncHub status probe, even when every pending count is zero; it never uses a legacy cmem.ai Pro status route and never appends or advances sync state. Pending counts describe only writes made after the SyncHub launch baseline; setup does not migrate a pre-launch local corpus.
If hub.reachable is false, report hub.error. If lastError is non-null, report it too, and suggest running npx claude-mem install again to refresh the connection. Never include the token.
4. Report
Report device id, pending counts, last successful flush, Hub reachability and checkpoint, and any Hub/flush error. End with this privacy note:
Cloud sync uploads your observation narratives and full prompt text to your
cmem.ai account.
More skills from thedotmack/claude-mem
- AAgent Cost ReportBelievable agent cost report for any period, default the last 7 full days PT, not counting today. Measured tokens from Claude Code transcripts priced at OpenRouter list prices (ESTIMATED), measured provider spend when a sanctioned source exists, note-taker cost separate, Timing-style HTML/PDF plus report.json, line-items.csv, evidence.json.
- AAgent Cost ReportBelievable agent cost report for any period, default the last 7 full days PT, not counting today. Measured tokens from Claude Code transcripts priced at OpenRouter list prices (ESTIMATED), measured provider spend when a sanctioned source exists, note-taker cost separate, Timing-style HTML/PDF plus report.json, line-items.csv, evidence.json.
- AAgent Cost ReportBelievable agent cost report for any period, default the last 7 full days PT, not counting today. Measured tokens from Claude Code transcripts priced at OpenRouter list prices (ESTIMATED), measured provider spend when a sanctioned source exists, note-taker cost separate, Timing-style HTML/PDF plus report.json, line-items.csv, evidence.json.
- AAgent Cost ReportBelievable agent cost report for any period, default the last 7 full days PT, not counting today. Measured tokens from Claude Code transcripts priced at OpenRouter list prices (ESTIMATED), measured provider spend when a sanctioned source exists, note-taker cost separate, Timing-style HTML/PDF plus report.json, line-items.csv, evidence.json.
- AAgent Cost ReportBelievable agent cost report for any period, default the last 7 full days PT, not counting today. Measured tokens from Claude Code transcripts priced at OpenRouter list prices (ESTIMATED), measured provider spend when a sanctioned source exists, note-taker cost separate, Timing-style HTML/PDF plus report.json, line-items.csv, evidence.json.
- AbabysitWatch a pull request or review cycle until it is ready to merge. Use when asked to babysit, monitor, or keep checking PR comments, reviews, and CI until all actionable issues are resolved.
- Abackup-setupSet up, check, or restore local claude-mem database snapshots. Use when the user says "set up backups", "back up my memories", "backup status", or "restore my database".
- AbuildFully automate a coding task with make-plan, do, and babysit.
- Abuild-and-releaseFully automate building and releasing a coding task.
- Accs-alignRun the CCS Align seat's hourly breathing cycle — prove the local claude-mem worker is healthy, pull needle observations through search → timeline → get_observations, land them in a seat-owned middle cache via atomic grab → append → filter exclude-marks → replace, manage exclude marks, and walk house → project → seat rules to detect conflicts (SHADOW_HOUSE, DENY_ALLOW, DRIFT, CLOCK_HEADER) with an append-only rules-report.md. Use when asked to run CCS Align, breathe the alignment seat, refresh the middle cache, exclude or restore an observation, walk rules, check rules conflicts, or check the Worker Watch board.
- AchildhoodBabysit a shipped release after merge, publication, or deployment. Verify published packages, production behavior, installed plugins, and late CI or user reports until the observation window is clean; use babysit for PR readiness before release.
- Aclaude-mem-installUse this when setting up claude-mem on Cursor: local or remote worker, local host-login observer or remote cmem.ai inference.