1. 为什么你的 Claude Code 每次开新会话都像失忆
你有没有过这种体验:上周花了一整个下午定位的那个登录超时 bug,今天想复用当时的修复思路,结果翻 Git log 只看到一句「fix login timeout」,翻聊天记录又不知道当时是在哪个群聊的。最后只能重新读一遍代码,重新推理一遍。这不是你记性差,是 Claude Code 默认的会话机制决定的——每个新会话都是白纸一张,上下文窗口一关,之前聊过的架构决策、踩过的坑、试过但放弃的方案,全部清零。
这个问题的本质是:大模型的「记忆」和「上下文」是两回事。上下文窗口再大,也只覆盖当前这一次会话;会话结束,token 释放,信息就没了。而开发者真正需要的是跨会话的持久记忆——我三个月前为什么选 Redis 而不是 Memcached,我上个月修过哪些认证相关的 bug,我上周到底推进了哪几件事。这些信息散落在 commit、聊天记录、邮件里,检索成本极高。
Claude Code 的文档 Skill 体系里,mem-search 就是专门解决这件事的。它不是让你手动维护一个笔记文件,而是在后台持续记录你的工作内容,然后提供一套三层检索工作流:搜索(Search)→ 时间线(Timeline)→ 获取详情(Fetch)。你不需要主动保存任何东西,AI 自动把每个会话里的 bug 修复、功能开发、架构决策记下来,之后用关键词就能秒级召回。
这篇文章面向的是已经在用 Claude Code 做日常开发、但还没把记忆能力跑通的开发者。我会把 mem-search 的配置片段、验证步骤、以及我实际踩过的几个报错都写清楚,你照着做就能在自己的工作流里落地跨会话记忆。核心检索词就是 Claude Code、Skill、mem-search、跨会话记忆,这几个词后面会反复出现,因为它们对应的正是你要配置和验证的东西。
先说清楚 mem-search 能做什么、适合谁。它适合三类人:一是项目周期长、决策多的开发者,需要回溯「当时为什么这么设计」;二是同时维护多个项目的人,需要按 project 过滤记忆;三是经常和 AI 协作、希望 AI 记住自己工作习惯的人。它不适合的场景也很明确:如果你只是偶尔跑个一次性脚本,那记忆系统带来的收益有限,反而多一层配置成本。
mem-search 的三层工作流设计得很克制,这是它比「把所有历史塞进上下文」聪明的地方。第一层 Search 只返回摘要级结果,每条约 50 到 100 tokens,包含 ID、标题、类型、时间戳。你一次搜 20 条,也就花 500 tokens 左右,不会把上下文撑爆。第二层 Timeline 以某条记录为锚点,向前向后各展开几条,把观察记录、会话、提示词按时间交错排列,还原「这个 bug 是怎么发现的、怎么修的、修完又做了什么」。第三层 Fetch 才真正拉全文,而且支持批量,一次请求拿多个 ID 的详情。
这个分层的关键价值在 token 节省上。直接拉 20 条全文大概要 20000 tokens,而 Search 浏览 20 条摘要只要 500 tokens,筛出 3 条相关的再 Fetch 也就 3000 tokens 左右,整体省下大约 83%。在大上下文场景下,这个差距直接决定你还能不能在同一会话里继续干活。我实测下来,最舒服的节奏就是先 Search 定位、再 Timeline 看上下文、最后 Fetch 拿细节,三步走完基本不用重读代码。
2. TaoToken 前置:把 Base URL、Key、Model ID 三件套配好
在讲 mem-search 的具体配置之前,得先把运行环境搭好。Claude Code 本身要能正常调用模型,mem-search 才有意义。这里我用 TaoToken 作为接入层来演示,因为它对 Claude Code 的兼容做得比较直接,Base URL、API Key、Model ID 三件套配好就能跑。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数,配置的时候别把查询串带进去。
先说清楚为什么要用接入层。Claude Code 默认走官方端点,但很多开发者的网络环境、计费方式、或者团队统一管理需求,会希望走一个可控的 API 网关。TaoToken 在这里扮演的就是这个角色:它提供兼容 Anthropic 协议的接口,你把 Claude Code 的请求指向它,模型调用、Key 管理、用量查看都在一个控制台里完成。这不是「中转」意义上的灰色操作,而是一个正常的 API 服务接入,配置方式和任何兼容端点一致。
三件套具体是什么:Base URL 填 https://taotoken.net/api ,API Key 在控制台的 API Keys 页面生成,Model ID 填你要用的 Claude 模型标识。这三个值缺一不可,而且必须成对出现——只改 Base URL 不改 Key,会直接 401;Key 对了但 Model ID 写错,会报模型不存在或者 reading choices 之类的解析错误。我见过最常见的翻车就是只配了 Base URL,以为能复用官方 Key,结果请求全挂。
配置的落点有两个地方,取决于你用哪种方式跑 Claude Code。如果你用的是 Claude Code CLI,配置写在 settings 文件里;如果你用的是 Cline、CC Switch 这类带 MCP 的客户端,配置写在对应的 MCP 或 provider 配置里。下面两节我会分别给出可复制的片段。这里先强调一个原则:Base URL、Key、Model ID 这三件套在任何一种配置里都要写全,不能只写其中一两个然后指望客户端自动补全。
还有一个前置动作是确认 claude-mem 已经就绪。mem-search 是 Claude Code 文档 Skill 体系里的原生能力,不需要你额外装一个独立 Skill 包,但它依赖 claude-mem 这个记忆层在后台运行。你可以先在会话里直接问一句「帮我找一下上次修过的登录超时 bug」,如果 AI 能自动触发 mem-search 的三层工作流并返回结果,说明记忆层是通的;如果它回复说没有相关记录或者根本没调用检索,那就要回头检查 claude-mem 的配置。
关于 Key 的获取,路径是控制台的 API Keys 页面,生成后复制保存,因为它只显示一次。模型对话的入口在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,这两个链接后面 CTA 部分还会用到。如果你打算长期用 Claude Code 做编码和 Agent 任务,Coding Plan 页面 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 值得看一眼,它针对的就是这种持续编码场景。
配好三件套之后,先别急着上 mem-search,先用一个最简单的请求验证模型通道是通的。这一步能帮你把「接入层问题」和「记忆层问题」分开,不然出了错你不知道是 Key 配错了还是 mem-search 没生效。验证方法下一节会给具体命令。
3. 可复制配置:settings 与 MCP 两种落点
这一节是全文最需要你动手的部分。我把两种常见配置方式的完整片段都写出来,你按自己用的客户端选一种。所有片段里的 Base URL、Key、Model ID 三件套都写全了,直接替换成你自己的值就能用。
先说 Claude Code CLI 的 settings 配置。Claude Code 读取的配置文件通常在用户目录下的.claude/settings.json,如果你用的是项目级配置,则在项目根目录的.claude/settings.json。内容结构如下:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" }, "permissions": { "allow": [ "Bash", "Read", "Write", "Edit" ] } }这里三个环境变量的作用要分清楚:ANTHROPIC_BASE_URL指向 TaoToken 的 API 地址,注意结尾不要带斜杠,也不要带任何查询参数;ANTHROPIC_API_KEY填你在控制台生成的 Key;ANTHROPIC_MODEL填你要用的模型 ID。Model ID 必须和 TaoToken 支持的模型列表一致,写错了会直接报模型不存在。我建议第一次配置时先用一个你确定可用的模型 ID,跑通之后再换。
如果你用的是 Cline 或者带 MCP 的客户端,配置落在 MCP provider 那一块。以 Cline 的 MCP 配置为例,结构大致是这样:
{ "mcpServers": { "claude-mem": { "command": "npx", "args": ["-y", "claude-mem"], "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } } } }注意这里的env块同样要把三件套写全。MCP 客户端在启动 claude-mem 这个 server 时,会把这些环境变量传进去,claude-mem 再用它们去调用模型。如果你只写了 Base URL 没写 Key,claude-mem 启动时不会报错,但第一次检索请求会返回 401,这个坑我在第五节会详细讲。
如果你用的是 CC Switch 这类切换工具,配置思路是一样的,只是落点不同。CC Switch 的配置文件通常在~/.cc-switch/config.json,里面按 provider 分组,每个 provider 里写 Base URL、Key、Model ID。片段如下:
{ "providers": [ { "name": "taotoken", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "model": "claude-sonnet-4-20250514" } ], "active": "taotoken" }CC Switch 的好处是可以在多个 provider 之间切换,比如你同时有官方端点和 TaoToken,可以配两组,用active字段决定当前走哪个。但要注意,切换 provider 之后,mem-search 的记忆库不会跟着切换——记忆是按项目和工作内容记录的,不是按 provider 隔离的。这一点在设计工作流时要想清楚。
还有一种情况是用 Codex 的 auth.json。如果你在 Claude Code 之外还用 Codex 做辅助,auth.json 里的配置结构是这样的:
{ "openai": { "baseURL": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "model": "claude-sonnet-4-20250514" } }这里字段名是baseURL和apiKey,和 Claude Code 的ANTHROPIC_BASE_URL、ANTHROPIC_API_KEY不一样,别混用。Codex 的 auth.json 通常放在~/.codex/auth.json,改完之后要重启 Codex 才生效。
配置写完,先别急着测 mem-search,先用一个最小请求验证通道。如果你用 CLI,可以直接跑:
curl https://taotoken.net/api/v1/messages \ -H "x-api-key: sk-你的TaoToken密钥" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "max_tokens": 64, "messages": [{"role": "user", "content": "ping"}] }'如果返回里能看到正常的 content 字段,说明 Base URL、Key、Model ID 三件套是通的。如果返回 401,检查 Key;如果返回模型不存在,检查 Model ID;如果连接超时,检查 Base URL 是否写成了带斜杠或带参数的版本。这一步跑通,再进下一节验证 mem-search。
4. 验证 mem-search:写入、检索、跨会话召回三步走
配置通了之后,接下来验证 mem-search 的三层工作流是不是真的在工作。我把它拆成三步:先确认记忆写入,再验证检索,最后测跨会话召回。每一步都有可观察的结果,不用猜。
第一步,确认记忆写入。mem-search 是后台自动记录的,你不需要手动调用保存接口。但你要给它一点素材。开一个新会话,让 Claude Code 做一件有明确结果的事,比如修一个小 bug 或者做一个小的功能改动。做完之后,在同一个会话里问一句:「帮我找一下刚才这个改动」。如果 mem-search 正常工作,AI 会调用 search 工具,返回一条刚记录的条目,包含 ID、标题、类型(比如 bugfix 或 feature)和时间戳。
这一步的关键观察点是:返回的条目类型对不对。如果你刚做的是 bug 修复,类型应该是 bugfix;如果是新增功能,应该是 feature;如果是讨论了一个方案但没写代码,可能是 decision。类型不对说明 claude-mem 的观察分类没生效,通常是 Model ID 配错了导致分类逻辑跑偏。
第二步,验证三层检索。先测 Search:
search(query="authentication", limit=20, project="my-project")返回的应该是摘要级列表,每条约 50 到 100 tokens,包含 ID、标题、类型、时间戳。注意这里不要期待返回全文,Search 的设计就是只给摘要,全文留给 Fetch。如果你看到返回里带了大量代码,说明配置有问题,可能是把 Fetch 的行为混进了 Search。
然后测 Timeline。挑一条刚才返回的 ID,比如 11131,展开它前后的上下文:
timeline(anchor=11131, depth_before=3, depth_after=3, project="my-project")返回的应该是按时间排序的完整时间线,观察记录、会话、提示词交错排列。你能看到「这个 bug 是怎么被发现的、怎么修的、修完之后又做了什么」。如果 Timeline 返回的条目顺序乱了,或者只返回了锚点那一条,说明时间索引没建好,通常是 claude-mem 的存储层没初始化完整。
最后测 Fetch。把筛选出来的几个 ID 批量拉全文:
get_observations(ids=[11131, 10942, 10855])这一步才是真正花 token 的地方,但因为你已经用 Search 筛过了,只拉 3 条而不是 20 条,整体消耗可控。返回的应该是这几条记录的完整详情,包含当时的代码片段、决策理由、修改前后的对比。
第三步,测跨会话召回。这是 mem-search 最核心的能力,也是标题里「跨会话记住你的所有工作」的落点。关掉当前会话,重新开一个全新的会话,然后直接问:「上次那个登录超时的 bug 怎么修的?」注意,新会话里没有任何上下文,AI 完全不知道你之前做过什么。如果 mem-search 正常工作,它会自动调用 search,用「login timeout bug」作为关键词,加上type="observations"和obs_type="bugfix"过滤,返回类似这样的结果:
ID #11234: "Fixed login timeout by increasing session TTL to 24h"然后你可以继续让它 fetch 这条记录的详情,拿到完整的修复方案。整个过程你不需要重新解释项目背景,AI 自己从记忆库里把上下文捞回来了。
我实测下来,跨会话召回的成功率取决于两个因素:一是关键词选得准不准,二是 project 过滤有没有配对。如果你有多个项目,检索时一定要带上project参数,不然会把其他项目的记忆也混进来。另外,dateStart 和 dateEnd 这两个参数在回顾「上周做了什么」这类场景里特别好用:
search(dateStart="2026-05-04", dateEnd="2026-05-10", project="my-project")这会返回指定日期范围内的所有工作记录,一目了然。比起翻 Git log 猜上下文,这种方式直接给你按时间排列的工作流水。
还有一个进阶用法是/knowledge-agent。它不是简单的检索,而是构建一个可查询的知识库。你可以问:「过去一个月我修过哪些认证相关的 bug?」知识代理会读取所有匹配的观察记录,用对话方式给出综合答案,而不是丢给你一堆原始记录。这个适合做阶段性复盘,比如写周报或者季度总结的时候,直接问它就行。
验证完这三步,你的 mem-search 就算真正落地了。接下来是排错环节,我把几个高频报错和对应的排查路径写清楚。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth
这一节按真实报错来组织,每个报错给出触发场景、原因和修复动作。这些是我在实际配置过程中遇到过的,不是理论推演。
401 Unauthorized。最常见的报错,触发场景是第一次调用模型或者第一次触发 mem-search 检索。原因几乎都是 Key 没配对或者没传进去。分两种情况:如果你用的是 CLI settings,检查ANTHROPIC_API_KEY是不是写成了官方 Key 而不是 TaoToken 的 Key;如果你用的是 MCP 配置,检查env块里有没有把 Key 传进去,MCP server 启动时如果 env 缺失,claude-mem 拿不到 Key,请求就会 401。修复动作:重新生成一个 Key,确认复制完整,然后重启客户端。注意 Key 只在控制台显示一次,丢了就重新生成。
local proxy failed。这个报错通常出现在你本地有代理设置、或者 Base URL 指向了一个不可达的地址时。触发场景是 Claude Code 启动时尝试连接 Base URL 失败。原因可能是 Base URL 写成了带斜杠的版本,比如https://taotoken.net/api/,或者带了查询参数。修复动作:把 Base URL 改成https://taotoken.net/api,去掉结尾斜杠和所有参数。如果你本地有环境变量HTTP_PROXY或HTTPS_PROXY,也要检查它们有没有干扰请求。这个报错和网络环境有关,但排查方向是配置格式,不是网络本身。
reading choices 相关报错。这个报错出现在模型返回的响应结构不符合预期时,通常是 Model ID 配错了。触发场景是你填了一个 TaoToken 不支持的模型标识,或者填了一个格式不对的字符串。Claude Code 在解析响应时期望看到标准的 choices 或 content 结构,模型不对就会解析失败。修复动作:对照 TaoToken 的模型列表,确认 Model ID 拼写正确。如果你不确定用哪个,先用一个确定可用的模型跑通,再换。
OAuth 相关报错。这个报错出现在你用了需要 OAuth 认证的客户端,但配置里写的是 API Key 模式时。触发场景是 CC Switch 或某些 MCP 客户端在启动时尝试走 OAuth 流程,但你的配置里只有 Key。修复动作:确认客户端的认证模式设置,如果是 API Key 模式,确保没有残留的 OAuth token 文件干扰;如果是 OAuth 模式,那就不适用 API Key 配置,需要换一种接入方式。这个报错的关键是分清认证模式,别把两种混在一起。
除了这四个,还有一个隐性问题是「检索返回空」。这不是报错,但结果不对。原因通常是 project 参数没配对,或者记忆库还没积累足够数据。修复动作:先确认 claude-mem 在后台正常运行,然后做一次有明确结果的工作,再检索。如果还是空,检查 project 名称是否和记录时一致。
排查的时候有个原则:先把接入层和记忆层分开。用第 3 节的 curl 命令验证接入层,如果 curl 通了但 mem-search 不工作,问题在记忆层;如果 curl 都不通,问题在 Base URL、Key、Model ID 三件套。这个分法能帮你快速定位,不用在两层之间来回猜。
6. 把记忆能力接进你的日常编码流
配置和验证都跑通之后,最后说说怎么把它用起来。mem-search 的价值不在于「多了一个搜索工具」,而在于它改变了你和 AI 协作的方式。以前你开新会话,第一件事是解释项目背景、上次做到哪、有什么约束;现在你可以直接问「上次那个认证 bug 怎么修的」,AI 自己从记忆库里把上下文捞回来。
我自己的用法是把它嵌进几个固定场景。第一个是 bug 回溯:遇到一个似曾相识的报错,先 search 一下关键词加obs_type="bugfix",看有没有历史修复记录。第二个是架构决策回顾:当你要改一个设计时,先 search 一下obs_type="decision",看看当时为什么这么选,避免重复踩坑。第三个是周报素材:用 dateStart 和 dateEnd 拉一周的记录,直接就是工作流水。
如果你打算长期用这套工作流,Coding Plan 页面 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 值得看一下,它针对的就是持续编码和 Agent 任务场景。模型对话入口在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,配置过程中遇到协议细节可以查文档。控制台在 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,Key 管理和用量查看都在那里。
最后一个实用技巧:mem-search 的记忆是按项目积累的,项目越活跃,记忆库越有价值。所以别等到需要的时候才想起来配,从现在开始让它后台记录,三个月后你回头看,会发现它帮你省下的解释成本远超配置成本。跨会话记忆这件事,早配早受益。