K3.3.2 Task 3.3

章节标题不执行范围——Path 规则执行

一个有清晰章节标题的 CLAUDE.md——”## 数据库规则”、”## UI 规则”——每次编辑都把每个章节加载到上下文中。Claude 在生成 React 组件时看到数据库命名规范,有时会应用它们。标题是给人类的组织辅助,不是给模型的执行边界。

.claude/rules/ 中的 path 专属规则才是执行边界。不匹配当前文件路径的规则在结构上不存在于上下文中。它们不是被降低优先级、不是在响应时被过滤、不是被标记为低相关。它们根本不加载。

不匹配规则的行为

编辑 src/components/Button.tsx 时:

规则文件Paths加载?
react.mdsrc/components/**/*
terraform.mdterraform/**/*
python.mdsrc/backend/**/*.py
security.md(无 paths)

没有中间状态。没有”加载了但降低优先级”。没有”在上下文中但标记为不适用”。Terraform 和 Python 规则在这次编辑的模型上下文中不存在。

为什么重要:交叉污染问题

一个项目有 500 行规则,跨 Python、R 和 LaTeX,报告说 Claude 把 Python 风格规则混进 R 代码、在 Python 文件中应用 LaTeX 规范。

加显式指令——“以下规则只适用于 Python 文件”——没用。指令是同一个加载上下文中的文本。模型把所有加载的指令当作潜在适用的引导来处理。

把每个领域的规则移到 .claude/rules/ 并加 path frontmatter(scripts/**/*.pyviz/**/*.Rpapers/**/*.tex)完全修复了。交叉污染从每周 8 次降到零。不是因为模型变聪明了——是因为错误的规则停止加载了。

量化影响

一个团队把 500 行 CLAUDE.md 迁移到 5 个 path 范围的规则文件并跟踪了两周结果:

指标之前之后
每会话加载行数50080(平均)
配置上下文开销11%2%
规则遵循率85%94%
错误领域事件/周80

84% 的加载内容减少不是因为规则被删了——它们全都还在。只是在相关时才加载。

遵循率提升(85% → 94%)不是巧合。当 Claude 看到 80 行相关规则而不是 500 行混合内容时,它应用得更可靠。更少噪音意味着更好的聚焦。

“Claude 够聪明”的论点

一个团队负责人提议:“把所有东西留在 CLAUDE.md。Claude 能根据章节标题判断哪些规则适用。”

这混淆了两个独立问题:

  1. Claude 能识别相关规则吗? — 通常能,但不总能。跨领域的相似模式(命名规范、错误处理)导致交叉应用。
  2. 无关规则该消耗上下文 token 吗? — 不该,不管模型多聪明。一个有 7 个领域约 700 行规则的项目中,聚焦会话(1-2 个领域)浪费了 70-85% 的规则上下文在永远不会被应用的内容上。

Path 规则同时解决两个问题。它们通过结构性缺席防止交叉应用,并释放上下文 token 给实际工作。

正确的拆分:CLAUDE.md + Path 范围规则

处处适用的通用标准属于 CLAUDE.md——它们始终加载,这对通用规则是正确行为。

领域专属标准属于 .claude/rules/ 加 path frontmatter——只在编辑匹配文件时加载。

一个 Python 会话加载:通用标准(CLAUDE.md 的 100 行)+ Python 规则(python.md 的 120 行)。总计:220 行而不是 450 行。TypeScript 和基础设施规则不在。

在规则文件中对通用标准用 paths: ["**/*"] 技术上能用,但是不必要的复杂。CLAUDE.md 已经提供始终加载的行为,不需要 glob 模式。

跨领域:Path 规则 + MCP 工具

Path 专属规则也补充 MCP 工具配置。一个有 Python linter 和 React 组件 MCP server 的项目可以用 path 范围规则引导工具选择——Python 规则对 src/api/ 文件激活,React 规则对 src/web/ 文件——确保模型对正确的代码区域使用正确的 MCP 工具。


一句话总结: 不匹配的 path 规则从上下文中缺席,不是降低优先级——这种结构性缺席消除交叉污染并释放 70-85% 浪费的规则 token。