1. 每次重开 Claude Code 都要重新讲一遍项目问题到底出在哪Claude Code 跨会话记忆丢失是很多人用下来最烦的一件事。你昨天花了一下午把 auth 模块的 token 刷新逻辑从 JWT 换成 Redis 缓存中间踩了外键约束、连接超时好几个坑好不容易跑通。今天早上打开终端Claude 一脸茫然你的项目用什么框架、上次改到哪、为什么放弃 JWT全都要从头讲。项目小的时候忍忍就过去了项目一大光是复述背景就够写一篇小作文。这个问题的本质是Claude Code 的会话是无状态的。每个 session 启动时它只读你项目里的CLAUDE.md和当前打开的文件不会记得上一个 session 里发生过什么。CLAUDE.md是你手写的静态说明管的是这个项目用 Next.js 15 Prisma PostgreSQL这种宏观信息它不会自动更新你昨天把 Redis 换成 Upstash 这种细节它根本不知道。claude-mem 就是补这个缺口的。它在 Claude Code 运行时挂上几个生命周期 Hook自动记录你做了什么、改了哪些文件、踩了什么坑生成摘要存到本地 SQLite下次开 session 时把相关上下文自动注入回去。配合 TaoToken 统一 Key 和 API 通道你只需要配一次settings.json之后跨会话记忆和模型调用都走同一条链路不用每次重新解释项目也不用在多个 Key 之间来回切。这篇就按装 claude-mem → 配 TaoToken → 写 settings.json → 验证记忆生效 → 排错的顺序走一遍配置片段可以直接复制。2. 前置准备TaoToken 通道与 claude-mem 的安装先说 TaoToken 这一层。它的作用是给你一个统一的 API 入口Claude Code 和 claude-mem 的 worker 都通过它来调模型Key 只维护一份。官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个地址不加 UTM 参数配置里直接写它。你需要先去控制台拿一个 API Key。打开 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 登录后在 API Keys 页面创建一个新 Key复制出来备用。这个 Key 后面会同时填进 Claude Code 的模型配置和 claude-mem 的 worker 环境变量里做到一份 Key 两处用。claude-mem 的安装本身很简单在 Claude Code 终端里两行命令/plugin marketplace add thedotmack/claude-mem /plugin install claude-mem装完重启 Claude Code。前提条件有三个Node.js 18 以上、Bunclaude-mem 的 worker 用 Bun 跑、Claude Code 版本要支持 plugin 机制。Bun 没装的话去官网按系统装一下macOS/Linux 一行curl -fsSL https://bun.sh/install | bash就行。装好后打开http://localhost:37777能看到 Web 界面就说明 worker 在跑。这个端口后面如果被占配置里可以改。3. 可复制的 settings.json 骨架把 claude-mem 和 TaoToken 接起来这一步是核心。Claude Code 的配置放在~/.claude/settings.jsonclaude-mem 的 worker 配置通过环境变量注入。我们要做的是让两边都指向 TaoToken 的 API 通道Key 只写一份。先看~/.claude/settings.json的骨架可以直接复制改{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的TaoToken密钥, CLAUDE_MEM_PORT: 37777, CLAUDE_MEM_MAX_CONTEXT_TOKENS: 2000, CLAUDE_MEM_EXCLUDE_PATTERNS: .env,secrets/*,*.key }, plugins: { claude-mem: { enabled: true, worker: { apiBase: https://taotoken.net/api, apiKeyEnv: ANTHROPIC_API_KEY } } } }几个字段说明一下。ANTHROPIC_BASE_URL指向 TaoToken 的 API 基址Claude Code 的所有模型请求都走这里。ANTHROPIC_API_KEY填你刚才在控制台创建的 Key。CLAUDE_MEM_PORT是 worker 端口默认 37777被占就改。CLAUDE_MEM_MAX_CONTEXT_TOKENS控制每次 SessionStart 注入的历史上下文上限默认偏大项目跑几天后能到好几千 token建议先设 2000 再按体感调。CLAUDE_MEM_EXCLUDE_PATTERNS排除敏感文件避免.env、密钥文件被记进 SQLite。plugins.claude-mem.worker这一段是关键它让 claude-mem 的 worker 复用ANTHROPIC_API_KEY这个环境变量也就是和 Claude Code 用同一个 TaoToken Key。这样你换 Key 只改一处两边同时生效。如果你更习惯用环境变量而不是写进 settings.json等价写法是在 shell 的~/.zshrc或~/.bashrc里export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的TaoToken密钥 export CLAUDE_MEM_MAX_CONTEXT_TOKENS2000 export CLAUDE_MEM_PORT37777 export CLAUDE_MEM_EXCLUDE_PATTERNS.env,secrets/*,*.key两种方式选一种就行别同时配否则排查起来容易懵。settings.json 的好处是跟着项目走、可提交到团队仓库Key 记得用占位符或走本地覆盖。4. 验证跨会话记忆是否真的生效配完别急着写业务代码先花五分钟验证记忆链路通不通。分三步。第一步确认 worker 活着。打开http://localhost:37777能看到 claude-mem 的 Web 界面说明 worker 正常。如果打不开看第 5 节的端口排查。第二步制造一段可被记住的操作。开一个新的 Claude Code session让它做一件有明确痕迹的事比如# 在 Claude Code 里输入 帮我在项目里新建一个 utils/cache.ts用 Redis 做一层简单的缓存封装key 前缀用 app:Claude 会读文件、写文件、可能跑一下类型检查。这些动作会被 claude-mem 的PostToolUseHook 捕获记录成观察结果。等它回复完StopHook 触发session 结束时SessionEnd生成摘要写进~/.claude-mem/下的 SQLite。第三步关掉终端重新开一个 session问它# 新 session 里输入 我上次在缓存这块做了什么如果 claude-mem 正常工作SessionStartHook 会把相关历史注入进去Claude 应该能说出你上次新建了 utils/cache.ts用 Redis 做了缓存封装key 前缀是 app:。能答上来说明跨会话记忆生效了。想更精确地查用 claude-mem 提供的 MCP 搜索工具官方推荐三层渐进式省 token# 第一层search返回精简索引每条 50-100 token search(querycache redis, typefeature, limit10) # 第二层timeline看某条记录前后发生了什么 timeline(querycache redis, around_id123) # 第三层get_observations拉完整内容每条 500-1000 token get_observations(ids[123, 456])先看索引再挑详情比一上来拉全部历史省大概 10 倍 token。这也是为什么CLAUDE_MEM_MAX_CONTEXT_TOKENS值得调——注入太多反而稀释了相关性。5. 本篇常见错排查worker 起不来37777 端口被占。报错信息通常不明确先查端口# macOS/Linux lsof -i :37777 # 找到 PID 后杀掉 kill -9 PID或者直接在 settings.json 里把CLAUDE_MEM_PORT改成 37778重启 Claude Code。SessionStart 注入的上下文太多token 爆了。项目跑几天后历史积累很快默认上限偏大。把CLAUDE_MEM_MAX_CONTEXT_TOKENS调到 1500-2000观察几次 session 的体感再微调。如果还是多用CLAUDE_MEM_EXCLUDE_PATTERNS把日志、构建产物目录排除掉。记忆相关性不准写前端却注入了后端的记忆。这是向量搜索的常见问题语义相近但场景不同。缓解办法是在提问时带上更具体的限定词比如前端组件这块我上次做了什么让 search 的 query 更聚焦。另外定期清理过老的记忆也有帮助~/.claude-mem/下的 SQLite 可以按时间筛。改了 TaoToken Key 但 claude-mem 还在用旧的。如果你把 Key 写在 settings.json 的env里改完要重启 Claude Codeworker 才会重新读环境变量。如果写在 shell rc 文件里改完要source ~/.zshrc再重启。两边都配了的话settings.json 的优先级更高容易造成改了没生效的错觉。API 请求 401 或连不上。先确认ANTHROPIC_BASE_URL写的是https://taotoken.net/api没有多余斜杠或路径。再确认 Key 没复制错、没过期。可以在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 重新生成一个 Key 换上试试。接入细节和参数说明看 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。6. 配好之后长期编码怎么用得更顺一次配置、长期复用关键在两点Key 只维护一份记忆自动积累。日常开发里Claude Code 的模型调用走 TaoToken 通道claude-mem 的 worker 复用同一个 Key你换 Key 只改settings.json里那一行。跨会话记忆这块claude-mem 在后台默默记笔记SessionStart注入、UserPromptSubmit记录、PostToolUse捕获工具调用、Stop和SessionEnd收尾五个 Hook 各管一段你不用手动干预。如果你主要用 Claude Code 做长期编码或者跑 Agent 类任务可以看下 Coding Plan把模型调用和记忆链路一起规划https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。想先单独验证模型对话通不通用模型对话页面快速试一条https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 。最后提醒一句CLAUDE.md和 claude-mem 是两回事别互相替代。CLAUDE.md管宏观的、不常变的项目说明claude-mem 管细节和变化。两个配合用Claude Code 才既知道你的项目是什么也知道你昨天干到哪了。
