Cursor 规则不被加载(.cursorrules / .cursor/rules)

Cursor 无视你的规则:Agent 模式不读旧版 .cursorrules、.mdc frontmatter 有错被静默丢弃、位置或扩展名不对、BOM、或缓存。逐项排查修复。

你在规则里写了 use 4-space indent, never use any,结果 Cursor 的 Agent 给出来的代码还是 2-space、满是 any。问它 “what rules do you see?”,它说没有规则。

截至 2026 年 6 月,最常见的原因是格式问题。Cursor 早在 0.43 就弃用了单文件的旧版 .cursorrules,而在 Cursor 2.x 里 Agent 根本不读 .cursorrules——它只认更新的 Project Rules,也就是 .cursor/rules/ 目录下的 .mdc 文件。所以一个”去年还能用”的 .cursorrules,在某次升级之后可能就悄悄失效了。

最快修法:把规则挪进 .cursor/rules/style.mdc,写好 frontmatter(alwaysApply: true),然后到 Cursor Settings → Rules, Commands 确认它出现在列表里。列出来了就是加载成功;没出现就是 frontmatter 写错了。

你属于哪一种情况

现象可能原因跳转
规则在根目录 .cursorrules,Agent 无视旧格式在 Agent 模式不被读取原因 1
文件是 .cursor/rules/foo.md(不是 .mdc扩展名错,被静默忽略原因 2
.mdc 存在但 Settings → Rules 里没有frontmatter 缺失或有错,被静默丢弃原因 2
规则在列表里但从不自动应用没有 alwaysApply/globs 触发条件原因 3
规则在大仓库的子目录里作用域 / 位置不匹配原因 4
本来能用,改完之后突然失效rules 缓存没刷新原因 5
文件第一行乱码 / 解析失败UTF-8 BOM原因 6
git check-ignore 命中了该文件.cursorignore 屏蔽原因 7

常见原因

1. 还在用旧版 .cursorrules

.cursorrules(仓库根的单个文件)已被弃用。它在某些模式下还会被解析,但 Cursor 2.x 的 Agent 会直接忽略它——这是 Cursor 有意为之的改动,目的是让 Agent 只走带作用域的 Project Rules 系统。如果团队升级了 Cursor 之后规则悄悄失效,几乎一定是这个原因。

如何判断:你的规则在 .cursorrules 里,你用的是 Agent 模式,而 Cursor Settings → Rules, Commands 里没有列出它们。迁移到 .cursor/rules/*.mdc(见 Step 1)。

2. 扩展名错或 frontmatter 有问题

Project rules 必须是放在 .cursor/rules/ 目录里的 .mdc 文件。两个坑:

  • 放在 .cursor/rules/ 里的普通 .md 文件会被规则系统忽略——因为它没有规则 frontmatter。
  • 如果 YAML frontmatter 有任何错误,Cursor 会静默跳过该文件,没有警告、没有日志、没有弹窗。常见祸根:
    • 缺少结尾的 --- 行。
    • globs 写成了单个字符串,而不是数组。
    • YAML 区分大小写:True 不等于 true,所以 alwaysApply: True 永远不会被加载。

如何判断

ls .cursor/rules/
# 每个规则都必须以 .mdc 结尾,而不是 .md

然后打开 Cursor Settings → Rules, Commands。如果磁盘上有这个 .mdc 文件,但这个面板里没有列出它,就说明 frontmatter 写坏了。

3. .mdc 规则没有触发条件

.mdc frontmatter 有三个字段决定规则何时生效。截至 2026 年 6 月,Cursor 把规则分成四种类型:

规则类型frontmatter何时应用
AlwaysalwaysApply: true每次 chat / Agent 请求
Auto AttachedalwaysApply: false + globs: [...]当编辑 / 附加的文件匹配某个 glob
Agent RequestedalwaysApply: false + description(无 globs)Agent 根据 description 自行判断
Manual以上都没有只有你 @ 提及该规则时

只写了 description、既没 alwaysApply 也没 globs 的规则属于 Manual 类型——它永远不会自动注入,所以看起来像”没加载”,其实是要你 @ 提及才会生效。

如何判断

---
description: Use 4-space indent
# 缺 alwaysApply 和 globs → Manual → 不会自动应用
---

4. 规则放在了错误的作用域

Cursor 会读取 workspace 根目录的 .cursor/rules/也会读取子目录里嵌套的 .cursor/rules/(以及就近的 AGENTS.md),更具体 / 更近的规则优先级更高。出问题往往是把错误的目录当成了 workspace 打开:如果你打开的是 ~/code/monorepo,但规则在 packages/web/.cursorrules,那么子目录里的一个旧版单文件不会在整个项目范围生效。

如何判断:标题栏 / 左下角会显示当前 workspace 路径;确认能从那里解析到规则文件。

pwd
ls -la .cursorrules .cursor/rules/ 2>/dev/null

在 monorepo 里,把共享规则放在根的 .cursor/rules/,把各个包专属的规则放在 packages/<name>/.cursor/rules/

5. rules 缓存没刷新

新增或修改规则后,正在运行的窗口可能继续用旧版本,直到窗口重新加载。

如何判断:刚改完规则,没有变化;执行 Developer: Reload Window 后立刻生效 = 缓存。

6. 编码不是 UTF-8 或带 BOM

Windows Notepad 默认存成 UTF-8 with BOM。开头的 BOM 会让 frontmatter 解析失败,从而丢弃整条规则(和原因 2 一样的静默跳过)。

如何判断

file .cursor/rules/style.mdc
# 期望:"...: UTF-8 Unicode text"
# 异常:"...: UTF-8 Unicode (with BOM) text"

hexdump -C .cursor/rules/style.mdc | head -1
# 以 ef bb bf 开头 = BOM

7. 规则被 .cursorignore 屏蔽

有些团队把 .cursorrules 写进 .gitignore(当个人偏好处理),却顺手也写进了 .cursorignore。Cursor 自己的 ignore 列表会让它跳过这个文件。

如何判断

git check-ignore .cursorrules .cursor/rules/style.mdc
grep -i cursorrules .cursorignore 2>/dev/null

动手前先确认

  • 选定一种格式:新的 .cursor/rules/*.mdc(推荐;在所有模式包括 Agent 都生效)。旧版 .cursorrules 只是为了向后兼容才保留,Cursor 已表示会将其移除。
  • 改规则前先 commit 一次,方便在加载失败时对照一个干净的基线排查。
  • 记下 Cursor 版本:Cursor → About.mdc 系统已经做默认很久了,但”Agent 只读 .mdc”这个行为正是坑到近期升级用户的关键)。

最短修复路径

格式 → 触发条件 → 缓存。

Step 1:迁移到 .cursor/rules/*.mdc

建好目录和一个规则文件。最快的办法是用内置生成器:

  • 在 Agent chat 里输入 /create-rule
  • Cursor Settings → Rules, Commands → + Add Rule

或者手写:

.cursor/rules/style.mdc
---
description: TypeScript style rules
globs: ["**/*.ts", "**/*.tsx"]
alwaysApply: true
---
- Use 4-space indent
- Never use `any` — use `unknown` or specific types
- Prefer `interface` over `type` for object shapes

注意 YAML:结尾的 --- 不能少,globs 必须是数组,布尔值是小写的 true/false

Step 2:确认它已被登记

打开 Cursor Settings → Rules, Commands。你的规则应出现在列表里,并标注类型(Always / Auto Attached / Agent Requested / Manual)。如果没有列出来,就是 frontmatter 有错——改对之后条目会立刻出现。这个面板就是”规则有没有加载”的权威依据。

Step 3:消除 BOM、转 UTF-8

file .cursor/rules/style.mdc

# 有 BOM 就清掉
sed -i.bak '1s/^\xEF\xBB\xBF//' .cursor/rules/style.mdc
# 或在 Cursor 里:右下角状态栏显示 "UTF-8 with BOM" → 点它 → "Save with Encoding" → "UTF-8"

Step 4:重新加载窗口以刷新缓存

Cmd+Shift+P → "Developer: Reload Window"

若还是旧的,清掉 workspace 缓存(先关闭 Cursor):

# macOS
rm -rf ~/Library/Application\ Support/Cursor/User/workspaceStorage/<this-workspace-hash>

Step 5:让 Agent 列出规则

新开一个 chat:

List every active Cursor rule you can see right now, including their source files and any conditions on activation.

它能列出你的规则 = 加载成功;说 “No rules” = 还没生效,回到 Step 2。

怎么确认已经修好

  • 规则出现在 Cursor Settings → Rules, Commands 里,并显示合理的类型。
  • chat 输入框出现 Rules 指示,表示这次请求把你的规则纳入了上下文。
  • 生成的代码符合规则(缩进 / 命名 / import)。
  • 队友在一份全新 clone 上打开同一仓库,看到同样的规则生效——证明它已 commit、不是只在你本地。

如果还是没修好

  • 把规则缩成一句毫无歧义的话,例如 Always begin every reply with the word HELLO.,并设 alwaysApply: true。如果它服从 → 规则确实加载了,真正的问题在规则的措辞,而不是加载。
  • 确认文件确实是 .mdc,而不是 .md.mdc.txt(Windows 隐藏扩展名)。
  • 回滚最近一次 Cursor 升级或规则改动,以隔离变量。
  • 在官方论坛 forum.cursor.com 搜 “rules not applied”;附上 Cursor 版本、文件路径,以及 Settings → Rules 的状态。
  • 查看 View → Output 并选择 Cursor 频道里的 rules 加载日志,然后到 Bug Reports 提交。

FAQ

.cursorrules 在 2026 年还能用吗? 部分能。它已被弃用,而且在 Cursor 2.x 里 Agent 会忽略它。改用 .cursor/rules/*.mdc,规则才能在 Chat、Composer、Agent 里都生效。

为什么磁盘上有规则,但 Settings → Rules 里没有? frontmatter 写坏了,Cursor 把它静默跳过了。检查是否缺了结尾的 ---globs 写成了字符串而不是数组、或把 true/false 写成了 True/False

规则加载了,却从不自动应用,为什么? 多半是 Manual 规则(只有 description,没有 alwaysApply 也没有 globs)。加 alwaysApply: true 改成始终生效,或加 globs: ["**/*.ts"] 让它按文件类型自动附加。

monorepo 里规则放哪? 共享规则放在根的 .cursor/rules/;各包专属规则放在 packages/<name>/.cursor/rules/。对该子目录下的文件,更近的规则优先于根规则。

还需要 AGENTS.md 吗? 不需要。AGENTS.md 是 Cursor 同样支持的另一种方式(按目录就近优先)。要 glob / 始终生效这类作用域控制就用 .cursor/rules/*.mdc;只要简单的纯文本指引就用 AGENTS.md。同一套规则别两边都维护。

预防建议

  • 加完规则立刻打开 Settings → Rules, Commands,并在 chat 里问 “what rules do you see?”,不要等下次才发现没生效。
  • 统一用 .cursor/rules/*.mdc + 显式 alwaysApply: true;淘汰 .cursorrules
  • 用 Cursor / VS Code 编辑规则,绝不用 Notepad——避免 BOM。
  • 团队规则 commit 到 git,不要写进 .gitignore;个人偏好用设置里的 User Rules。
  • 每改一次规则都 Cmd+Shift+P → Developer: Reload Window,避免缓存假象。

相关阅读

标签: #Cursor #排查