
如果你跟我一样每天高强度用 Claude Code 写代码、改架构、排查线上问题那你大概率也遭遇过这种场面昨天花三个小时讲清楚的业务背景、模块边界、历史决策今天一开新会话它全忘光了又把你当陌生人反问“这个项目的目标是什么”“订单状态机为什么要分成五个状态”。在 claude-mem 出现之前我靠手动维护 CLAUDE.md 撑了两个月但文档永远赶不上代码变化而且长篇对话里真正值得沉淀的知识靠人手整理基本不现实。claude-mem 就是冲着这个问题来的它是一个专门给 Claude Code 加长期记忆的开源工具核心思路是把每一次会话自动提炼成结构化记忆在下次会话启动时自动注入。这篇东西我会从头到尾把这个工具的原理、安装、实操、避坑讲清楚适合所有用 Claude Code 做日常开发的工程师也适合那些刚听说 claude-mem 但不知道它能干什么的人先看思路再动手。1. claude-mem 到底解决了什么问题1.1 先聊明白 Claude Code 的“失忆症”Claude Code 本质上是一个终端里的 AI 编程助手你可以在项目目录里直接跟它对话让它读代码、改文件、跑命令。但它每次会话都基于独立的上下文窗口也就是说你关掉终端再打开它对你的项目一无所知。这不是 Claude 模型本身的限制而是产品形态天然如此一个会话就是一次完整的交互会话结束上下文就释放了。这种机制带来的直接后果是多天、多会话的长期任务效率极其低下。我自己经历过最典型的一个场景周一接到需求要在现有网关里加一个灰度发布模块我在一次会话里跟 Claude 讨论清楚了技术选型、接口设计、兼容性策略涉及十几个文件的改动。周二早上我重新打开终端想让它继续把那批改动收尾结果它问我“灰度发布模块打算怎么设计”我当时血压就上来了。有人可能会说你可以把关键信息写进项目里的 CLAUDE.mdClaude Code 每次启动时会自动读取。这个办法确实有效问题是 CLAUDE.md 得手动维护。你一边写代码一边还要想着“这段讨论值得记下来吗”“那个结论放到文档里会不会过时”精力消耗极大。而且手动维护的文档天生滞后你在会话里改了三处设计决策文档可能还停留在两个小时前。对于长时间、大规模的项目靠人手维护记忆文档这条路基本走不通。1.2 claude-mem 的能力边界和适用人群claude-mem 不是简单的聊天记录备份工具它会把你的会话内容在后台自动做摘要把那些值得长期记住的信息抽出来分门别类写进记忆文件然后在下次 Claude Code 启动时把这些记忆塞回模型上下文。一句话概括它让 Claude Code 从“每次都是一见钟情”变成“每次都是老友重逢”。具体到能力清单主要有这么几块会话监视后台跑一个常驻进程捕获每一次 Claude Code 会话的产生、持续和结束。自动摘要会话进入空闲状态后自动调用 LLM 把这段对话提炼成结构化摘要不打断你正在进行的编码工作。记忆持久化摘要结果分级存储包括用户偏好、项目事实、跨会话的大任务状态。启动注入新的 Claude Code 会话开始前把当前项目相关的记忆映射进 CLAUDE.md由 Claude Code 原生自动读取。可视化面板提供 Web UI 和命令行面板你可以直接查看、编辑、删除记忆内容。后端可切换默认使用本地 YAML 文件存储也可以切到 Postgres 做更大规模的记忆检索。这个工具适合什么场景首先是中大型项目的长期维护代码量和业务复杂度都靠内存临时记录不现实的场景。其次是频繁被“今天开新会话”打断的重度用户每天要跟 Claude Code 对话几十上百次的那种。再次是多仓、多项目并行的情况每个项目有各自的记忆隔离。还有一点容易被忽略如果你在带团队把 CLAUDE.md 纳入代码库之后新人和 AI 可以共享同一份项目记忆新同学看 CLAUDE.md 就能快速了解项目沉淀这对团队协作的价值其实很大。我拿它和两种常见方案做个对比大家感受一下就明白差距了方案记忆写入方式会话中决策捕捉多项目隔离维护成本Claude Code 原生无记忆无无无无手动维护 CLAUDE.md手动编辑不捕捉全凭自觉每个项目一个文件高容易遗漏和过期claude-mem后台自动摘要写入自动捕捉并分级按项目目录隔离低定期检查即可结论很直接如果你只用 Claude Code 做一次性问答或小脚本claude-mem 带来的收益不大但只要你靠 Claude Code 做正经的、连续的、跨天的开发工作它基本属于刚需。2. claude-mem 的工作原理它凭什么能记住2.1 监视器、摘要器、注入器三个核心环节理解 claude-mem 的架构只需要问三个问题记忆从哪里来、怎么沉淀、怎么用。对应到实现上就是三个模块。第一个是会话监视器。它本质上是一个常驻进程由claude-mem --watch启动。这个进程会观察当前用户目录下正在运行的 Claude Code 会话感知会话的创建、持续时长、结束时间。它是外挂式的不会侵入 Claude Code 本身也不会阻塞你的正常操作。我理解这个设计的第一反应是为什么不能直接在 Claude Code 会话里让模型自己总结原因其实很实际——如果依赖会话内的模型自己总结那这个总结过程既消耗主会话的上下文额度又可能在任务尚未完成时打断节奏。外部监视器的好处是它作为一个旁观者可以在会话进入空闲时从容地做处理完全不影响正在进行的编码任务。第二个是摘要器。这是 claude-mem 的核心大脑。它会定期把最近一段时间的会话内容打包调用 LLM 做结构化摘要提取出三种东西用户偏好例如“提交信息一律用 Conventional Commits 格式”、项目事实例如“支付回调接口在 payments/routes.ts 里返回码 200 表示成功”、以及史诗级状态例如“当前正在重构认证模块已完成 60%剩下 refresh token 部分还没动”。摘要器会把这些内容跟历史记忆做融合避免重复写入。这个融合逻辑很重要否则每次摘要都是全新内容记忆文件会快速膨胀最后塞满上下文。第三个是注入器。它负责在 Claude Code 新会话启动时从记忆库里找到当前项目相关的内容把可用的记忆组合成 CLAUDE.md 的格式写入文件。Claude Code 原生的启动机制会自动读取项目根目录的 CLAUDE.md这就等于让 AI 在每段对话开始前先“读一遍项目档案”。整个注入动作被封装在 claude-mem 安装时提供的一个claude包装命令里同时挂在 Claude Code 的 SessionStart 钩子上用户无感知开一个新的claude会话时记忆就已经在里面了。这三个模块相当于一个完整的“项目档案管理员”流程管理员监视器不参与具体工作但全程在旁边记录下班后会话空闲他会整理档案摘要器第二天你上班新会话开始前他已经把档案放到你桌面上了注入器。这个类比应该比较好理解。2.2 记忆分级与注入优先级claude-mem 对记忆内容不是一锅粥地全塞进上下文它把记忆分成几个层级并在注入时按优先级排序。按我实际使用时的观察大体顺序是远程偏好 知识 长期记忆 项目记忆。这个排序的含义是通用规则、用户风格这类“跨项目永久有效”的信息优先注入当前项目特有的具体事实其次而跨度很大的史诗级任务状态放在最后避免干扰当前会话对具体细节的处理。这个设计解决了我在手动维护 CLAUDE.md 时期最大的痛点所有内容混在一个文件里没有主次之分结果就是模型每句话都要从“我偏好 TypeScript、项目用 pnpm、认证模块正在重构”这一堆背景里筛出本次真正需要的信息。分优先级注入后模型的注意力能集中在当前任务更相关的内容上。印象里 claude-mem 的官方文档也强调过优先级的重要性实际体验下来区别很大尤其是那种长期项目同时叠加了多层知识后低优先级记忆冲刷高优先级信息的问题会明显减弱。我个人的建议是不要在 CLAUDE.md 里堆砌所有历史决策。你要相信摘要器的筛选能力同时自己也定期清理把那些“已经完成、不再需要”的史诗状态删掉。记忆管理跟代码重构一样需要做减法。2.3 为什么记忆落点是 CLAUDE.md 而不是数据库刚开始用 claude-mem 时我也困惑过既然它把摘要存到了后端为什么不直接在新会话里通过工具动态查询而是要先写一个 CLAUDE.md 再让 Claude 读这里面的关键原因是可靠性。Claude Code 对 CLAUDE.md 的读取是原生机制启动时自动完成不需要额外的插件、不需要注入时的特殊 API 调用几乎不可能出现“记忆没注入成功”的幺蛾子。相比之下如果做成动态查询接口那每次会话开始都要额外发起一次工具调用多一跳就多一个故障点网络延迟、后端宕机、权限问题都会导致记忆加载失败。把记忆落到文件里还有一个额外的好处是文件可 diff、可追踪、可以纳入版本管理。我后来养成了一个习惯每天晚上把 CLAUDE.md 的变更提交到 git相当于给项目记忆做了流水账哪个版本加了什么决策、哪个记忆被覆盖了一目了然。当然纯文件方案有检索能力弱的天然短板。所以 claude-mem 也留了 Postgres 后端作为可选聚合存储用于保存更完整的会话历史记录满足多机和跨设备查询场景。但日常驱动模型行为的那部分记忆始终还是以 CLAUDE.md 为锚点这个设计非常务实。3. 安装与初始化从零跑通 claude-mem3.1 安装方式和版本选择claude-mem 的安装方式有两种我建议优先用 npm 全局安装因为卸载和升级都干净。前提是你本机有 Node.js 18 或更高版本现在用 Claude Code 的开发者基本都已经具备这个条件了npm install -g joshrichards/claude-mem装完之后验证一下claude-mem --version能看到版本号输出就是装好了。如果你不想引入 npm 全局包也可以用官方提供的脚本安装方式本质上就是下载 release 产物放到可执行路径里。我的看法是除非你在维护一些禁止全局 npm 包的严格环境否则 npm 方案更可控。升级也很方便跑一遍同样的 install 命令就行不会像手动下载脚本那样容易把旧版本文件留在系统里。装好之后有一个细节值得注意claude-mem 会在你的环境里放置一个claude包装命令。这个命令在真正启动 Claude Code 之前会先完成记忆注入。所以要千万留意 shell 里which claude指向的是哪里如果不小心让系统 PATH 优先找到旧的 Claude Code 本体记忆注入就不生效了。这属于那种“配置看起来全对但实际没走通”的隐形坑后面排查章节我会再说。3.2 配置 API 密钥与健康检查claude-mem 需要独立的 API Key 来做会话摘要因为它要额外调用一次 LLM把原始对话提炼成结构化记忆。这个 Key 和你登录 Claude Code 的订阅账号不是一回事需要到 Anthropic 控制台单独生成一份。配置过程非常简单终端里运行claude-mem --configure跟着提示把 API Key 粘贴进去就行。它会写入本地的配置文件一般在~/.claude-mem/下不会出现在项目目录里。这里有个安全提醒这份 Key 的存放位置已经在本机所以你千万不要把~/.claude-mem目录整个提交到 git 仓库也小心那些会全盘扫描 home 目录的配置文件同步工具。我在公司电脑上吃过类似的亏虽然没泄露到公网但被安全扫描报了一次违规后面所有密钥都改走环境变量或系统钥匙串了。配置完可以跑一次健康检查claude-mem --doctor这个命令会检查 Node 版本、API Key 是否有效、配置目录是否有写权限、Claude Code 的 hook 是否挂载、数据库连接如果配置了是否可用。输出会把每项标成健康或不健康属于非常应试的排错工具。我建议你在改任何一个配置后都跑一次--doctor它比看日志直观得多。3.3 启动会话监视器配置好之后核心一步是启动监视器claude-mem --watch这个进程必须常驻它一旦退出会话摘要和记忆写入就全部停止。但你的 Claude Code 还是会正常工作所以这种“半瘫痪”状态伪装性很强很多人过了几天才发现记忆根本没更新。我自己的习惯是在开发机上用一个 tmux 会话专门跑claude-mem --watch给它固定的窗口名开机之后手动恢复。如果是跑在云服务器上建议用 systemd 做进程守护避免终端断开导致 watch 进程被 SIGHUP 干掉。用 tmux 时注意别把 watch 和 Claude Code 放在同一个窗格里否则 CtrlD 退出 Claude 时偶尔会误伤 watch 进程。# tmux 示例 tmux new -s claude-mem claude-mem --watch # 按 CtrlB D 分离进程保持后台运行启动成功之后你会在终端看到类似Session watcher started的日志输出。到这一步监视器已经就位但它有没有真正接管会话还要看下一步的 hook 配置。3.4 把记忆注入接到 Claude Code 的启动钩子上要让每次新会话自动获得记忆需要编辑 Claude Code 的配置文件。用户级配置文件在~/.claude/settings.json项目级配置文件在项目根目录的.claude/settings.json。我一般两个都配用户级保证全局默认生效项目级用来覆盖每个项目特有的权限。{ permissions: { allow: [ Bash(claude-mem:*), Read(CLAUDE.md), Edit(CLAUDE.md) ] }, hooks: { SessionStart: [ { hooks: [ { type: command, command: claude } ] } ] } }这段配置做了两件事。第一把claude-mem系列命令、CLAUDE.md 的读写操作加入权限白名单Claude 在会话里要查看或更新记忆时不会被权限拦截。第二在 SessionStart 钩子里挂上claude包装命令让每个新会话在启动阶段执行记忆注入。配置完之后随便开一个 Claude Code 会话观察启动日志里有没有记忆加载的记录。如果 CLAUDE.md 里已经有了之前生成的记忆内容这次会话开局的模型响应里就应该携带这些背景知识。到这一步整个 claude-mem 的基本闭环就算跑通了说实话我见过不少用户卡在这一步hook 配了但权限没放开导致 CLAUDE.md 读不到表现为记忆文件有内容但模型完全不敢提。所以权限白名单和 hook 这两块必须同时配齐。4. 实操过程跑一个完整的记忆闭环4.1 验证会话摘要有没有自动生成配置完成后的第一次真实测试我建议专门用一个短会话来做可观察性最强。操作思路是开一个 Claude Code 会话让它做一些有明确结论的事情例如“在项目里实现一个简单的日志工具函数输出格式按 JSON”。等对话结束什么都不用做就盯着终端窗口等 claude-mem 的 watch 日志出现摘要触发记录。claude-mem 的设计是在会话空闲一段时间后触发摘要而不是对话一结束就立刻执行。这样做是为了避免频繁调用模型毕竟每次摘要都有 token 成本。我实测下来空闲大概半分钟左右watch 日志里会出现类似Generating summary for session xxx的输出再过一会儿会有Summary saved的记录。整个摘要过程长会话可能需要一二十秒短会话几秒就完成了。摘要完成后可以去记忆存储目录看一眼文件结构find ~/.claude-mem -type f | head -50你大概率会看到一个按日期或会话 ID 组织的目录结构里面保存着原始会话索引、摘要结果、生成时间等元信息。如果这里能看到刚跑的那个会话对应的摘要说明“监视摘要”这条链路已经完全打通。4.2 检查 CLAUDE.md 里的记忆内容摘要写进后端之后还需要确认它有没有被同步到项目根目录的 CLAUDE.md。通常 claude-mem 在每次摘要完成后会增量更新这个文件。打开看一眼# Long-term memory ## Knowledge - 用户偏好使用 pnpm 作为包管理器 - 提交信息遵循 Conventional Commits 规范 ## Memories - 订单服务位于 services/orders用 PostgreSQL 存储 - 日志工具函数在 src/utils/logger.ts输出 JSON 格式 ## Epics - 无记忆内容会自动按知识层级分好类。这个文件的质量直接决定了后续会话注入的效果所以值得人工检查一遍。如果发现摘要内容有明显错误——比如把测试代码的结论当成了正式决策——不要慌CLAUDE.md 是纯文本直接手动编辑删掉那一节即可。更有意思的是你编辑完 CLAUDE.md 之后claude-mem 会以你的修改为准进行后续融合相当于人可以终审 AI 的记忆。4.3 新会话里验证记忆注入效果这一步才是整个流程的试金石。关闭当前 Claude Code 会话重新打开一个。启动时观察是否有记忆加载的日志。然后在会话里直接问一个只有上一轮对话才知道答案的问题例如“你还记得日志函数放在哪个文件里吗帮我打开看看。”如果它能准确地指出这个文件甚至能复述你上一轮定下的格式约定说明记忆注入闭环已经完整运作。我自己的习惯是把这个验证问题再升级一层让 Claude 基于记忆做一个跨会话的连续性任务。比如上一轮我让它在网关里定义了灰度接口的请求字段这一轮我直接说“继续把灰度接口的实现写完”看它能不能自动走到正确的文件、使用正确的字段名。这比问一句“你记不记得”更有说服力因为真正验证的是记忆有没有被模型当作“可信背景”使用而不仅仅是作为文本被读取到上下文里。整套验证走完从开新会话到模型理解记忆实测大概三秒左右没有明显的启动延迟这是 claude-mem 做得比较舒服的地方。如果启动阶段做了太多重量级操作用户每次开会话都等十几秒这工具再强大也会被嫌弃好在它没有走到那一步。4.4 进阶玩法切换 Postgres 后端默认情况下 claude-mem 会把所有记忆和会话索引存成本地文件适合单机开发。如果你有多台设备、或者想把历史会话汇总到一个中心库做分析就得考虑切 Postgres 后端。切换方式不复杂设置好数据库连接串并让 claude-mem 识别即可具体环境变量名以claude-mem --doctor输出的提示为准。例如export DATABASE_URLpostgresql://user:passwordlocalhost:5432/claude_mem claude-mem --watch切换后CLAUDE.md 依然是驱动模型行为的主文件Postgres 负责存更完整的会话摘要和检索索引。我个人的实际体会是单机重度使用没必要上 PostgresYAML 文件已经足够但如果你维护的是一个多人共享的开发服务器或者有几个月的会话历史需要回溯Postgres 的价值就会显现出来——文件方案下三个月前的某个决策回忆起来确实费劲数据库检索会快得多。5. 实际使用中的避坑指南与排查实录5.1 高频问题排查表我把这几个月遇到的问题按出现频率整理成一张表基本都是新用户最容易踩的坑现象可能原因解决方法新会话完全没有记忆注入SessionStart hook 没挂上或 hook 里的claude包装命令被 PATH 优先级覆盖检查 settings.json执行which claude确认指向重跑claude-mem --doctor记忆文件有内容但模型不引用权限白名单缺少 Read/Edit 权限导致模型读取被拦settings.json 的 permissions.allow 里补上 Read/Edit CLAUDE.mdwatch 日志没有摘要记录watch 进程没启动或者被终端关闭连带退出用 tmux 或 systemd 守护 watch检查日志路径摘要一直卡住不生成API Key 失效、额度耗尽、网络不通重跑--configure换 Key看 watch 日志里的报错CLAUDE.md 越来越大记忆重复写入、史诗状态未清理手动清理过时条目考虑切 Postgres 控制主文件体积多项目之间记忆串场记忆作用域配置不当把全局偏好看成了项目记忆检查记忆注入时是否只选择了当前项目相关的段这里重点说多项目串场的问题。claude-mem 的优势之一是按项目隔离记忆但你如果频繁在同一个终端目录下通过绝对路径切到另一个项目开会话记忆作用域的识别偶尔会混乱导致 A 项目的记忆被注入到 B 项目的会话里。我最开始没注意这个后来发现 B 项目里模型莫名其妙提到了 A 项目的模块名排查半天才定位到是记忆串了。解决方案其实简单尽量在项目根目录下启动 Claude Code少用绝对路径跨目录开会话。CLAUDE.md 是按“当前工作目录”识别项目的你人乱跑记忆隔离就跟着乱跑。5.2 成本与隐私怎么平衡claude-mem 的摘要器需要额外消耗 LLM token这是它有别于纯本地工具的地方。实际费用我不太好给一个固定数字因为它取决于会话长度和摘要频率。但我可以给个直观参考一次普通的短会话摘要大约消耗几百到一千 token 左右按 Anthropic 当前的 API 定价算单次摘要的花费基本在几厘到几分钱人民币的量级。一天下来如果不进行大量超长会话成本完全可以忽略。成本真正会起飞的是那种全天挂着 Claude Code、每隔几分钟就有一轮长对话的重度场景。这种场景下摘要会频繁触发每个长会话的摘要 token 也会变高一个月累计几十美元也不奇怪。我的建议是不要盲目追求“每个会话都记住”而是要意识到记忆是给跨会话的连续性任务用的。日常琐碎问答、临时看个文件这类会话产生的摘要价值很低。目前 claude-mem 没有特别细的摘要频率控制功能所以我的经验做法是高频协作时定期停掉 watch只在大任务会话期间保持开启手动控制记忆写入的节奏。隐私这块必须多说一句。claude-mem 默认把记忆存在本地文件系统这是好的起点但摘要过程仍然会把对话内容发给 LLM 服务商做处理。所以如果你的代码涉及敏感业务逻辑或客户数据就不应该把那些会话纳入自动摘要。我见过有人让 claude-mem 监控一个包含未脱敏数据库字段的接口调试会话结果摘要文件里出现了真实的手机号段这非常危险。建议做法是涉密项目的记忆用负向提示排除或者干脆不做自动摘要只保留 CLAUDE.md 的手动维护入口。人是记忆的最终责任人工具只是辅助。5.3 个人使用心得与优化建议用了 claude-mem 大概三周后我形成了一个比较固定的使用节奏。每天开工后先看一眼 CLAUDE.md 的 diff确认昨天的记忆沉淀有没有异常然后启动一个新的 Claude Code 会话投入到当天任务里。晚上收工前清理一次记忆库把已经完成的史诗状态删掉把不准确的条目砍掉相当于每天 30 秒的“记忆整理仪式”。这个习惯让我对项目记忆库的信任度一直保持在比较高的水平因为我知道里面的内容基本是干净的、有用的。还有一个容易被忽略的技巧把 CLAUDE.md 纳入 git 版本管理。它不再是你个人的本地草稿而是项目资产的一部分。我甚至在团队里约定凡是经过设计评审的重要决策都会通过 claude-mem 生成记忆并在 MR 里包含 CLAUDE.md 的变更。这样新成员加入项目时除了读 README还能让 AI 助手直接继承团队的历史决策上下文新人上手效率提升是肉眼可见的。最后提一下 IDE 集成场景。我在 VS Code 里使用 Claude Code 插件时遇到过 watch 进程能运行但摘要始终不触发的问题。排查下来是 IDE 里启动的终端环境变量和系统 shell 不一致导致 claude-mem 找不到 API Key。解决办法是在 IDE 的终端设置里显式加载 shell 环境或者直接把密钥写进 claude-mem 自己的配置文件而不是只依赖 shell 导出的环境变量。这个坑花了我不少时间写出来希望大家不用再走一遍。我在实际使用中最明显的感受是claude-mem 改变的不是单次会话里的对话质量而是跨会话的协作连续性。以前我每天要花十几分钟重新给 AI “讲项目背景”现在这个动作完全消失了每天早晨打开终端Claude Code 就像头天晚上根本没关过一样直接接着干。顺着这个思路我还在想后续可以让 claude-mem 团队开发一个定时“记忆整理”的钩子在周末自动把一周的史诗级记忆做一次归档压缩减少工作日的同步开销。如果你也在受跨会话失忆的折磨真的值得花二十分钟把这个工具搭起来。