v2.1.309 中发生了什么变化
Anthropic 的记忆文档现在针对这种情况增加了一个故障排除条目,标题为"Claude 忽略了我的子目录 CLAUDE.md 的末尾"。它直接描述了这一行为:"当子目录 CLAUDE.md 或按需加载的规则文件超出单文件大小限制时,Claude 仅接收其开头部分。该部分以一条提示结束,告知 Claude 使用 Read 工具读取其余部分,在 Claude 选择读取之前,后面的指令不会进入其上下文。"
该条目的末尾是版本说明:"在 v2.1.309 之前,Claude Code 没有对按需加载的文件应用此限制。"
因此,这一变化范围很窄。发布说明描述了一件事:现在,大型按需加载文件是部分交付,而不是完整交付。根目录文件的规则是单独描述的,其限制要大得多。
引入限制的原因
发布说明给出了原因:在 Claude 读取非常大的嵌套 CLAUDE.md 下的文件后,会话会反复进行压缩。当 Claude 访问某个文件夹时加载的大型指令文件可能会将会话推向压缩,然后在 Claude 下次在该文件夹中工作时再次加载。
因此,这个限制解决了一个实际问题。代价是现在文件的末尾部分被舍弃了,而且文档中描述的提示说明是写给 Claude 的,而不是写给您的。
该限制适用于哪些文件
文档列出了按需加载并受此限制约束的文件:
- "启动 Claude Code 的目录的子目录中的 CLAUDE.md 和 CLAUDE.local.md,以及它们通过 @path 导入的文件"
- "子目录的 .claude/rules/ 中的规则文件"
- "项目 .claude/rules/ 或 ~/.claude/rules/ 中的路径范围规则"
有两个细节很容易被忽略。导入的文件也包含在同一个条目中。而且,即使在项目的 .claude/rules/ 主文件夹中,路径范围规则也会受到限制,因为它们是在 Claude 处理匹配文件时加载的,而不是在启动时加载。
在启动时加载的文件工作方式不同。文档指出,MEMORY.md 限制"仅适用于 MEMORY.md。只要文件大小在 4 MiB 或以下,Claude 就会完整获取启动时加载的每个 CLAUDE.md 文件。"它补充道,"Claude Code 会跳过超过 4 MiB 的文件,完全不加载它。"然后它指向了新规则:"路径范围规则和子目录中的 CLAUDE.md 文件有其自身更小的单文件限制。"
因此,根目录 CLAUDE.md 在很大尺寸内都可以完整加载,而下一级文件夹中的 CLAUDE.md 一旦超过小得多的限制就会被部分加载。
您的会话限制有多大
该限制取决于您的会话运行所使用的上下文窗口。文档给出了以下数值:
- 200K 上下文窗口:40,000 个字符
- 1M 上下文窗口:在 Claude Opus 4.6 和 Claude Sonnet 4.6 上为 200,000 个字符,在后续模型上为 150,000 个字符
单位是字符。Anthropic 的尺寸建议是以行数为单位的("目标是每个 CLAUDE.md 文件少于 200 行"),但一个包含长行的 200 行文件仍然可能很大。
窗口也很重要。目前有几款模型默认使用 1M 窗口运行,但您可以关闭它。Anthropic 的模型配置页面指出:"要将会话保持在 200K 窗口,请在您的 shell 或设置文件中设置 CLAUDE_CODE_DISABLE_1M_CONTEXT=1。"如果您或您的团队设置了该变量,您的会话将使用 40,000 字符的限制,而对于使用 1M 窗口的同事来说可以完整加载的文件,对您来说可能只能部分加载。如果您使用的模型运行在 200K 窗口,情况也是如此。
当文件超出限制时 Claude 实际看到了什么
Claude 会获取文件的开头部分以及一条提示,告知它可以使用 Read 工具读取其余部分。在"Claude 选择"读取它们之前,后面的指令不会进入 Claude 的上下文。Claude 是否读取其余部分取决于它面临的任务。如果您关心的指令是长文件 services/payments/CLAUDE.md 底部关于测试名称的规范,而 Claude 正在修复 Bug 而不是编写测试,它可能没有理由打开其余部分。
由此产生以下三点:
- 文件内部的顺序现在很重要。 超出限制文件的顶部内容会到达 Claude。底部的内容则可能无法到达。
- 导入会增加大小。 Anthropic 的指南指出,导入"可以帮助您组织长文件,但不会降低其上下文成本,因为导入的文件会与导入它们的 CLAUDE.md 一起加载。"
- 提示说明是给 Claude 的。 故障排除条目描述了交付部分末尾的一条提示,告知 Claude 其余部分在哪里。它并没有描述给您的通知,而且该条目为您提供了一种自行检查文件的方法。
按需加载文件原有的行为方式
新的限制是在原有的、与根文件不同的加载规则之上起作用的。
当 Claude 访问文件夹时加载。 Claude Code 会在您工作目录下的子目录中查找 CLAUDE.md 文件,"Claude Code 不是在启动时加载它们,而是在 Claude 读取、写入或编辑该子目录中的另一个文件时加载每一个文件。"
它们是累加而不是覆盖。 Anthropic 表示:"所有发现的文件都会被拼接进上下文中,而不是相互覆盖。"子目录文件不会替换根文件,而是累加到根文件上。
它们不会显示在启动列表中。 故障排除部分指出:"工作目录子目录中的 CLAUDE.md 不会出现在 Memory files 下,因为它是按需加载而不是在启动时加载。加载时,终端中会出现一行带有其路径的 Loaded 提示。"
压缩将它们视为对话。 上下文窗口页面指出:"当 Claude 读取、写入或编辑其触发文件时,路径范围规则和嵌套的 CLAUDE.md 文件会加载到消息历史记录中,因此压缩会像处理其他内容一样将它们总结掉。"下次 Claude 访问匹配的文件时,它们会再次加载。其建议是:"如果规则必须在压缩后保持存在,请删除 paths: 前置元数据(frontmatter)或将其移动到项目根目录的 CLAUDE.md 中。"我们关于针对自动压缩保留所需内容的指南完整涵盖了该列表,而我们关于空闲压缩的指南则涵盖了您离开时发生压缩的情况。
因此,子目录文件中的指令可能会因为三个原因脱离 Claude 的上下文:Claude 尚未访问该文件夹、压缩将其总结掉了,或者它超出了截断限制。
Codex 中的相同问题,不同的解决方法
Codex 也会限制指令文件。OpenAI 的 Codex 文档指出:"Codex 会跳过空文件,并且一旦合并大小达到 project_doc_max_bytes 定义的限制(默认为 32 KiB),就会停止添加文件。"
Codex 将整个 AGENTS.md 文件链限制在一起,因此最靠近您工作目录的文件面临风险。Claude Code 现在单独限制每个按需加载的文件,因此每个大型文件的末尾部分面临风险。两者都防止了指令文件挤占工作空间,而且在这两种情况下,最后的几行都会最先被舍弃。我们关于阻止 Codex 跳过您的 AGENTS.md 规则的指南涵盖了 Codex 方面的内容。
人们首先尝试的方法
假设文件太小无关紧要。 如果行很长,一个 200 行的文件仍然可能超过 40,000 个字符,而这就是 200K 窗口的限制。请计算字符数,而不是行数。
检查 /context。 子目录文件不会出现在 Memory files 下,因为它们是按需加载的。
将所有内容移入根目录 CLAUDE.md。 这可以绕过单文件限制,但根文件会在每个会话中加载,Anthropic 警告说:"较长的文件会消耗更多上下文并降低遵循度。"
添加一行告诉 Claude 读取整个文件的指令。 如果该行位于超出限制文件的底部附近,它就处于 Claude 可能无法接收的部分。
解决方法:测量文件,将重要内容放在加载位置,然后将原因保存在别处
步骤 1:找到您的按需加载文件并计算其字符数
列出该限制覆盖的文件:启动 Claude Code 的文件夹下方的 CLAUDE.md 和 CLAUDE.local.md 文件、它们通过 @path 导入的任何内容、子目录 .claude/rules/ 文件夹中的规则文件,以及项目或 ~/.claude/rules/ 中带有 paths: 字段的任何规则文件。
Anthropic 关于计数的指令很简短:"在 Bash 或 Zsh 中,运行 wc -m path/to/CLAUDE.md 以打印文件的字符数。"将其与您的会话限制进行比较:200K 窗口上为 40,000 个字符,1M 窗口上为 150,000 或 200,000 个字符(取决于模型)。
要查看实际加载了哪些文件以及何时加载,Anthropic 建议使用一个钩子(hook):"使用 InstructionsLoaded 钩子来记录加载了哪些 CLAUDE.md 和规则文件、它们何时加载以及原因。"您还可以在 Claude 开始在某个文件夹中工作时,留意终端中的 Loaded 行。
步骤 2:修剪、拆分或将重要行向上移动
对于超出限制的文件,文档给出了两个选择:"修剪文件,或者将其中的一部分移动到一个或多个规则文件中,每个规则文件都会单独计算限制"。
拆分之所以有效,是因为每个规则文件都有自己的限制。一个 60,000 字符的 api/CLAUDE.md 可以变成一个更短的 CLAUDE.md 加上两个针对其相关路径的规则文件。当 Claude 访问匹配的文件时,每个文件都会加载并保持在限制以下。
将最重要的规则放在每个文件的顶部附近,这样如果文件以后变大,顶部仍然可以到达 Claude。Anthropic 对技能(skills)也给出了同样的建议,技能在压缩后会从末尾被截断:"截断会保留文件的开头,因此请将最重要的指令放在 SKILL.md 的顶部附近。"
两个内置工具可以帮助进行修剪。/doctor prompt-audit 会寻找"为旧模型编写的指令、指向不存在的文件或命令的引用,以及相互矛盾的文件",并在您同意之前提出修改建议而不改变任何内容。在会收集到其他团队文件的大型单体仓库(monorepos)中,claudeMdExcludes 允许您通过路径或 glob 模式跳过特定的 CLAUDE.md 文件。
步骤 3:将背景信息移出指令文件
Anthropic 自带的修剪工具展示了文件中应该保留的内容。/doctor 检查会"剪掉 Claude 可以从代码库中推导出的内容,例如目录布局、依赖项列表和架构概述,并保留陷阱、基本原理以及与工具默认值不同的规范。"因此,规则旁边的一行原因可以保留。
可以舍弃的是冗长的历史:支付服务为什么要重试两次的完整故事、哪些迁移被放弃了、谁主张采用某种测试布局。将这些内容移至决策文档或引入该规则的拉取请求(pull request)中。对于仅对某些任务重要的流程,Anthropic 指向了技能:"对于不需要一直处于上下文中的特定任务指令,请改用技能,它们仅在您调用它们或 Claude 确定它们与您的提示词相关时才会加载。"文件变小了,而历史记录仍然被记录了下来。
在 MemoryLake 中进行设置
新的限制印证了文档在其他地方已经提出的一点:指令文件是存放简短规则的地方,而 Claude 是在特定条件下接收它的。当 Claude 访问文件夹时它会加载,它会被压缩总结,现在当它过长时还会被截断。规则背后的冗长背景是首先被挤出的内容。
MemoryLake 是一个记忆层,用于将这些背景信息保存在您维护的一个列表中,供 Claude Code 以及您连接的其他助手(如 ChatGPT 和 Codex)使用。
您可以用自己的语言亲自编写这些条目。不会从您的 CLAUDE.md 文件、规则文件、自动记忆文件夹或任何供应商的存储中读取、写入或删除任何内容。对于工作仓库,请遵守您组织关于在仓库之外保留内容的政策。
步骤 1:创建 API 密钥
登录并从控制面板生成一个密钥。该密钥属于您的 MemoryLake 工作区,与您的 Anthropic 账户是分开的。

步骤 2:上传您的第一批记忆
从您在解决方法的步骤 3 中移出指令文件的内容开始:规则背后的历史、放弃的方法、关于服务的决策。每个条目一个要点,注明日期,并标记其适用的文件夹或服务。

步骤 3:连接您的 AI 和智能体
连接 Claude Code 和您使用的其他助手。当任务需要时,背景信息即可随时可用,而您的 CLAUDE.md 文件也能保持足够简短以完整加载。

这在实践中改变了什么
第一个区别是,您知道这一变化影响了您的哪些文件,因为您已经对照会话限制对它们进行了计数。
第二个区别是,您关心的规则能够到达 Claude。它们位于简短文件的顶部附近或范围规则文件中,因此不断增长的文件不会将它们推向截断线之外。
第三个区别是,您的指令文件不再承担双重任务。规则保留在 CLAUDE.md 中,而背后的历史则存在于其他地方。如果您还为其他工具保留了 AGENTS.md,我们关于 Claude Code 如何读取 AGENTS.md 的指南涵盖了哪个文件会胜出。
子目录 CLAUDE.md 文件的最佳实践
计算字符数。 200K 窗口的限制为 40,000 个字符,1M 窗口的限制为 150,000 或 200,000 个字符。
检查您的会话使用的窗口。 CLAUDE_CODE_DISABLE_1M_CONTEXT=1 和 200K 模型会使您处于较低的限制。
将最重要的规则放在最前面。 如果文件增长超出限制,Claude 接收到的是开头部分。
拆分为范围规则文件。 每个规则文件都会单独计算限制。
将冗长的历史记录移出指令文件。 一行字的原因可以保留。完整的故事应该放在不争夺上下文的地方。
如果您在多个工作树(worktrees)中工作,我们关于每个工作树会话加载内容的指南涵盖了指令文件和自动记忆在其中的行为方式。
结论
Claude Code v2.1.309 为按需加载的指令文件增加了单文件大小限制:子目录 CLAUDE.md 和 CLAUDE.local.md 文件、它们的导入内容、子目录 .claude/rules/ 文件夹中的规则,以及路径范围规则。超出限制的文件在到达 Claude 时仅包含开头部分和一条提示,其余部分在 Claude 读取之前将保持在上下文之外。项目根目录的 CLAUDE.md 仍然可以完整加载,最高可达 4 MiB。
计算您的按需加载文件中的字符数,将其与您的上下文窗口限制进行比较,并拆分或修剪超出的文件。将重要的规则放在前面,并将冗长的背景信息移到不需要挤占空间的地方。