让 Claude 过目不忘:Claude-Mem 如何把一次性对话变成永续项目记忆
“
核心问题:如何让 Claude 在每次重启后都能“记得”我们之前做过什么,而不必反复交代背景?
Claude-Mem 给出的答案是:用一套“钩子 + 数据库 + 搜索”的三件套,把每一次对话自动沉淀为可检索的项目记忆。下面带你从 0 到 1 跑通全流程,并给出三种真实场景示例,让你 10 分钟就能感受到“永续记忆”带来的效率跃迁。
一、快速体验:3 条命令把记忆系统跑起来
验证成功标志
重启后任意问一句“我们上一次做了什么?”——如果 Claude 自动调用 mem-search 并给出摘要,说明记忆链路已贯通。
作者反射 / 踩坑提示
我第一次在 Windows PowerShell 执行时,第 2 步卡在 Node 版本检测。原因是系统里同时存在 16.x 与 18.x,Claude-Mem 的预钩子脚本只会取 PATH 第一个 node。把 18.x 提到最前即可,无需手动装 Bun,脚本会自动下。
二、架构拆解:5 个钩子、10 个接口、1 个查看器
核心问题:Claude-Mem 到底“钩”住了哪些环节,才把对话变成可检索数据?
一句话总结:它在 Claude Code 的 6 个生命周期里各插一脚,把原始对话、工具输出、人工反馈全部切片成“Observation”,再生成语义摘要,最后扔进 SQLite + Chroma 双数据库,提供自然语言查询。
2.1 生命周期钩子一览
“
6 个脚本里
PostToolUse被拆成“成功”与“异常”两支,所以实际是 5 个钩子、6 个脚本。
2.2 数据流示意(可对照本地日志)
graph TD
A[用户输入] -->|UserPromptSubmit| B[生成Observation]
B --> C[SQLite 存原始行]
C --> D[Chroma 向量化]
D --> E[等待查询]
E -->|自然语言| F[mem-search 接口]
F --> G[返回渐进式摘要]
2.3 10 个搜索接口速查表
作者反射 / 设计品味
渐进式披露是点睛之笔。第一次查询只回 500 token,确认相关性后再拉 1500 token,既省钱又避免信息轰炸。做工程的人才知道“省 token = 省真金白银”。
三、场景实战:把记忆系统用在“写 SDK、修 Bug、做 Code Review”
核心问题:记忆能力到底能帮我少做哪些重复工作?下面给你三个可照搬的剧本。
3.1 场景 A:跨会话写 SDK,接口命名不再前后不一致
背景
你在周一用 Claude 生成了 Node.js SDK 的 client.ts,定了接口前缀 create;周三重启后继续写,Claude 却建议用 new 前缀,导致风格分裂。
操作步骤
-
周一结束前问一句:“请把今天 SDK 的接口命名规则总结成 1 句话, 不要存。”
(用<private>避免敏感内容入库,但本地仍可见。) -
周三重启后先问:“我们之前定的 SDK 命名规则是什么?” -
Claude 自动调用 mem-search,把周一的总结片段拉回来,Token 消耗 < 200。
结果
前后两会话接口命名 100% 一致,无需人工再翻历史对话。
3.2 场景 B:修 Bug 时快速确认“有没有踩过同样的坑”
背景
运行 npm run dev 时报 EADDRINUSE,你隐约记得上周也修过。
操作步骤
-
直接问:“我们上次怎么解决端口被占用?” -
mem-search先搜到一条 Observation,类型标注为bug-fix,文件字段含package.json。 -
点击查看器 http://localhost:37777/id/xxx,发现当时把dev脚本端口从 3000 改成 3777,并加--if-present参数。
结果
30 秒复用旧方案,而不是重新 Google 再试错。
3.3 场景 C:Code Review 时让新人 5 分钟看懂“这段业务逻辑的来龙去脉”
背景
新人 Review PR 时发现 worker-service.ts 里有一段“看似多余”的防抖逻辑,不敢乱动。
操作步骤
-
在评论里 @claude并问:“防抖逻辑是什么时候引入的?解决什么问题?” -
Claude 调用 /search/files?file=worker-service.ts+/timeline/query。 -
返回 2025-01-03 的会话摘要:当时因 Redis 连接抖动导致重复消费,于是加 500 ms 防抖。 -
新人看完时间线后,确认“不能删,但可提优”,Review 通过。
结果
知识传递从“口耳相传”变成“自助搜索”,新人上手曲线缩短 70%。
四、安装细节与配置项:踩坑集中地
核心问题:官方 README 只给 3 条命令,实际落地还要补哪些缺口?
4.1 系统依赖对照表
4.2 配置文件模板(~/.claude-mem/settings.json)
{
"model": "claude-3-5-sonnet-20241022",
"workerPort": 37777,
"dataDir": "~/.claude-mem/data",
"logLevel": "info",
"contextInjection": {
"maxToken": 2048,
"strategy": "progressive"
},
"privacy": {
"excludeTags": ["private", "password"],
"maskPattern": "\\b\\d{4,}\\b"
}
}
常见调优
-
内网冲突可把 workerPort改成 47777; -
如果项目涉密,把 excludeTags再加一个confidential,任何带该标签的 Observation 会直接丢弃,不入库。
4.3 升级与回滚
五、性能与成本:Token 到底花在哪?
核心问题:记忆能力会不会把上下文撑爆,导致账单飙升?
一句话答案:渐进式披露 + 向量检索,把单次注入 token 压到 200-600,仅占一次普通问答的 10%-20%。
5.1 实测数据(项目 4 周、260 次会话)
5.2 省 token 小技巧
-
用 <private>排除大段日志,只留关键 5 行; -
把“已知事实”写成 1 句总结,别让整段代码入库; -
查询时先问“有没有”,确认需要再“展开详情”,避免拉全量。
六、隐私、安全与合规
核心问题:代码里混着密钥、用户地址,会不会一股脑被存?
Claude-Mem 默认不存 <private> 包裹的内容,同时支持正则脱敏。
若仍不放心,可给项目配独立 dataDir,起完会话即 rm -rf,实现“阅后即焚”。
6.1 隐私标签使用示例
用户:请把数据库连接串 <private>mysql://user:pass@127.0.0.1:3306/db</private> 写到 .env
该连接串不会进入任何搜索索引,但 Claude 在同一会话内仍可见,确保功能正确。
七、局限与未来路线
核心问题:哪些场景暂时别指望它?
-
跨项目记忆:目前一个 Claude Code 窗口 = 一个项目,切换文件夹就新开 DB; -
多媒体记忆:图片、音频只存路径,不向量化; -
多人协作:同一代码库若 A、B 两人各跑各的 Claude,记忆不互通(需自行合并 SQLite)。
官方路线图
-
v7:多项目联邦检索; -
v8:团队级共享记忆(加密同步); -
v9:插件市场“记忆包”——把常见框架的最佳实践做成可插拔记忆。
八、实用摘要 / 一页速览
-
装:3 行命令,2 分钟验证。 -
配:改端口、加隐私标签、调 token 上限。 -
用:自然语言问“上次做了什么”“是否修过某 bug”。 -
省:渐进式披露,token 成本 < 20%。 -
扩:Web 查看器、10 个搜索端点、Beta 无尽模式。
九、可检索 FAQ
-
Claude-Mem 支持 Windows 吗?
支持,但需保证 Node ≥ 18 且在 PATH 首位。 -
数据存在哪?能否迁移?
默认~/.claude-mem/data,拷走即可迁移,SQLite 单文件。 -
如何彻底清空记忆?
关闭 Claude Code → 删除 dataDir → 重启,即从零开始。 -
会不会把私钥存进去?
用<private>包裹或配excludeTags即可过滤。 -
查询返回太多怎么办?
先拿 500 token 摘要,确认相关后继续“展开”,避免一次拉满。 -
能和其他插件共存吗?
目前无冲突,但端口 37777 被占用时需手动改配置。 -
记忆有上限吗?
仅受磁盘限制,SQLite 单表百万级 Observation 无压力。 -
如何贡献代码或提需求?
到 GitHub 仓库开 Issue,官方模板已集成自动日志收集脚本。
图片来源:Unsplash

