ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Claude-Mem 云同步不上传怎么排查:hub.reachable 为 false 与 pending 积压定位

Claude-Mem 云同步不上传怎么排查:hub.reachable 为 false 与 pending 积压定位 Claude-Mem 云同步不上传怎么排查hub.reachable 为 false 与 pending 积压定位【免费下载链接】claude-memPersistent 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项目地址: https://gitcode.com/GitHub_Trending/cl/claude-mem你刚在 Claude-Mem 里配好了云同步但记忆数据一直停在本地worker 在运行、没有报错数据库里的 observation 却没有出现在 cmem.ai 的同步日志里。这篇针对的是「云同步不上传」这一种故障通过 worker 暴露的GET /api/sync/status端点判断到底是「连接没有建立」hub.reachable为false还是「连接正常但本地队列排不出去」pending计数持续积压。适用前提已安装 Claude-Mem 且 worker 在本地运行云同步三要素sync token、user id、SyncHub URL至少部分已写入~/.claude-mem/settings.json。以下排查依据来自 Cloud Sync 文档、CMEM Pro 手动/无头配置文档 和 cloud-sync skill。先确认同步是否处于「已配置」状态云同步没有单独的开关只有当CLAUDE_MEM_CLOUD_SYNC_TOKEN、CLAUDE_MEM_CLOUD_SYNC_USER_ID、CLAUDE_MEM_CLOUD_SYNC_HUB_URL三个值都非空时同步才激活任意一个留空即视为关闭。所以第一步不是查网络而是查 worker 自己认为的配置状态。状态端点无条件注册——未配置的机器也返回200和{configured: false}而不是404这样调用方可以区分「没配」和「worker 挂了」两种情况见 CloudSyncRoutes.ts。查询 /api/sync/status 并解读字段先解析 worker 端口取自环境变量CLAUDE_MEM_WORKER_PORT否则从~/.claude-mem/settings.json读取都取不到时用 UID 推导的回退端口再请求状态端点PORT${CLAUDE_MEM_WORKER_PORT:-$(node -e const fsrequire(fs),prequire(path),osrequire(os);const uid(typeof process.getuidfunction?process.getuid():77);const fallbackString(37700(uid%100));try{const sJSON.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)} curl -s http://127.0.0.1:${PORT}/api/sync/status配置完成时的响应形如文档示例字段值不是固定预期{ configured: true, deviceId: 2f6b1c9e-7d41-4c1a-9b0e-3d5f8a2c6e10, pending: { observations: 0, summaries: 0, prompts: 2, mutations: 0, tombstones: 0 }, quarantine: { count: 0, latestReason: null }, lastFlushAt: 1783981042731, lastError: null, hub: { checkedAt: 1783981042800, reachable: true, epoch: 1783981042000, headSeq: 42, projectedSeq: 42, error: null } }关键字段的判断含义字段含义pending尚未上传的行以及排队的 mutation 操作数量。接近 0 表示 Hub 日志已包含本机写下的全部内容lastFlushAt最近一次成功 flush 的 epoch 毫秒时间戳从未成功过则为nulllastError最近一次失败 flush 的错误信息健康时为null且不会包含 tokenhub.reachable最近一次对 SyncHub 的认证探测结果把它当作连接性检查的标准hub.error探测失败时的具体原因token 被脱敏为[REDACTED]hub.epoch/hub.headSeq/hub.projectedSeq恒为十进制字符串未配置时响应只有{ configured: false }。hub.reachable 为 false连接未验证文档明确给出判断规则hub.reachable: true才算连通只有lastError: null并不够——因为空队列不会触发任何 push单看lastError为null会把「什么都没上传」误判为「连接正常」。这也是为什么每次configured: true的状态请求都会附带一次对 SyncHub 的认证、只读GET /v1/sync/status探测即使所有 pending 计数为零。该探测不追加操作、不推进 pull 游标。hub.reachable: false配合hub.error因此能暴露出空队列本会隐藏的问题token 无效、Hub URL 写错、响应格式异常、超时或网络故障。定位步骤读hub.error字段先判断错误属于哪一类。对照cmem.ai → Connect页面核对三个值sync token、user id、SyncHub URL。注意 Hub URL 必须是绝对的https://地址且不能填成 cmem.ai 的应用 API 地址——客户端只与 SyncHub 通信。确认~/.claude-mem/settings.json中三个键写的是CLAUDE_MEM_CLOUD_SYNC_TOKEN/CLAUDE_MEM_CLOUD_SYNC_USER_ID/CLAUDE_MEM_CLOUD_SYNC_HUB_URL而不是写错键名。改完配置后重启 worker 再验证。skill 中给出的重启方式是直接调 worker 的管理端点curl -s -X POST http://127.0.0.1:${PORT}/api/admin/restartnpx claude-mem restart是等效的替代路径见手动配置文档。重启是为了让 worker 不再持有旧的内存中 provider/sync 状态。重启后立即出现连接拒绝、404或503是正常的worker 还在拉起。按文档建议每 3 秒重试一次、持续约 30 秒再判定为 worker 本身故障。验证成功的三个条件是同时满足configured: true、hub.reachable: true、lastError: null。hub.reachable 为 true 但 pending 不下降积压定位连通正常却仍积压时先理解 pending 的机制数据库本身就是队列——每张同步表都有synced_at列NULL表示该行进过 Hub 日志。每次写入后worker 触发一个去抖 flusher 排空WHERE synced_at IS NULL的行失败上传会让行保持NULL由下一次写入加上带上限的指数退避30 秒 → 10 分钟重试写路径本身永不被阻塞。因此少量 pending 会自行排空需要盯的是它长期不降。逐项核对lastError非null时它就是最近一次 flush 失败的原因直接按错误内容处理。lastFlushAt若为null说明从未成功 flush 过配合hub.reachable: true看lastError就能区分「网络通但上传被拒」和「还没轮到 flush」。pending的口径计数只描述 SyncHub 上线基线之后本机产生的写入安装前已有的本地记忆库不算迁移语料也不会体现在 pending 里。如果你的期待是「老数据应该先全量上传」这个期待与文档不符——pending 长期为 0 或很小是正常的。quarantine.count大于 0 表示有行被隔离latestReason给出最近一条原因可作为积压中「重试也不了」部分的线索。边界与限制设备数上限Hub 每账号最多接受 64 个不同 device id。达到上限后已有设备照常同步新设备会收到409 device_limit_exceeded。关闭同步把三要素中任意一个置空即可无需卸载。隐私云同步会把 observation 叙事全文和你的完整 prompt 文本上传到 cmem.ai 账号下的 SyncHub如果这些内容必须留在本机不应启用。文档示例中的deviceId、时间戳和headSeq数值仅作格式参考不是固定预期值。排障完成后日常巡检可以直接在 Claude Code 里运行/cloud-syncskill它会走同一套「查状态 → 必要时写配置 → 重启 → 验证」的路径并在结束时提示上述隐私声明。【免费下载链接】claude-memPersistent 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项目地址: https://gitcode.com/GitHub_Trending/cl/claude-mem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表