读完本篇你能:写出有效的 CLAUDE.md、组织规则文件、理解上下文窗口的工作原理,避免 “信息丢失” 和 “它好像忘了我说过什么”。


一、先理清三类 “记忆”

很多人混淆这三件事。一次性讲清:

类型
存在哪
什么时候被加载
例子
上下文(Context)
内存,每个 session 独立
当前对话期间
"刚才你说要先改 auth 模块"
CLAUDE.md / Rules(项目记忆)
项目里的 `.md` 文件
每次 session 启动
"这个项目用 pnpm,禁止 npm"
Auto Memory(长期记忆)
你的用户配置
跨 session 自动加载
"Tom 偏好简洁注释"

核心理解:

  • 上下文是 RAM,关机就没;

  • CLAUDE.md 是写在项目里的 “规则书”,所有人共享;

  • Auto Memory 是 Claude 学到的 “个人偏好”,只跟你。

接下来我们各个击破。


二、上下文窗口:你必须懂的 “显存”

上下文窗口(Context Window)是 Claude 一次能 “看到” 的文本量。可以理解为:

它就是 Claude 的工作台,桌子大但有限。摆满了就得先收一些走。

上下文里都装了什么?

  1. 系统指令(Anthropic 写好的)

  2. 你的 CLAUDE.md 和 rules 文件

  3. MCP / Skills / Subagent 等扩展的描述(不是它们本体,是 “工具说明书”)

  4. 当前对话的所有消息

  5. Claude 调用工具的输入和完整输出

第 5 点最容易爆炸:让它读一个 10 万行的日志文件,整个文件就进上下文了。

/context 看占用

/context

会显示当前用了百分之多少、各类内容各占多少。养成开发中段看一次的习惯,能预判什么时候要 compact。

上下文满了会发生什么?

会触发 Compaction(自动压缩):Claude 把历史对话改写成简短摘要,腾出空间。

问题在于:摘要会丢细节。所以你刚才告诉它的某个变量名、某个偏好,可能在 compact 后就模糊了。

三种应对策略(按推荐度排序)

  1. 写进 CLAUDE.md——稳定信息别留在对话里,写进项目记忆,每次启动自动加载且不会被压缩。

  2. 分配给 Subagent——大文件读取、长测试日志,扔给子代理(下面 “Agents” 篇详讲),它的上下文是隔离的,不污染主对话。

  3. 任务做完就 /clear——开新 session,把当前的总结写到 CLAUDE.md。


三、CLAUDE.md:项目的 “协作守则”

这是你和团队最重要的杠杆。写好一份 CLAUDE.md,能让 Claude 的输出质量翻倍。

它放哪?

  • 项目根: 项目名/CLAUDE.md(提交到 Git,团队共享)

  • 用户级:~/.claude/CLAUDE.md(只你自己用,跨项目生效)

  • 子目录: 项目名/src/api/CLAUDE.md(只对该目录内的操作生效)

加载规则:Claude 启动时会从当前目录向上扫,把找到的所有 CLAUDE.md 都加载。子目录的 CLAUDE.md 只在当前操作发生在该目录下时被 “重点关注”

它该写什么?

写 " 不写下来 Claude 就会做错的事 "。三类内容最有价值:

  1. 项目硬约定
-包管理器只用 pnpm,禁止使用 npm 或 yarn
-测试框架是 vitest,不要装 jest
-数据库迁移用 prisma migrate,禁止手写 SQL DDL
  1. 代码风格 / 命名
-React 组件用函数组件 + hooks,不写 class 组件
-文件名 kebab-case,组件名 PascalCase
-所有 API handler 必须用 zod 校验入参
  1. 怎么验证工作完成了
-改完代码后必须跑`pnpm test`全绿
-提交前跑`pnpm lint --fix`
-数据库相关改动后跑`pnpm db:generate`

最后一点尤其关键——给 Claude 一个 “验证手段”,它会自己反复跑直到通过。这是它做长任务的根基。

它不该写什么?

❌ 项目背景介绍、人员名单、商业目标(这些放 README.md,不放 CLAUDE.md)

❌ 上百条琐碎规则(放进 .claude/rules/ 拆开管理)

❌ 临时性想法(写进当下 prompt 即可)

经验法则:CLAUDE.md 控制在 200 行以内。超过就该拆。

/memory 命令:直接编辑

在 Claude 里输入 /memory 会弹出菜单,让你选要编辑哪一个 CLAUDE.md(项目级或用户级),然后用默认编辑器打开。改完保存,下次 session 即生效。


四、.claude/rules/:CLAUDE.md 太大时的解药

当你的项目规则超过 200 行,就该拆。

你的项目/
├─ CLAUDE.md                    # 100 行核心约定
└─ .claude/
   └─ rules/
      ├─ frontend.md            # 前端规则
      ├─ database.md            # 数据库规则
      ├─ testing.md             # 测试规则
      └─ security.md            # 安全规则

路径作用域

rules 文件支持 frontmatter 指定路径:

---
paths: ["src/components/**/*.tsx"]
---
- 所有组件必须用 forwardRef 暴露
- props 必须用 zod schema 校验

这条规则只在 Claude 操作 src/components/ 下的 tsx 文件时生效。这能省下大量上下文——不操作前端时根本不会加载前端规则。

跨项目共享

用 symlink:

ln -s ~/dotfiles/claude-rules ~/项目/.claude/rules

这样你有 10 个 React 项目时,更新一份就好。


五、AGENTS.md:和其他 AI 工具共享的标准(要主动 import 才生效)

AGENTS.md 是 OpenAI Codex 等其他 AI 编程工具的 “项目记忆” 标准格式。Claude Code 默认读的是 CLAUDE.md,不是 AGENTS.md。如果你的团队同时用多个 AI 工具,想 “一份文件多家通用”,需要主动让 Claude 也读到它。

两种做法:

做法 1:在 CLAUDE.md 里 import
# CLAUDE.md
@AGENTS.md
## Claude 专属补充
-用 plan mode 改动 src/billing/ 下的文件

@AGENTS.md 是 CLAUDE.md 的 import 语法(下面 “Imports” 小节会讲),session 启动时 AGENTS.md 的内容会被拼进来。

做法 2:用 symlink(不需要 Claude 专属内容时)
ln -s AGENTS.md CLAUDE.md

让两个文件指向同一份内容。Windows 上 symlink 需要管理员权限,推荐用做法 1。

怎么分工?

内容类型
放哪
所有 AI 工具都该遵守的(架构、命令、约定)
**AGENTS.md**
只有 Claude Code 才能用的特性(plan mode、Skill 名等)
**CLAUDE.md**(同时 import AGENTS.md)
只用 Claude Code、且不在乎跨工具
只写 **CLAUDE.md** 即可,不用 AGENTS.md

六、Imports:CLAUDE.md 也能拆

CLAUDE.md 里可以用 @ 引入其他文件:

# 项目约定
@./docs/api-conventions.md
@./docs/git-workflow.md
## 项目专属补充
...

被引入的文件会在加载时拼进来。和 .claude/rules/ 的区别:rules 有路径作用域、自动按需加载;imports 是全部加载。新手别滥用 imports,否则上下文很快就爆。


七、Auto Memory:长期偏好的 “自动笔记”

这是 Claude 的新功能:它会自动记下你的偏好、习惯,跨 session 保留。

例如:你某次说 “以后注释都用英文”,Auto Memory 可能就记下来了,下次新 session 它会主动用英文写注释。

怎么管理?

  • 启用 / 关闭:在 /memory 菜单里有开关;

  • 查看它记了什么:/memory→ 浏览 auto memory 内容;

  • 删除:可单条编辑或全清。

它和 CLAUDE.md 怎么分工?

选 CLAUDE.md
选 Auto Memory
团队共享的规则
你个人的口味
项目专属
跨项目通用
你想清楚控制的
让 Claude 自己学的

建议:核心规则永远走 CLAUDE.md(可控、可审),Auto Memory 当锦上添花。如果是企业生产环境,可以直接关掉 Auto Memory。


八、Compaction:满了之后

理解了上下文窗口,就该理解 Compaction。

自动 compaction

上下文到 80%-90% 左右时,Claude 自动触发:把前面的消息浓缩成摘要,腾出空间继续。

会发生两件事:

1.✅ 早期对话的结论性内容被保留;

2.❌ 早期工具调用的详细输出会丢;

3.⚠️ CLAUDE.md/rules 不会被压缩,永远在。

手动 compaction

输入 /compact,立即触发。适合 “我感觉它快爆了,但还有一大堆事要做” 的时候。

用 Hook 介入 compaction

如果你不想让 Claude 自己决定怎么压缩,可以挂 PreCompacthook(后面 “自动化” 篇详讲),在压缩前注入额外指令,比如 “压缩时务必保留 X 信息”。


九、写一份 “模板级” CLAUDE.md

一个能立刻抄走改改用的模板:

# 项目名
## 项目类型
Next.js 14 App Router + TypeScript + Prisma + PostgreSQL
## 关键约定
-包管理:**只用 pnpm**
-测试:vitest,所有 PR 需`pnpm test`全绿
-提交前:`pnpm lint && pnpm typecheck`必须通过
-数据库:所有 schema 改动通过`prisma migrate`,禁手写 SQL
## 代码风格
-文件名 kebab-case,组件 PascalCase
-服务端 action 文件以`.action.ts`结尾
-API 入参必须 zod 校验
## 目录约定
-`src/app/`: 路由
-`src/components/ui/`: 基础组件(不业务)
-`src/components/`: 业务组件
-`src/lib/`: 工具函数 & 第三方封装
-`prisma/`: schema 和 migration
## 重要:在改动前先看
-@./docs/architecture.md
-@./docs/api-conventions.md
## 完成的定义
-代码改完 →`pnpm test`全绿
-涉及 schema →`pnpm db:generate`
-涉及 UI → 至少自测一遍页面渲染

把它放到项目根,所有协作者(人和 AI)的水平瞬间拉齐一截。


十、最容易踩的 5 个坑

  1. CLAUDE.md 写成 README:长篇背景介绍,浪费上下文。CLAUDE.md 应该是 “祈使句”,告诉 Claude 该做什么不该做什么。

  2. 规则太多塞在一个文件:超过 200 行就拆到 .claude/rules/,用路径作用域。

  3. 指望 Claude “记得” 上次说的话:默认不会跨 session 记忆。要持久化就写进 CLAUDE.md 或 Auto Memory。

  4. 不看 /context:上下文要爆了都不知道,等 compact 完发现关键信息丢了。

  5. 修改 CLAUDE.md 不重启 session:CLAUDE.md 是 session 启动时加载的,改完要新开 session 或运行 /memory 重载。


✅ 本篇要点回顾

  • 三类记忆:上下文(短期)、CLAUDE.md(项目共享)、Auto Memory(个人偏好)。

  • 上下文窗口有限,/context 看占用,满了触发 compaction(会丢细节)。

  • CLAUDE.md 写约定 + 风格 + 怎么验证,三类内容最值钱。控制在 200 行内。

  • 规则太多用 .claude/rules/ 拆,配 frontmatter 做路径作用域。

  • Auto Memory 是锦上添花,企业场景可关闭,核心规则全走 CLAUDE.md。

  • 大任务上下文紧张时,三招:写进 CLAUDE.md / 用 Subagent / 做完就 /clear。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐