Theme / v13.28.0

Claude-Mem

Claude Code 持久化記憶系統

基礎觀念

v13.26.0 → v13.28.0:雲端同步搬遷、認證恢復與成本報告重建

理解 claude-mem 一天內連發五版的重點:CMEM Pro 雲端同步搬到 protocol-v2 hub sync.cmem.ai、401/403 不再無限重試、agent-cost-report 改以實測資料計價,以及非互動安裝修復。

概述

claude-mem 在 2026-09-26 一天內連續發布五個版本:v13.26.0、v13.26.1、v13.27.0、v13.27.1、v13.28.0。主軸有四條:

  1. 雲端同步(cloud sync)搬遷:CMEM Pro 從 Cloudflare Worker 搬到新的 protocol-v2 hub。
  2. 認證失敗的行為修正:401/403 不再無限重試,狀態可解釋、失敗不再靜默。
  3. agent-cost-report 技能重建:改以 transcript 實測資料計價。
  4. 非互動安裝修復:沒有 TTY 的 npx claude-mem install 終於能自己完成。

雲端同步搬離 Cloudflare(v13.26.0)

舊的 Cloudflare Worker hub(sync-hub.black-pond-afbb.workers.dev)因為撞上 Cloudflare Free plan 上限,每一個請求都失敗。v13.26.0 把雲端同步搬到新 hub:

舊:workers.dev(Cloudflare Worker)  →  每一個請求都失敗
新:https://sync.cmem.ai(Fly + Neon Postgres,protocol-v2)

自動遷移:使用者不需重新連線

啟動時,只要 CLAUDE_MEM_CLOUD_SYNC_HUB_URL 還指向 legacy 的 workers.dev 主機,就會被自動改寫成 https://sync.cmem.ai——不需要重新 Connect。

另外兩個配套修正:

  • Retry-After backoff:429/503 回應開始被尊重,不再猛打 hub。
  • 放寬 checkpoint 驗證:push checkpoint 的檢查變得寬容,hub 位移不再卡死同步。

基礎設施面(#4232、#4233)新增 services/sync-api,也就是 protocol-v2 在 Postgres 上的實作;原本的 Worker 取得 FORWARD_ORIGIN pass-through 模式,可以只做代理轉送,不碰 Durable Objects 或 KV。

401/403 不再無限重試(v13.26.1)

這是「失敗處理」的教科書修正。當 sync server 回 401/403(試用期滿、token 被撤銷),舊行為是永遠重試;新行為:

  • 暫停雲端同步,改為每小時重查一次,續約後自動恢復。
  • 狀態說得出成因:訂閱失效 → 到 cmem.ai/pro 續訂;token 失效 → 到 cmem.ai → Connect 重新連接。
  • 失敗不再靜默:暫停或長期失敗會以一行白話顯示在 SessionStart context;/api/sync/status 新增 authError 與 health;HTML 錯誤頁改為摘要,而不是整頁 dump。

同期修掉兩個 outbox 邊界問題:

修正 內容
#4228 關閉雲端同步的安裝,worker 啟動時清掉殘留的 sync_outbox backlog
#4086 被伺服器持續拒絕的單一 op(如 revision_hash_conflict)三次後隔離,其餘佇列繼續上傳

「隔離壞項目」與「暫停整條管線」是兩種不同尺度的處理:一個 op 壞掉就隔離它,整條認證過期才暫停。

agent-cost-report:改以實測資料計價(v13.27.0 / v13.27.1)

agent-cost-report 技能在 v13.27.0 重建(#4238),核心原則是誠實計價:

  • 金額來自 transcript(對話紀錄檔):Claude Code 與 Codex 的 transcript token 依 OpenRouter list price 計價,並標示為 ESTIMATED(估計值)。
  • Observer 成本分開:note-taker(observer)成本單獨計算,永不併入 headline。
  • 只有 sanctioned 來源才叫 measured:實測 provider 支出只取自 OpenRouter per-key snapshot,並附上 UTC bucket 標籤。
  • 誠實的缺漏:unavailable 永不顯示為 $0;Mac transcript 尚待裝置匯出合併前以低信心外推;Grok Bot 用量顯示為 unavailable;win cost 在 session 連結到 PR 前不計。

報告輸出包含自帶內容的 report.html(無 script、無外部資源)、PDF、report.json、line-items.csv 與 evidence.json;預設視窗是 PT 最近 7 個完整日(不含今天)。背後的 pipeline CLI 是 stdlib Python(scripts/acr.py),帶 117 個單元測試。v13.27.1 再補上 read-only GitHub merged-PR wins 來源(#4241)。

Grok Bot 的 INDEX 修正(v13.27.1)

修正 內容
Seat rows 優先(#4240) 每個 seat 的 80 行 zz-claude-mem-inject.md 先列該 seat 自己的 project rows,剩餘空位才由 house-wide rows 遞補;seat 填滿視窗時直接跳過 house query
Seat self-saves 進 INDEX 經 POST /api/memory/save(如 grok-seat-save)儲存的 rows 過去被 concept filter 排除,現在 seat query 會納入;手動儲存成功後觸發 INDEX refresh

非互動安裝修復(v13.28.0)

沒有 TTY 的 npx claude-mem install(AI agent、CI、script 呼叫)過去會停在 provider must be explicit。v13.28.0 起:

  • Provider 自動解析:全新安裝未指定 --provider 時預設 Anthropic plan(local memory);既有 config 保留已存 provider,因此 npx claude-mem update 不會把 CMEM Pro 安裝翻成別種 provider。
  • 已存的 provider 會被驗證:保留的 gemini / openrouter 需要有可用的 key(存在 ~/.claude-mem/settings.json 或環境變數)。
  • Deferred sign-in link:跳過登入的安裝會在成功訊息後,以最後一行印出可選的登入連結,讓代理轉述給使用者;best-effort、不改變 exit status、設定 CI 時略過。
  • 互動式 OAuth 等待改為尊重配對的 expires_in(上限 30 分鐘;伺服器未回報時 4 分鐘)。
  • 隱私說明:local 安裝只在 signup 時連 cmem.ai 一次以產生登入連結,其餘不外送;產品 telemetry 是另一個 opt-out 通道。

對既有使用者的影響

  • CMEM Pro 使用者:hub URL 自動遷移,不需重新 Connect;若同步一直失敗,升級後會在 SessionStart 看到可解釋的狀態行,而不是靜默。
  • 自動化安裝流程:不用再為無 TTY 的安裝加 --provider workaround。
  • 成本追蹤:agent-cost-report 的數字改以 list price 標示 ESTIMATED,observer 成本也不再混入總額。

學習重點

  1. 失敗要分「暫時」與「需要人處理」:429/503 用 Retry-After 退避;401/403 暫停並每小時重查;單一壞 op 隔離。三種失敗、三種處理,全部比「無限重試」便宜。
  2. 遷移要能自我修正:把舊 hub URL 在啟動時改寫,使用者零操作——設定遷移寫進程式,而不是寫進 release note 叫使用者手動改。
  3. 成本報告的價值在標示不確定性:ESTIMATED、unavailable、低信心外推——把不知道的說成不知道,比給出偽精確的數字可信。

來源:v13.26.0、v13.26.1、v13.27.0、v13.27.1、v13.28.0