☰
HoRain云--Claude Code 记忆系统(Memory)实战:CLAUDE.md 与 Auto Memory 配置指南
2026/10/5 21:51:45 网站建设 项目流程

1. 多项目并行时,Claude Code 为什么总像“第一次见我”

如果你同时维护三四个仓库,一定遇到过这种场面:上午在 A 项目里跟 Claude Code 反复强调“这个仓库用 pnpm,别用 npm”,下午切到 B 项目,它又开始 npm install;昨天刚解释完“我们的日期统一 ISO 8601”,今天新开一个会话,它照样给你写成2024/5/1。这不是模型变笨了,而是 Claude Code 默认没有跨会话记忆——每个新会话都从一个干净的上下文窗口开始,上一轮你辛苦调教出来的约定,会话一关就归零。

Claude Code 的 Memory 系统就是来解决这件事的。它由两条互补的机制组成:一条是你手写的CLAUDE.md,用来固化项目规范、构建命令、团队约定;另一条是 Auto Memory,由 Claude 自己在工作过程中把纠正、偏好、调试发现写进本地记忆目录。两者在每次会话启动时都会被加载进上下文,让 Claude 一上来就“记得”这个项目的脾气。

这套东西适合谁?适合手里有多个仓库、经常开新会话、又不想每次重复交代背景的开发者。尤其是团队协作场景,把CLAUDE.md提交进 Git,所有人的 Claude 助手读到的规范就是同一份。下面我会从记忆层级讲起,给出可直接复制的CLAUDE.md结构、Auto Memory 的开关配置,再演示一次记忆写入和跨会话召回,最后把常见报错挨个排掉。全程围绕 Claude Code、Memory、CLAUDE.md、Auto Memory 这几个关键词展开,跟着做就能搭出一层可维护的记忆。

需要说明的是,Claude Code 走的是 Anthropic 官方接口,国内直连偶尔会碰到网络抖动或鉴权失败。我这边习惯用 TaoToken 做一层统一的 API 接入,把 Base URL 和 Key 集中管理,后面配置里会带上,你也可以换成自己的接入方式。

2. 记忆层级与 CLAUDE.md 目录结构:把项目规范写进文件

Claude Code 的记忆不是单一文件,而是一个四层优先级结构,从高到低依次是:企业级配置(Enterprise policy,只读,最高优先级)、用户级~/.claude/CLAUDE.md(对你所有项目生效)、项目级CLAUDE.md(放在项目根目录,随 Git 共享给团队)、子目录级CLAUDE.md(放在src/、api/、tests/等目录,按上下文加载)。规则越具体越优先,子目录的CLAUDE.md会覆盖上层的同类规则。

这个设计的好处是分层解耦:个人偏好放用户级,团队规范放项目级,模块细节放子目录级。你不用把所有东西塞进一个文件,Claude 只在处理对应目录的文件时才加载子目录记忆,既省 token 又更精准。

先看一个我实测下来比较顺手的目录结构:

my-project/ ├── CLAUDE.md # 项目级:技术栈、命令、全局约定 ├── src/ │ └── CLAUDE.md # 前端组件规范,仅处理 src/ 时加载 ├── api/ │ └── CLAUDE.md # API 路由与错误格式约定 ├── tests/ │ └── CLAUDE.md # 测试规则、fixture 约定 └── .claude/ └── settings.json # Auto Memory 等开关

项目级CLAUDE.md建议控制在 200 行以内,因为超出部分不会在会话启动时加载。写法上用祈使句和短列表,别写叙述性段落,带上具体版本号和命令,能放代码示例就放——5 行示例胜过 50 字说明。下面这份可以直接抄改:

# 项目约定 ## 技术栈 - 前端:Next.js 15、TypeScript 5.7、Tailwind CSS 4 - 后端:Node.js 22、Prisma 6 - 测试:Vitest 3.2 ## 代码规范 - 始终使用函数式 React 组件 - 文件名使用 kebab-case - 测试文件与源码放在同一目录 ## 常用命令 - 构建:`pnpm build` - 测试:`pnpm test` - 启动开发服务器:`pnpm dev` ## API 约定 - 所有 API 路由以 `/api/v1/` 开头 - 错误响应格式:`{ error: string, code: number }`

要避免的是“遵循最佳实践”“写干净的代码”这类模糊指令,它们对 Claude 几乎没有约束力。也别把通用规则堆进来,只放这个项目独有的约定。过时信息记得每月审一次,否则 Claude 会照着旧规范干活。

创建CLAUDE.md有两条路。一是用/init命令自动生成:在项目根目录启动 Claude Code,输入/init,它会分析目录结构、检测框架和测试工具,几十秒内生成一份八成完整度的骨架,你再手动补细节。二是直接touch CLAUDE.md手写。我一般先用/init打底,再按上面的结构重排。

子目录CLAUDE.md是省 token 的关键。比如api/CLAUDE.md里只写 API 相关约定,Claude 在处理api/下的文件时才加载它,处理前端组件时完全不读。多项目并行时,这套层级让你在 A 项目强调 pnpm、在 B 项目强调 npm,互不干扰。

3. 可复制配置:Auto Memory 开关与 settings.json 片段

Auto Memory 是 Claude 自己写的那一半记忆。它在工作过程中判断哪些信息未来有用,然后自动保存,包括构建命令、调试技巧、架构决策、代码风格偏好、工作流习惯。它不会每次都写,只有觉得值得留存才落盘。存储位置在用户目录下:

~/.claude/projects/<project>/memory/ ├── MEMORY.md # 索引文件,每次会话加载前 200 行 ├── debugging.md # 调试模式详细笔记 ├── api-conventions.md # API 设计决策 └── ... # Claude 创建的其他主题文件

MEMORY.md是整个记忆目录的索引,Claude 靠它追踪各文件存了什么。注意 Auto Memory 是本地机器级别的,同一 Git 仓库的所有 worktree 和子目录共享一个记忆目录,但不会跨机器或云环境同步——换台电脑就得重新积累。

开关 Auto Memory 有三种方式。第一种是在会话里用/memory命令切换,这个命令还能查看当前加载的所有CLAUDE.md和规则文件、打开记忆文件夹、选择文件在编辑器里编辑。第二种是在项目设置里配置,路径是.claude/settings.json:

{ "autoMemoryEnabled": false }

把false改成true就是开启。第三种是环境变量,适合临时关掉:

export CLAUDE_CODE_DISABLE_AUTO_MEMORY=1

如果你用 TaoToken 统一接入 Claude Code,配置集中在环境变量里,Base URL 指向https://taotoken.net/api,Key 从控制台生成。这样多项目共用一套鉴权,切换仓库时不用反复改配置。模型 ID 按你订阅的套餐填,比如 Claude 系列对应的模型标识。三件套(Base URL + Key + Model ID)配齐后,Claude Code 才能正常发起请求,Auto Memory 也才有会话可写。

还有一个隐藏效率技巧:在会话里按#键,直接输入想记住的内容再回车,Claude Code 会自动把它写进对应的CLAUDE.md。适合快速记录项目约定、常用 Bash 命令、代码风格细节。如果你明确想写进CLAUDE.md而不是 Auto Memory,直接说“把这条加到 CLAUDE.md”即可。

需要提醒的是,Auto Memory 写的是本地文件,团队协作时它不会自动共享。团队规范该进项目级CLAUDE.md并提交 Git,个人习惯才交给 Auto Memory。

4. 验证请求:一次记忆写入与跨会话召回实测

配置完得验证它真的生效,不然你以为记住了、实际没加载,白折腾。下面走一遍完整流程。

第一步,初始化项目记忆。在项目根目录启动 Claude Code,执行/init生成骨架,然后手动补上你的技术栈和命令。完成后用/memory确认文件已被加载——列表里应该能看到项目级CLAUDE.md。

第二步,触发一次 Auto Memory 写入。在会话里直接告诉它一条偏好:

你:始终使用 pnpm,不要用 npm 你:记住 API 测试需要本地运行 Redis 实例 你:我们的日期格式统一用 ISO 8601

Claude 会判断这些值得留存,写进~/.claude/projects/<project>/memory/下的主题文件,并更新MEMORY.md索引。你可以打开那个目录看文件是否真的多出来。

第三步,验证跨会话召回。完全退出当前会话,重新claude启动一个新会话,然后问它:

你:这个项目用什么包管理器?API 测试有什么前置依赖?

如果记忆生效,它会答出 pnpm 和 Redis 依赖,而不是泛泛地说“通常用 npm”。这一步是整套机制的核心验证点——新会话的上下文窗口是干净的,能答对说明记忆确实被加载了。

第四步,验证项目级CLAUDE.md的约束力。在CLAUDE.md里写一条“所有 API 路由以/api/v1/开头”,新开会话让它生成一个路由文件,看它是否遵守前缀约定。遵守说明项目级记忆加载正常。

第五步,验证子目录记忆的按需加载。在api/CLAUDE.md写一条 API 专属约定,然后分别在处理src/文件和处理api/文件时观察 Claude 的行为差异。处理src/时它不该引用 API 约定,处理api/时才加载。

实测下来,这套验证跑通后,多项目切换的体验会明显不同:A 项目的 pnpm 约定、B 项目的 npm 约定各自待在自己的记忆层里,新会话一开就各就各位。如果你在验证时发现召回失败,先别怀疑机制,多半是加载或路径问题,下一节挨个排。

5. 常见报错排查:401、local proxy failed 与记忆不加载

配置过程中最容易卡在鉴权和加载两类问题上,下面按真实报错逐个拆。

报错一:401 Unauthorized。这是鉴权失败,通常有三种原因:Key 没配、Key 过期、Base URL 写错。先确认环境变量里的 Key 和控制台生成的一致,再确认 Base URL 指向https://taotoken.net/api(注意不要多加路径后缀)。如果你用的是 Claude Code 的 OAuth 登录方式,检查登录态是否过期,必要时重新走一遍授权。401 和记忆系统无关,但鉴权不过会话根本起不来,记忆自然无从加载。

报错二:local proxy failed。这个报错说明本地代理层没起来或端口被占。检查你的接入配置里代理地址和端口是否和实际监听一致,确认没有其他进程占用同一端口。如果你在settings.json里配了代理相关字段,核对拼写。这个错和网络环境有关,和记忆文件本身无关,排掉之后会话才能正常建立。

报错三:reading choices 相关错误。这类报错一般出现在响应解析阶段,常见于模型 ID 填错或接口返回格式和客户端预期不匹配。核对三件套里的 Model ID 是否和你订阅的套餐对应,Base URL 是否完整。如果用的是 Codex 的auth.json方式接入,检查文件里的字段名和层级是否正确,auth.json里通常要写全 Base URL、Key、Model ID 三项,缺一项就可能解析失败。

报错四:Claude 忽略了 CLAUDE.md 的指令。这不是报错,但最让人抓狂。排查顺序:先运行/memory确认文件已被加载;再确认 Claude Code 是在CLAUDE.md所在目录或其子目录中运行,路径不对就不会加载;然后检查指令是否够具体,“遵循最佳实践”太模糊,“使用具名导入以兼容 tree-shaking”才有效;最后看文件是否超过 200 行,超出部分不加载。还要理解一点:CLAUDE.md是上下文,不是强制执行,Claude 读取并尽力遵循,但指令模糊或相互冲突时没有严格合规保证。把它当“工作指南”而非“不可违反的规则”。

报错五:Auto Memory 不写入。先确认autoMemoryEnabled没被设成false,环境变量CLAUDE_CODE_DISABLE_AUTO_MEMORY没被设成1。再确认你告知的内容确实值得留存——Claude 会判断,不是每句都写。如果换了机器,记忆目录不会同步,需要重新积累。

报错六:CC Switch / Cline MCP 配置后记忆不生效。如果你用 CC Switch 或 Cline 的 MCP 方式接入,务必写全三件套:Base URL、Key、Model ID。少任何一项,会话可能能起但行为异常,记忆加载也会受影响。MCP 直连生产库这种操作要避免,记忆配置只在开发环境调。

排完这些,记忆系统基本就稳了。鉴权类问题去 API Keys 页面核对,接入细节看接入文档,两处配合能覆盖大部分场景。

6. 把记忆层用起来:从接入到长期编码

记忆系统搭好之后,日常怎么用才不浪费?我的习惯是分三层维护:团队共享的规范进项目根目录CLAUDE.md并提交 Git,个人偏好进~/.claude/CLAUDE.md,模块特定规则进子目录CLAUDE.md。让 Claude 自学的部分交给 Auto Memory,口头告知偏好即可。临时上下文用@docs/filename.md按需引用,别一股脑塞进CLAUDE.md。任务跟踪就在 Markdown 文件里用[ ]复选框,Claude 读得到也改得动。

如果你还在纠结接入方式,鉴权和排障相关的配置去 API Keys 页面生成 Key,接入细节对照接入文档一步步来;想先验证模型对话效果,可以在模型对话里试几轮,确认响应正常再落到项目里;长期编码和 Agent 场景,用 Coding Plan 更省心,多项目切换时记忆层配合套餐一起用,上下文保持的体验会顺很多。

最后留一个我踩过的坑:CLAUDE.md别写成大段散文,Claude 对短列表和代码示例的遵循度明显更高。还有,Auto Memory 是本地机器级别的,换电脑不会跟着走,重要约定一定要落到项目级CLAUDE.md并提交 Git,别全指望它自己记。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询