本页目录5
这个考点是什么
CLAUDE.md 是 Claude Code 面向会话的“记忆”机制,用自然语言告诉 Claude 项目背景、代码规范、常用命令等,供其在开始工作前读到。
它和 settings.json 系列文件管的东西不同:
-
后者管行为参数(权限规则、
model、env等),走的是 scope precedence(同一标量项由最高优先级作用域的值单独胜出); -
CLAUDE.md管的是给模型看的上下文说明,走的是层级叠加——多个文件的内容会被完整拼接进上下文,而不是由更贴近的文件覆盖更上层的文件。
CLAUDE.md 存在多个可被自动发现的层级:企业级 managed-policy(如 Linux/WSL 上的 /etc/claude-code/CLAUDE.md)、用户级 ~/.claude/CLAUDE.md、项目级(项目根目录 ./CLAUDE.md 或 ./.claude/CLAUDE.md)、以及不入库的本地个人层 CLAUDE.local.md。
Claude Code 启动时从当前工作目录向上遍历目录树,把沿途找到的每一份 CLAUDE.md 全部读入,顺序从最外层(managed → user)到最贴近工作目录的项目文件,也就是越靠近你启动位置的文件读得越晚,而不是覆盖前面的内容。
此外 CLAUDE.md 支持 @path/to/file 导入语法,可递归导入其他文件(最大深度四跳),相对路径以“被导入文件所在位置”为基准解析,而非当前工作目录;写在代码块或行内反引号里的路径不会触发导入,只作为字面文本展示。
为什么考
这个考点常见考法是制造“多层定义同一设置项,最终生效值是谁”的场景,诱使人把 settings.json 的 scope precedence(单值胜出)和 CLAUDE.md 的层级拼接(内容叠加,仅顺序不同)混为一谈;也会针对 @import 语法的递归深度、相对路径基准、代码块转义等细节出题,以及 managed-policy CLAUDE.md 的部署路径与“不可被排除”特性,考察对加载顺序和机制边界的精确记忆,而不是模糊印象。
核心辨析
- 1
CLAUDE.md是层级拼接,不是就近覆盖Claude Code 会把 managed → user → project(从仓库根到工作目录)沿途发现的每份
CLAUDE.md全部读入上下文,顺序上离工作目录越近的文件读得越晚,但内容是叠加而非替换;这与settings.json里标量配置(如model)“最高优先级单值胜出”的机制是两套不同规则,题目常故意混用二者的措辞来设陷阱。 - 2
@path/to/file导入语法相对路径以“被导入文件所在目录”为基准解析,而不是当前工作目录;导入可以递归,最大深度四跳;导入内容在会话启动时就已展开进上下文,因此把内容拆成多个导入文件只是方便组织,并不能节省 token。
- 3
反引号或代码块中出现的
@path视为字面文本,不会触发导入——这是用来“在文档里提及某个导入路径而不实际导入”的转义手段,容易被误判为导入失效。 - 4
managed-policy
CLAUDE.md(企业策略层)位于系统级路径(如 Linux/WSL 的/etc/claude-code/CLAUDE.md),加载顺序最靠前,且不能通过claudeMdExcludes排除;其内容也可以用claudeMd键直接内嵌进managed-settings.json,但这个键只在 managed/policy 设置里生效,写进项目或用户级settings.json不起作用。 - 5
已有
AGENTS.md想让 Claude Code 也遵循,正确做法是新建一个CLAUDE.md用@AGENTS.md导入它(或做符号链接),因为 Claude Code 启动时只自动发现CLAUDE.md/CLAUDE.local.md,不会主动读取AGENTS.md。 - 6
CLAUDE.md只是以普通消息形式注入上下文的建议性说明,不保证被严格遵守,也起不到强制拦截的作用;真正需要强制执行的规则(比如禁止某些命令)应该写进settings.json的 permission 规则或PreToolUsehook。
反模式对照
以为离工作目录最近的 CLAUDE.md 会覆盖上级目录里的 CLAUDE.md
所有层级的 CLAUDE.md 都会被完整拼接进上下文,只是顺序上从外到内、越近的越靠后读到
Claude Code 走的是目录树遍历加拼接的加载模型,而不是“唯一生效值”的覆盖模型,这一点和 settings.json 的标量配置刚好相反。
把需要强制执行的规则写进 CLAUDE.md,以为这样就能拦住 Claude 不去做某件事
真正的强制护栏写在 settings.json 的 permission allow/deny 规则或 PreToolUse hook 里
CLAUDE.md 是以消息形式注入的建议性上下文,没有强制执行力;hooks 是由 harness 本身执行的代码级拦截,才具备强制性。
认为 Claude Code 会像其他一些编码助手一样自动读取仓库里现成的 AGENTS.md
新建一个 CLAUDE.md 用 @AGENTS.md 把它导入进来,或者直接把 CLAUDE.md 符号链接到 AGENTS.md
Claude Code 只自动发现 CLAUDE.md/CLAUDE.local.md;两份独立维护的文件很容易在后续修改中彼此漂移出现内容不一致。
遇到“多层同名设置项谁生效”的题目时,不区分问的是 CLAUDE.md 的拼接场景还是 settings.json 的标量配置场景,统一套用“企业策略优先”的结论作答
先判断问的是标量配置(走 scope precedence,单值胜出,permission 规则是唯一按合并处理的例外)还是 CLAUDE.md 内容(走层级拼接,全部叠加)
两套机制虽然都是 managed/企业层级最优先,但一个是“挑一个值生效”,一个是“全部读入”,混用会在选项设计成“哪个值生效”与“加载顺序”对照时翻车。
练这个考点
练习模式支持按考点专练(需 Google 登录,不占用正式考机会)。
专练考点 3.1该考点的公开题(免登录,含完整解析):
- A developer sets the `model` key to a different value in each of these places: `~/.claude/…
- You define the same scalar setting (for example, `model`) with a different value in each o…
- Which of the following statements about how CLAUDE.md memory files are loaded are TRUE? Se…
- A senior engineer adds detailed coding standards and security guidelines to their ~/.claud…
- You maintain a monorepo with five packages: a Python backend, a TypeScript frontend, a Go …
- A developer wants Claude Code to never commit directly to the main branch. Where is the co…
延伸阅读: