Skip to Content

03b - 规则文件编写指南

本文是《AI Agent 实战手册》第 3 章第 2 节。 上一节:上下文工程方法论 | 下一节:上下文窗口管理策略

概述

规则文件是上下文工程四大支柱中最直接、最可控的一环。它是你与 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 更简洁直接,侧重于规则列表。

工具推荐

工具用途价格适用场景
CursorAI 代码编辑器免费 / $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-settings

3. Kiro Steering 编写指南

概念

Kiro Steering 是 Kiro IDE 的行为引导系统,通过 .kiro/steering/ 目录下的 Markdown 文件为 AI agent 提供持久化的项目知识。相比 CLAUDE.md 和 .cursorrules,Steering 最大的特点是支持三种包含模式——始终包含、条件包含和手动激活——让你精细控制哪些规则在什么时候生效。

工具推荐

工具用途价格适用场景
KiroIDE 级 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.cursorrulesKiro Steering
工具Claude CodeCursorKiro
文件位置项目根目录项目根目录.kiro/steering/
格式MarkdownMarkdown/纯文本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 条) 格式要求:简洁明确,每条规则一行,避免冗长解释。

避坑指南

❌ 常见错误

  1. 规则文件写成百科全书

    • 问题:2000+ 行的规则文件会稀释重要规则的权重,模型可能忽略关键约定
    • 正确做法:保持 500-1000 行以内,最重要的规则放在最前面
  2. 规则之间相互矛盾

    • 问题:一处说”使用 default export”,另一处说”使用 named export”
    • 正确做法:写完后通读一遍,检查一致性;使用 AI 帮你审查规则文件
  3. 只写”做什么”不写”为什么”

    • 问题:AI 不理解规则背后的动机,在边界情况下可能做出错误判断
    • 正确做法:对重要规则附加简短的理由说明
  4. 规则文件从不更新

    • 问题:项目演进后规则文件过时,AI 按照旧规范生成代码
    • 正确做法:每次重大技术决策后更新规则文件,将其纳入代码审查流程
  5. 把所有规则塞进一个文件

    • 问题:不同场景的规则混在一起,增加上下文噪音
    • 正确做法:使用 Kiro Steering 的条件包含,或 CLAUDE.md 的子目录机制,按场景拆分

✅ 最佳实践

  1. 规则文件应该版本控制(提交到 Git),让团队成员共享和协作
  2. 定期用 AI 审查规则文件本身,检查过时或矛盾的内容
  3. 新团队成员入职时,让他们阅读规则文件——如果人类看不懂,AI 也看不懂
  4. 从小开始,逐步迭代——不要试图一次写出完美的规则文件

相关资源与延伸阅读

规则文件模板与示例

官方文档

工具

社区


参考来源


📖 返回 总览与导航 | 上一节:上下文工程方法论 | 下一节:上下文窗口管理策略

Last updated on