首页 › LLM大语言模型 › Claude专栏 › Claude Code › Claude Code 项目的 MEMORY.md 使用指南

Claude Code 项目的 MEMORY.md 使用指南

CLAUDE.md 文件给 AI 提供上下文,是 Claude Code 开始处理项目时读的第一个文件。而 MEMORY.md 是一个 Markdown 文件,存的是跟项目相关的信息,能让 Claude Code 跑得更顺。​

​

common.docs_name - LarkCCM_Docs_Menu_Image

飞书文档 - 图片

​

MEMORY.md 的位置​

CLAUDE.md 通常放项目根目录,方便 AI 发现。MEMORY.md 不一样,它放在 ~/.claude/projects//memory/ 里:​

​

代码块​

Markdown

~/.claude/projects//memory/​

└── MEMORY.md # 简洁索引,每个 session 都加载​

​

​

其中 路径由 git 仓库根目录派生而来(非 git 项目则用工作目录)。同一仓库下所有 worktree 和子目录共享一个 memory 目录。​

​

​

common.docs_name - LarkCCM_Docs_Menu_Image

飞书文档 - 图片

​

如果想换个位置存储,可以在 settings.json 里用 autoMemoryDirectory 自定义路径:​

​

代码块​

JSON

{​

"autoMemoryDirectory": "~/my-custom-memory-dir"​

}​

​

项目变大以后,memory 目录会积累越来越多对 Claude Code 有用的资料,全放一起好管理:​

​

代码块​

Markdown

~/.claude/projects//memory/​

├── MEMORY.md # 简洁索引,每个 session 自动加载​

├── debugging.md # 调试模式笔记​

├── design-conventions.md # UI/UX 设计决策​

└── ... # Claude 创建的其他专题文件​

​

MEMORY.md 的角色​

​

😀

MEMORY.md 是 memory 目录的索引 / 目录。Claude 在整个 session 过程中读写这个目录里的文件,靠 MEMORY.md 追踪每样东西存在哪。​

​

​

飞书文档 - 图片

​

加载机制​

​

✍️

每次对话开始,MEMORY.md 的前 200 行(或前 25KB,哪个先到算哪个) 会被自动加载到上下文。超过这个阈值的内容不会被加载。​

​

此限制仅适用于 MEMORY.md。专题文件(如 debugging.md、api-conventions.md 等)不会在启动时加载——它们由 Claude 按需读取,仅在需要时才会打开。​

这就是两层架构的核心设计:MEMORY.md 充当轻量索引,详细内容分流到专题文件里按需加载,避免了上下文窗口浪费。​

谁写 MEMORY.md​

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

启用 Auto Memory​

Claude Code 的 autoMemoryEnabled 设置控制是否启用自动记忆。默认开启:​

​

代码块​

JSON

{​

"autoMemoryEnabled": true​

}​

​

配置位置可以是:​

•

~/.claude/settings.json(全局关闭)​

•

.claude/settings.json(单个项目关闭)​

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

​

代码块​

Bash

export CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 # 强制关闭​

export CLAUDE_CODE_DISABLE_AUTO_MEMORY=0 # 强制开启​

​

版本要求​

​

Auto Memory 需要 Claude Code v2.1.59 或更高版本。运行 claude --version 确认你的版本。​

​

已知限制:无法独立关闭 CLAUDE.md 或 MEMORY.md​

​

据社区用户报告,autoMemoryEnabled 开关可能同时影响 CLAUDE.md 的加载和 MEMORY.md 的记忆功能。比如只想禁用 auto memory 但保留 CLAUDE.md,目前没有独立的开关来做到这一点。​

​

什么时候写入?​

Claude 不会每个 session 都写。它自己判断信息是否值得记住,判断标准是「这条信息在未来的对话中是否有用」。​

写入的常见触发场景:​

•

你纠正了 Claude 的某个行为(比如「别用 npm,用 pnpm」)​

•

你告诉它一条项目知识(比如「API 测试需要本地 Redis」)​

•

Claude 在调试过程中发现了值得记录的模式​

•

你主动说「记住这个」​

当 Claude 在写入或读取 memory 时,界面会显示 「Writing memory」 或 「Recalled memory」。​

​

​

手动管理:/memory 命令​

在 Claude Code 会话中输入 /memory 可以:​

•

查看当前加载的所有 CLAUDE.md、CLAUDE.local.md 和 rules 文件​

•

开关 auto memory​

•

打开 memory 文件夹浏览所有文件​

•

直接编辑 MEMORY.md​

所有 memory 文件都是普通 Markdown,随时可以手动编辑或删除。​

CLAUDE.md 与 MEMORY.md 与 CLAUDE.local.md​

除了 CLAUDE.md 和 MEMORY.md,Claude Code 还有一个常被忽视的文件:CLAUDE.local.md。​

​

​

三者的关系如下:​

​

​

CLAUDE.md = 指令手册​

CLAUDE.md 告诉 AI 怎么干活:​

•

怎么表现​

•

遵守什么规则​

•

输出什么风格​

•

首选什么工具和工作流​

CLAUDE.md 示例:​

markdown​

​

代码块​

Markdown

# 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​

​

CLAUDE.local.md = 你的私人偏好​

CLAUDE.local.md 放在项目根目录,跟 CLAUDE.md 并列加载。适合放不想提交到 Git 的个人设置,比如本地沙箱 URL、常用测试数据等。/init 命令选择 personal 选项可以自动创建并写入 .gitignore。​

CLAUDE.local.md 和 MEMORY.md 的区别​

​

CLAUDE.local.md 是你写的(跟 CLAUDE.md 一样是指令),MEMORY.md 是Claude 写的(是知识笔记)。别把两者搞混 — 你想给 Claude 下指令,写到 CLAUDE.local.md 里;你想让 Claude 记住某些事,让它自己写到 MEMORY.md。​

​

MEMORY.md = Claude 的笔记本​

MEMORY.md 是用来保存知识的文件,Claude 自己写。​

它存的是:​

•

已经做过的决策​

•

重要的历史上下文​

•

稳定的项目知识​

•

反复出现的经验教训​

•

假设和取舍​

把它当成项目的长期记忆。​

MEMORY.md 示例:​

​

代码块​

Markdown

# Product Decisions​

​

一句话总结:​

​

代码块​

Markdown

CLAUDE.md = AI 该怎么干活​

CLAUDE.local.md = 你私人的额外指令​

​

最佳实践​

​

​

只存长期知识​

MEMORY.md 应该放那些跨很多个 session 仍然有价值的东西。​

值得存:​

•

核心架构决策​

•

反复出现的UX发现​

•

集成限制​

•

性能发现​

不要存:​

•

临时待办​

•

冲刺任务​

•

随机调试日志​

•

短期实验​

每次往里加东西前问一句:「一个月后这信息还有用吗?」​

别放操作指令​

别把 MEMORY.md 变成第二个 CLAUDE.md。​

想告诉 Claude Code 用什么技术栈,写到 CLAUDE.md 或 CLAUDE.local.md 里:​

markdown​

​

代码块​

Markdown

Always use TypeScript.​

Never edit migrations.​

​

上面这些是 CLAUDE.md 的内容。​

MEMORY.md 存知识,不存行为规则。如果某个信息是「Claude 应该遵守的指令」,它不属于 MEMORY.md。​

解释为什么,不只做了什么​

最有价值的记忆是推理过程。​

与其只记结论:​

markdown​

​

代码块​

Markdown

切换到 Redis。​

​

不如加够上下文让 AI 理解原因:​

markdown​

​

代码块​

Markdown

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

​

推理比实现细节存得更久。​

条目简短、能扫读​

MEMORY.md 是给 AI agent 处理的,要保持短小精炼。AI agent 擅长处理列表、简洁说明、分类结构,不擅长吃长文和时间线堆砌的日志。​

为什么要在意 200 行限制: MEMORY.md 只有前 200 行会被加载。如果你手动往里塞了太多内容,Claude 会自动把详细笔记移到专题文件里,但你自己也应该有这个意识。当条目变多时,主动拆到 debugging.md、architecture.md 等专题文件。​

定期清理: 不手动审查的话,记忆质量会慢慢变差。建议每月 review 一次,具体做法:​

打开 MEMORY.md,逐条目过一遍​

已经解决的问题 → 删掉或加 (已解决) 标记​

废弃的架构 → 删掉​

重复的发现 → 合并为一条​

使用 git log 查看 ~/.claude/projects//memory/ 下各文件的最后修改时间,超过三个月没动的条目优先复查​

小而高信号的记忆,好过大而嘈杂的。​

记录失败和死路​

记忆里最有价值的一类信息是死路记录。比如:​

markdown​

​

代码块​

Markdown

尝试用 WebSocket 推送通知。​

放弃,移动端重连稳定性太差。​

​

有了这些信息,就能避免重复踩同一个坑,省下 agent 大量时间。​

善用 /memory 命令​

不要等 Claude 自动写 — 你可以主动触发。对 Claude 说「记住这个:API 测试需要本地 Redis 实例」,Claude 会把这条信息写入 MEMORY.md。不确定 Claude 记住了什么?跑 /memory 打开文件夹直接看。​

实战案例​

下面是一个真实场景,展示 MEMORY.md 的价值。​

场景:调试一个棘手的构建问题​

没有 MEMORY.md 的时候:​

​

你:上次构建失败是因为 sharp 的 native 模块在 ARM Mac 上有兼容性问题,试一下降级版本。Claude:让我查一下……(开始从头排查,尝试各种版本,最终花了 10 分钟找到正确方案)​

​

有 MEMORY.md 的时候:​

​

代码块​

Markdown

# Build Issues​

- `sharp@0.33.x` 在 Apple Silicon 上构建失败 → 降级到 `0.32.6` 解决​

- CI 中 `pnpm install` 超时 → 加了 `--frozen-lockfile --prefer-offline`​

- `postinstall` 脚本需要 Node 20+,低于 20 直接跳过​

​

​

你:构建又失败了。Claude:(读取 MEMORY.md,发现 sharp 兼容性记录)上次 sharp@0.33.x 在 Apple Silicon 上有兼容问题。你的环境是 M 系列芯片,我用 0.32.6 试试?(30 秒解决)​

​

场景:项目迁移后避免回退​

​

代码块​

Markdown

​

markdown​

# Technical Decisions​

- 2026 年 4 月评估过 Vite vs Turbopack → 选 Vite,因为 Turbopack 当时缺 CSS Module HMR​

- 讨论过把 monorepo 拆成 polyrepo → 暂缓,等待 PNPM Workspace Catalogs 稳定​

​

​

​

有新成员问「为什么不用 Turbopack?」Claude 能从 MEMORY.md 里翻出当时的决策依据,而不是建议你「再评估一次」。​

速查表​

​