跳到主內容

Theme / v15.10.0

Claude-Mem

Claude Code 持久化記憶系統

基礎觀念

v13.35.0:漸進式記憶搜尋 mem_search 與原生記憶橋接

🟡 中階|v13.34.2 → v13.35.0 的升級重點:mem_search 三階段漸進揭露(guided/auto 兩模式)、工具回覆改為策展文字、save_memory 顯式筆記、Claude Code/Codex 原生記憶查詢的 hook bridge,以及 opt-in Markdown 筆記資料夾 watcher。含互動測驗與升級檢查清單。

概述

Claude-Mem v13.35.0(2026-10-09 發布)的主軸是把「記憶怎麼被讀取」整個介面重做。官方原文一句話總結:

“Claude-Mem 13.35.0 gives agents one memory search tool, mem_search, that discloses memory in bounded steps: a compact index, the context around chosen anchors, and then one batch of selected details.”

四個新面孔:單一記憶搜尋工具 mem_search(有界分步揭露)、策展過的工具回覆(不再是原始 JSON 傾印)、save_memory 顯式筆記 + 原生記憶查詢的 hook bridge、opt-in 的 Markdown 筆記資料夾 watcher。

mem_search:漸進揭露的記憶搜尋

Guided mode(預設):三個有界步驟

步驟 內容
step 1 of 3 緊湊索引(compact index)
step 2 of 3 所選 anchor 周圍的 context(最多 maxDetails 個 ID)
step 3 of 3 一批選定的細節(one detail batch)

每則回覆結尾附可讀的下一次呼叫說明與短短的 Continue with: cursor。標題或 context 已能回答問題時,agent 可以提早收手。

Automatic mode:一次跑完三階段

mode: "auto" 在單次呼叫內跑同樣三個有界階段,以 ranked lexical retrieval(排序詞彙檢索)挑 anchor:依查詢詞在索引標題出現的數量排序、忽略停用詞與 prompt;無標題命中時以去停用詞的查詢重試一次。不做任何 LLM 呼叫。

Opaque continuation 與硬邊界

  • cursor 為 27 個字元(ms_ 加 24 個 URL-safe 字元);搜尋範圍、原始選項與已揭露的 ID 集都留在 server-side state,15 分鐘後過期——agent 不再在呼叫間攜帶序列化的搜尋列。
  • cursor 不能換著選項重用;selectedIds 必須來自前一則回覆;過期或外來的 cursor 回白話錯誤並要求重新查詢。
  • 邊界:limit 上限 20 列索引;maxDetails 預設 3、上限 5;depthBefore/depthAfter 預設 2、上限 3;查詢上限 500 字元 / 1 KiB UTF-8。

一份契約、本地與 hosted 通用

本地 worker MCP 與 hosted cmem.ai MCP 跑同一個 portable engine source、兩種模式回傳相同的 model-facing 文字。CLAUDE_MEM_RUNTIME=server 時本地 mem_search 會把呼叫者指向 hosted MCP 連線、不查本地 worker。舊工具 search、timeline、get_observations 保留給舊客戶端與進階過濾——它們的描述現在引導 agent 改用 mem_search,但只有 mem_search 強制三階段。

策展回覆與「檢索不再自我觀察」

  • MCP 回覆(搜尋、context、選定記錄、raw tool uses、corpus build/list/prime/query、server observations、events、job 查詢)改為針對問題寫的可讀短文字:索引、選定證據、寫入收據與摘要。內部 HTTP 資料仍可供程式取用;model-facing 回覆不再含 pretty-printed JSON envelope 或重複的 structuredContent。
  • 記憶自身散文中寫進去的 JSON 與程式碼範例原樣保留;摘要證據保留編輯檔案引用。
  • worker 與 server 錯誤改為短短的白話訊息,不回映原始 transport payload。
  • 檢索不再 re-observe 自己的輸出:對 claude-mem 自己 search/context 工具的呼叫、加上原生 memory_* 查詢,都排除在 observation capture 之外——搜尋記憶不會再產生「關於搜尋記憶的新記憶」;顯式 save_memory 寫入保留收據、不另生一筆相同筆記的 observation。

save_memory 與記憶使用守則

  • 新 MCP 工具 save_memory({ text, title?, project?, metadata? })(worker runtime):把明確偏好、修正、決策、handoff 與可重用經驗寫進作用中 checkout 的專案(除非指名其他專案),回傳短收據。server runtime 下 save_memory**拒絕**執行並指向 observation_add`——server 模式的筆記動不了本地 worker。
  • SessionStart context 現在附短短的記憶使用守則:存之前先用 mem_search 查(避免重複/衝突筆記)、筆記精簡、已驗證事實與猜測分開、不含憑證與隱私、有 work_state_write 時 to-do 走它。唯讀的 hosted 連線可能只曝露搜尋,守則因此要求只呼叫實際存在的工具。CLAUDE_MEM_MEMORY_INSTRUCTIONS_ENABLED=false 可關閉。
  • 隨附的 mem-search skill 以 guided/auto 兩模式重寫。

原生記憶查詢橋接(Claude Code 與 Codex)

PreToolUse hook 現在認得原生記憶查詢:memory_search、本地 memory 工具的讀取指令,以及限定在 Claude Code per-project memory 資料夾、設定的 autoMemoryDirectory、Codex memories 資料夾或設定 note roots 的 Read/Grep/Glob/Bash(cat、head、tail、sed、grep、rg)讀取。這類查詢執行時,hook 自動補上一份同主題的 mem_search 結果作為額外 context;原生工具照常執行、結果照常跟隨。

邊界:補充 context 上限 10,000 字元;框架為「retrieved data、不得作為指令」;只注入策展文字(舊 worker 的 JSON 回覆被丟棄);claude-mem 自家工具排除以防遞迴;worker 不可用時 hook 讓路、原生查詢不受影響;hosted connectors 的內部檢索無已驗證的攔截 API、不攔截(守則引導 agent 直接呼叫 mem_search)。bridge 只在 worker runtime 跑;CLAUDE_MEM_RUNTIME=server(含 legacy server-beta)時讓路。CLAUDE_MEM_MEMORY_SEARCH_HOOK_ENABLED=false 停用。

Opt-in:Markdown 筆記資料夾 watcher

  • 設 CLAUDE_MEM_MEMORY_WATCH_ROOTS 為最多 8 個 { "path", "project", "platformSource"? }(絕對路徑或 ~/,需指名專案)。預設空——什麼都不匯入,watcher 也絕不自行掃全部原生專案或全域 Codex memories。
  • watcher 採輪詢、等內容穩定才匯入;跳過隱藏檔、symlink 與大於 64 KiB 的檔。每次讀取綁定被檢查的那個確切檔案(O_NOFOLLOW + device/inode/size/mtime/ctime 一致性、讀後再驗路徑)——關閉「換掉父資料夾讓 root 外檔案被讀入」的競態。
  • 編輯存為不同 revisions;內容指紋跨重啟與並行去重;刪除原始筆記不刪已封存的 revisions。watcher 配置期間 worker 的 idle-exit 計時關閉。改設定後需重啟本地 worker。

安全與整合修復

  • Runtime routing:mem_search、save_memory 與原生 bridge 都遵守 CLAUDE_MEM_RUNTIME(含 legacy server-beta 與 settings 內的選擇);server runtime 一律指向 hosted / observation_add,絕不回退查本地 worker。
  • Chroma 向量搜尋在新環境恢復(#4595、#4593):chroma-mcp 0.2.6 釘住 mcp[cli]==1.6.0,它 import 的 private pydantic helper 在 pydantic 2.14.0 被移除,新解析的環境 import 失敗、向量搜尋默默關閉。launcher 現在在依賴覆寫中加入 pydantic<2.14(本地與遠端 Chroma 皆然)。
  • OpenCode V2 plugin 契約(#4577):plugin 改為輸出 V1/V2 雙形——同一個 bundle 在 OpenCode V1(1.18.29+)與 V2 都能載入;V2 上從 ctx.location.directory 讀 checkout、正確抽取結構化工具結果(不再存成字面 undefined)、在 V2 event bus 上做閒置摘要與 compaction、忘記已刪 session、事件流結束重訂閱。在 OpenCode v2.0.22 端到端驗證,並涵蓋 2.0.23 的 envelope。
  • 模型與計費不變:本版不改 observer 或預設模型選擇、provider 路由或計費行為;automatic mem_search 是有界的排序詞彙檢索,不增加 LLM 呼叫。

驗證與升級

官方在 release notes 記錄:reviewed head 上 8 個 CI job 全過;完整測試套件跑 8,139 個測試(783 檔):8,105 過、34 skip、0 失敗、38,212 個 assertions;本地與 hosted 引擎的 shared source 逐位元組相同,guided/auto 的 model-visible 輸出一致。

升級:npx [email protected] install 後重啟本地 worker;要拿到新的 mem_search / save_memory 工具定義需開新 session 或重載 MCP 連線——已在跑的 MCP process 會保留它啟動時的工具集。

隨堂測驗

隨堂測驗

agent 呼叫 mem_search(guided mode)後,把 step 1 拿到的 cursor 放著 20 分鐘才繼續。會發生什麼?

💡 想先看個提示?

opaque cursor 的期限是 15 分鐘。

隨堂測驗

CLAUDE_MEM_RUNTIME=server 的 session 裡,agent 呼叫 save_memory 想寫一條筆記到本地 worker。結果是?

💡 想先看個提示?

兩種 runtime 是硬邊界,不是偏好。

動手升級檢查清單

升級 v13.35.0:動手檢查清單

逐項勾選,確認你已完成升級必要的步驟(進度會保存在此瀏覽器)

0 / 6

延伸閱讀