
用Claude Code两个星期最让我头疼的不是模型本身而是每次新开会话它都要重新认识我的项目。代码规范说了三遍它转头就忘技术选型的理由每次都得重新打字昨天刚定的目录结构今天它又当成第一次见。直到我把claude-mem接进去这个问题才算真正解决。claude-mem是Claude Code的一个记忆层扩展简单说就是给Claude外挂了一个跨会话的“脑子”。它会自动把你在每次会话里聊过的关键内容提炼成短期记忆把那些反复出现的偏好、约定、决策沉淀成长期记忆在下次启动Claude Code时自动加载回来。适合所有觉得“同一个项目反复解释同一件事”很烦的开发者也适合带新人、维护老项目、跨周跨月跟进多个工程的人。这篇文章里我把我从安装到实际使用两周多的完整记录、踩坑和配置思路整理出来基本可以直接照着抄。1. claude-mem到底解决了什么问题1.1 先说清楚Claude Code的“记忆困境”Claude Code本身是会话式的。你在终端里启动claude它有一个上下文窗口这个会话里聊的东西它记得但会话一关下一回重新claude启动它又是白纸一张。这带来几个很实际的麻烦项目里的代码风格约定每次都得重新交代如果你的项目有比较长的背景比如“这个模块为什么设计成异步”“这个目录为什么这样组织”新会话里你得花五分钟重新打字描述更烦的是你在A会话里决定的架构方案到B会话里它完全不记得然后在B会话里给你提出一个完全相反的方案。claude-mem干的事情就是把这个“失忆”补上。它安装在你的机器上作为Claude Code的一个代理层运行启动时会把你之前所有会话里沉淀下来的记忆注入到当前对话里。这样同一台机器、同一个项目下Claude就像真的“记得你”一样不是每次都是第一次见面。1.2 它的记忆分成三层claude-mem不是简单把所有聊天记录一股脑存下来再塞回去那样上下文早就爆了。它把记忆分成三类各自有各自的作用短期记忆short-term一个会话结束后它对这次会话生成一段摘要记录“这次做了什么、定了什么、下一步干什么”。下次会话开始它先把这些摘要加载回来让你能接着上次继续干。长期记忆long-term它会在对话里识别那些“用户反复强调的偏好、项目特定的约定、重要的技术决策”独立保存成一条一条的记忆。这类东西不会随着会话摘要滚掉会被保留更久。程序性记忆procedural这一层更狠它会扫描你的Git提交历史从commit message里学习你的工作模式和代码偏好。你每次都用fix(scope): 描述的格式提交它以后也会倾向于用这种格式提建议。这三种记忆合起来覆盖的场景就是短期让你能接续工作长期让你不用重复交代偏好程序性让它更贴合你的个人习惯。1.3 适合谁用不适合谁用我用下来觉得这工具最适合三类人一是同时维护好几个项目每个项目技术栈、约定各不相同靠脑子记不过来的人二是经常隔几天甚至几周才回到某个项目继续干活需要快速找回上下文的开发者三是在团队里负责Code Review或者带新人经常需要解释项目背景的人。反过来如果你只是偶尔开个终端让Claude帮你写个一次性脚本用完就完事那这个工具对你帮助不大还多一层配置成本。它是为“长期、持续使用Claude Code做正经项目”的人群设计的。2. 安装部署从零到能记住你的项目2.1 前置条件装这个之前你得先有Node.js 18及以上版本claude-mem本身是用JavaScript写的通过npm安装Node版本太低装不上。一个能用的Claude Code环境也就是你已经能在终端里正常跑claude命令。一个Anthropic API key或者在配置里换成Gemini或OpenAI的key也可以后面我会讲为什么需要这个。API key这一条是很多人容易卡住的地方。claude-mem本身的记忆提取功能是拿LLM来做的它把你的对话内容发送给模型让模型负责总结和提炼。默认用的是Claude的Haiku模型速度快、便宜而且因为和Claude Code同源对代码场景的理解好。注意这里说的API key是官方API平台的key不是Claude Code订阅那个key。两者的计费和权限是不通的。如果你没有Anthropic API key也可以在配置里指定用Gemini或者OpenAI的模型后面参数部分会详细说。2.2 安装和初始化步骤我实际操作的完整流程是这样的。先全局安装npm install -g claude-mem然后用一条命令初始化claude-mem init初始化的时候它会做几件事检测你的Node版本和Git配置检查Claude Code安装路径在你当前用户目录下创建~/.claude-mem文件夹作为数据目录还会生成一个初始配置文件。这个过程基本是全自动的不需要你回答太多问题。接着配置API key。这一步不配置的话后面启动daemon会直接报错。我建议用官方提供的配置文件方式安全系数更高claude-mem config set ANTHROPIC_API_KEY sk-ant-xxxx它支持的配置项很多后面我会单独列一张速查表。配好key之后启动它的后台服务claude-mem daemon这个daemon就是“记忆服务”的核心。它会注入到Claude Code的启动流程里负责会话开始时的记忆加载和结束时的记忆提取。最后验证一下状态claude-mem status能正常输出类似“status: running”之类的信息就说明装好了。2.3 首次启动验证装好以后我第一次实际测试是这样验证的先在一个项目目录里启动Claude Code随便聊几句代码问题然后退出。这时候~/.claude-mem/short_term_memories下面应该会看到第一个会话的摘要文件。然后再启动一次Claude Code按CtrlR如果能看到上次会话内容的摘要那整个链路就通了。这里有一个非常容易踩的坑装了claude-mem之后你启动Claude Code之前得确保daemon是在运行的。如果你忘记启动daemonClaude Code正常运行但记忆不会被加载也不会被保存而且它不会给你弹任何错误提示你会误以为装好了。我一开始就是直接跑claude没管daemon结果用了一天发现根本没记忆回看才发现daemon没起来。3. 核心功能实战记忆怎么被写入、加载和调用3.1 会话结束时的自动提取每当你结束一次会话claude-mem会做一次“收尾工作”。它从当前会话的完整对话里让模型提炼出几类信息这次会话完成了什么、解决了什么问题、有没有还没做完的Todo、用户反复提到的偏好、涉及的技术决策。这里面最有价值的是决策记录。比如你在会话里说了“这个模块我们不用ORM直接写SQL因为表结构太复杂ORM反而绕来绕去”模型会把这句话提炼成一条长期记忆存下来。下次你在另一个会话里说“要不要在这个模块引入ORM”Claude就会拿以前的决策来反驳你或者至少提醒你“你之前决定不用ORM”。这个自动提取不是“话痨式”的全部记录。它有一个筛选策略只保留足够具体、对未来工作有指导意义的内容。系统提示词里会明确要求忽略问候语、忽略临时性内容、忽略已经被更完整表达覆盖的信息。这一点体验下来挺好的不会什么垃圾都往记忆库里塞。3.2 会话开始时的记忆注入启动Claude Code时claude-mem会在你真正输入指令之前把之前沉淀好的记忆以代码块的形式插入到对话的最前面[记忆加载] 以下是此前的项目记忆 - 用户偏好使用 pnpm 而不是 npm - 项目采用 monorepo 结构包管理在 /packages - 上次会话决定放弃 ORM改用原生 SQL - 当前未完成任务重构 auth 模块的鉴权逻辑它用代码块把记忆内容圈起来是因为这样Claude的parser更容易识别——代码块是一种明确的“结构化数据”标志不会被误认为用户的新输入也不会干扰Claude Code对普通指令的解析。这些记忆注入后你正常输入“继续昨天的重构”这种话Claude就能接上。它不需要你重新解释“昨天在重构哪个模块”因为记忆里已经写了“未完成任务重构auth模块鉴权逻辑”。3.3 手动操作查看、搜索和清除记忆除了全自动的存取claude-mem也提供命令来手动管理。我在实际使用中觉得这几个特别有用CtrlR在Claude Code会话里按这个快捷键会弹出一个交互式的记忆浏览界面可以查看当前项目已加载了哪些记忆。claude-mem list在终端里查看记忆列表不带交互界面适合快速确认是否有记忆。claude-mem search 关键词在记忆库里搜索和关键词相关的内容。claude-mem clear --long-term清除长期记忆。这个我建议慎用清完就真没了。还有一个我后期才发现的claude-mem的命令可以在会话里让Claude帮你调用。你在对话里说“帮我看看之前对这个模块的决策”Claude会自己去查记忆库然后把结果以对话形式回答你。这个比自己切出去跑终端命令方便很多因为不用离开当前上下文。3.4 深度记忆模式从Git历史里学习惯claude-mem的深度记忆模式是个隐藏很深的亮点。它不止记录对话还会扫描你项目的Git提交历史从commit message、分支命名习惯里学习你的偏好。你说它是在“模仿你”也不为过。它会分析每次commit的结构提取出类型化的信息比如你的commit message喜欢用什么格式、你倾向于把什么样的代码变更合并到一个提交里、你有多个commit的时候习惯怎么分组。这些信息被沉淀成程序性记忆后会用得越来越多——以后Claude给你的提交建议会更像你手写出来的而不是通用的“fix: xxxx”。不过这个模式是默认关闭的需要手动开启claude-mem config set EXTRACT_PROCEDURAL_MEMORIES 1开启后需要项目里有Git历史且首次扫描会稍微慢一点因为它要把历史提交都过一遍模型。4. 记忆存储与底层机制数据到底存在哪4.1 本地存储结构claude-mem的记忆全部存在本地数据目录在你的用户目录下默认是~/.claude-mem。这个目录下面有几个关键的组成部分。store/目录放的是SQLite数据库文件。长期记忆和程序性记忆都存在这个数据库里按表组织每条记忆都会标注它对应的项目、创建时间、来源会话。搞一个数据库文件来存而不是散装存文本是因为记忆多了以后需要检索。SQLite是单文件数据库不需要单独起服务对个人工具来说零运维成本。short_term_memories/目录放的是短期记忆也就是每次会话的摘要以JSON格式存储。一个会话对应一个文件文件名里带了时间戳。这些文件是纯文本你能直接打开看也能直接改甚至你想手动写一条记忆进去创建一个格式相同的JSON文件放进去下次也能被加载。4.2 记忆提取的判定策略很多人会好奇它到底怎么决定哪些对话内容值得记住实际上这个不是靠规则而是靠System Prompt引导LLM做判断。claude-mem在让提取模型干活时系统提示里明确列出了这些保留标准值得记的包括用户反复强调的偏好、明确的决策及其理由、项目特定的约定和术语定义、跨会话有复用价值的上下文、未完成任务。不该记的包括寒暄、一次性的临时请求、已经被更完整记录覆盖的信息、过于细枝末节的内容比如某个具体变量名改了。用LLM做判断的好处是它能理解自然语言的语义。你要是用纯代码规则提取那种“用户说这个模块咱们慢慢来”这种话规则很难判断是不是重要信息但LLM能结合上下文知道这是随口一说还是真的决策。代价就是每次提取要调用一次API这也是为什么它需要一个独立的模型key。4.3 默认模型、备选模型和环境变量claude-mem默认用的提取模型是Claude Haiku也就是Anthropic旗下那个轻量模型。选它有几个原因便宜一次会话提取的token量很小积少成多也是一笔开销所以便宜是第一考虑快不能让提取逻辑拖慢会话结束的流程Haiku的响应速度是毫秒级够用提取记忆不是复杂推理是信息重写不需要也不应该用顶配模型。但你可以换成别的。它支持通过配置指定不同的提取模型实测下来Gemini的Flash系列也不错速度快而且有免费额度。用OpenAI的GPT系列也能跑但我个人觉得在“对话记忆提取”这个场景里Claude系列对代码上下文的理解更准提取得更细。配置文件里有一个和记忆注入密切相关的关键参数# 在CLAUDE.md文件所在目录里注入还是全局注入 claude-mem config set MEMORY_INJECTION_MODE project这个建议直接设成project只在当前项目下注入项目相关记忆。默认是全局模式的话你在A项目的记忆可能会被带到B项目里会造成干扰。尤其是两个项目技术栈完全不同的时候这种跨项目污染非常影响体验。5. 两周实测我的配置参数、性能开销和隐私边界5.1 我最终确定的配置方案用了一段时间踩过不少坑最后我稳定的配置是这样一套。# 核心模型用于记忆提取 claude-mem config set MODEL_FAST claude-3-5-haiku-latest # 次级模型用来做深度分析比如程序性记忆提取 claude-mem config set MODEL_STRONG claude-3-5-sonnet-latest # 记忆注入模式按项目隔离 claude-mem config set MEMORY_INJECTION_MODE project # 短期记忆保留最近10条更早的自动归档 claude-mem config set MAX_SHORT_TERM_MEMORIES 10 # 开启Git历史学习 claude-mem config set EXTRACT_PROCEDURAL_MEMORIES 1 # 用新版命令自动启动daemon claude-mem config set AUTO_START_DAEMON 1这个配置里MAX_SHORT_TERM_MEMORIES要解释一下。短期记忆文件是逐次累积的如果项目做了很久会话特别多全部加载会让上下文被记忆塞满反而影响Claude Code正常干活。限制条数之后旧的短期记忆会被归档到长期记忆库里只保留最近几次会话的摘要这样既接得上上下文又不至于撑爆窗口。AUTO_START_DAEMON这个参数建议打开。前面说过daemon忘启动是个大坑设成1之后每次在项目里启动Claude Code它会自动拉起daemon省得你手动记这个事。5.2 性能开销到底多花多少时间我最初担心的一个问题是加了这层记忆代理每次启动Claude Code会不会变慢很多实测下来的结论是会多一点点但可以接受。启动时加载记忆的开销取决于记忆量。冷启动daemon刚起来、缓存没有时短记忆如果十几条加载大概增加几十毫秒如果加上了Git历史程序性记忆扫描第一次项目扫描会慢一些我那个仓库有两千多次提交第一次扫描跑了大概一分钟但之后每次增量扫描就很快了。日常会话结束时的提取是异步的你退出会话时候它静默在后台跑这个体验影响很小。上下文被记忆占掉的token也要注意一下。短记忆如果塞了太多条每条算下来少则几十个token多则几百个十条加起来还是可观的。所以我在上面把短期记忆条数压到10项目记忆控制在“够用就好”。5.3 隐私与安全边界用这类工具隐私问题绕不开。我把我的理解说一下claude-mem的记忆提取需要把对话内容发给LLM模型这个转发是不可避免的因为它必须靠模型理解对话才能提取记忆。但是它有几点做得让人放心。第一它只发送需要提取的对话上下文给模型而不是整个会话全量上传。具体的截取策略会根据对话长度自动调整太长的会话会被切段处理而不是一股脑全丢进去。第二记忆提取结果是以数据形式发给模型二次验证的你对话里的全部原文并不会被长期保存在模型服务端。你本地存的也是提炼后的记忆摘要而不是原始对话录。第三如果你实在介意可以把提取模型换成本地模型。claude-mem支持通过Ollama或者兼容OpenAI协议的本地服务跑提取模型这样对话内容完全不离开你的机器。代价就是本地小模型提取质量可能不如云端模型这个就看你自己的隐私偏好和效果权衡了。我的建议是如果你公司项目涉及敏感代码优先问一下安全团队这个工具能不能用。个人项目无所谓但公司项目合规通常不是你能单独拍板的。6. 常见问题与排查技巧实录6.1 装了发现没有~/.claude-mem目录这个基本就是初始化没完成。最常见的原因是claude-mem init执行时Node版本不兼容或者初始化过程中网络请求超时。排查的时候先确认Node版本够不够node -v然后在项目目录里重新跑一次claude-mem init注意看它输出里的错误信息。我遇到过一次是PowerShell的执行策略问题那次改用Git Bash或者CMD反而就好了。6.2 记忆没有按预期加载如果你启动Claude Code后感觉它和以前一样健忘可能的原因有这么几个daemon没启动。优先检查claude-mem status是不是running。记忆注入模式配置成了global但项目记忆没被选中。改用project模式并确认当前项目目录下已经生成了对应的记忆文件。短期记忆目录里是空的。说明你上一次启动Claude Code时daemon没跑会话没有提取或者提取失败了看一下daemon日志。claude-mem的运行日志在~/.claude-mem/logs下面按天滚动。出问题时第一个动作就去看日志比什么排查技巧都好使。6.3 按CtrlR没反应CtrlR这个快捷键只在Claude Code会话输入框有焦点时有效如果你焦点在终端外部区域那当然没反应。另外它依赖TUI界面事件监听某些终端模拟器我遇到过Windows老版本PowerShell窗口对快捷键透传不完整表现就是按键被终端自己吃掉了。这种情况换到Windows Terminal或者VS Code集成终端就正常了。6.4 使用Gemini或本地模型时的坑如果你配置里把提取模型换成了Gemini记得环境变量要用GEMINI_API_KEY而不是GOOGLE_API_KEYclaude-mem读的是前者。用OpenAI兼容接口时BASE_URL要拼对而且模型名要填成服务端真实支持的名称填不对会一直报401或者404。另外一个比较隐蔽的问题是如果设置了MEMORY_INJECTION_MODE为自定义路径确保那个路径对应的CLAUDE.md文件是UTF-8编码且不包含特殊字符。有些系统生成的CLAUDE.md是带BOM的虽然大部分场景能兼容但我在旧版macOS上遇到过注入乱码的情况。6.5 数据怎么备份和迁移~/.claude-mem整个目录就是所有数据备份直接把这个文件夹拷走就行。迁移到新机器的时候把目录放回去然后重新npm install -g claude-mem、重新claude-mem init数据就恢复了。如果你之前配过API key新机器上需要重新配一遍key不会跟着数据文件走。我个人的习惯是每周日随便找个U盘把这个目录拷一份。这个操作比你想的更重要因为长期记忆库是积累出来的结果丢一次真的很伤。7. 最后再分享两个我实测下来的小技巧第一个是关于“如何让记忆更干净”。claude-mem的记忆提取质量在很大程度上取决于你的对话质量。如果你在会话里跟Claude闲聊太多它会记住很多不相关的偏好比如“用户喜欢在周末写代码”这种垃圾记忆。我现在的做法是在项目根目录的CLAUDE.md里明确写一段话告诉Claude哪些偏好值得沉淀、哪些不要。这相当于给提取模型一个前置的过滤指引效果非常明显。第二个是关于“记忆被塞太多怎么办”。如果你用了一段时间之后感觉Claude的对话质量明显变差了大概率不是模型变笨了而是记忆里塞了太多过期的决策。这时候就执行claude-mem list claude-mem clear --long-term清掉之后重新跑几轮会话让记忆库重新沉淀。这就像房间住久了要断舍离别舍不得旧记忆不清掉新记忆也进不来。我这两个星期的实际体验是claude-mem改变的不是Claude本身的能力而是你使用它的方式。原来我在新会话里要花两分钟重新交代项目背景现在直接说“继续”就行原来它会忘记我强调过的技术选型现在它反而会在我要踩坑的时候拿之前的决策来拦我。这个从“聊天机器人”到“有记忆的协作者”的转变才是它真正的价值所在。如果你已经长期在用Claude Code这个扩展值得现在就装上试试。