规则优先级系统
高效管理项目级别的 AI 指南。Caret 的规则优先级系统自动阻止多个规则文件的重复,节省令牌使用量,并通过明确的优先级防止设置冲突。
什么是规则系统?
在项目根目录放置规则文件,AI 会自动读取并遵循:
my-project/
├── .caretrules # Caret 专用规则(优先级 1)
├── .clinerules # Cline 兼容规则(优先级 2)
├── .cursorrules # Cursor 兼容规则(优先级 3)
└── src/
效果: AI 会自动遵循项目的编码风格、命名规则和架构模式。
Caret vs Cline vs Cursor
| 项目 | Cline | Cursor | Caret |
|---|---|---|---|
.clinerules | ✅ 支持 | ❌ 不支持 | ✅ 支持 |
.cursorrules | ❌ 不支持 | ✅ 支持 | ✅ 支持 |
.caretrules | ❌ 不支持 | ❌ 不支持 | ✅ 支持 |
| 优先级系统 | ❌ 无 | ❌ 无 | ✅ 有 |
| 多文件合并 | ❌ 无 | ❌ 无 | ✅ 支持 |
支持的文件格式
.caretrules(推荐)
Caret 专用规则文件,优先级最高:
# 项目规则
## 编码风格
- 使用 TypeScript strict 模式
- 仅使用函数式组件
- 使用 Tailwind CSS
## 命名规范
- 组件: PascalCase
- 函数: camelCase
- 常量: UPPER_SNAKE_CASE
## 禁止事项
- 禁止使用 class 组件
- 禁止使用 any 类型
- 禁止提交 console.log
.clinerules
从 Cline 迁移时兼容:
Use TypeScript for all files
Follow React Hooks best practices
.cursorrules
从 Cursor 迁移时兼容:
Always use arrow functions
Prefer const over let
优先级系统的核心:令牌节省
Caret 规则优先级系统与其他 AI 编码助手的最重要区别在于防止重复。
问题:其他工具的重复加载
像 Cline 和 Cursor 这样的工具会同时加载 .clinerules、.cursorrules、.windsurfrules。这会导致以下问题:
令牌浪费: 即使三个文件内容相似,也会全部发送给 AI,每次请求都会消耗数千个不必要的令牌。
设置冲突: 当每个文件有不同规则时,不清楚哪个优先,导致 AI 混乱。
提示膨胀: 多个规则文件堆积会使提示过长,减少包含重要代码上下文的空间。
解决方案:Caret 的单一选择方式
即使有多个规则文件,Caret 也只会选择一个加载。它遵循以下明确的优先级:
1 优先级: .caretrules
2 优先级: .clinerules
3 优先级: .cursorrules
4 优先级: .windsurfrules
自动运行: 如果存在 .caretrules 文件,所有其他规则文件将自动禁用。如果没有 .caretrules,则查找 .clinerules,如果也没有,则查找 .cursorrules,以此类推。
实际运行示例:
项目文件夹:
├── .caretrules ← 只读取这个
├── .clinerules ← 自动禁用
└── .cursorrules ← 自动禁用
删除 .caretrules 后:
├── .clinerules ← 现在读取这个
└── .cursorrules ← 自动禁用
通过这种方式,可以将令牌使用量减少高达 70%,并从根本上防止设置冲突。
实际应用示例
示例 1: React 项目
# .caretrules
## 技术栈
- React 18 + TypeScript
- Vite 构建
- Tailwind CSS + shadcn/ui
## 组件编写规则
- 所有组件使用函数式编写
- Props 类型使用 interface 定义
- 文件名与组件名相同(PascalCase.tsx)
## 样式规则
- 优先使用 Tailwind 工具类
- 最小化自定义 CSS
- 必须支持暗色模式
## 状态管理
- 本地状态: useState
- 全局状态: Zustand
- 服务器状态: TanStack Query
## 禁止事项
- 禁止使用 styled-components
- 禁止使用 Redux
- 禁止使用 class 组件
示例 2: NestJS 后端
# .caretrules
## 架构
- Controller → Service → Repository 模式
- 必须使用 DTO
- 所有端点必须有 Swagger 文档
## 命名规范
- Controller: `*.controller.ts`
- Service: `*.service.ts`
- DTO: `*.dto.ts`
- Entity: `*.entity.ts`
## 错误处理
- 使用 HttpException
- 定义自定义错误类
- 记录所有错误
## 安全
- 必须使用 JWT 认证
- 应用速率限制
- 必须进行输入验证
示例 3: 多语言项目
# .caretrules
## 语言规则
- 代码: 英语
- 注释: 中文
- 提交信息: 中文
- 文档: 中文
## 代码示例
```typescript
// ✅ 正确示例
function calculateTotal(items: Item[]): number {
// 计算总金额
return items.reduce((sum, item) => sum + item.price, 0)
}
// ❌ 错误示例
function 合计计算(items: Item[]): number {
// Calculate total
return items.reduce((sum, item) => sum + item.price, 0)
}
## 规则激活确认
### 在设置中确认
1. 打开设置(⚙️)
2. **常规**选项卡 → **规则**部分
3. 确认"启用项目规则"
### 状态显示
聊天标题栏显示规则激活状态:
🎯 Caret | Agent 模式 | 📋 规则已激活
### 手动禁用
仅对特定任务忽略规则:
在提示中说明: "忽略规则并快速创建原型"
## 高级功能
### 条件规则
为不同目录应用不同规则:
```markdown
# .caretrules
## 基本规则
- TypeScript strict
## /admin 目录
- 必须进行额外安全验证
- 确认管理员权限
## /public 目录
- 简化代码
- 优先快速加载
团队规则
使用 .caretrules/ 目录细化:
.caretrules/
├── frontend.md # 前端团队规则
├── backend.md # 后端团队规则
└── common.md # 通用规则
外部规则参考
# .caretrules
## 风格指南
- 遵循 Airbnb JavaScript 风格指南
- 参考 Google TypeScript 风格指南
## 参考文档
- https://github.com/airbnb/javascript
- https://google.github.io/styleguide/tsguide.html
规则调试
当 AI 不遵循规则时
检查项:
- 文件名是否正确?(
.caretrules而不是caretrules) - 是否位于项目根目录?
- 规则是否模糊不清?
- 是否有其他优先级更高的规则文件?
解决方法:
"请重新读取并应用项目规则"
确认规则优先级
"显示当前应用的规则"
→ AI 显示读取的规则文件和优先级
规则模板
React + TypeScript
# 项目规则
- TypeScript strict 模式
- 仅使用函数式组件
- 必须使用 Props interface
- 使用 Tailwind CSS
- 测试覆盖率 80% 以上
Node.js API
# 项目规则
- Express + TypeScript
- RESTful API 设计
- Joi 验证
- Winston 日志
- Jest 单元测试
全栈 Monorepo
# 项目规则
## 通用
- TypeScript
- ESLint + Prettier
- Conventional Commits
## /apps/web
- Next.js 14
- App Router
- Tailwind CSS
## /apps/api
- NestJS
- Prisma ORM
- PostgreSQL
迁移指南
Cline → Caret
保留现有 .clinerules 并添加 .caretrules:
# 复制现有规则
cp .clinerules .caretrules
# 编辑 .caretrules 添加 Caret 功能
Cursor → Caret
将 .cursorrules 转换为 .caretrules:
mv .cursorrules .caretrules
# 如需要调整格式
常见问题
Q: 规则文件大小限制? A: 建议 10KB 以下。太长可能导致 AI 无法记住所有内容。
Q: 修改规则后是否立即生效? A: 是的,从下一条消息开始立即应用。
Q: 多个规则文件内容冲突时?
A: 按 .caretrules → .clinerules → .cursorrules 顺序应用优先级。
Q: 可以在规则中放敏感信息吗? A: 不行。规则文件会发送给 AI,请勿包含 API 密钥等敏感信息。
下一步
统一规则系统是 Caret 独有功能。 Cline 仅支持 .clinerules,Cursor 仅支持 .cursorrules。