你的 Agent 是不是每天都在「重新认识你的项目」?

昨天 Claude Code 花了四十分钟排查出一个诡异的 bug——根因是某个第三方库的版本行为和文档不一致。你松了口气,关掉终端。今天新开一个会话,让 Agent 继续改旁边的模块,它又一头扎进同一个坑:重新读文档、重新怀疑环境、重新踩一遍昨天的雷。

这不是 Agent 笨。是它没有记忆。每个新会话都是一张白纸,昨天的排查结论、定下的架构决策、验证过的坑,全部随会话结束蒸发。你只能靠两样东西补救:要么手动把结论写进 CLAUDE.md(然后忘更新),要么每次开聊前重新贴一大段上下文(然后烧 token)。

claude-mem 就是冲着这个来的:一个持久记忆压缩系统——自动捕获 Agent 会话里发生的所有事,用 AI 压缩成语义摘要存下来,下次会话自动把相关的记忆注入回去。90,083 Star、7,841 Fork,2025 年 8 月 31 日创建,不到一年冲到 9 万——记忆赛道目前的绝对王者,昨天(8月8日)还在更新。

它到底是什么

一句话:claude-mem 是给 Coding Agent 装「海马体」——短期记忆(当前会话上下文)自动转长期记忆(跨会话语义库)的引擎。

作者是 Alex Newman(@thedotmack)。它的工作方式不是让你手动存东西,而是完全自动化:Agent 每次调用工具、每次你提交 prompt、每次会话结束,它都通过 Claude Code 的 hook 系统「偷看」一眼,把观察记录下来,后台用 AI 压缩、聚类、索引。下次会话开始,它自动把「跟当前任务相关的历史记忆」注入上下文——你什么都不用做。

核心数据:

核心机制:捕获 → 压缩 → 注入 → 检索,一条闭环

1. 捕获:5 个生命周期 Hook 全自动记录

它挂在 Claude Code 的 hook 系统上,用 5 个生命周期钩子(6 个脚本)覆盖 Agent 的完整活动周期:SessionStart(会话开始)、UserPromptSubmit(你每次发话)、PostToolUse(Agent 每次调用工具后)、Stop(Agent 停下来等你)、SessionEnd(会话结束)。

PostToolUse 是灵魂:Agent 读了哪个文件、改了什么、跑了什么命令、报了什么错,全被记录成 observation。SessionEnd 时再统一压缩——把这一整段会话的观察用 AI 提炼成语义摘要,存进 SQLite。你说「帮我排查一下为什么登录偶尔超时」,它记住的不只是这句话,而是后面 Agent 查过的每个文件、验证过的每个假设。

2. 存储:SQLite + FTS5,附送 Chroma 向量检索

底层是 SQLite(内置,零配置),存三类数据:sessions(会话)、observations(观察)、summaries(摘要)。全文搜索走 SQLite 的 FTS5,语义搜索走 Chroma 向量库——混合检索:关键词查得到精确的,向量查得到「意思相近的」。

Worker 服务是本地 HTTP API + Web 查看器 UI,由 Bun 管理。启动 claude-mem 后终端会打印一个本地地址,浏览器打开就是记忆流实时视图——所有 observation 像聊天记录一样滚动,还能按项目、按类型过滤。

3. 注入:Progressive Disclosure(渐进式披露)

这是它最值得抄的设计:记忆注入不是「一股脑全塞进上下文」,而是分层的。默认只注入精简摘要(低 token 成本),需要细节时再按需展开。文档里把 token 成本可视化——每一层记忆注入多少 token 都标得明明白白,你可以在 settings 里精细控制什么上下文进、什么不进。

4. 检索:MCP 三件套,先看索引再取详情

MCP 搜索工具按「3 层工作流」设计,token 效率拉满:

先索引、后详情,避免「搜一次把全部详情拉爆上下文」——官方称这套流程能省约 10 倍 token。另外还带一个 mem-search skill,Agent 可以用自然语言直接查项目历史。

和 engram、手写 CLAUDE.md 比,差在哪

我们 8 月 3 日写过 engram(5.8K Star 的 Go 单二进制记忆系统),当时说它「比 claude-mem 更简单」——今天把两个放一起掰开看:

维度claude-mem(90K Star)engram(5.8K Star)手写 CLAUDE.md
记忆怎么进来5 个 Hook 全自动捕获,零操作MCP 工具显式读写手动维护
记忆怎么出去自动渐进式注入相关上下文显式调用才注入每次全量读入
检索方式SQLite FTS5 + Chroma 向量混合SQLite FTS5 全文grep
依赖Node 20+ / Bun / uv / SQLite单 Go 二进制,零依赖
token 效率3 层检索,约省 10x一般文件越写越大,全量烧
跨 AgentClaude Code / Codex / Gemini / Hermes / Copilot / OpenCodeClaude Code / Cursor / Windsurf谁读谁用
可视化Web 查看器实时记忆流CLI 查询编辑器里看文件
隐私控制<private> 标签排除敏感内容本地存储文件即隐私

结论很直接:engram 是「极简够用」,claude-mem 是「全自动闭环」。如果你享受掌控感、记忆量不大,engram 的零依赖很香;如果你想要「装完就忘、它自己记」的体验,claude-mem 是唯一做到全自动的。至于 CLAUDE.md——它依然是必需品,但它是「静态项目知识」,替代不了「动态会话记忆」,两者互补不冲突。

上手:一分钟装完,剩下全自动

# Claude Code 一键安装(默认)
npx claude-mem install

# 装给 OpenCode
npx claude-mem install --ide opencode

# 或者从 Claude Code 插件市场装
/plugin marketplace add thedotmack/claude-mem
/plugin install claude-mem

装完重启 Claude Code 就行——旧会话的上下文会自动出现在新会话里。首次启动会打印 worker 的本地地址,浏览器打开就是记忆流 Web 查看器。

# 配置文件(首次运行自动生成)
# ~/.claude-mem/settings.json

# 想用中文生成记忆摘要?加一行:
{
  "CLAUDE_MEM_MODE": "code--zh"
}

Agent 侧的记忆检索走 MCP 工具,典型用法是三步:

# 第 1 步:搜索引(先别拉详情)
search(query="authentication bug", type="bugfix", limit=10)

# 第 2 步:看命中的 ID(比如 #123、#456),用 timeline 看当时上下文

# 第 3 步:只对相关 ID 批量取详情
get_observations(ids=[123, 456])

实际体验的几个坑

跟我们有关的一件事

这个项目跟本工坊读者的关系比想象中近:claude-mem 的 README 支持列表里明确写着 Hermes。而且它是「记忆四件套」里唯一做到全自动闭环的——之前我们写过 engram(极简 Go 记忆)、codebase-memory-mcp(代码库记忆)、beads(token 压缩),它们各自解决记忆的一个侧面,claude-mem 把「捕获-压缩-注入-检索」整条链都做了,还顺手把检索做成了省 token 的 3 层工作流。

就算你不打算装它,它的两个设计也值得抄:一是渐进式披露——上下文注入按层收费,先摘要后细节,这个思路能直接套进你自己的 RAG 系统;二是「先索引后详情」的 MCP 工具设计——任何给 Agent 用的检索接口,都应该先给 50 token 的索引、再按需给 500 token 的详情,而不是一次全倒。

要不要我帮你把 claude-mem 和 engram 在你常用的 Agent 上做个实际对比评测?或者看看它的 hook 脚本怎么挂到别的 Agent 上?

适合谁用

总结

claude-mem 做的不是「又一个记忆插件」,而是把「失忆」这件事从 Agent 的默认状态变成了可选项。90K Star 只用了不到一年,说明「Agent 需要长期记忆」不是伪需求——而是每个认真用 Coding Agent 的人迟早撞上的墙,它把这面墙拆了。

技术含量也在线:hook 捕获、AI 压缩、混合检索、渐进注入、token 分层,每一层都有值得抄的设计。Apache-2.0 意味着你可以放心把它嵌进自己的工具链。唯一要掂量的是依赖链和隐私边界——但比起每天重复烧掉的 token 和耐心,这点成本大概率是值的。

项目地址:github.com/thedotmack/claude-mem(文档:docs.claude-mem.ai · 主页:claude-mem.ai)