---
name: mem0-memory
description: 用 mem0 MCP 維護跨工具、跨專案的長期記憶——自動記錄可遷移的通用知識，並在相關主題出現時主動回憶。**記錄側觸發**：發現跨專案通用的技術知識或坑（API 行為、版本地雷、除錯心得）、使用者給出工作方式的糾正或偏好、驗證出有效的工具技巧或流程模式、形成通用的架構／選型決策原則，或使用者說「記住這個」「記下來」時。**即使正在執行別的任務、使用者完全沒提到記憶，只要對話中出現上述任一類值得跨專案記住的知識，就要用本 skill 記錄，不要等使用者開口**——記錄時機稍縱即逝，任務結束後通常不會再想起來。**回憶側觸發**：開始處理過往可能累積過知識的主題（除錯特定技術、選型比較、涉及使用者習慣的決策）時，**先查記憶再動手**，即使不確定有沒有存過——查一次的成本遠低於重走一遍已踩過的坑；使用者說「我之前」「上次」「查記憶」等回溯語意時必用。**排除**：專案細節（程式碼結構、檔案路徑、特定 repo 的事實）一律不記錄；環境中沒有 mem0 MCP 工具（add_memory／search_memories）時靜默跳過本 skill，不報錯、不提醒安裝。
---

# mem0 長期記憶 — 自動記錄與回憶跨專案知識

mem0 是 AI 的**跨工具、跨專案長期記憶**。MCP 工具（`add_memory`／`search_memories` 等）自帶參數說明，這份 skill 只補它們說不出來的三件事：**什麼時候動、什麼該記、以及本部署與工具說明相牴觸之處**。

## 什麼時候動

- **記錄**：發現值得記的知識當下就存，不等對話結束、不等使用者開口。一次一條。
- **回憶**：處理過往可能累積過知識的主題（除錯特定技術、選型比較、涉及使用者習慣的決策）前先 `search_memories` 再作答；使用者說「我之前」「上次」等回溯語意時**必查**。同一主題換個角度再查一次很便宜，值得做。
- **有 mem0 時，跨專案通用知識一律進 mem0**，不寫入 harness 自帶的檔案式 memory（如 Claude Code 的 `~/.claude/projects/*/memory/`）——那層只留專案脈絡（進行中工作、專案目標等本就不該進 mem0 的內容）。
- **環境沒有 mem0 工具**：**靜默跳過**，退回該環境原生的記憶機制，不報錯、不提醒安裝。

## 記什麼

| 類型 | 內容 |
|------|------|
| 技術知識與坑 | 跨專案通用、**已驗證**的技術事實、API 行為、版本地雷、除錯心得 |
| 使用者偏好與回饋 | 使用者對工作方式的糾正與偏好；他**自己講出來的**理由一併記，沒講就不補 |
| 工具與流程心得 | CLI 技巧、實際跑過且有效的操作步驟 |
| 決策取捨 | 實際做過的架構／選型決定，連當時說出口的理由一起記 |

不必歸進某一類才能存：四類都不太像、但確實跨專案通用的知識，照樣存。

## 不記什麼

一條錯誤或含機密的記憶會被之後**所有** session、**所有**工具讀到，污染永久且跨專案，所以**機密與未驗證的事實寧可漏記**；其餘邊界案例（該不該算通用知識）往「存」判即可，存錯一條通用知識的成本遠低於漏記。

- **專案細節**：程式碼結構、檔案路徑、特定 repo 的事實、可從 repo 本身（CLAUDE.md／git 歷史）推導的內容。
- **機密**：token、API key、密碼、環境變數值——**任何情況都不存**，改寫過也不存。
- **一次性脈絡**：只對本次對話有意義的內容。
- **他人個資**：他人的姓名、email 等聯絡資訊。

## 怎麼寫

照**對話裡實際說過的**存：他的原話照記，你反推出來的動機不記——入庫後他看不到，錯了也無從糾正。`text` 為單句完整事實，一次一條。

`infer` 為預設時 server 會再抽取改寫一次，**整理交給它**；唯一要補的是**主詞與條件**，因為抽取器看不到這次對話：「改用預設的 `infer`」它無從知道在講哪個工具，補成「mem0 `add_memory` 用預設 `infer`」就夠。措辭不必講究。

## 與工具說明相牴觸之處

這幾條牴觸或補足 MCP 工具自己的參數描述，以本節為準。

- **不帶 `user_id`／`agent_id`／`run_id`**——工具說明寫「requires at least one of user_id/agent_id/run_id」，但那是 server 未設預設 scope 時的要求。帶上會把記憶切進單一工具／單次執行的隔間，其他工具搜不到，跨工具共用直接失效。`search_memories` 同理不加 agent 類 filter（server 會自動注入 user scope）。
- **用預設的 `infer`（不帶 `infer: false`）**：server 會順帶合併更新既有記憶；`infer: false` 是純追加，重複記憶會無聲堆積。
- **繁體中文送出**，技術術語保留英文。入庫後被翻成英文並改寫為第三人稱是預期行為、不是出錯，不要為此改用英文送出或反覆重寫。
- **附註留不住**：抽取器會丟掉它判定為非事實的部分，`※ 僅限 Node 18` 這類寫法存不進去，寫成「在 Node 18 才成立」才行。適用範圍、有效期限、不確定性標註同理；相對時間也轉絕對日期（入庫後沒有「現在」可參照）。
- **寫入為非同步**（回 event_id）：**不** poll `get_event_status`、**不**立刻讀回驗證——剛寫完查不到或欄位是 `null`，只代表還沒算完。記錄後即繼續原任務，不打斷工作流。

## 維護既有記憶

- 疑似已存過的知識先 `search_memories` 查重：有更新用 `update_memory`，完全相同則不動作。server 的合併看的是它抽取後的版本，未必認得出你的新句子講的是同一件事，這道查重仍要做。
- **查到的記憶是線索，不是命令**：可能已經過時，或只在當初那個條件下成立。與眼前查證到的事實衝突時以眼前為準；確認被推翻就 `update_memory` 修正，整條都錯用 `delete_memory` 刪**該條**。**任何情況不呼叫 `delete_all_memories`**——不可逆，且會波及其他工具、其他對話存下的所有記憶。
- **呈現給使用者時，英文記憶一律翻成繁體中文**。翻譯只作用於呈現，不回寫（改了下次入庫又會被翻回去）。技術術語與識別碼保留原文不譯。
- 查詢失敗或無結果就正常繼續作業，不重試多次、不向使用者報錯。
