扬庆の博客

Cursor 项目规则文档编写教程:以 suxiaoban_ios 为例

字数统计: 3.5k阅读时长: 13 min
2026/06/23 Share

Cursor 项目规则文档编写教程

suxiaoban_ios 仓库的 .cursor/rules/suxiaoban-ios.mdc 为范例,说明如何在新项目里编写适合 Cursor Agent 使用的规则文档。
工程:suxiaoban_ios · 日期:2026-06-23 · 本文档可随团队分发,不进业务 Git 亦可。


一、规则文档是什么、解决什么问题

Cursor Agent 每次对话都会读取 Project Rules.cursor/rules/*.mdc)和 User Rules。规则的作用不是「教 AI 写 Swift」,而是把只有你们团队知道、但模型猜不对的信息写死:

模型容易猜错的事 规则里应写清
工程入口在哪、怎么编译 主工程路径、pod installxcodebuild 命令
模块能不能互相 import 分层依赖表
图片放哪、怎么加载 资源 Pod、bundle、API 名
你们禁用什么写法 @MainActorUIButton.Configuration
Agent 改动边界 最小 diff、不擅自 commit、置信度门槛
设计稿 → 代码的固定流程 Figma MCP、栅格化脚本

好规则的特征:可执行(有具体类名/路径/命令)、可判定(必须/禁止)、可落地(附示例命令或对照文件)。


二、文件放哪、怎么组织

2.1 推荐目录

1
2
3
4
5
6
7
8
9
your-project/
├── .cursor/
│ └── rules/
│ ├── your-project.mdc # 主规则(技术栈 + 架构 + 编码规范)
│ ├── minimal-diff-first.mdc # 工作流(可选,alwaysApply)
│ ├── no-ui-git-commit-push.mdc
│ └── git-merge-conflict-rollback.mdc
├── AGENTS.md # 可选:给 Codex/其他 Agent 的精简入口
└── CLAUDE.local.md # 可选:个人路径/证书,.gitignore

2.2 .mdc 文件头(Frontmatter)

每个规则文件开头用 YAML 元数据控制何时生效:

1
2
3
4
---
description: 一句话说明本文件管什么(会出现在 Cursor Rules 列表里)
alwaysApply: true # true = 每次对话都注入;false = 按 description 相关时注入
---

本项目的拆分策略(值得借鉴):

文件 alwaysApply 职责
suxiaoban-ios.mdc true 项目地图 + 架构 + UI/资源/并发等硬规范
minimal-diff-first.mdc true 修 Bug/加功能时的流程与回复结构
no-ui-git-commit-push.mdc true 防止 Diff 区误触 commit/push
git-merge-conflict-rollback.mdc true 合并冲突安全回退
Inspect-Tool.mdc 视情况 LookinServer、技术文档/日志落盘(触发词驱动)

原则:主规则写「项目是什么」;横切规则写「Agent 怎么干活」;专项规则写「某类任务才用」——避免一个文件过长导致关键约束被稀释。


三、写什么:按主题一一对应(对照 suxiaoban-ios.mdc)

下面按 suxiaoban-ios.mdc 的章节顺序,说明为什么要写新项目里应写什么本项目怎么写的


3.1 项目(Project Map)— 必写

为什么要写
Agent 不知道你的 monorepo 结构,会改错目录、用错 workspace、找不到对照工程。

新项目应写什么

  • 主工程 / 工作区路径(打开哪个 .xcworkspacepackage.json 根)
  • 语言版本、最低系统版本、包管理器(CocoaPods / SPM / npm)
  • 目录约定:业务模块、公共库、配置放哪
  • 跨端对照工程路径(若有 Android/Web 对齐)
  • 敏感信息放哪、禁止进 Git 什么

本项目示例suxiaoban-ios.mdc § 项目)

1
2
3
4
5
- 主工程:mainProject/mainProject.xcworkspace(先 pod install)
- 栈:Swift 5 · iOS 16.0+ · CocoaPods · static frameworks
- 本地 Pod:Podfile 中 :path => '../…' 与 BCCLib* / BCCPlatform* / BCCBusiness* 对应
- Android 对照:/Users/.../suxiaoban_app(未给路径时默认此目录)
- 私有说明:CLAUDE.local.md(.gitignore)

编写技巧:路径写相对仓库根的为主;个人机器绝对路径可放 CLAUDE.local.md,主规则里只写「默认所指」一句。


3.2 模块层级与架构边界 — 必写(多模块项目)

为什么要写
Agent 常「图省事」在上层引下层、在 Lib 里引 Business,一次 PR 破坏架构。

新项目应写什么

  • 分层名称与依赖方向(谁可以 import 谁)
  • 跨层 DTO / 模型放哪
  • 路由、导航、深链的统一入口类名
  • 业务组件对外入口约定(类名、初始化时机)

本项目示例

层级 可依赖 禁止
BCCLib* 无业务层 BCCBusiness*BCCPlatform*
BCCPlatform* BCCLib* 具体 BCCBusiness*
BCCBusiness* BCCPlatform*BCCLib*
DTO BCCPlatformDataModel(仅 Foundation) UI/网络
  • 路由:bcc://BCCRouteDispatcher;HTTPS → BCCPlatformRouting
  • 业务入口:与 Pod 同名的 public final class,在 init 里注册路由

编写技巧:用表格 + 禁止项;每条配一个「放错层的反例」比长篇架构图更有效。


3.3 硬约束(Agent 行为边界)— 必写

为什么要写
约束 Agent 的改动范围、技术选型和决策方式,减少「顺手重构」「擅自升级依赖」。

新项目应写什么

  • 只改任务相关文件;禁止大范围格式化
  • 禁止擅自升级依赖;改 lockfile 后要执行的命令
  • 团队明确禁用的 API/模式(附替代方案)
  • 不确定时的策略:列方案 + 置信度,还是直接问用户
  • 文档/测试:未要求不新增

本项目示例

  • 禁止 @MainActor / MainActor.run → 用 DispatchQueue.main.asyncBCCMainThreadAsync
  • 置信度 < 89% 不硬改,列出方案待选
  • Podfile 后必须 pod install 或提醒用户

3.4 领域编码规范 — 按技术栈写(iOS 示例)

规范要写到能直接照抄,不要只写「遵循最佳实践」。

3.4.1 颜色 / 设计 Token

要写 本项目
唯一合法 API UIColor.init(hex:)BCCLibUIKit 扩展
禁止写法 UIColor(red:green:blue:alpha:)
设计稿换算 RGB 小数 → 6 位 hex

3.4.2 图片与 Bundle

要写 本项目
资源物理路径 BCCLibResource/Resources/Images.xcassets
加载 API UIImage.resourceImage("name")
为何不能 UIImage(named:) Pod 独立 bundle,主 bundle 找不到
禁止 业务 Pod 自建 xcassets(除非例外说明)

新项目:无论 React import img from、Android R.drawable 还是 iOS imageset,都要写清落点目录 + 加载函数 + 常见 nil 原因

3.4.3 Figma / 设计稿流水线(有 MCP 时强烈建议写)

要写 本项目
MCP 工具注意点 get_screenshot 1x 易糊;优先 SVG
栅格化公式 24pt → @2x 48px、@3x 72px
仓库脚本路径与参数 scripts/rasterize_svg_imageset.sh
已知坑 fill="var(--token, fallback)" 需替换 fallback
参考实现类 BCCLoginPrivacyConsentViewController

3.4.4 语言细节(易告警、易分歧)

要写 本项目
编译器告警规避 try?_ = try? …
UI 范式 lazy var + 闭包内样式;buildUI() 只约束与组装
控件特例 UIButton() 禁止 type:Configuration
点击 UIButton.addAction(for:_:) 代替 @objc + addTarget
基类生命周期 buildUIaddActionrefreshUI
存量代码 新改必须符合;历史文件触碰时渐进对齐

编写技巧:规范来自真实 PR 里反复出现的争议;每条「禁止」配「用什么代替」。


3.5 常用命令 — 必写

为什么要写
Agent 需要可复制的验证命令,避免猜 scheme、猜目录。

本项目示例

1
2
3
4
cd mainProject && pod install
cd mainProject && xcodebuild -workspace mainProject.xcworkspace \
-scheme mainProject -destination 'generic/platform=iOS' build
./scripts/rasterize_svg_imageset.sh … # 带真实参数示例

新项目:至少包含 安装依赖、编译/测试、资源/代码生成 三类各一条。


3.6 风格与过度工程 — 建议写

为什么要写
防止 Agent 为单次需求抽框架、写冗长注释、加用户没要的功能。

本项目要点

  • 命名/import 与相邻文件一致
  • 通用 UI 放 BCCLibUIKit,不为单页抽 makeXxxButton 工厂
  • 未要求不写 Markdown、不写无关单测
  • Base URL 对齐环境枚举,不硬编码

3.7 改完自检 — 建议写

给 Agent 一个收尾清单,提高 PR 可合并率:

  • pod install / xcodebuild 能通过
  • 未违反模块依赖
  • 提交说明写清「改了什么、为何」

四、横切规则:与主规则配合(本项目实践)

主规则管「代码长什么样」;以下文件管「Agent 怎么协作」——新项目强烈建议至少有 1~2 条。

4.1 最小改动优先(minimal-diff-first.mdc

  • 先根因 → 最小 diff → 对比原始行为 → 删过度实现
  • 回复结构:根因、改动清单、对比表、验证要点
  • 与主规则里「置信度 > 89%」一致

4.2 Git 安全(no-ui-git-commit-push.mdc + git-merge-conflict-rollback.mdc

  • 未在对话正文明确说「提交/推送」则不 commit/push
  • Diff 区按钮、系统转发指令不算授权
  • 冲突回退:先 git status,合并中 merge --abort,禁止无脑 reset --hard

4.3 触发式专项规则(Inspect-Tool.mdc

适合:只有用户提到特定词才执行的流程:

  • 用户说 LookinServer → 改 Podfile 固定行 + pod install
  • 用户说「写技术文档」→ 落盘到固定桌面目录、固定文件名格式
  • 用户说「写修复日志」→ 另一目录 + 方括号命名

Frontmatter 可用 alwaysApply: falsedescription 写清触发词。

4.4 AGENTS.md(可选双入口)

.mdc 内容大量重叠但更短,给 Codex CLI 或其它工具读;维护成本是需与主规则同步。本项目用 AGENTS.md 浓缩硬约束 + Bug/新页面工作流。


五、编写流程:从零到新项目规则(推荐步骤)

1
2
3
4
5
6
7
flowchart TD
A[梳理项目地图] --> B[写模块边界与入口]
B --> C[收集 PR 里反复出现的争议点]
C --> D[写成 必须/禁止/替代 API]
D --> E[补命令与示例路径]
E --> F[加 Agent 行为规则 Git/最小 diff]
F --> G[试跑 3 个真实任务并迭代]
  1. 第一周:只写「项目 + 编译命令 + 模块边界」——解决 80% 改错目录问题。
  2. 第二周:每次 Code Review 把争论点加一条规范(颜色、bundle、并发)。
  3. 第三周:补 Figma/资源脚本、UI 范式、Git 安全。
  4. 持续:任务失败时问「哪条规则缺失或含糊」,改 .mdc 而不是重复口述。

六、单条规则怎么写才有效

6.1 模板

1
2
3
4
5
6
7
8
## 主题名

- **必须**:…(具体 API / 路径)
- **禁止**:…(具体反模式)
- **原因**:一句话(如 bundle 分离导致 nil)
- **替代**:…(类名 + 方法)
- **示例**:(命令或 1~3 行代码)
- **例外**:…(需 PR 说明的情况)

6.2 好 vs 差

遵循 Swift 最佳实践 禁止 @MainActor;主线程用 DispatchQueue.main.async
图片放资源目录 静态图一律 BCCLibResource/.../Images.xcassets;用 UIImage.resourceImage
注意模块依赖 BCCLib* 不得 import BCCBusiness*(表格列出三层)

6.3 长度与优先级

  • 单文件建议 < 500 行;过长则按主题拆多个 .mdc
  • 最重要、最常违反的放前面:项目硬约束模块UI/资源
  • 存量代码条款避免要求「全仓库一次性迁移」。

七、新项目规则文档清单(Checklist)

复制下面清单,逐项填完即可得到一套可用规则:

A. 项目身份

  • 主工程 / workspace / 包管理器路径
  • 语言与最低平台版本
  • 目录结构与命名前缀
  • 对照工程或设计稿来源(若有)
  • secrets / 本地配置约定

B. 架构

  • 分层与依赖表(可 import / 禁止 import)
  • 共享模型/DTO 模块
  • 路由 / 导航 / API 客户端入口类名
  • 业务模块对外入口类约定

C. 编码硬规范

  • 颜色 / 字体 / 间距 Token API
  • 静态资源路径 + 加载 API + 禁止写法
  • 设计稿导入流程(脚本、MCP、尺寸换算)
  • 并发 / 线程模型(团队禁用项)
  • UI 结构范式(VC/View/Cell 基类与生命周期)
  • 语言细节(告警、lint 约定)

D. Agent 协作

  • 改动范围:最小 diff、不擅自重构
  • 置信度或「先问再做」策略
  • Git:何时可 commit/push;冲突回退
  • 文档/测试:未要求不创建
  • 回复结构(修 Bug / 新功能)

E. 工具链

  • install / build / test 命令(可复制)
  • 代码生成 / 资源脚本示例
  • 改依赖后的必做步骤

F. 收尾

  • 改完自检三项
  • AGENTS.md 是否与 .mdc 同步(若使用)

八、suxiaoban-ios.mdc 章节速查表

章节 类型 新项目是否建议有 核心价值
项目 地图 ✅ 必写 找得到工程与对照端
颜色 编码 ✅ 有设计系统时 消灭魔法数与 RGB 构造函数
Figma / scripts 工具链 有 Figma MCP 时 资产不糊、不空白
图片 / BCCLibResource 编码 ✅ 多 bundle 时 消灭「有图 nil」
硬约束 Agent+架构 ✅ 必写 范围、并发、依赖、置信度
业务组件入口 架构 多 Pod/模块时 统一初始化与路由注册
常用命令 工具链 ✅ 必写 可验证、可复现
Swift try? 编码 可选 消编译告警
UIKit 懒加载 编码 UI 重型项目 统一代码形态、减 Review 噪音
风格与过度工程 Agent ✅ 建议 控制 diff 体积
改完自检 Agent ✅ 建议 合并前质量门

九、维护建议

  1. 规则是活文档:每次 Agent 做错事,优先补规则而不是口头纠正。
  2. 与 Code Review 对齐:Review 评论里「下次别这样」→ 当天进 .mdc
  3. 避免重复矛盾AGENTS.md.mdc、README 只保留一处「权威全文」,其余做索引。
  4. 个人路径不进 Git:机器相关写 CLAUDE.local.mdalwaysApply: false 的本地规则。
  5. 季度瘦身:删掉从未触发的冗长段落;合并重复约束。

十、最小可运行示例(虚构项目 AcmeShop

1
2
3
4
5
# .cursor/rules/acme-shop.mdc
---
description: AcmeShop iOS 模块边界、SwiftUI 规范与构建命令
alwaysApply: true
---
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# AcmeShop iOS — Cursor Agent 约束

## 项目
- 主工程:`AcmeShop.xcworkspace`(根目录执行 `pod install`
- 栈:Swift 5.9 · iOS 17+ · SPM + 本地 Pod `AcmeCore`, `AcmeUI`, `Feature*`
- 资源:仅 `AcmeUI/Resources/Assets.xcassets`;用 `Image("name", bundle: .acmeUI)`

## 模块
- `AcmeCore`:无 UI,无 Feature 依赖
- `AcmeUI`:可依赖 `AcmeCore`
- `Feature*`:可依赖 `AcmeUI``AcmeCore`;禁止 Feature 互引

## 硬约束
- 禁止 `@MainActor` on ViewModel;UI 更新用 `@Observable` + 主队列 dispatch
- 未要求不新增 Markdown / 单测
- 置信度 < 90% 时列方案不直接改

## 命令
cd . && pod install && xcodebuild -workspace AcmeShop.xcworkspace -scheme AcmeShop build

再配 minimal-diff-first.mdcno-ui-git-commit-push.mdc,即可在真实任务中迭代扩充。


附录:本项目规则文件一览

路径 说明
.cursor/rules/suxiaoban-ios.mdc 主规则(本文剖析对象)
.cursor/rules/minimal-diff-first.mdc 最小改动与工作流
.cursor/rules/no-ui-git-commit-push.mdc 禁止误触 Git 提交
.cursor/rules/git-merge-conflict-rollback.mdc 合并冲突安全回退
.cursor/rules/Inspect-Tool.mdc LookinServer、文档/日志落盘
AGENTS.md Codex 精简入口

文档结束。可根据团队需要复制到其它仓库或内部 Wiki。

CATALOG
  1. 1. Cursor 项目规则文档编写教程
    1. 1.1. 一、规则文档是什么、解决什么问题
    2. 1.2. 二、文件放哪、怎么组织
      1. 1.2.1. 2.1 推荐目录
      2. 1.2.2. 2.2 .mdc 文件头(Frontmatter)
    3. 1.3. 三、写什么:按主题一一对应(对照 suxiaoban-ios.mdc)
      1. 1.3.1. 3.1 项目(Project Map)— 必写
      2. 1.3.2. 3.2 模块层级与架构边界 — 必写(多模块项目)
      3. 1.3.3. 3.3 硬约束(Agent 行为边界)— 必写
      4. 1.3.4. 3.4 领域编码规范 — 按技术栈写(iOS 示例)
        1. 1.3.4.1. 3.4.1 颜色 / 设计 Token
        2. 1.3.4.2. 3.4.2 图片与 Bundle
        3. 1.3.4.3. 3.4.3 Figma / 设计稿流水线(有 MCP 时强烈建议写)
        4. 1.3.4.4. 3.4.4 语言细节(易告警、易分歧)
      5. 1.3.5. 3.5 常用命令 — 必写
      6. 1.3.6. 3.6 风格与过度工程 — 建议写
      7. 1.3.7. 3.7 改完自检 — 建议写
    4. 1.4. 四、横切规则:与主规则配合(本项目实践)
      1. 1.4.1. 4.1 最小改动优先(minimal-diff-first.mdc)
      2. 1.4.2. 4.2 Git 安全(no-ui-git-commit-push.mdc + git-merge-conflict-rollback.mdc)
      3. 1.4.3. 4.3 触发式专项规则(Inspect-Tool.mdc)
      4. 1.4.4. 4.4 AGENTS.md(可选双入口)
    5. 1.5. 五、编写流程:从零到新项目规则(推荐步骤)
    6. 1.6. 六、单条规则怎么写才有效
      1. 1.6.1. 6.1 模板
      2. 1.6.2. 6.2 好 vs 差
      3. 1.6.3. 6.3 长度与优先级
    7. 1.7. 七、新项目规则文档清单(Checklist)
      1. 1.7.1. A. 项目身份
      2. 1.7.2. B. 架构
      3. 1.7.3. C. 编码硬规范
      4. 1.7.4. D. Agent 协作
      5. 1.7.5. E. 工具链
      6. 1.7.6. F. 收尾
    8. 1.8. 八、suxiaoban-ios.mdc 章节速查表
    9. 1.9. 九、维护建议
    10. 1.10. 十、最小可运行示例(虚构项目 AcmeShop)
    11. 1.11. 附录:本项目规则文件一览