数据截至 (上游 commit fae697a45d10)
claude-mem 是什么 · 全景与阅读地图
30 秒导读: claude-mem 是给 Claude Code 的跨会话持久记忆插件。它在后台盯着你和 Claude 的每一次工具调用, 派第二个 Claude(Agent SDK 起的观察者会话)把这些调用压成一小段结构化 XML「观察」,存进本地 SQLite + 向量库;下次你新开一个会话,它自动把相关历史注入进去。终端关了,上下文不再清零。 本章只做全景 + 路由:先讲清「是什么」,再给一张顶层图,把主线走一遍,最后告诉你 01–05 章各讲什么、按什么顺序读。
1. 这是什么(零基础也能懂)
一句话定义。 claude-mem 是一个 Claude Code 插件,给这个终端里的 AI 编码助手 补上一块「长期记忆」——自动记录、压缩、并在未来会话里召回你项目的历史。
它解决谁的什么痛点。 Claude Code 是跑在终端里的 AI:你让它读代码、改文件、跑命令,它在一个上下文窗口里干活。 问题是——
- 上下文窗口是易失的:窗口填满被压缩、或你关掉终端、或会话
/clear,之前查明的结论、踩过的坑、改过的决定全丢。 - 下次重来,你得重新解释一遍项目背景。Claude 不记得昨天为什么这么改。
claude-mem 就是补这块记忆:给谁用——任何用 Claude Code(以及 Gemini CLI / OpenCode / Cursor 等,见适配器)做项目的人。
装完什么样。 一条命令安装,然后重启,历史会自动出现,你几乎察觉不到它在工作:
npx claude-mem install # 装插件、注册钩子、准备 worker 服务
# 重启 Claude Code —— 之后每次新会话开头会自动带上「上次干了啥」
安装说明见 README.md:131-160;npm install -g claude-mem 只装 SDK 库、不注册钩子,必须走 npx claude-mem install 或 /plugin。
它能做什么(功能一览)。
| 能力 | 白话 |
|---|---|
| 自动捕获 | 每次工具调用(读文件、改代码、跑命令…)后台被记录,无需手动 |
| 语义压缩 | 用第二个 Claude 把原始调用压成带标题/事实/概念的 XML「观察」 |
| 开场注入 | 新会话 SessionStart 时自动把相关历史塞进上下文 |
| 记忆检索 | 提供 MCP 工具(search / timeline / get_observations)按需查历史 |
| 本地存储 | 全部落在本机 ~/.claude-mem/(SQLite + Chroma 向量库),隐私可控 |
| 实时查看 | 本地 Web 查看器,实时看记忆流(README 记为 http://localhost:37777) |
2. 一句话直觉 / 类比
把整个系统想成一台带磁盘的电脑,再配一个书记员:
- 上下文窗口 = 内存(RAM):快、但一断电就清空。
- SQLite + Chroma 向量库 = 磁盘:慢一点,但持久。
- 第二个 Claude(观察者)= 书记员:它不参与你的主对话,只在旁边看着主会话干了什么, 把值得记的事写成卡片归档到磁盘;你下次开工,它先把相关卡片摆回你桌上(内存)。
一句话:把上下文窗口当内存、SQLite/向量库当磁盘,再派第二个 Claude 当书记员。
3. 顶层全景图
怎么读这张图: 左边是你正在用的主会话;它触发 6 个生命周期钩子;钩子把事件交给本地的 worker 守护进程;worker 维护一个常驻的第二个 Claude(观察者)把事件压成 XML;结果落进 SQLite + Chroma;虚线是回路——新会话开场时,历史又从存储被注入回主会话。
你 + 主会话 Claude Code
│ 每个生命周期动作触发一个钩子
▼
┌─────────────────────────────┐
│ ① 6 个生命周期钩子 (接入层) │ hooks.json → CLI: `hook claude-code <event>`
│ SessionStart / UserPrompt │ 纯函数 handler,严守 Hook IO 纪律
│ PostToolUse / Stop / … │
└───────── ──────┬─────────────┘
│ 走 HTTP 到本地 worker(默认端口见 §5)
▼
┌─────────────────────────────┐ ┌───────────────────────────┐
│ ② worker 守护进程 (心脏) │──派生──▶│ ③ 持久观察者会话 │
│ HTTP API + 会话/队列管理 │ │ Agent SDK query() 起的 │
│ SessionManager 缓冲+去重 │◀──XML──│ 「第二个 Claude」,可 resume │
└───────────────┬─────────────┘ └───────────────────────────┘
│ 解析 XML → 结构化观察
▼
┌─────────────────────────────┐
│ ④ 存储层 │ SQLite: memory_items + FTS5 全文
│ SQLite(磁盘) + Chroma(向量) │ Chroma: 语义向量镜像
└───────────────┬─────────────┘
│ ← ← ← ← ← 回路 ← ← ← ← ←
▼
┌─────────────────────────────┐
│ ⑤ 召回 │ SessionStart 注入 / MCP 三层检索
│ 开场自动注入 + 按需搜索 │ search → timeline → get_observations
└───────────────┬─────────────┘
│ 历史回到主会话上下文
▲────────────── (闭环)
图里的编号对应下面 §5 的职责表;每个部件的代码细节留给对应章节。