03b - 规则文件编写指南
概述
规则文件是上下文工程四大支柱中最直接、最可控的一环。它是你与 AI agent 之间的”契约”——定义项目结构、编码规范、技术栈约定和行为边界。本节详细讲解三大主流规则文件(CLAUDE.md、.cursorrules、Kiro Steering)的编写方法,提供完整模板和实际示例,并对比它们的能力差异。
1. CLAUDE.md 编写指南
概念
CLAUDE.md 是 Claude Code 在每次会话开始时自动读取的 Markdown 文件。它为 Claude 提供持久化的项目上下文——技术栈、编码规范、常用命令、架构决策等。一个好的 CLAUDE.md 相当于给 Claude 做了一次完整的项目入职培训。
工具推荐
| 工具 | 用途 | 价格 | 适用场景 |
|---|---|---|---|
| Claude Code | 终端 AI 编码助手 | $20/月 (Pro) / $100/月 (Max) | 全栈开发、CLI 工作流 |
| Claude Code Action (GitHub) | CI/CD 中的 Claude | 按 token 计费 | 自动化代码审查、PR 生成 |
层级继承机制
CLAUDE.md 支持多层级放置,Claude Code 会自动合并所有层级的规则:
~/.claude/CLAUDE.md ← 全局规则(所有项目通用)
项目根目录/CLAUDE.md ← 项目级规则(当前项目通用)
项目根目录/packages/api/CLAUDE.md ← 子目录规则(特定模块专用)合并优先级: 子目录 > 项目根目录 > 全局。冲突时,更具体的规则覆盖更通用的规则。
结构模板
# CLAUDE.md
## 项目概述
[1-2 句话说明项目是什么、做什么]
## 技术栈
- 语言:[语言和版本]
- 框架:[框架和版本]
- 数据库:[数据库类型]
- 包管理:[包管理工具]
## 项目结构src/ ├── api/ # API 路由 ├── services/ # 业务逻辑 ├── models/ # 数据模型 ├── utils/ # 工具函数 └── types/ # 类型定义
## 常用命令
- 构建:`[构建命令]`
- 测试:`[测试命令]`
- 格式化:`[格式化命令]`
- Lint:`[lint 命令]`
## 编码规范
- [规范 1]
- [规范 2]
- [规范 3]
## 禁止事项
- 不要 [禁止事项 1]
- 不要 [禁止事项 2]
## 错误处理
[错误处理约定]
## 测试规范
[测试编写约定]编写最佳实践(WHAT-WHY-HOW 框架)
WHAT — 告诉 Claude 项目是什么:
- 项目目的和核心功能
- 代码库地图(尤其是 monorepo)
- 关键依赖和它们的用途
WHY — 告诉 Claude 为什么这样做:
- 架构决策的理由(为什么选 Prisma 而不是 TypeORM)
- 编码规范的动机(为什么禁止
any类型) - 历史背景(为什么某些模块结构特殊)
HOW — 告诉 Claude 怎么做:
- 具体的命令和工作流
- 代码模式和示例
- 测试和部署流程
示例 1:Next.js 全栈项目
# CLAUDE.md
## 项目概述
TaskFlow 是一个团队任务管理 SaaS,使用 Next.js 14 App Router + Prisma + PostgreSQL。
## 技术栈
- 语言:TypeScript 5.5(严格模式)
- 框架:Next.js 14 (App Router)
- ORM:Prisma 5
- 数据库:PostgreSQL 16
- 认证:NextAuth.js v5
- 样式:Tailwind CSS 3.4
- 测试:Vitest + Playwright
- 包管理:pnpm
## 项目结构src/ ├── app/ # Next.js App Router 页面和 API │ ├── (auth)/ # 认证相关页面(登录、注册) │ ├── (dashboard)/ # 仪表板页面(需要登录) │ └── api/ # API 路由 ├── components/ # React 组件 │ ├── ui/ # 基础 UI 组件(Button, Input 等) │ └── features/ # 业务功能组件 ├── lib/ # 共享工具库 │ ├── db.ts # Prisma 客户端实例 │ ├── auth.ts # NextAuth 配置 │ └── validations/ # Zod schema ├── types/ # TypeScript 类型定义 └── prisma/ # Prisma schema 和迁移
## 常用命令
- 开发:`pnpm dev`
- 构建:`pnpm build`
- 测试:`pnpm test`(Vitest)
- E2E 测试:`pnpm test:e2e`(Playwright)
- 数据库迁移:`pnpm prisma migrate dev`
- 格式化:`pnpm format`
- Lint:`pnpm lint`
## 编码规范
- 所有组件使用函数式组件 + hooks,禁止 class 组件
- API 路由使用 Zod 验证所有输入
- 数据库操作只在 server components 或 API 路由中执行
- 使用 `@/` 路径别名引用 src 目录
- 错误处理使用自定义 AppError 类,不要用裸 throw
- 所有公共 API 返回统一的 { success, data, error } 格式
## 禁止事项
- 不要使用 `any` 类型,使用 `unknown` + 类型守卫
- 不要在客户端组件中直接调用 Prisma
- 不要使用 `console.log`,使用项目的 logger 工具
- 不要硬编码环境变量,使用 env.ts 中的类型安全配置示例 2:Rust CLI 工具
# CLAUDE.md
## 项目概述
rustsync 是一个跨平台文件同步 CLI 工具,支持本地和云存储同步。
## 技术栈
- 语言:Rust 1.82 (edition 2024)
- 异步运行时:tokio
- CLI 框架:clap 4
- 序列化:serde + serde_json
- HTTP:reqwest
- 测试:内置 #[test] + proptest(属性测试)
## 项目结构src/ ├── main.rs # 入口点和 CLI 参数解析 ├── lib.rs # 库入口 ├── config.rs # 配置管理 ├── sync_engine.rs # 核心同步逻辑 ├── diff.rs # 文件差异计算 ├── transfer.rs # 文件传输 ├── error.rs # 错误类型定义 └── types.rs # 共享类型
## 常用命令
- 构建:`cargo build`
- 测试:`cargo test`
- Clippy:`cargo clippy -- -D warnings`
- 格式化:`cargo fmt`
- 发布构建:`cargo build --release`
## 编码规范
- 错误处理:公共 API 使用 thiserror 定义领域错误,内部使用 anyhow
- 所有公共函数必须有文档注释(/// 格式)
- 使用 tracing crate 记录日志,不要用 println! 或 eprintln!
- 优先使用 &str 而非 String 作为函数参数
- 异步函数使用 tokio,同步代码不要引入异步依赖
## 禁止事项
- 不要使用 unwrap(),使用 ? 操作符或 expect() 并附带说明
- 不要使用 unsafe 代码,除非有充分理由并添加 SAFETY 注释
- 不要忽略 clippy 警告2. .cursorrules 编写指南
概念
.cursorrules 是 Cursor 编辑器读取的项目级规则文件,放在项目根目录。它告诉 Cursor 的 AI 助手你的编码偏好和项目约定。相比 CLAUDE.md,.cursorrules 更简洁直接,侧重于规则列表。
工具推荐
| 工具 | 用途 | 价格 | 适用场景 |
|---|---|---|---|
| Cursor | AI 代码编辑器 | 免费 / $20/月 (Pro) / $40/月 (Business) | 交互式 AI 编码 |
| cursor.directory | 社区规则模板库 | 免费 | 查找现成的 .cursorrules 模板 |
结构特点
- 纯文本或 Markdown 格式
- 没有层级继承(只有项目根目录一个文件)
- 规则以简洁的条目形式列出
- 支持代码示例嵌入
结构模板
# .cursorrules
## 项目信息
你正在开发 [项目名],一个 [项目描述]。
## 技术栈
- [技术栈列表]
## 代码风格
- [风格规则 1]
- [风格规则 2]
## 架构规则
- [架构规则 1]
- [架构规则 2]
## 命名规范
- [命名规则]
## 禁止事项
- 不要 [禁止事项]
## 偏好
- 优先使用 [偏好 A] 而非 [偏好 B]示例 1:React + TypeScript 项目
你是一个 React + TypeScript 专家。
## 技术栈
- React 19 + TypeScript 5.5
- Vite 6 构建
- Zustand 状态管理
- React Query 数据获取
- Tailwind CSS 样式
## 代码风格
- 使用函数式组件和 hooks
- 组件文件使用 PascalCase 命名
- 工具函数使用 camelCase 命名
- 每个组件一个文件,与同名 .module.css 配对
- 使用 named export,不要 default export
## 架构规则
- 组件按功能分目录(components/auth/、components/dashboard/)
- 自定义 hooks 放在 hooks/ 目录
- API 调用封装在 api/ 目录
- 类型定义放在 types/ 目录
## 禁止事项
- 不要使用 any 类型
- 不要使用 class 组件
- 不要在组件中直接调用 fetch,使用 React Query
- 不要使用 inline styles,使用 Tailwind 或 CSS Modules示例 2:Python FastAPI 项目
你是一个 Python FastAPI 后端专家。
## 技术栈
- Python 3.12 + FastAPI 0.115
- SQLAlchemy 2.0 + Alembic
- Pydantic v2 数据验证
- Poetry 包管理
- Pytest 测试
## 代码风格
- 使用 type hints 标注所有函数参数和返回值
- 使用 async def 定义所有路由处理函数
- Pydantic model 用于请求/响应验证
- 使用 dependency injection 管理数据库会话
## 架构规则
- 路由定义在 app/routers/
- 业务逻辑在 app/services/
- 数据模型在 app/models/
- Pydantic schemas 在 app/schemas/
- 每个路由模块对应一个 service 模块
## 命名规范
- 文件名:snake_case
- 类名:PascalCase
- 函数名:snake_case
- 常量:UPPER_SNAKE_CASE
## 禁止事项
- 不要在路由函数中直接写 SQL
- 不要使用 print(),使用 logging 模块
- 不要硬编码配置值,使用 pydantic-settings3. Kiro Steering 编写指南
概念
Kiro Steering 是 Kiro IDE 的行为引导系统,通过 .kiro/steering/ 目录下的 Markdown 文件为 AI agent 提供持久化的项目知识。相比 CLAUDE.md 和 .cursorrules,Steering 最大的特点是支持三种包含模式——始终包含、条件包含和手动激活——让你精细控制哪些规则在什么时候生效。
工具推荐
| 工具 | 用途 | 价格 | 适用场景 |
|---|---|---|---|
| Kiro | IDE 级 AI 编码助手 | 免费 / $19/月 (Pro) | Spec-Driven 开发、结构化工作流 |
三种包含模式
| 模式 | Front-matter | 触发条件 | 适用场景 |
|---|---|---|---|
| 始终包含(默认) | 无需配置 | 每次对话自动加载 | 全局编码规范、项目结构 |
| 条件包含 | inclusion: fileMatch + fileMatchPattern | 匹配文件被读入上下文时 | 特定模块的规则(API、测试等) |
| 手动激活 | inclusion: manual | 用户在聊天中用 # 引用 | 偶尔需要的专题知识 |
文件结构
.kiro/
└── steering/
├── coding-standards.md ← 始终包含:全局编码规范
├── api-patterns.md ← 条件包含:API 开发时加载
├── testing-guide.md ← 条件包含:测试文件时加载
└── deployment-guide.md ← 手动激活:部署时手动引用全局 Steering(跨项目通用):
~/.kiro/steering/
├── personal-preferences.md ← 个人编码偏好
└── common-patterns.md ← 通用设计模式结构模板
始终包含(无 front-matter):
# 项目编码规范
## 技术栈
- [技术栈信息]
## 编码规范
- [规范列表]
## 项目结构
[结构说明]条件包含:
---
inclusion: fileMatch
fileMatchPattern: "src/api/**"
---
# API 开发规范
## 路由规范
- [API 特定规则]
## 错误处理
- [API 错误处理约定]手动激活:
---
inclusion: manual
---
# 部署指南
## 部署流程
- [部署步骤]Steering 还支持文件引用
在 Steering 文件中,可以用特殊语法引用项目中的其他文件,让 AI 自动读取:
# API 开发规范
请遵循以下 OpenAPI 规范:
#[[file:docs/api-spec.yaml]]
请遵循以下数据库 schema:
#[[file:prisma/schema.prisma]]示例 1:全栈项目的 Steering 文件集
.kiro/steering/coding-standards.md(始终包含):
# TaskFlow 编码规范
## 项目概述
TaskFlow 是团队任务管理 SaaS,使用 Next.js 14 + Prisma + PostgreSQL。
## 通用规范
- TypeScript 严格模式,禁止 any
- 使用 named export
- 文件名使用 kebab-case
- 组件名使用 PascalCase
- 所有异步操作必须有错误处理
## 常用命令
- 开发:pnpm dev
- 测试:pnpm test
- 构建:pnpm build
- 数据库迁移:pnpm prisma migrate dev.kiro/steering/api-patterns.md(条件包含):
---
inclusion: fileMatch
fileMatchPattern: "src/app/api/**"
---
# API 开发模式
## 路由规范
- 所有 API 路由使用 Route Handlers(app/api/ 目录)
- 请求体使用 Zod schema 验证
- 返回统一格式:{ success: boolean, data?: T, error?: string }
- 使用 NextResponse.json() 返回响应
## 认证
- 需要认证的路由使用 getServerSession() 检查
- 未认证返回 401,无权限返回 403
## 错误处理模式
```typescript
try {
const body = await req.json();
const validated = createTaskSchema.parse(body);
const result = await taskService.create(validated);
return NextResponse.json({ success: true, data: result });
} catch (error) {
if (error instanceof ZodError) {
return NextResponse.json({ success: false, error: "验证失败" }, { status: 400 });
}
return NextResponse.json({ success: false, error: "服务器错误" }, { status: 500 });
}
### 示例 2:Rust 项目的 Steering 文件集
**`.kiro/steering/rust-conventions.md`(始终包含):**
```markdown
# Rust 项目规范
## 项目信息
rustsync — 跨平台文件同步工具,Rust 1.82,edition 2024。
## 错误处理
- 公共 API:thiserror 定义领域错误枚举
- 内部实现:anyhow::Result 简化错误传播
- 禁止 unwrap(),使用 ? 或 expect("说明")
## 日志
- 使用 tracing crate(info!, warn!, error!)
- 禁止 println! / eprintln!
## 测试
- 单元测试放在同文件的 #[cfg(test)] mod tests 中
- 集成测试放在 tests/ 目录
- 属性测试使用 proptest crate.kiro/steering/unsafe-review.md(手动激活):
---
inclusion: manual
---
# Unsafe 代码审查指南
当需要审查或编写 unsafe 代码时,遵循以下规则:
## 必须条件
- 每个 unsafe 块必须有 // SAFETY: 注释说明为什么是安全的
- 必须有对应的测试覆盖
- 优先寻找 safe 替代方案
## 常见场景
- FFI 调用:确保指针有效性和生命周期
- 性能关键路径:先用 safe 代码验证正确性,再优化4. 三大规则文件对比
| 特性 | CLAUDE.md | .cursorrules | Kiro Steering |
|---|---|---|---|
| 工具 | Claude Code | Cursor | Kiro |
| 文件位置 | 项目根目录 | 项目根目录 | .kiro/steering/ |
| 格式 | Markdown | Markdown/纯文本 | Markdown + front-matter |
| 层级继承 | ✅ 全局 → 项目 → 子目录 | ❌ 仅项目级 | ✅ 全局 → 工作区 |
| 条件包含 | ❌ | ❌ | ✅ fileMatch 模式 |
| 手动激活 | ❌ | ❌ | ✅ manual 模式 |
| 文件引用 | ✅ @import 语法 | ❌ | ✅ #[[file:]] 语法 |
| 多文件支持 | ✅ 多个 CLAUDE.md | ❌ 单文件 | ✅ 多个 .md 文件 |
| 社区模板 | 较少 | cursor.directory 丰富 | 较少 |
| 适合场景 | CLI 工作流、深度编码 | 编辑器内交互式编码 | Spec-Driven 开发、团队协作 |
选择建议
- 用 Claude Code 为主 → 写好 CLAUDE.md,利用层级继承管理 monorepo
- 用 Cursor 为主 → 写好 .cursorrules,从 cursor.directory 找模板起步
- 用 Kiro 为主 → 用 Steering 文件,利用条件包含减少上下文噪音
- 多工具混用 → 维护一份核心规则文档,分别适配各工具格式(内容可以大量重叠)
操作步骤:从零开始编写规则文件
步骤 1:盘点项目信息
列出以下信息:
- 技术栈和版本
- 项目目录结构
- 常用开发命令
- 编码规范和约定
- 禁止事项
步骤 2:选择工具并创建文件
# Claude Code
touch CLAUDE.md
# Cursor
touch .cursorrules
# Kiro
mkdir -p .kiro/steering
touch .kiro/steering/coding-standards.md步骤 3:填充核心内容
按照上面的模板,填入步骤 1 盘点的信息。先写最重要的规则(编码规范、常用命令),再逐步补充。
步骤 4:迭代优化
使用 AI 助手一段时间后,观察它的行为:
- 如果 AI 反复犯同一个错误 → 在规则文件中明确禁止
- 如果 AI 不知道某个约定 → 在规则文件中添加说明
- 如果规则文件太长 → 拆分为多个文件(Kiro Steering)或使用子目录 CLAUDE.md
提示词模板:让 AI 帮你生成规则文件
分析当前项目的代码库,为我生成一份 [CLAUDE.md / .cursorrules / Kiro Steering 文件]。
请包含:
1. 项目概述(1-2 句话)
2. 技术栈和版本
3. 项目目录结构
4. 常用开发命令
5. 从现有代码中推断的编码规范(至少 5 条)
6. 基于代码模式推断的禁止事项(至少 3 条)
格式要求:简洁明确,每条规则一行,避免冗长解释。避坑指南
❌ 常见错误
-
规则文件写成百科全书
- 问题:2000+ 行的规则文件会稀释重要规则的权重,模型可能忽略关键约定
- 正确做法:保持 500-1000 行以内,最重要的规则放在最前面
-
规则之间相互矛盾
- 问题:一处说”使用 default export”,另一处说”使用 named export”
- 正确做法:写完后通读一遍,检查一致性;使用 AI 帮你审查规则文件
-
只写”做什么”不写”为什么”
- 问题:AI 不理解规则背后的动机,在边界情况下可能做出错误判断
- 正确做法:对重要规则附加简短的理由说明
-
规则文件从不更新
- 问题:项目演进后规则文件过时,AI 按照旧规范生成代码
- 正确做法:每次重大技术决策后更新规则文件,将其纳入代码审查流程
-
把所有规则塞进一个文件
- 问题:不同场景的规则混在一起,增加上下文噪音
- 正确做法:使用 Kiro Steering 的条件包含,或 CLAUDE.md 的子目录机制,按场景拆分
✅ 最佳实践
- 规则文件应该版本控制(提交到 Git),让团队成员共享和协作
- 定期用 AI 审查规则文件本身,检查过时或矛盾的内容
- 新团队成员入职时,让他们阅读规则文件——如果人类看不懂,AI 也看不懂
- 从小开始,逐步迭代——不要试图一次写出完美的规则文件
相关资源与延伸阅读
规则文件模板与示例
- Awesome CLAUDE.md — GitHub — 社区收集的 CLAUDE.md 文件、工作流和最佳实践
- Awesome CursorRules — GitHub — 大量 .cursorrules 文件模板,按技术栈分类
- AGENTS.md 规范 — 跨工具的 Agent 上下文文件标准化趋势分析
官方文档
- Claude Code Memory 管理 — Anthropic — CLAUDE.md 的官方编写指南和最佳实践
- Kiro Steering 官方文档 — Kiro Steering 文件的完整文档
- Book of Kiro — Steering — 社区编写的 Kiro Steering 深度指南
工具
- Claude Code Rules — paddo.dev — 路径特定规则的使用技巧,按文件类型加载不同规则
- Softcery Agentic Coding Guide — 上下文文件、工作记忆和结构化工作流的实战指南
社区
- r/ClaudeAI — Claude 用户社区,经常有 CLAUDE.md 编写经验分享
- Kiro Community — Book of Kiro — Kiro 社区知识库,包含 Steering 文件的实战案例
参考来源
- Writing a good CLAUDE.md — HumanLayer (2025-11)
- The Ultimate Guide to CLAUDE.md — BuildCamp (2026-02)
- CLAUDE.md for .NET Developers — CodeWithMukesh (2026-01)
- Kiro Steering 官方文档 (2025)
- Kiro Steering File Priority Guide — QES (2026-01)
- Best Practices for Configuring Kiro Steering — QES (2026-02)
- Book of Kiro — Steering (2025)
- How to Vibe Code Advanced — VibeCoding.app (2025-12)