每次开 Claude Code 都要重新解释项目?claude-mem 帮你搞定跨会话记忆
claude-mem 的核心思路很简单——Claude Code 不记东西,那就在旁边放个笔记本帮它记。5 个 Hook 自动捕获,SQLite 存储,向量搜索检索,下次 session 自动注入。实际用下来,对连续开发同一个项目的场景确实省事。但配置需要调,token 消耗需要控,向量搜索的相关性还有优化空间。装完打开确认 worker 在跑就行。
用 Claude Code 写代码的人都遇到过这个问题:关掉终端再打开,Claude 对你的项目一无所知。上次聊到哪了、改了哪些文件、踩了什么坑,全部丢失。你只能再花 5 分钟把背景重新讲一遍。
项目小的时候还能忍。项目一大,光是"我上次改了 auth 模块的 token 刷新逻辑,用的是 Redis 做缓存,之前试过 JWT 但放弃了因为……"这种上下文,每次重复一遍就够烦的。
claude-mem 这个插件就是干这件事的。它在 Claude Code 运行时自动记录你做了什么,生成摘要,下次开 session 时自动注入相关上下文。GitHub 上 42K star,今天还在 Trending 榜上。
我这几天实际用了一下,记录配置过程和踩的坑。
安装:两行命令
打开 Claude Code 终端,输入:
/plugin marketplace add thedotmack/claude-mem
/plugin install claude-mem
装完重启 Claude Code。
没了。真的就这两步。
前提条件:Node.js 18+,Bun(claude-mem 的 worker 服务用 Bun 跑的),Claude Code 要支持 plugin。
装好后你可以打开 http://localhost:37777 看 Web 界面,确认 worker 在跑。
它到底干了什么
claude-mem 的工作原理不复杂,但设计得挺巧。它注册了 5 个生命周期 Hook:
- SessionStart:新 session 启动时,从数据库捞相关的历史上下文注入进去
- UserPromptSubmit:你发消息时记录
- PostToolUse:Claude 每次调用工具(读文件、写文件、跑命令)后,记录这次操作的观察结果
- Stop:Claude 完成回复时触发
- SessionEnd:session 结束时生成本次会话的摘要
数据存在本地 SQLite 里,路径在 ~/.claude-mem/ 下面。另外还有个 Chroma 向量数据库做语义搜索。
简单说就是:它在后台默默记笔记,下次你开 Claude Code 时把笔记塞回去。
搜索记忆:三层渐进式
claude-mem 提供了 4 个 MCP 工具来搜索历史记忆。官方推荐的用法是三层渐进式:
第一层:search
先搜索获取索引,每条结果只占 50-100 token:
search(query="authentication bug", type="bugfix", limit=10)
返回的是精简列表——ID、时间、简短描述。
第二层:timeline
看到感兴趣的结果,用 timeline 看它前后发生了什么:
timeline(query="authentication bug", around_id=123)
第三层:get_observations
确定了哪几条有用,再拉完整内容:
get_observations(ids=[123, 456])
完整内容每条 500-1000 token。
这个设计的好处是省 token。如果一上来就拉全部历史,token 消耗会很大。先看索引,再挑选详情,官方说大概能省 10 倍。
实际效果怎么样
我在一个 Next.js 项目上试了三天。
确实有用的场景:
-
上次调了半天的一个 Prisma migration 报错,关掉 session 后再开,claude-mem 自动注入了"上次你在处理 Prisma migration,遇到了外键约束冲突,最后的解决方案是先 drop constraint 再 alter column"。不用再解释一遍。
-
连续几天写同一个功能,每次开 session 时 Claude 已经知道项目用了什么技术栈、上次改到哪一步、还剩什么没做。
-
用
search搜之前踩过的坑,比手动翻 terminal 历史快得多。
不太行的地方:
-
注入的上下文有时候太多。我的项目跑了三天后,SessionStart 注入的历史信息占了好几千 token。可以在配置里调
CLAUDE_MEM_MAX_CONTEXT_TOKENS,但得自己摸索合适的值。 -
Chroma 向量数据库偶尔启动失败。报错信息不太明确,我遇到过两次 port 冲突(37777 被占了),手动杀掉占用端口的进程后恢复。
-
记忆注入的相关性有时候不太准。比如我在写前端组件,它给我注入了三天前改后端 API 的记忆。有关系但不是当下最需要的。
配置调优
claude-mem 的配置通过环境变量控制。几个值得调的:
# 注入上下文的最大 token 数(默认可能偏大,建议根据项目调整)
export CLAUDE_MEM_MAX_CONTEXT_TOKENS=2000
# Worker 端口(如果 37777 被占了)
export CLAUDE_MEM_PORT=37778
# 排除敏感文件的记录
export CLAUDE_MEM_EXCLUDE_PATTERNS=".env,secrets/*,*.key"
隐私控制方面,claude-mem 支持用 tag 排除敏感内容。如果你在处理包含密码、API key 的文件,可以标记排除,避免被记录到 SQLite 里。
和 CLAUDE.md 有什么区别
有人会问:我已经写了 CLAUDE.md 来给 Claude Code 注入项目上下文,还需要 claude-mem 吗?
两回事。
CLAUDE.md 是你手动写的静态说明——"这个项目用 Next.js 15 + Prisma + PostgreSQL,部署在 Vercel 上"。它不会自动更新,你改了技术栈得自己去改 CLAUDE.md。
claude-mem 是自动记录的动态记忆——"昨天你把 Redis 换成了 Upstash,遇到了连接超时问题,调了 timeout 参数后解决了"。这些细节你不会写进 CLAUDE.md,但下次继续开发时很有用。
两个配合用效果更好。CLAUDE.md 管宏观,claude-mem 管细节和变化。
适合什么场景
适合的:中大型项目,连续开发好几天的那种。每天开 Claude Code 都要重新介绍项目背景,这个痛点明显的话就值得装。
不太必要的:一次性脚本、小项目、偶尔用一次 Claude Code 的情况。安装和 worker 进程的开销比记忆带来的便利大。
总结
claude-mem 的核心思路很简单——Claude Code 不记东西,那就在旁边放个笔记本帮它记。5 个 Hook 自动捕获,SQLite 存储,向量搜索检索,下次 session 自动注入。
实际用下来,对连续开发同一个项目的场景确实省事。但配置需要调,token 消耗需要控,向量搜索的相关性还有优化空间。
安装命令再贴一遍:
/plugin marketplace add thedotmack/claude-mem
/plugin install claude-mem
装完打开 http://localhost:37777 确认 worker 在跑就行。
更多推荐



所有评论(0)