如果你已经用 Claude Code 干过几天活,下面这些对话你应该很眼熟:
你:帮我实现xxx功能
Agent:完成后,自动commit push了
你:……我不是和你说过禁止自动提交push么!!!
新开一个会话,同样的事又来一遍,以至于网络上流传的一张人类和AI对话 最多的榜单,其中大部分也都是类似的问题

这不怪 Agent。每个 Claude Code 会话都是从一个全新的上下文窗口开始的。
上次聊了什么、你纠正过什么,它全都不记得。它就像一个技术很好、但每天早上都会失忆的新同事。
要解决这个问题,最笨的办法是每次开会话都先贴一大段「项目须知」。CLAUDE.md 的出现就是为了解决这个问题:你把规范写进CLAUDE.md,Agent 每次启动都会先把它加载到上下文中。
一、CLAUDE.md 是什么

1.CLAUDE.md 是一个 Markdown文件
CLAUDE.md 没有特殊语法,就是一个普通的 Markdown 文件。你用大白话写,Claude 每次会话开始时读它
它的本质是:在每次会话开头,自动塞进上下文的一段提示词。
记住这句话,后面很多「该怎么写」「为什么不能写太长」的问题,都能从这里推出来。
2.CLAUDE.md 加载时机
分两种情况:
- 启动时加载:你在哪个目录启动 Claude Code,这个目录以及它所有上级目录里的
CLAUDE.md都会在启动时读进来。比如你在foo/bar/下启动,foo/CLAUDE.md和foo/bar/CLAUDE.md都会被加载 - 按需加载:子目录里的
CLAUDE.md不会在启动时读,而是等 Claude 读到那个子目录里的文件时才加载
多个文件之间不是覆盖,而是拼接。从文件系统根目录往下排,离你启动位置越近的,越晚进入上下文,这会在第三本《Claude Code 源码解析》里有所体现
二、CLAUDE.md 遗忘性
先说一个最容易误会的细节:CLAUDE.md 里面写的内容 AI并不是100%遵守的,它是「建议」,不是「强制」,有很小的概率会不遵守
也就是说,你写「禁止执行 rm -rf」,它大概率会遵守,但不是 100%。如果某个操作无论如何都不能发生,应该用上一节(第二章 第3节)的权限规则,或者第三章 第4节 的 Hook 去拦截,不要只靠 CLAUDE.md。
1.如何确定被正确加载了
在会话里运行:
/context
在 Memory files 这一栏能看到当前加载了哪些 CLAUDE.md。这是后面动手验证的第一步。

2.邪修方案:老公版
有的人会在CLAUDE.md中写到,请在后续的对话中用老公来称呼我,这样可以观测到AI是否在长上下文中,是否还在遵守CLAUDE.md的规范
如果不回复你“老公”了,可能就遗忘了,就建议开新对话窗口,进行提问了