MemoryLake
返回全部文章
Tutorial2026 年 10 月 28 日·11 分钟阅读

什么是 Claude Code 规则?.claude/rules 文件夹和 paths 前置内容如何决定规则加载时机 (2026)

一个最初只有 20 行的 CLAUDE.md 文件现在变成了 300 行。它涵盖了测试、API 规范、样式、部署,以及一个只有在处理支付模块时才相关的支付模块章节。无论任务是否需要,Claude 在每次会话中都会读取所有内容。

Claude Code 的规则正是为此而生。它们允许你按主题将指令拆分为小文件,并为其中一些设置范围(scope),以便仅在 Claude 处理匹配的文件时才加载。问题在于,“仅在需要时加载”有精确的触发条件,而一个没有按预期加载的规则看起来就像 Claude 在无视你。

本指南将解释什么是 Claude Code 规则、.claude/rules/ 文件夹如何工作、paths 前置内容的作用、每种规则何时进入 Claude 的上下文、规则与 CLAUDE.md 有何不同,以及如何检查会话实际拥有哪些规则。

什么是 Claude Code 规则

Anthropic 的记忆文档是这样介绍它们的:“对于较大的项目,你可以使用 .claude/rules/ 目录将指令组织到多个文件中。这可以保持指令的模块化,并使团队更易于维护。”

规则是一个 markdown 文件。你将其放在项目的 .claude/rules/ 目录中,每个文件一个主题,文件名说明其涵盖的内容,例如 testing.md 或 api-design.md。“所有 .md 文件都会被递归发现,因此你可以将规则组织到子目录中,如 frontend/ 或 backend/”。

规则分为两种:

  • 没有 paths 前置内容的规则。 这些规则在每次会话开始时加载。
  • 路径范围规则。 这些规则带有 paths 字段,仅在 Claude 处理匹配的文件时加载。

文档在注释中总结了这种权衡:“规则在每次会话或打开匹配文件时加载到上下文中。对于不需要一直存在于上下文中的特定任务指令,请改用 skills,它们仅在你调用它们或 Claude 确定它们与你的提示词相关时才会加载。”

无 paths 规则何时加载

没有 paths 字段的规则表现得就像项目指令的一部分。“没有 paths 前置内容的规则在启动时加载,优先级与 .claude/CLAUDE.md 相同。”

这使得无范围规则成为拆分冗长 CLAUDE.md 而不改变 Claude 所见内容的一种方式。内容仍然在每次会话中加载;只是在独立文件中更容易维护。

路径范围规则何时加载

路径范围规则以列出 glob 模式的 YAML 前置内容开头:

---
paths:
  - "src/api/**/*.ts"
---

- 所有 API 端点必须包含输入验证
- 使用标准错误响应格式

文档明确说明了触发条件:“当 Claude 对匹配的文件使用 Read、Write 或 Edit 工具时,路径范围规则就会加载。”当 Claude 通过算作读取的 Bash 命令(如对单个文件执行 cat 或 head)查看匹配文件时,它也会加载,并且它可以通过指向项目目录的符号链接路径工作。

由此产生两个后果:

  • 仅提及文件是不够的。 规则在 Claude 读取、写入或编辑匹配文件时加载,而不是在你提示词中提到文件名时加载。
  • 规则在开始时并不存在。 在 Claude 接触到匹配文件之前,该规则不在其上下文中。

模式如何匹配

模式是相对于规则基目录的。对于项目规则,即包含规则 .claude 文件夹的目录。对于用户级规则,则是会话的主要工作目录。

你可以列出多个模式并使用花括号扩展,例如 src/**/*.{ts,tsx}。花括号扩展有配额限制:规则的整个 paths 列表共享“1,000 个扩展模式和 4 MiB 的配额”,超过该配额的模式将以未扩展的形式使用,因此其花括号将无法匹配任何文件。

方括号是 glob 语法。带有 [ 但无法被读取为括号表达式的模式是无效的,且不匹配任何内容,尽管规则的其他模式仍会继续工作。要匹配字面意义上的 [,请对其进行转义。

工作树(Worktrees)是一个常见的陷阱。文档指出,要为同级 git 工作树中的文件加载路径范围规则,你需要在该工作树中启动 Claude Code,或使用 /cd 将会话移动到那里。

前置内容可以包含什么

只有一个字段起作用。“paths 是 Claude Code 从规则中读取的唯一字段;任何其他字段都会被忽略且不报错。”Claude Code 在加载规则之前会剥离前置内容,因此它不会占用上下文。

如果 YAML 无法解析,规则并不会悄无声息地失效。Claude Code 会“忽略前置内容,并像没有 paths 一样加载规则”。前置内容中的拼写错误会将范围规则变成每次会话都加载的规则。运行 claude --debug 可以查看解析错误。

用户级规则

规则不仅限于每个项目。“~/.claude/rules/ 中的个人规则适用于你机器上的每个项目。”它们适用于不与特定代码库绑定的偏好设置。

当用户规则和项目规则不一致时,顺序很重要。“Claude Code 在项目规则之前加载用户级规则,因此项目规则在 Claude 上下文中出现的位置比用户规则靠后。两组规则都不会覆盖另一组:如果用户规则和项目规则冲突,Claude 可能会遵循其中任何一个,因此请保持两者一致。”我们的协调冲突 CLAUDE.md 层级指南介绍了如何发现这些冲突。

通过符号链接共享规则

.claude/rules/ 目录支持符号链接,因此团队可以维护一套规则并将其链接到多个项目中。如果符号链接指向工作目录之外,Claude Code 会将其视为外部导入:在为你为项目批准外部导入之前,链接的规则不会加载,之后也只有没有 paths 字段的规则会加载。指向网络路径的符号链接完全不会加载。

规则 vs. CLAUDE.md

两者都是你编写的指令。它们在被发现的方式和加载时机上有所不同。

CLAUDE.md.claude/rules/ 中的规则
位置工作目录、其上级目录及子目录项目中的 .claude/rules/ 以及 ~/.claude/rules/
结构每个位置一个文件任意数量的主题文件,可放在子文件夹中
加载时机启动时加载工作目录及上级目录的文件;当 Claude 接触子目录文件时加载该处文件无 paths 时启动加载;有 paths 且 Claude 接触匹配文件时加载
范围限定按目录按 glob 模式

子目录中的 CLAUDE.md 文件也是按需加载的,因此通过目录限定范围对两者都可行。规则增加了按模式限定范围的功能,这可以跨越目录,例如匹配所有测试文件,无论它们位于何处。

按需加载的文件共享一个限制。路径范围规则和子目录 CLAUDE.md 文件都有单文件大小限制,Claude 仅接收超过限制文件的开头部分。我们的 Claude Code 子目录 CLAUDE.md 限制指南涵盖了具体数值以及如何检查你的限制。

如果你与其他编程工具共享指令,我们的在 Cursor 和 Claude Code 之间共享一个记忆的指南涵盖了每个工具读取的文件。

压缩后规则会发生什么

压缩(Compaction)对这两类规则的处理方式不同。上下文窗口文档将项目根目录 CLAUDE.md 和无范围规则列为压缩后“从磁盘重新注入”,而将带有 paths: 前置内容的规则列为按需重新加载。

文档解释了原因:“路径范围规则和嵌套的 CLAUDE.md 文件在 Claude 读取、写入或编辑其触发文件时加载到消息历史记录中,因此压缩会将它们与其他所有内容一起总结掉。”在压缩之后,只有当 Claude 再次接触匹配文件时,路径范围规则才会重新出现。

文档为绝不能丢失的规则提供了直接指令:“如果规则必须在压缩后保持持久,请删除 paths: 前置内容或将其移动到项目根目录的 CLAUDE.md 中。”我们的引导 Claude Code 自动压缩指南涵盖了压缩保留的其他内容。

人们首先尝试的做法

限定规则范围并期望它在开始时就存在。 路径范围规则在 Claude 接触匹配文件时加载,而不是在会话开始时。

在前置内容中添加 description 等字段。 只有 paths 会被读取;其他字段会被忽略且不报错。

编写无效的 YAML。 规则随后会像没有 paths 一样在每次会话中加载。

将必须遵循的规则放在 paths 之后。 压缩后它就会消失,直到再次接触匹配文件。

保留不一致的用户规则和项目规则。 两者都不会覆盖另一个;Claude 可能会遵循其中任何一个。

在同级工作树中运行。 除非你在该处启动会话或使用 /cd 移动会话,否则来自另一个工作树的路径范围规则不会加载。

解决方法:按主题拆分,仅对条件性内容设置范围,并检查加载情况

第 1 步:将 CLAUDE.md 拆分为主题文件

将冗长 CLAUDE.md 的每个独立部分移动到 .claude/rules/ 中各自的文件中,文件名说明其涵盖的内容。起初保持这些规则无范围。Claude 所看到的内容尚未发生变化;这些文件只是变得更容易阅读和审查。

第 2 步:为仅有时相关的规则设置范围

为仅对某些文件重要的规则添加 paths:支付模块、测试框架、前端目录。对于 Claude 在每个任务中都必须遵循的内容(包括你需要经受住压缩考验的规则),保持无范围。根据代码库中的真实文件路径检查每个模式,并保持每个范围文件在单文件大小限制内。

第 3 步:检查哪些规则实际已加载

运行 /context 查看启动时加载了哪些 CLAUDE.md 和规则文件。路径范围规则在触发之前不会出现在那里。为了观察触发过程,文档建议使用 InstructionsLoaded 钩子,它会记录加载了哪些 CLAUDE.md 和规则文件、何时加载以及原因。如果规则应该加载但没有加载,请检查模式、基目录、前置内容,以及 --setting-sources 是否排除了项目设置(这会跳过项目规则)。

当规则已加载但 Claude 仍不遵循它时,我们的关于 AI 代理为何忽略指令文件的指南涵盖了其他原因。如果你给 Claude 的更正没有生效,我们的关于 Claude Code 忘记你的更正的指南解释了更正的去向。

在 MemoryLake 中设置

规则是存放关于代码库中代码应如何编写的指令的正确位置。它们不太适合存放背后的推理:为什么存在某种规范、尝试过哪些替代方案,以及哪些决策来自会议而非代码。这种上下文对多个代码库和多个工具都很重要。

MemoryLake 是一个记忆层,用于将此类上下文保存在你维护的一个列表中,供 Claude Code 和你连接的其他助手(如 Codex 和 ChatGPT)使用。

你自己用自己的语言编写条目。不会从你的 .claude/rules/ 文件、CLAUDE.md 文件、自动记忆或任何供应商的存储中读取、写入或删除任何内容。Claude Code 继续按照 Anthropic 描述的方式加载规则。

第 1 步:创建 API 密钥

登录并从控制面板生成密钥。该密钥属于你的 MemoryLake 工作区,与你的 Claude 账户分开。

MemoryLake 控制台显示 API 密钥屏幕,在此处创建并复制新密钥以供代理使用
MemoryLake 控制台显示 API 密钥屏幕,在此处创建并复制新密钥以供代理使用

第 2 步:上传你的第一条记忆

从规则背后的原因开始:为什么存在某种规范、它取代了什么,以及在此之前出了什么问题。每个条目一个要点,注明日期,并标记它所解释的代码库或规则文件。

MemoryLake 工作区显示已上传的首批文档,列出了每个文件变为可搜索记忆的过程
MemoryLake 工作区显示已上传的首批文档,列出了每个文件变为可搜索记忆的过程

第 3 步:连接你的 AI 和代理

连接 Claude Code 和你使用的其他助手。规则保留在代码库中,而推理在任何开展工作的地方都可用。

MemoryLake 集成屏幕列出了可以连接到记忆层的 AI 客户端和代理框架
MemoryLake 集成屏幕列出了可以连接到记忆层的 AI 客户端和代理框架

实践中的变化

第一个区别是 CLAUDE.md 变短了,且没有丢失任何内容。主题文件承载相同的指令,而范围规则在不需要它们的会话中停止占用上下文。

第二个区别是你清楚规则何时生效。无范围规则从一开始就在那里,并在压缩后返回。范围规则随第一个匹配文件到达,并可能在压缩后消失。

第三个区别是,缺失的规则是你可以通过 /context 和 InstructionsLoaded 钩子检查的东西,而不是你猜测的东西。

Claude Code 规则的最佳实践

每个文件一个主题。 根据涵盖的内容命名文件。

保持核心规则无范围。 它们在每次会话中加载并在压缩后存续。

仅对条件性内容设置范围。 并针对真实路径测试模式。

在前置内容中仅使用 paths。 其他字段会被忽略。

验证 YAML。 无效的前置内容会使范围规则在所有地方加载。

保持用户规则和项目规则一致。 两者都不会覆盖另一个。

使用 /context 检查。 并使用 InstructionsLoaded 钩子调试触发器。

结论

Claude Code 规则是 .claude/rules/ 中的 markdown 文件,按主题拆分你的指令。没有 paths 的规则在启动时加载,优先级与 .claude/CLAUDE.md 相同,并在压缩后重新注入。带有 paths 的规则在 Claude 读取、写入或编辑匹配文件时加载,压缩会将它们总结掉,直到它们再次被触发。~/.claude/rules/ 中的用户级规则在项目规则之前加载,且两者都不会覆盖另一个。

将冗长的指令拆分为主题文件,仅对真正具有条件性的指令设置范围,保持必须遵循的规则无范围,并使用 /context 检查加载的内容。

常见问题

什么是 Claude Code 规则?

它们是项目 .claude/rules/ 目录中的 markdown 文件,或者是 ~/.claude/rules/ 中的个人规则。每个文件涵盖一个主题。没有 paths 前置内容的规则在每次会话中加载;带有 paths 的规则在 Claude 处理匹配文件时加载。

Claude Code 规则和 CLAUDE.md 有什么区别?

CLAUDE.md 是按目录发现的:在你的工作目录、其上级目录及子目录中。规则存放在 .claude/rules/ 中,可以拆分为多个文件,并可以使用 glob 模式限定范围。无范围规则的加载优先级与 .claude/CLAUDE.md 相同。

为什么我的 Claude Code 规则没有加载?

如果它带有 paths,则仅在 Claude 读取、写入或编辑匹配文件时加载。请针对真实路径、规则的基目录和 YAML 检查模式。运行 /context 查看启动时加载了什么。

规则的前置内容中可以放什么?

只有 paths。Anthropic 表示这是 Claude Code 从规则中读取的唯一字段;其他字段会被忽略且不报错。

路径范围规则在压缩后能存续吗?

不能自动存续。它们会随对话一起被总结掉,并在 Claude 再次接触匹配文件时重新加载。要在压缩过程中保留规则,请删除 paths 或将其移动到项目根目录的 CLAUDE.md 中。

我可以跨项目共享规则吗?

可以。将个人规则放在 ~/.claude/rules/ 中,或者将共享文件夹符号链接到 .claude/rules/ 中。指向工作目录之外的符号链接在加载前需要你的批准。