摘要:很多熟悉 Claude Code 的人都知道 CLAUDE.md 很重要,它相当于项目里的 AI 指令手册。但真正能让 Claude Code 越跑越顺的,往往是另一个容易被忽略的文件:MEMORY.md。它保存的是项目相关的长期记忆,例如历史决策、调试经验、失败路径、架构约束和复用知识。本文系统讲清楚 MEMORY.md 的位置、加载机制、Auto Memory 开关、和 CLAUDE.md / CLAUDE.local.md 的区别、最佳实践与实战案例,并顺手说明如何在 Claude Code 工作流里搭配 4sAPI 大模型 API 中转站管理模型调用和成本。

关键词:Claude Code、MEMORY.md、CLAUDE.md、CLAUDE.local.md、大模型API中转站、4sAPI、Auto Memory、AI Agent、项目记忆、Claude Code教程

适合读者:Claude Code 用户、AI Agent 玩家、独立开发者、团队工程师、长期维护项目的人,以及希望让 Claude Code 在项目里越用越懂上下文的用户。

1. 开篇:只会写CLAUDE.md还不够

熟悉 Claude Code 的人,大多知道 CLAUDE.md 很重要。

它通常放在项目根目录,用来告诉 Claude Code:

这个项目用什么技术栈
代码风格是什么
哪些命令可以跑
哪些文件不要动
输出要遵守什么格式
遇到问题先怎么排查

简单说,CLAUDE.md 是给 AI 的项目说明书。

但如果一个项目维护时间很长,只靠 CLAUDE.md 还不够。

因为项目里真正值钱的上下文,往往不是“现在应该怎么干”,而是“以前为什么这么干”:

这些信息不会天天出现,但一旦忘掉,Claude Code 就会重复踩坑。

MEMORY.md 解决的正是这个问题。

它不是第二个 CLAUDE.md,而是 Claude Code 的项目笔记本。

2. MEMORY.md是什么

MEMORY.md 是 Claude Code Auto Memory 机制中的核心索引文件。

它是一个 Markdown 文件,保存的是和项目相关的长期记忆。比如:

一句话理解:

CLAUDE.md = AI 应该怎么干活
CLAUDE.local.md = 你的私人额外指令
MEMORY.md = AI 应该记住什么

这三个文件的分工一定要分清。

如果你把行为规则写进 MEMORY.md,它会变得像第二份指令手册,越用越乱。如果你把历史经验全塞进 CLAUDE.md,Claude Code 每次启动都会加载过多上下文,浪费 token,也降低重点信息的清晰度。

3. MEMORY.md放在哪里

CLAUDE.md 通常放在项目根目录,方便 Claude Code 启动时发现和加载。

MEMORY.md 不一样。它通常放在 Claude Code 的项目记忆目录中:

~/.claude/projects/<project>/memory/
└── MEMORY.md

其中 <project> 通常由 Git 仓库根目录派生而来。非 Git 项目则可能使用工作目录。也就是说,同一个仓库下的 worktree 和子目录,通常会共享同一个 memory 目录。

当项目变大后,memory 目录可以拆成多份专题文件:

~/.claude/projects/<project>/memory/
├── MEMORY.md
├── debugging.md
├── design-conventions.md
├── architecture.md
├── api-conventions.md
└── build-issues.md

这里的关键设计是:

MEMORY.md 做轻量索引
专题文件保存详细内容
Claude 按需读取专题文件

这比把所有内容都堆在 MEMORY.md 里更合理。

如果你想自定义 memory 存储位置,可以在 settings.json 中设置:

{
  "autoMemoryDirectory": "~/my-custom-memory-dir"
}

注意:Auto Memory 是本机本地存储,不会自动跨机器或云端同步。换一台电脑,就没有原来的 memory 文件,除非你自己做备份或同步。

4. 加载机制:为什么前200行很重要

每次 Claude Code 会话开始时,MEMORY.md 的前 200 行,或者前 25KB,会被自动加载到上下文里。

规则可以理解成:

前 200 行 或 前 25KB
哪个先到,就按哪个算

超过阈值的内容不会在启动时自动加载。

这个限制只适用于 MEMORY.md。其他专题文件,比如 debugging.mdarchitecture.mdapi-conventions.md,不会在会话开始时全部加载,而是由 Claude Code 在需要时按需读取。

这就是 MEMORY.md 应该保持短小的原因。

它的最佳形态不是长篇日志,而是一个高信号索引:

# Build Issues
- sharp@0.33.x 在 Apple Silicon 上构建失败,降级到 0.32.6 解决。详见 build-issues.md。
- CI pnpm install 超时,使用 --frozen-lockfile --prefer-offline。详见 build-issues.md。

# Architecture Decisions
- 2026-04 评估过 Vite vs Turbopack,当前选择 Vite。详见 architecture.md。
- monorepo 暂不拆成 polyrepo,等待 PNPM Workspace Catalogs 稳定。详见 architecture.md。

# Product Learnings
- 新手引导改版后流失率下降约 18%,后续改动不要删除关键进度反馈。

前 200 行是黄金位置,要留给最稳定、最长期、最能减少重复踩坑的信息。

5. 如何开启或关闭Auto Memory

Claude Code 的 Auto Memory 由 autoMemoryEnabled 控制。材料中提到它默认开启,可以在 settings 文件中配置:

{
  "autoMemoryEnabled": true
}

配置位置可以是:

~/.claude/settings.json
.claude/settings.json

也可以用环境变量强制控制:

export CLAUDE_CODE_DISABLE_AUTO_MEMORY=1
export CLAUDE_CODE_DISABLE_AUTO_MEMORY=0

材料中提到,Auto Memory 需要 Claude Code v2.1.59 或更高版本。可以运行下面命令确认:

claude --version

还有一个需要注意的限制:根据社区反馈,autoMemoryEnabled 开关可能同时影响 CLAUDE.md 加载和 MEMORY.md 记忆功能。如果你只想禁用 Auto Memory,但保留 CLAUDE.md 自动加载,当前可能没有独立开关可以完全分开控制。材料中提到该行为被标记为设计决策,而不是 bug。

所以如果你要在团队里调整这个开关,建议先在非关键项目里测试,不要直接改生产项目的默认工作流。

6. 谁来写MEMORY.md

在 AI 优先的工作流里,MEMORY.md 主要由 Claude Code 自己写。

Claude 不会每个 session 都写入记忆。它会判断某条信息是否值得未来复用。

常见触发场景包括:

当 Claude 写入或读取 memory 时,界面可能会显示类似:

Writing memory
Recalled memory

如果你不确定它记住了什么,可以用 /memory 命令查看。

7. /memory命令怎么用

在 Claude Code 会话中输入:

/memory

通常可以做几件事:

所有 memory 文件本质上都是普通 Markdown 文件,你可以随时手动编辑、删除、整理。

不过更推荐的方式是:让 Claude 负责写入,你负责定期审核。

你可以直接对 Claude 说:

记住这个:API 测试需要本地 Redis 实例。

或者:

这次 sharp 的版本问题值得记录到 memory,避免以后重复排查。

这样比你手动维护一大堆笔记更自然。

8. CLAUDE.md、CLAUDE.local.md、MEMORY.md怎么分工

这三个文件很容易混。

可以用一张表理解:

文件 谁写 存什么 位置 是否适合进 Git
CLAUDE.md 你或团队 指令、规则、技术栈、工作流 项目根目录或全局 Claude 目录 适合
CLAUDE.local.md 私人偏好、本地环境、本地测试数据 项目根目录 不适合,建议加入 .gitignore
MEMORY.md Claude 为主 知识、经验、历史决策、失败路径 ~/.claude/projects/<project>/memory/ 不适合,本机独有

8.1 CLAUDE.md:AI的指令手册

CLAUDE.md 用来告诉 Claude Code 怎么干活。

示例:

# Role
You are a senior product engineer working on a SaaS dashboard application.

# Tech Stack
- TypeScript
- Next.js App Router
- Tailwind
- shadcn/ui

# Rules
- Prefer server components unless interactivity is required
- Never introduce new dependencies without approval
- Keep components under 250 lines
- Use Zod for validation
- Use React Query for async state

# Workflow
- Think through architecture before coding
- Explain major tradeoffs before implementation
- Update tests when changing business logic

这类内容是行为规则,应该放在 CLAUDE.md,不是 MEMORY.md

8.2 CLAUDE.local.md:你的私人偏好

CLAUDE.local.md 适合放不想提交到 Git 的个人设置,比如:

它和 CLAUDE.md 一样属于“指令”,区别是它更私人,不适合团队共享。

8.3 MEMORY.md:Claude的项目笔记

MEMORY.md 存的是知识,不是命令。

示例:

# Product Decisions
- 可用性测试中,用户明显偏好卡片布局,不喜欢密集表格。
- 深色模式使用率超过 70%,新功能默认必须支持深色模式。

# Technical Learnings
- Vercel Edge Functions 在 Stripe webhook 场景中会超时。
- Safari 在处理流式 AI 响应时偶尔出现断流。

# Historical Context
- 2026-03 从 Firebase 迁移到 Supabase,主要是为了减少厂商锁定。
- 新手引导改版后,流失率下降约 18%。

如果某条信息是“Claude 应该遵守的指令”,放进 CLAUDE.mdCLAUDE.local.md

如果某条信息是“Claude 以后应该记得的经验”,放进 MEMORY.md

9. 最佳实践:让记忆小而高信号

9.1 只存长期知识

MEMORY.md 应该保存跨多个 session 仍然有价值的信息。

值得存:

不建议存:

每次想加入一条记忆前,可以问一句:

一个月后,这条信息还有用吗?

如果答案是否定的,就不适合进 MEMORY.md

9.2 不要放操作指令

不要把 MEMORY.md 变成第二个 CLAUDE.md

比如:

Always use TypeScript.
Never edit migrations.
Prefer pnpm over npm.

这些是行为规则,应该放在 CLAUDE.mdCLAUDE.local.md

MEMORY.md 应该写成:

- 2026-05 项目迁移到 pnpm,是因为 npm 在 CI 中多次出现 lockfile 不一致问题。

前者是命令,后者是经验。

9.3 解释为什么,而不只记录做了什么

最有价值的记忆不是结论,而是推理。

比如只写:

- 切换到 Redis。

价值不大。

更好的写法是:

- 切换到 Redis,是因为 serverless 内存重置导致 session 不稳定。

未来 Claude Code 再遇到 session 问题时,就能理解当时的取舍。

9.4 定期清理

记忆不清理,会慢慢变成噪音。

建议每月 review 一次:

小而高信号的 memory,比大而杂的 memory 更有价值。

9.5 记录失败和死路

MEMORY.md 里最有价值的一类信息,是失败路径。

示例:

- 尝试用 WebSocket 推送移动端通知,放弃。原因是移动端后台重连稳定性太差。
- 尝试把 Stripe webhook 放到 Edge Function,放弃。原因是执行时间和依赖限制不适合当前场景。

这类记录能避免 Claude Code 一个月后又把你带回同一个坑。

10. 实战案例:构建问题怎么靠MEMORY.md省时间

假设你遇到一个构建问题。

没有 MEMORY.md 时,你可能要重新解释:

上次构建失败是因为 sharp 的 native 模块在 ARM Mac 上有兼容问题,试一下降级版本。

Claude 可能还要从头排查,查依赖、看日志、试版本,最后才想起正确方案。

如果 MEMORY.md 里已经有记录:

# Build Issues
- sharp@0.33.x 在 Apple Silicon 上构建失败,降级到 0.32.6 解决。
- CI 中 pnpm install 超时,使用 --frozen-lockfile --prefer-offline。
- postinstall 脚本需要 Node 20+,低于 20 会直接跳过。

下一次你只要说:

构建又失败了。

Claude Code 读取 memory 后,就能先检查 sharp 版本、Node 版本和 CI install 参数,而不是从零开始。

这就是项目记忆的价值:减少重复排查,缩短 Agent 的试错时间。

11. 4sAPI配置:让Claude Code长期项目更好控成本

MEMORY.md 解决的是项目记忆问题。

但长期使用 Claude Code 还有另一个问题:模型调用成本和模型切换。

一个成熟项目里,Claude Code 可能会频繁做这些事:

这些都会消耗模型调用。

如果你在国内环境中使用 Claude Code、Codex、Hermes 等多个 Agent 工具,可以考虑把模型 API 接入层统一到 4sAPI 大模型 API 中转站。

推荐思路是:

Claude Code / Codex / Hermes
        -> 项目指令与记忆:CLAUDE.md / MEMORY.md / Skills
        -> 4sAPI 大模型 API 中转站
        -> Claude / GPT / Gemini / DeepSeek 等模型

4sAPI 在这里的价值是:

例如你可以在 4sAPI 后台创建:

claude-code-project-a
claude-code-project-b
codex-refactor-workflow
hermes-agent-memory

这样每个项目和工作流的成本都能分开看。

如果你的工具支持 OpenAI-compatible endpoint,可以使用类似配置:

OPENAI_BASE_URL=https://4sapi.com/v1
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_MODEL=gpt-5.5-xhigh

实际模型 ID 以 4sAPI 模型广场为准。

需要强调的是,4sAPI 解决的是模型接入和成本管理,不会替代 Claude Code 的 MEMORY.md。两者是不同层:

MEMORY.md 管项目长期记忆
4sAPI 管模型 API 接入

把这两层配好,长期项目里的 Agent 才会既“记得住”,又“花得明白”。

12. 速查表

问题 答案
MEMORY.md 在哪里 ~/.claude/projects/<project>/memory/MEMORY.md
谁写 MEMORY.md Claude 为主,你可以审核和整理
启动时加载多少 前 200 行或 25KB,先到为准
专题文件会启动加载吗 不会,Claude 按需读取
怎么开关 /memory 命令,或 settings.json 里的 autoMemoryEnabled
版本要求 材料中提到 Claude Code v2.1.59+
是否跨机器同步 不会,本机独有
能否自定义路径 可以,用 autoMemoryDirectory
CLAUDE.local.md 的区别 CLAUDE.local.md 是你写的私人指令,MEMORY.md 是 Claude 写的项目笔记
多久清理一次 建议每月 review 一次

13. 总结:让Agent记住项目,而不是每次重新认识项目

MEMORY.md 的价值,不是多一个 Markdown 文件,而是让 Claude Code 从“一次性助手”变成“长期项目伙伴”。

CLAUDE.md 告诉它怎么干活。

CLAUDE.local.md 告诉它你的私人偏好。

MEMORY.md 告诉它这个项目曾经发生过什么、为什么这么决策、哪些坑不要再踩。

如果你经常在同一个项目里使用 Claude Code,建议尽早建立一套 memory 习惯:

重要决策要记
失败路径要记
长期约束要记
短期任务不要记
每月清理一次

再配合 4sAPI 这样的模型 API 中转站,把不同项目的模型调用、日志和额度分开管理,Claude Code 的长期使用体验会稳定很多。

一句话总结:

CLAUDE.md 让 Claude Code 知道规矩。
MEMORY.md 让 Claude Code 记住经验。
4sAPI 让 Claude Code 的模型调用更好管理。