Skip to content
Agent Memory
Skill

/cloud-sync

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.

From plugin
claude-mem
116k34 skills1 command2 MCP

Claude Code

$ npx -y skills add thedotmack/claude-mem --skill cloud-sync --agent claude-code

SKILL.md

cloud-sync.SKILL.md
name: cloud-sync
description: 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.
allowed-tools:
  - Bash
  - Read
  - AskUserQuestion

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"
  • `configured: true` and `hub.reachable: true` → the worker completed an

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: false` → report `hub.error` and say

the SyncHub connection is not verified. A zero pending count or `lastError: null` is not success because an empty queue performs no push.

  • `configured: false` → continue.
  • Connection refused, 404, or 503 immediately after restart → retry every

three seconds for about 30 seconds before diagnosing the worker.

2. Connect through the installer

Ask the user to run this in their own terminal:

npx claude-mem install

and 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.

Read more
@thedotmack
Ships withclaude-mem

Persistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More

116k34 skills2 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
115.5k
Star history of thedotmack/claude-mem on GitHub, a chart by star-history.com

Other skills on claude-mem.

community-sweep

community-sweep

Land community pull requests as the contributor and answer community issues on thedotmack/claude-mem. Takes stock of every open…

agent-cost-report

agent-cost-report

Believable agent cost report for any period, default the last 7 full days PT, not counting today. Measured tokens from Claude…

install

install

Use this when setting up claude-mem on Cursor: local or remote worker, local host-login observer or remote cmem.ai inference.

mem-search

mem-search

Use this when the user asks to search memory, "did we already solve this?", "how did we do X last time?", or wants work from…

host-observer

host-observer

Use this when fulfilling claude-mem observer jobs on Grok Bot: reply only skip_summary or one full observation XML, never prose.

mem-setup

mem-setup

This skill should be used when the user asks to "set up claude-mem", "pair claude-mem", "connect cmem", "add my cmem key", "set…

More skills from other plugins.

bot-handoff

bot-handoff

Keep a durable record of work passed between Bots in the shared Hindsight memory bank. Use when handing work to another Bot, when…

@vectorize-io@vectorize-ioInstall Skill
mempalace

mempalace

Install, configure, and operate MemPalace, including a private local palace, a shared-brain hub, or a client joining an existing…

@mempalace@mempalaceInstall Skill
mempalace

mempalace

Install, configure, and operate MemPalace, including a private local palace, a shared-brain hub, or a client joining an existing…

@milla-jovovich@milla-jovovichInstall Skill

Questions about cloud-sync.

Which coding agents can use cloud-sync?
cloud-sync installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.