Cursor 0.5 版本的 Project Rules 系统颠覆了传统单一 .cursorrules
文件的局限,通过 三级规则架构 实现精细化管理,我最近开发过程中也将 Cursor Rules 升级为 Project Rules ,发现这个变化太惊人了。这代表着 Cursor 不仅是一个 AI 编码助手,而是在向真正的工程化开发工具迈进。本文将分享我使用 Project Rules 的经验和实践。
Project Rules 的演进:从单文件到模块化设计
Cursor 最重要的升级是告别单一大文件,转向模块化的 .mdc
文件体系。这种变化有几个关键优势:
-
更好的可维护性:不同规则分类存放,更易于管理
-
团队协作友好:不同团队成员可以负责不同规则模块
-
按需加载:AI 可以根据上下文自动加载相关规则
分层规则管理:构建规则金字塔
通过实践,我发现构建一个三层规则体系非常有效:
1. 通用层(.cursor/rules.general.mdc
)
这层包含团队共识和项目通用规范:
# 通用项目规则
## 代码提交规范
- 所有的提交消息必须遵循 Conventional Commits 规范
- 格式: `(): `
- 常见类型: feat, fix, docs, style, refactor, test, chore
## 文档规范
- 所有公共 API 必须有 JSDoc 或对应语言的文档注释
- README.md 必须包含项目描述、安装说明和基本用法
- 复杂逻辑必须添加注释说明
2. 语言层(如 .cursor/rules.python.mdc
)
针对特定语言或框架的具体规范:
# Python 代码规范
## 代码风格
- 遵循 PEP 8 规范
- 使用 4 空格缩进,不使用 Tab
- 行长度最大不超过 88 个字符
- 使用 black 和 isort 进行代码格式化
## 命名约定
- 类名使用 PascalCase
- 函数和变量使用 snake_case
- 常量使用大写 SNAKE_CASE
## 项目结构
- 使用虚拟环境管理依赖
- 包结构应遵循 src/package_name 模式
- 测试代码放在 tests/ 目录下
3. 任务层(如 .cursor/rules.test.mdc
)
针对特定开发任务的临时规则:
# 测试编写规范
## 测试组织
- 测试文件命名为 test_<模块名>.py
- 每个测试函数应当只测试一个功能点
- 使用 pytest 作为测试框架
## 测试覆盖率
- 新功能必须有对应的单元测试
- 核心业务逻辑必须有集成测试
- 测试覆盖率目标: 行覆盖率 > 85%
## Mock 策略
- 外部依赖应当被 mock
- 数据库操作应使用测试数据库或事务回滚
- 避免在测试中使用 sleep(),优先使用 mock 时间
模式化执行
我最喜欢的 Project Rules 高级技巧是使用模式标记来改变 AI 的工作方式。这类似于给 AI 分配不同的"角色":
研究模式
[MODE: RESEARCH]
- 仅分析代码,不直接修改
- 提供详细的代码结构解释
- 标记潜在问题并提供背景信息
- 禁止生成完整解决方案,仅提供方向性建议
当我需要理解复杂代码库时,这个模式特别有用。它让 Cursor 变成一个耐心的讲解者,而不是急于求成的修改者。
创新模式
[MODE: INNOVATION]
- 允许提出多种解决方案
- 每个方案必须包含:
* 实现概述
* 技术优势
* 潜在风险
* 扩展性评估
- 必须提供至少 2-3 种不同方案比较
当我面临架构决策或技术选型时,这个模式让 Cursor 成为我的头脑风暴伙伴。
执行模式
[MODE: IMPLEMENTATION]
- 严格按照以下步骤执行代码修改:
1. 检查依赖关系
2. 修改目标文件
3. 更新相关测试
4. 验证代码是否符合项目规范
- 每个修改必须添加注释说明
- 生成修改前后的对比说明
当我确定了解决方案,需要精确执行时,这个模式让 Cursor 成为一个专注的执行者。
自动化生成
让 AI 为 AI 写规则,直接使用Cursor 提供的两种生成 Project Rules 的方式:
使用命令生成:
直接在 Cursor 中输入 /Generate cursor rules
/Generate cursor rules for monorepo with NestJS+React+TypeScript
自动生成包含 rules.backend.mdc
、rules.frontend.mdc
、rules.shared.mdc
的完整规则体系
基于项目依赖生成:
Cursor 会分析 package.json
或其他配置文件,自动生成相应的规则
cursor rules --from-package # 解析依赖生成技术栈规则
生成逻辑:
-
识别
dependencies
中的框架(如 React→生成组件规范) -
解析
devDependencies
中的工具链(如 ESLint→同步代码风格)
我的实践是:先让 Cursor 自动生成一个基础版本,然后根据项目特点进行定制化调整。这节省了大量编写基础规则的时间。
案例研究:
我研究了monorepo 项目 @languine_ai 规则设计,它的 Project Rules 结构非常值得借鉴:
.cursor/
├── rules.monorepo.mdc # Monorepo 特有规则
├── rules.general.mdc # 通用规则
├── rules.frontend.mdc # 前端规则
├── rules.backend.mdc # 后端规则
├── rules.ci.mdc # CI/CD 规则
└── packages/ # 包特定规则
├── rules.api.mdc
├── rules.ui.mdc
└── rules.core.mdc
特别值得学习的是它们如何处理包间依赖关系:
# 包依赖管理规则 (.cursor/rules.monorepo.mdc)
## 依赖流向
- 核心包 (@languine/core) 不应依赖其他内部包
- API 包 (@languine/api) 可以依赖核心包,但不应依赖 UI 包
- UI 包 (@languine/ui) 可以依赖核心包,但不应依赖 API 包
- 应用包可以依赖任何内部包
## 版本管理
- 所有包版本必须同步更新
- 包之间的依赖必须使用 workspace 协议 (例如: "workspace:*")
- 禁止循环依赖
Project Rules 核心思维
通过深入使用 Project Rules,我总结出三个核心思维:
1. 规则即文档
Project Rules 不仅是给 AI 看的,也是团队成员理解项目约定的活文档。优秀的规则应该:
-
解释"为什么"而不仅是"做什么"
-
提供具体示例
-
引用更深入的资源链接
2. 渐进式规则体系
不要一次性定义所有规则。最佳实践是:
-
从最基本、共识度最高的规则开始
-
随着项目发展逐步添加更细化的规则
-
定期回顾和精简不再适用的规则
3. 环境适应性
规则应该根据开发环境自适应:
-
开发环境:规则可以更宽松,专注于提供建议
-
预发布环境:增加更严格的检查和验证
-
生产环境:强制执行关键安全和性能规则
实战技巧与模板
以下是我日常使用的一些高效模板:
TypeScript React 项目规则模板
# TypeScript React 规则 (.cursor/rules.react-ts.mdc)
## 组件结构
- 使用函数组件和 Hooks,避免类组件
- 按功能分层组织文件夹,而非类型
- 组件 Props 必须使用 interface 显式声明类型
## 状态管理
- 本地状态使用 useState 或 useReducer
- 共享状态使用 Context 或状态管理库
- 避免嵌套 Context,使用组合模式
## 性能优化
- 使用 React.memo() 包装纯函数组件
- 使用 useCallback() 包装传递给子组件的函数
- 使用 useMemo() 缓存昂贵计算结果
API 开发规则模板
# API 开发规则 (.cursor/rules.api.mdc)
## 端点设计
- 使用 RESTful 设计原则
- URL 使用资源名词复数形式
- 正确使用 HTTP 方法语义
## 错误处理
- 统一错误响应格式: { "error": { "code": "ERROR_CODE", "message": "详细描述" } }
- 使用合适的 HTTP 状态码
- 日志必须包含请求 ID 以便追踪
## 安全措施
- 所有外部输入必须验证和消毒
- 敏感数据必须加密存储
- API 路由必须实现适当的访问控制
总结
Project Rules 代表了 Cursor 向真正的开发工程化工具迈进的重要一步。通过合理设计规则体系,我们不仅能提高 AI 的生产力,更能促进团队的协作和代码质量。随着项目规模增长,一套良好的规则体系将成为团队共识和技术债务防御的重要基础。
我建议每个 Cursor 用户都尝试构建自己的 Project Rules 体系,从简单开始,随着项目发展而逐步完善。这个投资将在长期开发过程中获得丰厚的回报。
你是否已经开始使用Project Rules了?有什么特别有效的规则想要分享?欢迎在评论区交流你的经验和心得!