一、为什么需要了解 CLAUDE.md 的工作机制
Claude 读取了你的 CLAUDE.md,却没有执行其中某条指令。你不确定是指令写得不够明确,还是文件根本没被加载。
200 行以内的 CLAUDE.md 遵从度明显高于更长的版本,但你不知道这个阈值从何而来。多个 CLAUDE.md 文件同时存在时,冲突的指令可能被任意选择,而你无从预判哪条会生效。
这些现象的根源在 CLAUDE.md 的加载机制、合并规则和内部处理流程中。掌握这些机制后,指令未生效的原因可以准确定位,修正方式也随之明确。
二、核心内容
加载时机与方式
Claude Code 启动会话时,执行以下加载序列:
- 从当前工作目录(cwd)向上遍历目录树,检查每级目录中的 CLAUDE.md
- 加载全局用户级
~/.claude/CLAUDE.md - 加载 CLAUDE.local.md(项目本地覆盖层,自动被 gitignore)
- 加载
.claude/rules/中的无条件 Rules - 加载 Auto-Memory 的 MEMORY.md 前 200 行
子目录中的 CLAUDE.md 不在启动时加载。Claude 读取该子目录中的文件时才触发加载——这是惰性加载行为。
--add-dir 给 Claude 额外目录访问权限时,默认不加载额外目录的 CLAUDE.md。需要设置环境变量 CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 才会加载。
加载过程中每份文件被读入时,都会触发 InstructionsLoaded 生命周期事件——Hooks 模块的 生命周期事件概览 中有详细说明。
合并规则与优先级
所有 CLAUDE.md 文件加载后共存于上下文中。它们不像 settings.json 那样按 key 合并覆盖——每份文件的内容完整保留,同时呈现给 Claude。
当两份文件包含冲突指令时,Claude 依据「更具体的位置优先」原则选择。实际表现: