← 返回教程库

CLAUDE.md / .cursor/rules——项目规则文件写法与实战

最后更新 2026-06-25
你将学到
  • 搞清楚 CLAUDE.md 和 .cursor/rules 各自的定位、存放位置和生效机制
  • 学会判断什么内容值得写进规则文件,什么不该放进去
  • 能直接复制两份实例,根据自己项目快速改出可用的规则
  • 理解规则分层(全局 vs 项目)和 AGENTS.md 的分工,避免规则打架

每次跟 AI 开新对话,第一件事就是把项目背景再交代一遍:用的是 TypeScript、不要写 any、数据库操作必须走 Repository 层、测试用 Vitest 不用 Jest……说了一遍又一遍,烦不烦?

这就是 规则文件要解决的问题。把这些约定一次性写进文件,AI 每次启动都能读到,你就再也不用重复交代了。

Claude Code 用的是 CLAUDE.md,Cursor 用的是 .cursor/rules(或者 .cursorrules),两个工具各有各的格式和生效方式,但背后逻辑是一样的:把项目的「人格」存下来


这两个文件各是什么、放哪、怎么生效

CLAUDE.md

这是 Claude Code 的项目记忆文件。Claude Code 每次在某个目录里启动,会自动搜索并读取当前目录及其父目录下的 CLAUDE.md,把内容注入到系统提示里。

存放位置

  • 项目根目录your-project/CLAUDE.md — 对整个项目生效,团队共享(建议纳入 git)
  • 子目录your-project/frontend/CLAUDE.md — 只对 frontend/ 下的操作生效,适合 monorepo
  • 用户全局~/.claude/CLAUDE.md(macOS/Linux)或 %USERPROFILE%\.claude\CLAUDE.md(Windows) — 对你所有项目生效

生效机制:Claude Code 启动时从当前目录往上逐层找 CLAUDE.md,找到的都会读,越靠近项目的越靠后注入(优先级越高)。你不需要做任何额外配置,放在那里它就读。

.cursor/rules

这是 Cursor 的规则文件。Cursor 在打开项目时自动加载 .cursor/rules/ 目录下的所有 .mdc 文件,或者项目根目录下的 .cursorrules 文件(旧格式,仍然支持)。

存放位置

  • 新格式.cursor/rules/your-rule-name.mdc(推荐,可以拆成多个文件按功能分组)
  • 旧格式.cursorrules(项目根目录,一个文件写完)

生效机制:Cursor 打开项目后自动读取,每次 AI 对话时都会把规则内容带上。.mdc 格式支持设置"只在某类文件触发"(通过 glob 匹配),比如 *.vue 文件才触发 Vue 相关规则。

两者共同点:都是 Markdown 格式,AI 直接读文本内容,不需要特殊编译。改了文件,下次启动或新建对话就生效。


该写什么、不该写什么

该写进去的

1. 技术栈声明 语言版本、框架、测试框架、CSS 方案、状态管理——让 AI 一上来就知道生成的代码该对准哪个靶。

2. 代码风格约定 缩进、命名规范(camelCase vs snake_case)、注释语言(全中文 / 全英文 / 混合)、禁止使用的语法(比如"不用 var"、"不写 any")。

3. 架构约定和禁区 "数据库操作只走 Repository 层"、"不要在组件里直接调 API"、"新增路由必须写对应单测"——这类约定 AI 不知道就容易打破,但你不想在每次对话里解释。

4. 常用指令和流程 "跑测试用 pnpm test"、"构建命令是 pnpm build:prod"、"提交前必须过 lint"——让 AI 知道你的项目用什么命令,省得它猜错。

5. 项目结构说明 简短描述目录布局,比如"业务逻辑在 src/domain/,纯工具函数在 src/utils/"。复杂项目特别有用。

6. 沟通偏好 "回复用中文"、"解释不超过 3 句话,直接给代码"、"每次改完给我一个 diff 摘要"。

不该写进去的

版本号(除非真的需要精确约束):"React 18.2.0"会随着升级失效,写"React 18+"或者根本不写版本号。

临时约定:某次 sprint 的特殊限制、当天有效的 hotfix 方向——这些写进去会让规则越来越脏。

太啰嗦的背景故事:前因后果、历史沿革写了 AI 也不会用,500 字以内的规则比 2000 字的更有效。

别人工具的规则:CLAUDE.md 不需要管 Cursor 的配置,反之亦然,别混在一起。


可抄实例

CLAUDE.md 实例

# 项目说明

这是一个 B 端 SaaS 后台,Node.js 后端 + React 前端,monorepo 结构。

## 技术栈

- 后端:Node.js + Hono + Prisma + PostgreSQL
- 前端:React + TypeScript + Vite + Tailwind CSS
- 测试:Vitest(单测)+ Playwright(E2E)
- 包管理:pnpm workspace

## 代码约定

- TypeScript 严格模式,**禁止** `any`,实在需要用 `unknown` + 类型守卫
- 命名:文件名 kebab-case,组件 PascalCase,函数/变量 camelCase
- 注释和 commit 信息统一用中文
- 数据库操作只走 `src/repositories/`,禁止在 service 层直接用 Prisma Client

## 目录结构

- `packages/api/` — 后端服务
- `packages/web/` — 前端应用
- `packages/shared/` — 前后端共享类型和工具

## 常用命令

- 启动开发:`pnpm dev`
- 跑全量测试:`pnpm test`
- 构建生产包:`pnpm build`
- 数据库迁移:`pnpm prisma migrate dev`

## 沟通方式

- 回复用中文
- 改代码时先说改了什么再给代码,别只丢一大段代码
- 涉及数据库 schema 变更时,提醒我一定要写迁移文件

.cursor/rules 实例(新格式 .cursor/rules/main.mdc

---
description: 主项目规则
globs: ["**/*.ts", "**/*.tsx"]
---

# 项目规则

## 技术栈

React + TypeScript + Vite + Tailwind CSS。测试用 Vitest。

## 代码风格

- 严格 TypeScript,不写 `any`
- 组件用函数式,不写 class component
- 状态管理用 Zustand,禁止在组件里用 `useState` 管理跨组件共享状态
- CSS 只用 Tailwind,不写内联 style,不新增 .css 文件

## 文件约定

- 一个组件一个文件,文件名和组件名一致
- 所有 API 请求封装在 `src/api/` 下对应的 module 里,不在组件里直接 fetch
- 类型定义集中在 `src/types/`

## 响应格式

- 中文回复
- 修改多个文件时列出改动文件清单再给代码

和 AGENTS.md 的分工

如果你还不熟悉 AGENTS.md,先看 4.1 AGENTS.md 跨工具配置标准。简单说:

文件 适用工具 定位
AGENTS.md 所有支持它的 AI 工具 跨工具通用规范,放项目级共识,比如架构原则、接口约定
CLAUDE.md 仅 Claude Code Claude Code 专属配置,命令别名、Claude 特有的工作流
.cursor/rules 仅 Cursor Cursor 专属配置,glob 触发、Cursor 特有的提示习惯

实际项目的做法:把不依赖工具的约定(技术栈、架构、禁区)放 AGENTS.md,工具专属的配置(命令、响应格式偏好)放各自的文件。这样换工具时,核心约定不用重写,只改工具专属的部分。


规则分层:全局 vs 项目

全局规则和项目规则同时生效,项目规则优先级更高。这让你可以把通用偏好(比如"总是用中文回复"、"提交前跑 lint")放全局,项目特有的约定放项目级。

全局规则文件位置

  • Claude Code:~/.claude/CLAUDE.md
  • Cursor:暂无原生全局规则,可以通过 Cursor 的 Settings → Rules for AI 配置

全局规则的内容建议只放与具体项目无关的个人偏好

# 全局偏好(~/.claude/CLAUDE.md)

- 回复用中文
- 代码注释用中文
- 解释要简洁,先给结论再说原因
- 生成测试时一定要覆盖边界条件和异常路径

不要在全局规则里写技术栈或路径约定,那些是项目级的事。


故障排查表

症状 可能原因 解法
规则写了但 AI 没有按规则行事 文件路径不对,AI 没读到 Claude Code:/status 确认读取的 CLAUDE.md 路径;Cursor:重新打开项目或新建对话
AI 生成的代码风格乱,明明规则里写了 规则描述太模糊("代码要好"),AI 理解偏差 改成可验证的具体约束,比如"禁止使用 var"、"函数名用动词开头"
全局规则和项目规则冲突,AI 行为不稳定 两份规则对同一件事有矛盾指令 项目规则里明确覆写全局规则,比如"本项目注释用英文(覆盖全局中文设置)"
规则文件越来越大,AI 开始忽略部分规则 单个规则文件太长,超过有效注意范围 Cursor 用 .cursor/rules/ 拆成多个 .mdc 文件;CLAUDE.md 精简到 500 字以内核心约束
规则写了技术栈,但 AI 还是生成旧写法 规则是旧版本,项目升级后没同步更新 把"更新 CLAUDE.md"加进 PR checklist,每次升级依赖时顺手更新

常见问题

Q:CLAUDE.md 会占用上下文 token 吗?

会。Claude Code 会把 CLAUDE.md 内容注入到每次对话的系统提示里。规则文件越大,每次对话消耗的 token 越多。这就是为什么建议控制在 500 字以内——只放真正高频有用的约定。关于上下文管理的更多细节见 4.3 上下文工程:管 token 防漂移

Q:.cursorrules(旧格式)和 .cursor/rules/(新格式)哪个更好?

新格式(.cursor/rules/*.mdc)支持 glob 触发,可以针对不同文件类型加载不同规则,更灵活。旧格式更简单,适合小项目一个文件搞定。两种格式可以共存,Cursor 都支持读取,但建议新项目用新格式。

Q:规则文件要加进 git 吗?

CLAUDE.md.cursor/rules/ 都强烈建议加入 git。团队里每个人的 AI 工具能读到一样的约定,就不会出现"你这边 AI 生成的代码风格跟我完全不一样"的情况。个人偏好(比如"回复用中文")放全局规则,不要提交到项目仓库。

Q:可以在规则文件里引用其他文件吗?

Claude Code 的 CLAUDE.md 支持 @file-path 语法引用其他文件内容,比如 @docs/api-conventions.md。Cursor 的规则文件目前不直接支持引用外部文件。如果约定文档太多,可以在规则里写路径说明,让 AI 自己去读对应文件。

Q:我已经有 AGENTS.md 了,还需要 CLAUDE.md 吗?

取决于你的工作流。如果你只用 Claude Code,AGENTS.md 也够用(Claude Code 能读到它)。但如果有 Claude Code 专属的命令、工作流配置,或者你想精细控制 Claude Code 的行为,CLAUDE.md 更合适——它是 Claude Code 第一级优先读取的文件。参考 上下文是一切:引用规则的底层逻辑 理解为什么规则文件的位置和格式影响 AI 的行为。


👉 看看我们的 AI 编程实战体系课,或逛 AI 编程教程大全 把基本功打扎实。

📄 来源 / 自校链接

本文为学习整理,关键步骤与代码请结合下列官方来源验证。

内容有错、看不懂、或想看下一期?告诉我们 →

本文为学习与落地整理,AI 工具与平台更新较快,关键步骤请结合官方最新资料验证。见免责声明