开源 Claude Code 自动记忆管理插件 Claude-Mem 完整上手攻略

用过 Claude Code 的朋友应该都有过这种经历:每次关闭终端或断开连接后,下次再打开项目时,Claude 就像失忆了一样,完全不记得之前的对话内容。你的项目架构、最近的代码重构决策、调试时发现的问题、以及各种设计模式,统统都得重新解释一遍。这不仅消耗了大量 token,更打断了开发思路的连续性。

目前开发者们通常会通过手动维护 CLAUDE.md 文件、在单独的文档里记笔记、或者在每次会话开始时重新介绍项目上下文来应对这个问题。但这些方法都很脆弱、耗时,而且永远无法完整捕捉开发历史的全貌。

Claude-mem 正是为了解决这一问题而设计的。它能够自动捕获每次会话中的工具调用结果,将其压缩成语义化的记忆摘要,并在后续会话中智能注入相关上下文。

什么是 Claude-mem

Claude-mem 是一个开源的 Claude Code 插件,用来解决跨会话上下文丢失的问题。它会自动记录工具调用中的关键信息,将其压缩成语义摘要,并在后续会话中按需提供,从而让项目相关的上下文得以持续保留。

简单来说,它让 Claude 在会话结束或重新连接后,仍然「记得」你正在做什么。

核心能力

  • 自动记录:无需人工介入,所有工具调用的关键信息都会被自动捕获
  • 语义压缩:将上千 token 的原始输出压缩为约 500 token 的可复用摘要
  • 按需检索:通过 MCP 工具实现三层渐进式检索,减少不必要的上下文加载
  • 目录级上下文:为项目目录自动生成并维护 CLAUDE.md
  • 隐私保护:支持使用 标签隔离敏感内容

官方数据显示,相比手动维护上下文,这套机制在单个会话中可节省约 2,250 个 token,整体效率提升接近一个数量级。

核心架构设计

Claude-mem 的核心是一套持久化的记忆压缩机制。它直接接入 Claude Code 的执行流程,自动收集工具调用产生的结果,并通过 Claude Agent SDK 将大量上下文整理成精炼、可检索的语义记录。

这些记录会按决策、修复、功能等类型归类,同时关联相关文件和概念,最终存储在支持全文搜索的本地 SQLite 数据库中,用于跨会话恢复上下文。

核心组件

  • 生命周期钩子(共 6 个脚本)SessionStartUserPromptSubmitPostToolUseStopSessionEnd
  • 智能安装:缓存依赖检查器(前置钩子脚本,不属于生命周期钩子)
  • Worker 服务:运行在端口 37777 的 HTTP API,包含 Web 查看器 UI 和 10 个搜索端点,由 Bun 管理
  • SQLite 数据库:存储会话记录、观察结果和摘要
  • mem-search 技能:支持渐进式自然语言查询
  • Chroma 向量数据库:结合语义搜索与关键词搜索,用于智能上下文检索

工作原理

┌─────────────────────────────────────────────────────────────┐
│ Session Start → Inject context from last 10 sessions        │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│ User Prompts → Create session, save user prompts            │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│ Tool Executions → Capture observations (Read, Write, etc.)  │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│ Worker Processes → Extract learnings via Claude Agent SDK   │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│ Session Ends → Generate summary, ready for next session     │
└─────────────────────────────────────────────────────────────┘

系统会在五个关键节点自动记录上下文,用来支撑跨会话记忆:

Hook 名称触发时机作用
SessionStart会话开始注入之前会话中相关的上下文信息
UserPromptSubmit用户提交指令记录查询内容,用于后续模式分析
PostToolUse工具调用完成捕获工具执行过程及输出结果
StopClaude 完成响应汇总当前会话,生成摘要
SessionEnd会话结束持久化存储数据并执行清理

压缩机制

一次工具调用的原始输出通常在 1,000–10,000 token 之间。Claude-mem 会通过 Claude Agent SDK,将这些内容压缩为约 500 token 的语义化记录,用于后续检索和复用。

核心优势

这套架构采用的是渐进式披露思路,通过分层的记忆检索,在上下文覆盖范围和 token 成本之间取得平衡。

系统不会一次性加载全部历史信息,而是根据当前任务逐层取用真正相关的内容,这也是它能显著降低 token 消耗的关键原因。

快速上手指南

系统要求

  • Node.js:18.0.0 或更高版本
  • Claude Code:支持插件的最新版本
  • Bun:JavaScript 运行时与进程管理器(如缺失会自动安装)
  • SQLite 3:用于持久化存储(已内置,无需额外安装)

方式一:插件市场(推荐)

这是最简单的方式,直接从市场安装

# 从插件市场添加
/plugin marketplace add thedotmack/claude-mem

# 安装插件
/plugin install claude-mem

安装完成后,重启 Claude Code 即可生效。

插件会自动完成以下工作:

  • 下载并配置预编译的二进制文件
  • 安装所需依赖(包括 Bun 和 SQLite)
  • 注册会话生命周期相关的钩子
  • 在首次会话启动时拉起 Worker 服务

方式二:从源码构建

如果你需要开发测试或者使用 beta 功能,可以直接从 GitHub 源码构建:

# 克隆仓库
git clone https://github.com/thedotmack/claude-mem.git
cd claude-mem

# 安装依赖
npm install

# 构建项目
npm run build

# 启动 Worker 服务
npm run worker:start

这种方式让你可以直接修改代码,或者使用一些官方还没推正式版的新特性。

验证安装

安装完成后,可通过以下步骤确认系统是否正常运行:

检查插件状态

cat plugin/hooks/hooks.json

确认 Worker 服务运行

curl http://localhost:37777/api/health

查看 Worker 日志

npm run worker:logs

测试上下文注入

启动一个新的 Claude Code 会话,你应该能看到初始提示中自动加载了来自之前会话的上下文信息。

数据存储与配置

存储位置

Claude-mem 的所有数据都存储在本地 ~/.claude-mem/ 目录中:

文件/目录用途
claude-mem.dbSQLite 数据库(支持 FTS5 全文搜索)
.worker.pidWorker 进程 ID 文件
.worker.portWorker 端口文件
logs/日志文件目录
settings.json配置文件

自定义数据目录

如果想改变默认数据存储位置,可以通过环境变量设置:

export CLAUDE_MEM_DATA_DIR=/custom/path

关键配置项

主要配置存放在 ~/.claude-mem/settings.json

  • CLAUDE_MEM_CONTEXT_OBSERVATIONS:会话开始时注入的观察记录数量,默认值为 50
  • CLAUDE_MEM_FOLDER_INDEX_ENABLED:是否启用文件夹级 CLAUDE.md 的自动生成

MCP 记忆搜索工具

Claude-mem 通过 MCP(Model Context Protocol) 提供了四个搜索工具,采用三层渐进式检索,在尽量节省 token 的同时保证检索相关性。

三层检索流程

1. search:获取紧凑索引(含 ID)
           ↓ ~50-100 token/结果
2. timeline:获取特定观察的时间上下文
           ↓ 了解前后关联
3. get_observations:获取筛选后的完整观察详情
           ↓ ~500-1,000 token/结果

第一层:搜索(索引)

首先执行搜索,获取轻量级索引结果:

search(query="authentication bug", type="bugfix", limit=10)
  • 返回内容:ID、标题、日期、类型的精简表格
  • 成本:每条结果约 50–100 token
  • 目的:快速概览相关观察内容,在获取详情前筛选目标

第二层:时间线(上下文)

在获取索引后,可以查看特定观察的前后事件:

timeline(anchor=, depth_before=3, depth_after=3)

或者结合搜索直接生成时间线:

timeline(query="authentication", depth_before=2, depth_after=2)
  • 返回内容:展示选中观察及其前后事件的时序视图
  • 成本:根据 depth_before 和 depth_after 参数而定
  • 目的:理解事件前后脉络,便于判断因果关系和逻辑顺序

第三层:获取观察结果(详情)

在筛选到目标 ID 后,可以获取完整的观察记录:

get_observations(ids=[123, 456, 789])
  • 返回内容:每条观察的完整详情,包括叙述、事实、涉及文件和相关概念
  • 成本:每条观察约 500–1,000 token
  • 目的:深入分析特定的、经过验证的观察记录

这种「先索引再获取详情」的策略,相比直接拉取完整记录,可以节省约 10 倍的 token

可用 MCP 工具

  1. search:全文索引搜索,支持按类型、日期、项目过滤,是所有查询的起点。
  2. timeline:获取时间上下文,了解某条决策或 bug 修复的前因后果。
  3. get_observations:批量获取完整详情,建议一次传入多个 ID,以降低开销。
  4. __IMPORTANT:工作流文档,对 Claude 可见,指导如何高效使用记忆系统。

实战场景演示

场景一:找出数据库连接出错的原因

# 步骤一:搜索相关修复记录
search(query="error database connection", type="bugfix", limit=10)
# → 查看索引,识别可能相关的观察结果 #245、#312、#489

# 步骤二:查看时间上下文
timeline(anchor=312, depth_before=3, depth_after=3)
# → 理解修复 #312 前后发生的事件顺序

# 步骤三:获取完整观察详情
get_observations(ids=[312, 489])
# → 获取相关修复的完整内容,包括叙述、事实、涉及文件和概念

场景二:审查有关身份验证的架构选择

# 步骤一:搜索相关决策记录
search(query="authentication", type="decision", limit=5)
# → 查找身份验证相关的决策观察结果

# 步骤二:获取完整观察详情
get_observations(ids=[])
# → 获取完整决策依据、权衡考虑以及相关事实

场景三:查找特定文件的修改细节

# 步骤一:搜索提及该文件的观察记录
search(query="worker-service.ts", limit=20)
# → 返回所有与该文件相关的观察结果

# 步骤二:查看时间上下文
timeline(query="worker-service.ts refactor", depth_before=2, depth_after=2)
# → 查看重构前后发生的事件

# 步骤三:获取完整观察详情
get_observations(ids=[])
# → 获取文件修改和重构的详细信息

自然语言查询

你不需要记住任何具体命令,直接用自然语言提问:

  • “我们之前是如何处理错误的?”
  • “身份验证功能是怎么实现的?”
  • “API 层修复了哪些 Bug?”
  • “显示数据库架构的所有变更”

系统会自动调用合适的 MCP 工具查找相关上下文,并在结果中附上 claude-mem:// URI,直接指向对应的记录。

上下文捕获与处理机制

自动化捕获流程

在启用 Claude-mem 的情况下使用 Claude Code 时,系统会自动记录每一次工具调用。无论是读取文件、执行 bash 命令、使用 glob 搜索,还是修改代码,相关的输入和输出都会被捕获并处理。

提取的语义信息

Worker 服务会对捕获到的观察记录进行处理,并提取以下语义字段:

字段说明
Title事件的简要描述
Subtitle补充的背景信息
Narrative对操作过程的详细描述
Facts关键结论与要点(列表形式)
Concepts相关标签与分类
Type记录类型(decision、bugfix、feature、refactor、discovery、change)
Files涉及的文件(读取或修改)

整个压缩过程完全自动完成。原始工具输出可能包含数千个 token,但最终存储的语义记录通常只有约 500 个 token,在保留关键信息的同时去除了无关细节。

会话摘要生成

当 Claude 完成一次响应(触发 Stop Hook)时,Claude-mem 会自动生成一份会话摘要,主要包含:

  • Request:本次会话的用户请求
  • Investigated:过程中探索和分析的内容
  • Learned:得到的关键结论或经验
  • Completed:已完成的工作
  • Next Steps:建议的后续行动

这些摘要会与具体的观察记录一起注入到后续会话中,用于在保留细节的同时,快速恢复整体上下文。

自动生成文件夹上下文文件

Claude-mem 会在项目文件夹中自动生成 CLAUDE.md 文件,为该文件夹创建与全局记忆数据库互补的活动时间线

工作原理

当你操作某个文件夹中的文件时,Claude-mem 会执行以下流程:

  1. 识别文件夹路径:确定被访问文件所属的唯一文件夹
  2. 查询观察记录:获取与该文件夹相关的最近观察记录
  3. 生成时间线:将观察记录整理为格式化的活动时间线
  4. 写入 CLAUDE.md:将时间线写入文件夹下的 CLAUDE.md,并使用 标签包裹

每个文件夹的 CLAUDE.md 包含一个「最近活动」部分,显示观察 ID、时间戳、类型指示器(bug 修复、功能、发现)、简要标题和预估 token 数量。

用户内容保留机制

自动生成的内容会被包裹在 标签中。你在这些标签之外添加的内容会在文件重新生成时被保留

这让你可以:

  • 在生成内容的上方或下方添加自己的文档
  • 编写针对 Claude 的文件夹特定指令
  • 包含架构注释或项目约定

示例 CLAUDE.md 结构

# Authentication Module

This folder contains all authentication-related code.
Follow the established patterns for new auth providers.

<claude-mem-context>
# Recent Activity

| ID | Time | Type | Title | Tokens |
|----|------|------|-------|--------|
| #1234 | 4:30 PM | 🔵 | Implemented user authentication | ~250 |
| #1235 | 4:45 PM | 🔴 | Fixed login redirect bug | ~180 |
claude-mem-context>

## Manual Notes

- OAuth providers go in /providers/
- Session handling uses Redis

隐私控制与安全

Claude-mem 提供细粒度的隐私控制,防止敏感数据被存入记忆系统。

Private 内容标签

使用 标签包裹的内容不会被写入存储系统,例如:

<private>
API_KEY=sk-live-abc123xyz789
DATABASE_PASSWORD=supersecret456
private>

系统会在处理阶段直接忽略这些内容,确保敏感信息不会进入数据库。这一机制主要用于保护 API 密钥、访问凭据以及其他不应被记录的实现细节。

双重标签隐私系统

Claude-mem 采用双重标签机制来保护敏感信息和系统内容:

标签类型用途
<private>用户控制保护敏感内容
<claude-mem-context>系统级别防止重复存储

Web 监控界面

Claude-mem 提供一个 Web 查看器,运行在 http://localhost:37777,用于实时可视化记忆流。

界面功能包括:

  • 实时观察流:通过 emoji 指示器显示事件的重要性
  • 会话时间线:按时间顺序显示操作和观察记录
  • 搜索界面:快速查询记忆记录
  • 设置面板:调整配置选项
  • 版本切换:在稳定版和 beta 版本之间切换

提示:该 UI 对基本使用不是必需的,但对于理解 Claude-mem 捕获的内容和整理开发历史非常有帮助。

测试版功能:无尽模式(Endless Mode)

测试版通道提供无尽模式,这是一种用于延长会话的仿生记忆架构。

  • 容量提升:不再在约 50 次工具调用后触及上下文限制,支持约 1,000 次工具使用 —— 相当于 20 倍增长
  • 技术实现:通过实时压缩工具输出,将 token 使用量减少约 95%,并将扩展复杂度从 O(N²) 降低到 O(N)

权衡

  • 每次工具调用生成观察记录会增加 60-90 秒 的延迟
  • 对于跨越数天或数周的深度编码会话,这种延迟通常可接受
  • 对于快速连续的工具使用,延迟可能成为瓶颈

启用方法

通过 Web 查看器访问 http://localhost:37777 → 设置 → 版本频道,切换到测试版以启用无尽模式

故障排查指南

Worker 服务无法启动

工作进程在端口 37777 上启动失败:

# 检查端口占用
lsof -i :37777

# 配置备用端口
export CLAUDE_MEM_WORKER_PORT=8080

# 手动启动 Worker
bun plugin/scripts/worker-service.cjs

记忆无法保存

如果 Claude 不记得之前的会话:

# 验证 Worker 运行
npm run worker:status

# 检查数据库文件
ls -la ~/.claude-mem/claude-mem.db

# 查看错误日志
npm run worker:logs

上下文注入问题

如果会话开始时出现上下文过多或过少的情况,可以通过调整观察结果(Observation)的限制来解决。

export CLAUDE_MEM_CONTEXT_OBSERVATIONS=10  # 减少
export CLAUDE_MEM_CONTEXT_OBSERVATIONS=100 # 增加

空 CLAUDE.md 文件

这是 v9.0.5 的已知问题。临时解决方案:手动删除创建的目录、在 .gitignore 中添加模式,或等待后续版本修复。

总结

Claude-mem 让 Claude Code 从一个无状态的辅助工具,转变为能够长期协作的开发伙伴。它会在使用过程中持续积累对代码库的理解,而不是在每次会话中重新开始。

通过自动捕获工具调用、将关键信息压缩为可搜索的记忆,并在需要时按需检索相关上下文,Claude-mem 有效减少了重复解释背景所带来的时间和 token 开销。

基于分层检索的 MCP 工具、按目录生成的 CLAUDE.md 以及明确的隐私边界,这套渐进式上下文机制在完全本地、可控的前提下,相比手动管理上下文,实现了约一个数量级的 token 效率提升。

Github 地址https://github.com/thedotmack/claude-mem

既然看到这里了,如果觉得有启发,随手点个赞、推荐、转发三连吧,你的支持是我持续分享干货的动力。