用 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 项目上试了三天。

确实有用的场景:

  1. 上次调了半天的一个 Prisma migration 报错,关掉 session 后再开,claude-mem 自动注入了"上次你在处理 Prisma migration,遇到了外键约束冲突,最后的解决方案是先 drop constraint 再 alter column"。不用再解释一遍。

  2. 连续几天写同一个功能,每次开 session 时 Claude 已经知道项目用了什么技术栈、上次改到哪一步、还剩什么没做。

  3. search 搜之前踩过的坑,比手动翻 terminal 历史快得多。

不太行的地方:

  1. 注入的上下文有时候太多。我的项目跑了三天后,SessionStart 注入的历史信息占了好几千 token。可以在配置里调 CLAUDE_MEM_MAX_CONTEXT_TOKENS,但得自己摸索合适的值。

  2. Chroma 向量数据库偶尔启动失败。报错信息不太明确,我遇到过两次 port 冲突(37777 被占了),手动杀掉占用端口的进程后恢复。

  3. 记忆注入的相关性有时候不太准。比如我在写前端组件,它给我注入了三天前改后端 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 在跑就行。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐