资讯动态

claude-mem:给Claude Code装上长期记忆的开源命令行工具

发布时间:2026/10/8 17:01:34 来源:尧图企业网站定制
1. 为什么需要 claude-mem一个会“记事儿”的AI编程助手最近几个月Claude Code 这类终端里的AI编程助手火得一塌糊涂能自动改代码、跑测试、修bug看起来已经把“AI辅助编程”推到了一个新高度。但真正常年在终端里干活的人一定很快撞上一堵墙对话上下文窗口再大也是有上限的。今天你花了两个小时让Claude理解整个项目的模块划分、封装约定和历史决策明天新开一个会话它又是那个满嘴“我觉得可以重构一下”的新同事完全不记得昨晚你们一起拍板的那些技术选型。这就是 claude-mem 出现的核心动机。它是一个开源的命令行工具专门给 Claude Code 补上长期记忆能力把每次会话中产生的项目知识、代码决策、重构记录、踩坑经验沉淀成本地SQLite数据库里的结构化记忆下一次会话启动时能自动带回来。它的定位非常清楚不是记录你说了什么而是记录“这个项目到底是怎么一回事”。我最初看到这个项目标题的时候第一反应是“又一个套壳聊天记录导出工具”。实际跑了一周之后想法彻底变了。它解决的不是“翻聊天记录”这种鸡毛蒜皮的事而是知识复用。项目从几个人写到十个人、从原型到生产最容易丢失的就是“当初为什么这么做”。代码在仓库里但决策过程不在。claude-mem 干的事情本质上是给开发过程装了一个“决策记忆层”。这个工具适合谁如果你已经用 Claude Code 写了超过两周的代码或者你维护的项目有多个模块、多个分支、多个人协作那 claude-mem 就是你缺失的那块拼图。如果你只是拿Claude写点脚本、做点一次性任务那它对你的价值还不明显但看完这篇文章你大概也会想给自己装上。2. 安装和初始化五分钟让工具先跑起来2.1 环境前提一个被很多人忽略的细节先说环境。claude-mem 是基于 Node.js 开发的所以第一件事是确认你的机器上有没有 Node.js 环境。我在 macOS 和 Linux 上都跑过Windows 配合 WSL 也能正常工作但体验上不如前两者顺畅建议 Windows 用户尽量在 WSL 里跑。版本上要求不算苛刻Node.js 16 以上都可以但我建议用 18 以上。原因很实际Claude Code 本身对运行时有要求而 claude-mem 需要以代理方式监听 Claude Code 的会话流老版本 Node 在长连接场景下的表现有明显差距偶尔会断流。安装方式很简单官方推荐的是 npm 全局安装npm install -g claude-mem装完之后先看版本claude-mem --version没有报错的话接下来初始化claude-mem init这一步会在你的用户目录下创建.claude-mem目录里面是配置文件和 SQLite 数据库文件。配好之后还建议把 claude-mem 整合进 Claude Code 的启动流程。常见做法是在 shell 里加一个别名alias claudeclaude-mem -- claude这样每次启动 Claude Code 时claude-mem 会在后台自动监听会话输出并把关键信息写入数据库。这个别名方案是我自己一直在用的好处是零侵入不满意随时可以拆掉。2.2 初始化配置调整哪些参数才够用初始化完成之后默认配置是开箱即用的但有两个参数我建议你第一时间改掉。第一个是记忆提取的频率。claude-mem 默认会尽量频繁地从会话流中提取信息如果你有一个长会话持续运行这会导致每次对话暂停时都触发一次数据库写入IO 压力不大但会让终端偶尔卡顿。把提取频率从realtime改成idle让它在检测到会话空闲时再写库体验会舒服很多。第二个是项目目录白名单。这个工具默认会监控所有使用 Claude Code 的目录但实际工作中有些目录根本不需要记忆比如 node_modules 或者构建脚本目录。可以在配置里指定只对特定路径生效{ watch: { enabled: true, include: [~/Projects/dev/*, ~/Projects/ops/*], exclude: [**/node_modules, **/dist, **/.git] } }这里有个细节include 用绝对路径模式匹配exclude 用 glob 通配符匹配两者都支持多个条目。配好之后重启 Claude Code 会话才会生效。2.3 验证记忆是否生效初始化完最担心的事情就是“工具装好了但啥也没记”。好在 claude-mem 提供了一个命令行查询入口可以快速验证claude-mem list --limit 5第一次跑这个命令大概率是空的因为还没有任何会话产生过。启动一次 Claude Code随便聊几句项目内容退出会话后再跑这个命令应该能看到记录出现。如果你看到输出里有类似“knowledge extracted: 3 items”的日志那就说明链路已经通了。如果完全没有输出别急看后面的常见问题章节大概率是环境变量或者 PATH 的问题。3. 核心机制拆解它到底是怎么“记住”内容的3.1 从会话流到结构化记忆的链路claude-mem 的工作原理很多人以为做的是简单的文本截取和存储其实没那么简单。它的核心链路可以拆成四段监听、切分、提炼、入库。监听阶段工具通过 Claude Code 的调试模式或者输出流捕获会话内容。注意它拿到的不是你在终端里敲的每一条命令而是 Claude 推理过程的关键输出以及你自己对代码改动的描述。换句话说它天然站在“项目知识”的角度看会话而不是站在“用户操作日志”的角度。切分阶段它会按逻辑边界把长会话切成若干个片段。切分不是按时间而是按主题。比如一段对话里你让 Claude 改了鉴权中间件又让它优化了数据库查询这两个主题会被自动分成两个记忆片段。体感上这一步决定了后续检索的质量如果切分粗糙记忆库就会变成一团浆糊。提炼阶段是整个工具的灵魂。claude-mem 不只是做关键词抽取它会结合项目上下文做实体识别把像AuthService、JWT token、refresh_token 过期策略这样的高价值概念抽出来组成一条结构化的知识记录。这一步依赖一个内置的提示词模板通过调用 Claude 模型来对会话片段做总结。你也可以自定义模板后面会讲。最后是入库阶段所有提炼出的结构化记忆写入 SQLite并带有项目ID、时间戳、会话ID等元信息。SQLite 单文件数据库在本地读写速度极快同时天然支持复杂的条件查询。3.2 记忆数据结构一张表看透全貌我从 claude-mem 的源码里梳理了核心表结构说明一下不同版本稍有差异但整体模型是一致的。最主要的表叫memories主要字段如下字段类型说明idTEXTUUID记忆条目的唯一标识project_idTEXT关联的项目标识从 git remote 或目录路径生成session_idTEXT来源会话标识便于回溯typeTEXT记忆类型默认有 code/decision/knowledge/bugfixcontentTEXT记忆的主要内容结构化文本entitiesJSON从内容中抽取的实体列表如函数名、模块名importanceINTEGER重要度评分0-10created_atTEXT入库时间last_accessed_atTEXT最后一次被检索的时间比较值得关注的是entities和importance这两个字段。entities是为了后续检索时有更细的查询维度importance则是工具自动给记忆条目打的分。如果你的会话里反复提到同一个实体或者某段内容里有明显的问题解决过程这条记忆的分数会自动拉高。后期检索时高分的记忆条目会被优先带出来。3.3 命令行工具箱日常用得最多的十个命令claude-mem 的命令行设计得相当克制不像很多工具摊子铺得很大。我日常用得最多的命令如下命令作用使用频率claude-mem init初始化配置与数据库一次性claude-mem install生成 Claude Code 配置一次性claude-mem status查看监控状态和统计高claude-mem search 关键词全文检索记忆最高claude-mem list列出最近记忆高claude-mem show id查看某条记忆详情中claude-mem stats查看记忆数量、分布等统计信息中claude-mem forget id删除某条记忆低claude-mem prune按条件批量清理旧记忆低claude-mem serve启动 MCP 服务模式中search命令我几乎每天都会用尤其是在接续一个隔了好几天的任务时先搜一下之前和 Claude 讨论过的方案再开始新的会话体感上整个状态是连续的。serve命令是配合 MCPModel Context Protocol客户端用的后面实战章节会单独细说。4. 实战三种场景让跨会话记忆真正落地4.1 场景一多会话维护同一套业务代码我在一个实际项目里测了这个场景。项目是一个微服务网关里面有鉴权、限流、路由转发、日志上报四个核心模块。连续两个星期我每天会新开两到三个 Claude Code 会话去改不同模块。不用 claude-mem 的时候第二天新开会话Claude 会重新扫描项目结构、重新理解代码逻辑甚至经常给出和前一天完全冲突的修改建议。用上 claude-mem 之后第二个会话会自动读取之前的记忆在一些关键决策点上不会被反复推翻。举个例子。限流模块里我们当时商量过一个问题是用 Redis 计数器还是滑动窗口算法。当时讨论的结论是“项目流量规模不大Redis 计数器足够滑动窗口留给未来流量上来之后再优化”。如果没有记忆第三天 Claude 大概率会建议改成滑动窗口有了记忆之后它直接跳过了这个讨论默认沿用之前的结论。这个场景的价值不是“省了多少 token”而是减少了决策噪音。每个项目都有那么几个悬而未决、反复翻案的问题记忆库起到了把结论钉死的作用不重复开工。4.2 场景二把项目经验和踩坑记录沉淀成资产第二个场景对我个人来说更有价值。在开发过程中我们经常会遇到一些“查了很久才找到原因”的问题比如某个依赖库的版本升级导致 API 变动或者某个配置项在特定环境下不生效。以前这些经验要么记在 README 的坑点小节里要么就干脆丢了。下次再踩一遍又得重新搜索、重新排查。现在我把所有排查过程都放在 Claude Code 里进行claude-mem 会自动记录完整的解决链条。实践中比较好的操作习惯是每次排查完问题用一句话向 Claude 总结根因和结论。比如“grpc/grpc-js1.9 版本在 Node 20 下有内存泄漏解决方法是固定版本到 1.8.x”。这样 claude-mem 提炼出的记忆质量非常高因为它以你的总结为核心而不是纯粹从代码对话里猜。一周下来我的记忆库里堆了二十多条这样的坑点记录。用claude-mem search 内存泄漏就能直接定位到之前的处理方式。这种感觉有点像一个累积的经验本而且它不是静态的是不断在涨的。4.3 场景三配合 MCP 终端让记忆能力通用于所有 AI 应用claude-mem 还有一个更高级的玩法就是把它作为MCP 服务跑起来。MCP 是最近 AI 应用层面非常热门的一个协议它的思路是把工具能力标准化成服务接口ChatGPT、Claude、以及其他支持 MCP 的客户端都能统一接入。启动方式很简单claude-mem serve默认监听在本地的某个端口配置好客户端之后你的记忆库就成了任何支持 MCP 的 AI 应用都能调用的外部工具。这意味着你可以在其他场景下也问它“这个项目之前定过哪些技术方案”而不仅限于 Claude Code 内部。我自己实际测过的是把它接入了另一个代码阅读工具的 AI 功能发现它对“项目为什么采用这个架构”这类问题回答得相当稳因为背后的记忆是长期积累下来的而不是临时从当前仓库扫一遍。需要注意的是MCP 模式适合单机使用不要直接暴露到公网。记忆库里可能有敏感的技术细节和规划信息局域网内使用问题不大但公网暴露属于高危操作。5. 数据安全与记忆卫生本地记忆库也需要日常维护5.1 数据全部留在本地别急着上云先给焦虑党一颗定心丸claude-mem 的数据默认完整保存在本地 SQLite 文件里没有云端同步、没有遥测上报。你的对话内容和提炼出的项目知识不会因为你装了它就被传到任何第三方服务器上。这一点在同类记忆工具里做得算是保守派。但“本地保存”不等于“绝对安全”。SQLite 文件落在用户目录下默认权限是当前用户可读写如果你的机器有其他使用者或者你习惯用共享账号操作终端那记忆库的内容就有被他人读取的窗口。我建议第一时间给记忆目录设置权限chmod 700 ~/.claude-mem chmod 600 ~/.claude-mem/memories.db这两个命令一跑目录本身不再允许其他用户进入数据库文件只允许文件属主进行读写。5.2 记忆库里的内容清理与分级记忆库用久了之后会膨胀而且里面会堆积大量低价值的碎片记录比如“修改了某个变量名”“调整了某个注释”。这些碎片不算有害但会稀释检索质量让你搜一个关键词时拉出一堆没用的条目。我从实操角度推荐一个“记忆卫生”习惯每两周做一次 review。操作上分两步走。第一步是用claude-mem list --type knowledge和list --type decision导出所有知识类和决策类的记忆快速扫一眼有没有错误或者过时的信息。发现不对的直接forget删掉。第二步是用claude-mem prune --before 2025-01-01这类命令清理指定日期之前的低价值记录。prune 命令支持按时间、按类型、按重要度组合筛选非常灵活。另外一个细节如果你删除某条记忆时接触到了一个你已经不需要的会话 ID可以顺带看一眼claude-mem show id的源会话信息确认真正想删的是不是这一条。删错记忆虽然不致命但有些决策记录丢失后很难再找回来。5.3 敏感数据的规避策略还有一个容易被忽略的点claude-mem 确实会把内容写入本地但如果你是团队项目的唯一维护者本地记录无伤大雅。可如果项目有合规要求比如金融、医疗类项目任何包含客户信息、密钥、凭据的内容进入第三方模型做提炼就可能踩合规红线。自托管模型可以完美规避这一点。claude-mem 在配置里允许你指定本地运行的模型服务地址比如 Ollama、vLLM 之类的开源模型部署方案。把所有提炼、总结操作都指向本地模型就能保证数据不离开你的机器。配置方式就是在.claude-mem/config.json里设置{ llm: { provider: ollama, baseUrl: http://localhost:11434, model: llama3:8b } }设完之后重启claude-mem serve或者重新打开 Claude Code 会话提炼过程就切换到本地模型了。效果上模型小一些会带来提炼质量的轻微下降但换来的数据隔离是值得的毕竟在敏感环境里没有比“不出门”更让人放心的方案了。6. 常见问题与排查技巧实录我踩过的那些坑6.1 装完没反应最容易犯的三个低级错误这个项目刚开始用的时候最容易出的问题就是“装了但没记忆”。根据我自己的经验八成是下面三种情况。第一种PATH 没配置对。npm 全局安装后执行文件一般会放到 Node 的 bin 目录下但有些系统特别是 macOS 用 nvm 的这个目录没有自动加入当前终端的 PATH。解决方式很简单先执行which claude-mem确认能定位到路径没有的话在.zshrc或.bashrc里加上 npm 全局 bin 目录的导出语句。第二种启动 claude 的时候没用别名。我见过很多人在终端里直接输入claude启动会话绕过了claude-mem -- claude那记忆自然就不会产生。建议直接用alias改掉默认命令或者在 Claude Code 的配置里通过hooks机制手动挂载 claude-mem 的监听脚本。第三种监听的会话没产生有效内容。注意一点claude-mem 只提取它认为有价值的那些内容如果你整个会话都在闲聊或者只问了简单的语法问题它可能一条记忆都不写。这不算 bug是设计本性它的存在是为了减少无聊数据的堆积。想验证是否在工作还是用前面的claude-mem stats命令看统计不要凭直觉判断。6.2 记忆内容质量不高提炼结果全是流水账比“没记忆”更烦人的是“记了一堆没用的话”。我刚开始用的时候数据库里充满了“调整了代码格式”“重新运行了测试”这种毫无指导意义的记录正经的架构决策反而被淹没了。后来我搞明白了这是因为会话内容太碎。Claude Code 在很多交互里只会显示“已完成”“已修改”这类短输出claude-mem 缺乏足够素材去提炼高质量记忆。解决方式有两招。第一招是主动总结。在会话结束前花半分钟向 Claude 口述本次会话的核心成果比如“我们刚才确定了缓存策略采用 Cache-Aside更新时先删缓存再更新数据库”。这样 claude-mem 从会话尾部捕捉到这段总结提炼出来的记忆就非常精准。第二招是调整提炼提示词模板。claude-mem 支持通过配置或环境变量覆盖默认的提炼模板你可以把模板里的提取导向改成“从开发者对代码的最终描述中抽取架构决策和性能优化点忽略代码片段本身”。模板调优的效果比预想中大得多因为它直接影响每一步提炼的焦点。6.3 SQLite 文件膨胀记忆库也需要断舍离跑了大概一个月我见过记忆库主文件从几百 KB 涨到十几 MB。这个体量对 SQLite 来说不算大但检索速度会肉眼可见地下降。原因倒不是 SQLite 本身慢而是检索时需要对content字段做全文匹配数据量大了之后没有索引的模糊查询就很吃亏。我的建议是定期维护一个“索引视图”用claude-mem search的--field entities参数配合高频实体做查询。比如你经常搜某个模块名可以先建立一个实体墙claude-mem search AuthService --field entities这样做的好处是查询范围大幅缩小速度能快很多。另外就是按周期执行prune和forget不需要的旧记忆该删就删。SQLite 有个特点是删除记录后文件不会自动变小如果强迫症接受不了可以用sqlite3 ~/.claude-mem/memories.db VACUUM;做一次物理整理文件会缩小回正常水平。6.4 MCP 模式下服务无法启动serve命令在部分环境下会报缺少MCP_SERVER_INSPECT之类的错误这通常和 Node 环境变量有关。检查一下你的.env文件里有没有设置兼容的 MCP 配置项没有的话可以手动指定一个端口号再启动claude-mem serve --port 18473如果还是不行把.claude-mem/config.json里的mcp节点抽出单独一个纯净版本只保留username和api_key占位避免因为配置解析失败导致服务挂掉。MCP 这一块还处于快速迭代期出问题先查版本claude-mem --version npm list -g smithery/claude-mem这个包名注意一下不一定完全等同但根据你安装来源不同可能对应不同的包名称以安装时的 npm 包名为准即可核心思路是确保版本一致性。7. 进阶玩法把 claude-mem 从“工具”变成“团队资产”7.1 自定义记忆类型给知识贴上业务标签默认的 memory types 里只有 code/knowledge/decision/bugfix 四个类型对大多数项目够用但当你开始把它当成项目资产来维护时自定义类型就很关键了。配置文件里有一个types字段你可以定义自己的标签体系。比如我会加一个architecture类型专门记录系统设计讨论再加一个deprecation类型记录哪些功能被废弃了、替代方案是什么。定义方式很简单{ types: { architecture: { description: 系统架构设计决策与讨论结论, priority: 8 }, deprecation: { description: 废弃功能说明及替代方案, priority: 7 } } }设置之后搜^architecture就能精确筛选这一类的记忆。自定义类型最大的价值在于你可以在进行季度总结或者新同学 onboarding 的时候快速输出一份项目决策清单比翻遍 Git 历史高效得多。7.2 把记忆库纳入版本控制团队一起共享这招我在团队内部实践过效果出奇地好。做法是把.claude-mem目录整个放进项目的 Git 仓库里注意创建私有仓库让所有人都能 commit 和 pull 记忆库。这样新成员 clone 项目的时候不仅看到了代码还看到了一整套沉淀下来的项目知识。有人会担心这会让仓库变得混乱但 claude-mem 的数据库文件本质上是一个文件只要规范了提交时机——每次完成一个功能点后 commit 一次——对整个仓库的影响非常小。有一个实战细节必须提醒不要用强制推送覆盖队友的记忆。多人协作时记忆库会产生冲突这时候最好手动合并而不是无脑git push -f。冲突通常发生在实体提取和重要度打分的局部差异上花几分钟看下冲突内容再决定保留哪边比推倒重来稳妥得多。7.3 定期导出与归档给记忆建一个“图书馆”数据库是活的但有些项目你几个月不碰了再回来想用的时候记忆库里的内容还在只是你人已经忘了很多上下文。这时候一套“离线归档”方案就很有用。claude-mem 的数据库本身支持 SQL 查询你可以定时用 sqlite3 命令导出核心记忆生成一个 markdown 或 JSON 文件放到项目的 docs 目录里。我自己的习惯是每个月跑一次这样的导出生成一个PROJECT_MEMORY.md条目分类清晰、带时间戳。这不仅是给未来的自己看的也是给团队其他成员的一个低门槛入口不用装工具就能读。导出命令类似这样sqlite3 ~/.claude-mem/memories.db \ SELECT type, content, importance, created_at FROM memories WHERE project_idyour-project-id ORDER BY created_at DESC; \ docs/PROJECT_MEMORY.md跑完之后自己在文件头部补一段说明标注这个文档的生成时间和项目阶段避免后来者把旧决策当成当下指导。写在最后的个人体会用 claude-mem 这段时间我最大的感触不是“AI 变聪明了”而是工作流的连续性变强了。代码仓库里存的是结果但记忆库里存的是思考过程这两者缺一不可。以前每次新开会话都要重新“热场”一遍项目背景现在直接进入正题这种体验上的提升很难量化但非常真实。如果你打算入手我的建议是先在小项目里跑两周重点观察search命令能不能帮你快速找回一个具体的决策。如果连你自己都觉得检索不到点子上别急着卸载八成是提炼模板没调好去配置里折腾几轮回报会大于投入。另外记得定期做记忆 review别让库变成垃圾场质量永远比数量重要。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑