一个 .claude/rules/ 文件没有 paths frontmatter 就每次编辑都加载。在一个有 7 个技术领域的项目中,编辑 Python 文件的开发者加载了 2,800 token 的规则——Python、React、Go、Terraform、Testing、Deploy、Security。只有 400 token(Python 规则)是相关的。其他 2,400 token——86%——是浪费。
给每个规则文件加 paths glob 一步解决。Python 规则文件加 paths: ["**/*.py"]。只在编辑 Python 文件时加载。其他全留在上下文外。
语法
---
paths:
- "src/api/**/*"
- "src/graphql/**/*"
---
API 规范在这里。
** 匹配任意深度的子目录。* 匹配任意文件名。src/api/**/* 匹配 src/api/users.ts、src/api/v2/billing/handler.ts、以及中间的一切。
如果 glob 在你预期时不匹配,检查 YAML 语法——引号问题和缩进错误是最常见的原因。
重叠模式同时加载
这出乎很多人意料。如果 react-rules.md 有 paths: ["**/*.tsx"]、testing-rules.md 有 paths: ["**/*.test.tsx"],编辑 Button.test.tsx 时两个文件都加载。
这是特性。Button.test.tsx 既是 React 组件文件又是测试文件。写组件测试时,你需要 React 规范(组件模式)和测试规范(测试结构、断言风格)。多个规则同时加载给你恰好需要的上下文。
没有特异性优先级。没有取消。每个模式独立评估。
分层架构:正确处理重叠
一个有 4 种语言和 3 个跨领域关注点(测试、安全、文档)的 monorepo 不需要 12 个组合文件(python-testing.md、python-security.md 等)。那是维护噩梦。
用两层:
语言规则按目录和扩展名匹配:
react.md→paths: ["frontend/**/*.tsx"]python.md→paths: ["data/**/*.py"]node-api.md→paths: ["backend/**/*.ts"]
跨领域规则按文件名或目录模式匹配:
testing.md→paths: ["**/*.test.*", "**/*.spec.*"]security-auth.md→paths: ["**/auth/**/*"]
data/pipeline/test_loader.py 中的 Python 测试文件加载 python.md 和 testing.md。backend/auth/handler.ts 中的 auth 处理器加载 node-api.md 和 security-auth.md。每个文件从两层中恰好拿到它需要的规则。
这是 path glob 相对目录级 CLAUDE.md 的关键优势。目录 CLAUDE.md 只能按位置范围。Path glob 能按文件名模式范围——跨越整个项目树找到测试文件、auth 文件或迁移文件,不管它们在哪。
交叉污染:Paths 解决的问题
一个 2,500 token 的巨型 CLAUDE.md 包含 React、API、数据库、测试和部署规范导致交叉污染。Claude 有时在编辑 API 代码时应用 React 规范。
这不是模型错误。所有 2,500 token 每次编辑都加载。Claude 必须推断哪个章节适用于当前文件。章节标题(”## React Only”)不控制加载——整个文件不管怎样都在上下文中。
修复是结构性的:拆成 5 个 path 范围的规则文件。React 规则只对 .tsx 文件加载。API 规则只对 src/api/ 文件加载。交叉应用的可能性被消除——没有加载的规则不可能被误用。
迁移过渡期的共存规范
REST 到 GraphQL 迁移期间,两种 API 风格共存:
# .claude/rules/rest-conventions.md
---
paths: ["src/api/rest/**/*"]
---
# .claude/rules/graphql-conventions.md
---
paths: ["src/api/graphql/**/*"]
---
REST 规范对 REST 代码加载。GraphQL 规范对 GraphQL 代码加载。没有交叉污染。迁移完成后,删掉 rest-conventions.md。
一个 paths: ["src/api/**/*"] 的合并文件对任何 API 文件加载两套规范——有在 REST 代码中出现 GraphQL 模式的风险。
全栈边缘情况
从巨型 CLAUDE.md 迁移到 8 个 path 范围文件后,平均上下文降低 85%(3,000 → 450 token)。但一个每次会话编辑 8 种文件类型中 6 种的全栈开发者只看到 27% 的减少(3,000 → 2,200)。
这是预期内的,不是失败。Path 专属规则优化的是聚焦会话。在一个技术领域工作的开发者看到显著节省。一次会话中碰所有东西的开发者看到更小但仍然正面的收益。架构服务于常见情况(聚焦编辑),不惩罚边缘情况(广泛编辑)。
反模式
paths: ["**/*"]— 匹配所有文件。功能上等同于省略 paths,但有误导性。如果规则普遍适用,要么省略 paths,要么放 CLAUDE.md。- 带章节标题的巨型 CLAUDE.md — 章节标题不控制加载。所有内容不管怎样都加载。拆成 path 范围的规则。
- 无规则 = 不审查 — 规则提供规范上下文,但 Claude 没有自定义规则也能审查 bug 和安全问题。没有匹配规则的文件仍然受益于通用分析。
CI 集成
Path 专属规则在 CI 中无缝工作。当 Claude Code 审查 auth 文件时,安全规则自动加载。审查文档时,文档规则自动加载。不需要 CI 脚本逻辑来选择正确的规则——paths glob 处理它。
一句话总结: 规则 frontmatter 中的 paths glob 把无条件加载变成条件加载——多个匹配的规则叠加,语言规则和跨领域规则自然分层,86% 的上下文浪费消失。