用过 Claude Code 的人大概都经历过这种崩溃:昨天刚让它熟悉了整个项目的架构,今天开新会话,它又一脸茫然地问"这个项目用的什么框架?"——每次都要重新喂一遍上下文,像跟一个每天失忆的同事搭档。
thedotmack/claude-mem 就是冲着这个痛点来的。一个纯 TypeScript 写的"记忆插件",昨天还无人知晓,今天直接 +352 星杀进 GitHub 日榜前 5。
Claude Code 的记忆断层
Claude Code 本身是 Anthropic 官方的 CLI 编程助手,能力很强,但有一个结构性缺陷:会话之间没有持久记忆。每次 claude 启动都是一张白纸,之前聊过的项目约定、踩过的坑、你明确说过的偏好——全没了。
开发者常见的应对方式是手动维护 CLAUDE.md 文件,把项目规则写进去让 Claude Code 每次启动时读取。这能解决一部分问题,但维护成本高,而且它不会自动从交互中学习和积累。
claude-mem 的思路不同:它不是让你手动写规则文件,而是自动捕获并持久化交互中的关键信息,下次启动时自动注入上下文。
它大概怎么运作
根据项目定位和技术栈(TypeScript),claude-mem 的工作模式可以这样理解:
- 记录层——在每次 Claude Code 交互中,提取值得记住的信息:项目技术栈、你反复强调的编码偏好、已确认的架构决策、踩过的 bug 及解法。
- 存储层——把这些信息持久化到本地(大概率是 JSON/Markdown 文件,轻量且可读)。
- 注入层——下次 Claude Code 启动时,自动把累积的记忆作为上下文喂进去,省去重复说明。
本质上是在 CLI 和 LLM 之间加了一个"长期记忆中间件"。
快速上手试试
以下是基于 claude-mem 这类记忆插件思路的实践方式,具体参数以项目仓库 README 为准:
# 克隆并安装
git clone https://github.com/thedotmack/claude-mem.git
cd claude-mem
npm install
# 如果项目提供了全局安装方式,也可以直接
npm install -g claude-mem
安装后,核心一步是让 claude-mem 和 Claude Code 的启动流程挂钩。假设它通过配置文件指定记忆存储路径,可以这样设置:
# 在项目根目录初始化记忆配置
claude-mem init
# 这通常会在 ~/.claude-mem/ 或项目目录下生成配置文件
# 查看生成的配置
cat .claude-mem/config.json
配置文件可能类似这样(以下为示意结构,具体字段以实际项目为准):
{
"memoryStore": "./.claude-mem/memories.json",
"autoCapture": true,
"injectOnStart": true,
"categories": [
"project-stack",
"coding-preferences",
"bug-fixes",
"architecture-decisions"
]
}
然后正常启动 Claude Code,记忆插件会在后台工作:
# 启动 Claude Code(记忆插件自动挂钩)
claude
# 在交互中,你告诉它:
> "这个项目用 Next.js 14 + App Router,样式用 Tailwind,不要用 CSS modules"
# claude-mem 会自动把这条偏好记录下来
# 下次新会话启动时,它已经知道你的技术栈和样式偏好
如果你更倾向手动控制记忆的写入,也可以关闭自动捕获、用命令主动保存:
# 手动保存一条记忆
claude-mem save "数据库用 Prisma,不要裸写 SQL"
# 查看当前积累的所有记忆
claude-mem list
# 删除一条过时的记忆
claude-mem remove "旧架构决策:用 REST API"
自己造一个简易版:理解原理的最快路径
如果你想先不装插件、自己理解记忆注入的原理,最简方案就是程序化维护 CLAUDE.md。Claude Code 启动时会自动读取项目根目录的 CLAUDE.md,所以核心逻辑是:把交互中的重要结论自动追加到这个文件里。
一个极简的 Python 脚本演示这个思路:
#!/usr/bin/env python3
"""simple-mem.py: 极简版 Claude Code 记忆助手
把关键信息追加到项目的 CLAUDE.md,下次启动自动生效
"""
import sys
from datetime import datetime
MEMORY_FILE = "CLAUDE.md"
def add_memory(text: str, category: str = "general"):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M")
entry = f"\n## [{category}] {timestamp}\n- {text}\n"
with open(MEMORY_FILE, "a") as f:
f.write(entry)
print(f"✅ 已记录到 {MEMORY_FILE}: {text}")
def list_memories():
try:
with open(MEMORY_FILE, "r") as f:
print(f.read())
except FileNotFoundError:
print("暂无记忆文件,首次 add 会自动创建。")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("用法: python simple-mem.py add '你的记忆内容' --cat 项目偏好")
print("用法: python simple-mem.py list")
sys.exit(1)
cmd = sys.argv[1]
if cmd == "add":
text = sys.argv[2] if len(sys.argv) > 2 else ""
cat = "general"
if "--cat" in sys.argv:
cat = sys.argv[sys.argv.index("--cat") + 1]
add_memory(text, cat)
elif cmd == "list":
list_memories()
运行方式:
# 记录一条项目偏好
python simple-mem.py add "测试框架用 Vitest,不要 Jest" --cat 编码偏好
# 记录一个踩坑经验
python simple-mem.py add "Prisma generate 前必须确保 schema.prisma 无语法错误" --cat bug-fixes
# 查看所有记忆
python simple-mem.py list
# 下次启动 claude,它会自动读取更新后的 CLAUDE.md
claude
这个脚本粗糙但管用——它揭示了 claude-mem 这类插件的核心价值:不是存储本身有多复杂,而是"自动捕获 + 自动注入"这个闭环。手动写 CLAUDE.md 能达到同样效果,但人总是懒的,自动化才是让它真正可依赖的关键。
装不装?什么时候最有价值
claude-mem 目前还是早期项目(一天 352 星说明热度高,但生产稳定性待验证),适合这几类人先试:
- 长期维护单体项目的人——项目约定多、架构决策频繁,每次重新说明成本高。
- 多项目切换的独立开发者——在不同项目间跳转时,记忆插件帮你快速恢复上下文。
- 团队共享编码规范——如果记忆文件可以提交到 Git,全团队的 Claude Code 都能读取同一套偏好。
需要注意的边界:
- 记忆文件会随时间膨胀,可能需要定期清理过时条目,否则注入的上下文反而干扰判断。
- 涉及敏感信息(API key、内部架构细节)时,注意记忆文件的访问权限,别把
.claude-mem/目录意外提交到公开仓库。 - 记忆注入是"软影响"——LLM 可能仍然忽略注入的偏好,这不是硬约束,更像是强烈提示。
一个简单的 .gitignore 保护:
# 如果记忆文件含敏感内容,不要提交
echo ".claude-mem/" >> .gitignore
# 如果记忆文件是团队共享的编码规范,则可以提交
# 但要 review 内容,确保没有敏感信息
AI 编程助手的能力边界正在快速推移,但"记不住之前说过什么"这个缺陷一直卡在日常体验的咽喉上。claude-mem 的思路不复杂——在会话间隙加一层持久化——但恰好打中了最疼的地方。值得装上玩几天,看看你的 Claude Code 是否终于不用每天重新认识你的项目了。