我們閱讀了 Claude Code 洩露的原始碼。它的記憶體實際上是如何運作的
Claude Code 的原始碼意外地公開發放。版本 2.1.88 包含了一個 59.8 MB 的原始碼映射檔案,這個檔案應該從建置中刪除。這個檔案包含了完整的、可讀的 TypeScript 原始碼庫 - 512,000 行,現在已經鏡射到 GitHub 上。
記憶體系統引起了我們的注意。Claude Code 是市面上最受歡迎的 AI 編碼代理程式,而記憶體是大多數使用者在不瞭解其運作方式的情況下,與之互動的部分。因此我們深入瞭解。
簡而言之:Claude Code 的記憶體比你想像中更基本。它的上限是 200 行記事。它只能以完全符合關鍵字的方式尋找記憶體 - 如果您詢問「連接埠衝突」,但筆記卻寫著「docker-compose 映射」,那您就什麼都找不到。而且沒有一個會留下 Claude Code。切換到不同的代理程式,你就會從零開始。
以下是四個層次:
- CLAUDE.md- 你自己寫的檔案,裡面有 Claude 要遵循的規則。手動、靜態、受限於您事先想好要寫下多少東西。
- 自動記憶- Claude 會在會話中自行記下筆記。非常有用,但索引上限為 200 行,且無法依意思搜尋。
- Auto Dream- 背景清理程序,可在您閒置時整合雜亂的記憶。有助於處理數天前的雜亂記憶,但無法跨越數個月的時間。
- KAIROS- 在洩漏的程式碼中發現的未釋放的永遠開機的 daemon 模式。目前尚未公開。
以下,我們將解開每一層,然後介紹架構的缺點,以及我們如何建立架構來解決缺口。
CLAUDE.md 如何運作?
CLAUDE.md 是您建立並放置在專案資料夾中的 Markdown 檔案。您可以在其中填入任何希望 Claude 記憶的內容:程式碼樣式規則、專案結構、測試指令、部署步驟。Claude 會在每個工作階段開始時載入它。
存在三種範圍:專案層級 (在 repo 根目錄)、個人 (~/.claude/CLAUDE.md) 及組織 (企業組態)。較短的檔案能更可靠地被跟蹤。
限制很明顯:CLAUDE.md 只保留您事先寫下的東西。調試決定、您在會談中間提到的偏好、您們一起發現的邊緣情況 - 除非您停下來手動新增,否則這些都不會被記錄下來。大多數人都不會這樣做。
自動記憶如何運作?
自動記憶會擷取工作期間浮現的內容。Claude 會決定哪些內容值得保留,並將其寫入您電腦上的記憶體資料夾,整理成四個類別:使用者 (角色與偏好)、回饋 (您的修正)、專案 (決策與情境),以及參考 (東西的位置)。
每個筆記都是獨立的 Markdown 檔案。入口點是MEMORY.md - 一個索引,其中每一行都是指向詳細檔案的簡短標籤 (150 個字元以下)。Claude 會讀取索引,然後在特定檔案看起來相關時拉取它們。
~/.claude/projects/-Users-me-myproject/memory/
├── MEMORY.md ← index file, one pointer per line
├── user_role.md ← "Backend engineer, fluent in Go, new to React"
├── feedback_testing.md ← "Integration tests must use real DB, no mocking"
├── project_auth_rewrite.md ← "Auth rewrite driven by compliance, not tech debt"
└── reference_linear.md ← "Pipeline bugs tracked in Linear INGEST project"
MEMORY.md sample (each line ≤150 chars):
- [User role](user_role.md) — Backend engineer, strong Go, new to React
- [Testing rule](feedback_testing.md) — No mocking the database in integration tests
- [Auth rewrite](project_auth_rewrite.md) — Compliance-driven, not tech debt
- [Bug tracker](reference_linear.md) — Pipeline bugs → Linear INGEST
MEMORY.md 的前 200 行會載入每個階段。除此之外的內容都是隱藏的。
一個聰明的設計選擇:洩漏的系統提示告訴 Claude 將它自己的記憶體當作一個提示,而非事實。它會先與真實程式碼驗證,然後再根據記憶中的任何東西行事,這有助於減少幻覺 - 這也是其他AI 代理框架開始採用的模式。
Auto Dream 如何鞏固陳舊的記憶?
Auto Memory 會擷取筆記,但使用數週之後,這些筆記就會變得陳舊。一個記載「昨天部署的錯誤」的條目在一星期後就變得毫無意義。筆記說您使用 PostgreSQL,但更新的筆記卻說您已遷移至 MySQL。刪除的檔案仍有記憶體項目。索引中充斥著矛盾和過時的引用。
Auto Dream 就是清理程序。它在背景中執行,並且
- 用精確的日期取代含糊不清的時間參照。"昨天的部署問題」→「2026-03-28 部署問題」。
- 解決矛盾。PostgreSQL 備註 + MySQL 備註 → 保留目前的真相。
- 刪除陳舊的項目。參考已刪除檔案或已完成任務的筆記會被移除。
- 將
MEMORY.md保持在 200 行以下。
觸發條件:自上次清理後超過 24 小時,且累積至少 5 個新會話。您也可以輸入「dream」來手動執行。該程序在背景子代理程式中執行 - 就像實際睡眠一樣,它不會干擾您的工作。
造夢代理程式的系統提示以下列內容開始:「您正在執行夢境 - 對您的記憶檔案進行反省」。
什麼是 KAIROS?Claude Code 未釋放的 Always-On 模式
前三層已經啟用或推出。洩漏的程式碼也包含一些尚未出貨的東西:KAIROS。
KAIROS 明顯是以希臘文「the right moment」命名,在原始碼中出現超過 150 次。它會將 Claude Code 從您主動使用的工具,變成持續監控您專案的背景助理。
根據洩露的程式碼,KAIROS:
- 記錄一整天的觀察、決定與行動。
- 定時檢查。在固定的時間間隔內,它會接收訊號,並決定:採取行動或保持安靜。
- 不擋你的路。任何會阻礙你超過 15 秒的動作都會被延遲。
- 在內部執行夢想清理,並在背景執行完整的觀察-思考-行動循環。
- 擁有一般 Claude Code 所沒有的專屬工具:推送檔案給您,傳送通知,監控您的 GitHub 拉取請求。
KAIROS 位於編譯時功能旗標之後。它不在任何公開版本中。把它想像成 Anthropic 在探索當代理程式記憶體不再是逐次會話,而變成永遠在線時會發生什麼事。
Claude Code 的記憶體架構在哪些地方有問題?
Claude Code 的記憶體做了實際的工作。但隨著專案的成長,有五個結構上的限制限制了它的處理能力。
| 限制 | 發生什麼事 |
|---|---|
| 200 行索引上限 | MEMORY.md 可容納 ~25 KB。執行專案數月後,舊的項目就會被新的項目取代。"我們上周決定的 Redis 配置是什麼?- 消失了。 |
| 僅 Grep 檢索 | 記憶體搜尋使用字面關鍵字匹配。您記得「部署時的連接埠衝突」,但筆記卻寫著「docker-compose 連接埠映射」。Grep 無法彌補這個差距。 |
| 只有摘要,沒有推理 | 自動記憶體儲存的是高層次的筆記,而不是調試步驟或達成目的的推理。如何達成目標的過程就消失了。 |
| 複雜性堆疊卻沒有修正基礎 | CLAUDE.md → Auto Memory → Auto Dream → KAIROS。每層的存在都是因為上一層還不夠。但再多的層次也無法改變底下的東西:一個工具、本機檔案、逐個會話擷取。 |
| 記憶體被鎖定在 Claude Code 內 | 切換到 OpenCode、Codex CLI 或任何其他代理程式,您都是從零開始。沒有匯出、沒有共用格式、沒有可移植性。 |
這些都不是錯誤。它們是單一工具、本地檔案架構的自然限制。每個月都會有新的代理程式推出,工作流程也會改變,但您在專案中建立的知識不該隨之消失。這就是我們建立memsearch 的原因。
什麼是 memsearch?任何 AI 編碼代理程式的持久記憶體
memsearch將記憶體從代理程式中拉出,並放入自己的層中。代理程式來來去去。記憶體保持不變。
如何安裝 memsearch
Claude Code 使用者從市場上安裝:
/plugin marketplace add zilliztech/memsearch
/plugin install memsearch
完成。不需要任何設定。
其他平台也一樣簡單。OpenClaw:openclaw plugins install clawhub:memsearch 。透過 uv 或 pip 的 Python API:
uv tool install "memsearch[onnx]"
memsearch 捕捉到什麼?
一旦安裝,memsearch 就會鉤住代理程式的生命週期。每次對話都會自動進行總結和索引。當您提出一個需要歷史記錄的問題時,recall 會自行觸發。
記憶檔案是以 Markdown 的方式儲存 - 每天一個檔案:
.memsearch/
└── memory/
├── 2026-03-28.md ← one file per day
├── 2026-03-29.md
├── 2026-03-30.md
└── 2026-04-01.md
您可以在任何文字編輯器中開啟、閱讀和編輯記憶檔。如果您想要遷移,您可以複製資料夾。如果您想要版本控制,git 可以原生運作。
儲存於Milvus的向量索引是一個快取層 - 如果它遺失了,您可以從 Markdown 檔案重建它。您的資料存在檔案中,而不是索引中。
memsearch 如何尋找記憶體?語意搜尋 vs. Grep
Claude Code 的記憶體檢索使用 grep - 文字關鍵字匹配。當您有數十筆筆記時,這種方法很有效,但當您記不起確切的字詞時,數個月的歷史就會讓這種方法失效。
memsearch 使用混合搜尋來取代。即使措辭不同,語意向量也能找到與您的查詢相關的內容,而 BM25 則會匹配精確的關鍵字。RRF (Reciprocal Rank Fusion)會將兩個結果集合併並排在一起。
比方說,您問「上星期 Redis 超時的問題是怎麼解決的?- 語意搜尋會了解您的意圖,並找到它。假設您詢問「搜尋handleTimeout 」- BM25 會命中確切的函式名稱。這兩種途徑會遮蔽彼此的盲點。
當召回觸發時,子代理會分三階段進行搜尋,僅在需要時才深入搜尋:
L1:語義搜尋 - 簡短預覽
子代理程式針對 Milvus 索引執行memsearch search ,並擷取最相關的結果:
┌─ L1 search results ────────────────────────────┐
│ │
│ #a3f8c1 [score: 0.85] memory/2026-03-28.md │
│ > Redis port conflict during deploy, default │
│ 6379 occupied, switched to 6380, updated │
│ docker-compose... │
│ │
│ #b7e2d4 [score: 0.72] memory/2026-03-25.md │
│ > Auth module rewrite complete, JWT replaced │
│ with session tokens, mobile token refresh │
│ was unreliable... │
│ │
│ #c9f1a6 [score: 0.68] memory/2026-03-20.md │
│ > DB index optimization, added composite │
│ index on users table, query time dropped │
│ from 800ms to 50ms... │
│ │
└─────────────────────────────────────────────────┘
每個結果都會顯示相關度評分、原始檔案以及 200 個字元的預覽。大多數的查詢到此為止。
L2:完整內容 - 擴展特定結果
如果 L1 的預覽還不夠,子代理程式會執行memsearch expand a3f8c1 來取得完整的項目:
┌─ L2 expanded result ───────────────────────────┐
│ │
│ ## 2026-03-28 Deploy troubleshooting │
│ │
│ Redis port conflict resolution: │
│ 1. docker-compose up → Redis container failed │
│ 2. Host port 6379 occupied by another instance │
│ 3. Changed docker-compose.yml: "6380:6379" │
│ 4. Updated .env: REDIS_PORT=6380 │
│ 5. Updated config/database.py connection │
│ │
│ Note: Only affects local dev. Prod unaffected. │
│ │
│ [source: memory/2026-03-28.md lines: 42-55] │
└─────────────────────────────────────────────────┘
L3: 原始對話記錄
在罕見的情況下,如果您需要看清楚對話內容,子代理程式會擷取原始的交談內容:
┌─ L3 raw transcript ───────────────────────────┐
│ │
│ [user] docker-compose up won't start, Redis │
│ port conflict — can you take a look? │
│ │
│ [agent] Checking host port usage... │
│ Running lsof -i :6379... │
│ Suggest remapping to port 6380... │
│ (tool_call: Bash "lsof -i :6379") │
│ (tool_call: Edit "docker-compose.yml")│
│ │
│ [user] Done. Anything else to update? │
│ │
│ [agent] Also need to update .env and │
│ database.py... │
│ │
└────────────────────────────────────────────────┘
副本保留了所有內容:您的原話、代理的確切回應,以及每個工具呼叫。這三個階段由輕到重 - 子代理決定深入的程度,然後將整理好的結果回傳到您的主會話。
memsearch 如何跨 AI 編碼代理程式分享記憶體?
這是 memsearch 與 Claude Code 記憶體之間最根本的差距。
Claude Code 的記憶體被鎖定在一個工具裡面。使用 OpenCode、OpenClaw 或 Codex CLI,您就得從頭開始。MEMORY.md 是本地的,綁定在一個使用者和一個代理。
memsearch 支援四種編碼代理:Claude Code、OpenClaw、OpenCode 和 Codex CLI。它們共用相同的 Markdown 記憶體格式和相同的Milvus 套件。從任何代理寫入的記憶體都可以從其他代理搜尋到。
兩個真實情境:
切換工具。您花了一個下午的時間在 Claude Code 中找出部署管道,但卻遇到幾個障礙。對話會被自動總結並編入索引。第二天您切換到 OpenCode,並問「昨天的連接埠衝突是怎麼解決的?OpenCode 會搜尋 memsearch,找到昨天的 Claude Code 記憶,然後給您正確的答案。
團隊協作。將 Milvus 後端指向Zilliz Cloud,不同機器上的多位開發人員使用不同的代理,讀寫相同的專案記憶體。新團隊成員加入時,不需要翻查幾個月的 Slack 和文件 - 代理已經知道了。
開發人員 API
如果您要建立自己的代理工具,memsearch 提供 CLI 和 Python API。
CLI:
# Index markdown files
memsearch index ./memory
# Search memories
memsearch search “Redis port conflict”
# Expand a specific memory’s full content
memsearch expand a3f8c1
# Watch for file changes, auto-index
memsearch watch ./memory
# Compact old memories
memsearch compact
Python API:
from memsearch import MemSearch
mem = MemSearch(paths=[“./memory”])
await mem.index() # index markdown
results = await mem.search(“Redis config”) # hybrid search
await mem.compact() # compact old memories
await mem.watch() # auto-index on file change
在引擎蓋下,Milvus 會處理向量搜尋。使用Milvus Lite在本機執行 (零組態)、透過Zilliz Cloud進行協作 (提供免費層級),或使用 Docker 自行託管。嵌入式預設為 ONNX - 在 CPU 上執行,不需要 GPU。可隨時交換 OpenAI 或 Ollama。
Claude Code Memory vs. memsearch:全面比較
| 特點 | 克勞德碼記憶體 | memsearch |
|---|---|---|
| 什麼會被儲存 | Claude 認為重要的內容 | 每次對話,自動摘要 |
| 儲存限制 | ~200 行索引 (~25 KB) | 無限制 (每日檔案 + 向量索引) |
| 尋找舊回憶 | Grep 關鍵字比對 | 以意義為基礎 + 關鍵字混合搜尋 (Milvus) |
| 您能讀取它們嗎? | 手動檢查記憶體資料夾 | 開啟任何 .md 檔案 |
| 您可以編輯它們嗎? | 手動編輯檔案 | 相同 - 儲存時自動重新索引 |
| 版本控制 | 非專為其設計 | git 原生可用 |
| 跨工具支援 | 僅 Claude 程式碼 | 4 個代理,共享記憶體 |
| 長期記憶 | 數週後退化 | 持續數月 |
開始使用 memsearch
Claude Code 的記憶體有真正的優勢 - 自我懷疑的設計、夢想鞏固的概念,以及 KAIROS 中 15 秒的阻斷預算。Anthropic 正在努力思考這個問題。
但是單一工具記憶體是有上限的。一旦你的工作流程跨越多個代理、多個人,或是超過幾週的歷史,你就需要獨立存在的記憶體。
- 試試memsearch- 開放原始碼,MIT 授權。只需兩個指令即可在 Claude Code 中安裝。
- 閱讀memsearch 在引擎蓋下的運作方式或Claude Code 外掛指南。
- 有問題嗎?加入Milvus Discord 社群,或預約免費的 Office Hours 會話,瞭解您的使用個案。
常見問題
Claude Code 的記憶體系統是如何運作的?
Claude Code 使用四層記憶體架構,全部儲存為本機 Markdown 檔案。CLAUDE.md 是您手寫的靜態規則檔案。Auto Memory 可讓 Claude 在會話期間儲存自己的筆記,整理成四個類別 - 使用者偏好、回饋、專案情境和參考指標。Auto Dream 會在背景中整合陳舊的記憶。KAIROS 是在洩露的原始碼中發現的未釋放的永遠開機 daemon。整個系統的索引上限為 200 行,而且只能透過精確的關鍵字匹配進行搜尋 - 不能進行語意搜尋或基於意義的回憶。
AI 編碼代理可以在不同的工具間分享記憶體嗎?
本機無法。Claude Code 的記憶體被鎖定在 Claude Code 內 - 沒有匯出格式或跨代理協定。如果您切換到 OpenCode、Codex CLI 或 OpenClaw,您就得從頭開始。Memsearch 透過將記憶體儲存為有日期的 Markdown 檔案,並在向量資料庫(Milvus)中編入索引,解決了這個問題。所有四種支援的代理都讀寫相同的記憶體儲存,因此當您切換工具時,上下文會自動轉移。
代理記憶體的關鍵字搜尋與語意搜尋有何不同?
關鍵字搜尋 (grep) 會匹配精確的字串 - 如果您的記憶體寫的是 "docker-compose port mapping「 但您搜尋的是 」port conflicts",它什麼都不會回傳。而語意搜尋則會將文字轉換成向量嵌入,以擷取意義,因此相關的概念即使措辭不同也能匹配。membsearch 結合了這兩種方法與混合搜尋,讓您在單一查詢中就能獲得以意義為基礎的召回率與精確的關鍵字精確度。
Claude Code 原始碼事件洩漏了什麼?
Claude Code 2.1.88 版在出貨時附帶了一個 59.8 MB 的原始碼地圖檔,這個檔案應該從生產版本中刪除。該檔案包含完整、可讀的 TypeScript 原始碼庫 - 大約 512,000 行 - 包括完整的記憶體系統實作、Auto Dream 整合程序,以及對 KAIROS (一種尚未釋出的永遠在線代理模式) 的參照。這些程式碼很快就在 GitHub 上被鏡射,然後才被移除。
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



