---
title: "2.4 项目规则配置"
description: "CLAUDE.md 和项目规则文件，让 AI 理解项目规范"
chapter: "第二章"
priority: "🟡"
---

# 2.4 项目规则配置 🟡

> **阅读完本节后，你将会收获：**
>
> - 理解项目配置文件的作用和使用场景
> - 掌握 CLAUDE.md 和 settings.json 的配置方法
> - 学会团队协作/多机开发的配置共享方案
> - 了解如何处理配置中的敏感信息

> **本节通常可以跳过**。个人开发时，AI 能从对话和项目文档中理解项目，无需额外配置。
>
> **团队协作/多机开发**：需要统一环境、规范、MCP、插件等配置时，本节内容非常有用。

::: warning 个人开发通常不需要配置

在折腾配置文件之前，请先了解：

1. **AI 有记忆**：对话中告诉 AI 的偏好，它会记住
2. **项目文档足够**：README + 第三章的项目文档通常能让 AI 理解项目
3. **配置是补充**：只有在 AI 反复忘记某些规则时，才考虑写入配置文件

:::

## 什么时候需要配置

**场景：AI 又忘了**

你第 5 次提醒 AI："不要用 npm，用 pnpm"。它还是用了 npm。

你意识到：口头提醒不靠谱，需要**写成规则**。

**决策流程**：

```mermaid
graph TB
    A[开始使用 AI] --> B{个人/团队?}
    B -->|个人| C[对话中说明偏好]
    B -->|团队/多机| D[需要配置]

    C --> E{AI 记住了?}
    E -->|是| F[无需配置]
    E -->|否| G[再次提醒]
    G --> H{多次仍忘记?}
    H -->|否| F
    H -->|是| I[考虑配置文件]

    D --> J[统一配置]
    J --> K[提交到 Git]
    K --> L[所有人拉取后自动生效]

    style F fill:#c8e6c9
    style I fill:#fff3e0
    style D fill:#e3f2fd
    style J fill:#e3f2fd
```

**快速判断**：

| 你的情况 | 需要配置？ | 为什么 |
|----------|-----------|--------|
| 个人项目，AI 记得住 | ❌ 不需要 | 对话最省事 |
| 个人项目，AI 总忘 | ✅ 建议 | 写进 CLAUDE.md，一劳永逸 |
| 多台电脑开发 | ✅ 需要 | 配置同步，不用重复设置 |
| 团队协作 | ✅ **必须** | 统一规范，避免"你用的 AI 怎么和我的不一样" |

**本节重点**：团队协作/多机开发时，配置文件让所有人用同一套规则。

:::

## 更简单的方法：让 AI 自己写

**场景：要写配置文件，但不知道格式**

你打开文档，看到一堆配置项。头大。

**直接让 AI 生成**：

```
请根据《AI 调教指南》2.4 节的内容，为我的团队项目创建配置文件。

项目信息：
- Next.js 16 + TypeScript
- 使用 shadcn/ui 组件库
- 用 pnpm 包管理器
- 5人团队，需要统一规范

请生成：
1. CLAUDE.md 项目说明
2. .claude/settings.json 权限配置
```

**30 秒后**，AI 给你完整的配置文件，直接复制粘贴。

**为什么比自己写快**：

| 你自己写 | AI 生成 |
|---------|--------|
| 查文档 → 理解格式 → 手写 → 检查 | 描述需求 → 复制结果 |
| 15 分钟 | 30 秒 |

**前提**：给 AI 足够的项目信息（技术栈、团队规模、特殊需求）。

AI 知道如何写配置文件，你只需要提供项目信息即可。

:::

## 配置文件的本质

```mermaid
graph LR
    A[配置文件] --> B[AI 读取]
    B --> C[理解项目]
    C --> D[生成符合规范的代码]

    E[无配置] --> F[AI 猜测]
    F --> G[风格不一致]

    H[README] --> C
    I[项目文档] --> C

    style H fill:#e3f2fd
    style I fill:#e3f2fd
```

**核心原则**：配置文件、README、项目文档——本质上都是**让 AI 理解项目的方式**。

| 方式 | 文件 | 作用 | 必要性 |
|------|------|------|--------|
| **项目文档** | README、第三章的文档 | 完整的项目说明 | ✅ 推荐 |
| **配置文件** | CLAUDE.md、.cursorrules | 简洁的规范说明 | ⚠️ 个人可选，团队需要 |
| **对话沟通** | 直接告诉 AI | 快速表达偏好 | ✅ 最简单 |

::: tip 关键洞察

**项目配置文件**（无论叫什么名字）本质相同：

- 都是写给 AI 看的项目说明书
- 核心内容：技术栈 + 编码规范 + 禁止行为
- 只是不同工具用不同文件名

| 工具 | 文件名 |
|------|--------|
| Claude Code | `CLAUDE.md` |
| Cursor | `.cursorrules` |
| Qoder/Trae | `.iderules` |

:::

## CLAUDE.md 模板

如果确实需要配置文件，越简洁越好：

```markdown
# 项目：[项目名称]

## 技术栈
Next.js 16 + TypeScript + Tailwind + shadcn/ui

## 规范
- 禁止 any，严格模式
- PascalCase 命名组件
- 用 pnpm

## 禁止
- 不装新依赖
- 不改 .env
```

**创建方式**：

- Claude Code：在项目根目录创建 `CLAUDE.md`
- Cursor/Qoder/Trae：在 IDE 设置中配置规则文件

::: details 完整模板

```markdown
# 项目说明

## 项目概述
[一句话说明项目做什么]

## 技术栈
- **框架**: Next.js 16 (App Router)
- **语言**: TypeScript (严格模式)
- **数据库**: Drizzle ORM + PostgreSQL
- **样式**: Tailwind CSS
- **组件**: shadcn/ui

## 编码规范
- 禁止 `any` 类型
- 组件用 PascalCase，函数用 camelCase
- 使用 pnpm（不要用 npm/yarn）

## 禁止行为
- ❌ 不要安装新依赖除非明确要求
- ❌ 不要修改 .env 文件
- ❌ 不要删除测试文件

## 目录结构
app/         # 页面和 API
components/  # 组件
lib/         # 工具函数
```

:::

### CLAUDE.md 进阶用法 ⭐

::: tip 本节重点

掌握 CLAUDE.md 的高级特性，让项目配置更模块化、更易维护。

:::

#### 记忆命令：让 AI 自动更新配置

在对话中使用 `#` 前缀，Claude Code 会自动将内容写入 CLAUDE.md：

```bash
# 对话中输入：
"# 本项目使用 pnpm 作为包管理器，不要使用 npm"
"# 数据库用 PostgreSQL + Drizzle ORM"
"# 组件库用 shadcn/ui，不要安装其他 UI 库"

# Claude Code 会自动追加到 CLAUDE.md，无需手动编辑
```

::: warning 注意
记忆命令写入的内容会追加到 CLAUDE.md 末尾。如果积累太多，建议定期整理归类。
:::

#### 模块化规则：`.claude/rules/` 目录

当 CLAUDE.md 变得很长时，可以拆分到 `.claude/rules/` 目录：

```
.claude/
├── CLAUDE.md              # 项目概述和核心规则
└── rules/
    ├── coding-style.md    # 代码风格规范
    ├── git-workflow.md    # Git 工作流
    ├── testing.md         # 测试要求
    └── security.md        # 安全规则
```

Claude Code 会自动加载 `rules/` 目录下的所有 `.md` 文件，与 CLAUDE.md 合并生效。

**何时用 `rules/` 目录 vs 单个 CLAUDE.md**：

| 场景 | 推荐方式 | 原因 |
|------|---------|------|
| 小项目、规则少于 50 行 | 单个 CLAUDE.md | 简单直接 |
| 团队项目、多人协作 | `rules/` 目录 | 不同人维护不同规则文件，减少冲突 |
| 规则超过 100 行 | `rules/` 目录 | 按主题拆分，易于查找和维护 |
| 需要按条件启用规则 | `rules/` 目录 | 可以通过 `.gitignore` 控制哪些规则生效 |

#### 构建/测试/Lint 命令

::: warning 重要

在 CLAUDE.md 中声明项目的构建命令，是避免 AI "猜错包管理器"的关键手段。

:::

```markdown
## 常用命令
- 安装依赖：`pnpm install`
- 开发服务器：`pnpm dev`
- 构建：`pnpm build`
- 测试：`pnpm test`
- Lint：`pnpm lint`
- 类型检查：`pnpm typecheck`
```

如果不声明，AI 可能会用 `npm run build` 或 `yarn test`——在 pnpm 项目中这会导致依赖解析错误。

## 团队协作配置 ⭐

::: tip 本节重点

团队协作/多机开发是配置文件最重要的使用场景。通过提交配置到 Git，确保所有成员的 AI 行为一致。

:::

### 提交哪些配置到 Git

```bash
# ✅ 应该提交
.claude/settings.json      # 项目级系统配置（不含敏感信息）
.mcp.json                   # MCP 服务器配置（不含敏感信息）
CLAUDE.md                  # 项目说明（Claude Code）
.cursorrules               # 编码规范（Cursor）
.iderules                  # 编码规范（Qoder/Trae）
.claude/skills/            # 团队 Skills（见 2.3 节）

# ❌ 不应该提交
.env                       # 环境变量（包含密钥）
node_modules/              # 依赖包
~/.claude/settings.json    # 用户级配置（个人密钥）
```

### 处理敏感信息

**方法：分层配置**

- **项目级配置**（`.claude/settings.json`）：提交到 Git，不含密钥
- **用户级配置**（`~/.claude/settings.json`）：不提交，包含个人密钥

::: details 配置示例

**用户级配置**（`~/.claude/settings.json`，不提交）：

```json
{
  "env": {
    "GITHUB_TOKEN": "ghp_xxx",
    "OPENAI_API_KEY": "sk_xxx"
  }
}
```

**项目级配置**（`.claude/settings.json`，提交到 Git）：

```json
{
  "permissions": {
    "defaultMode": "plan"
  }
}
```

:::

::: tip 安全原则

- ✅ 项目配置：提交到 Git，不含密钥
- ✅ 用户配置：不提交，包含个人密钥
- ❌ 不要把任何密钥写进项目配置文件

:::

## settings.json 配置详解

::: details 什么是 settings.json

settings.json 是 Claude Code 的系统配置文件，控制权限模式、环境变量、Hooks、MCP 服务器等。

**与 CLAUDE.md 的区别**：

- `CLAUDE.md`：写给 AI 看的项目说明书
- `settings.json`：控制工具行为的系统配置

**配置文件位置**：

| 级别 | 位置 | 作用域 | 优先级 |
|------|------|--------|--------|
| **项目级** | `.claude/settings.json` | 当前项目 | 高 |
| **用户级** | `~/.claude/settings.json` | 所有项目 | 低 |
| **本地级** | `.claude/settings.local.json` | 本地开发 | 最高 |

**优先级规则**：本地级 > 项目级 > 用户级。

:::

::: details 配置结构

```json
{
  "permissions": {
    "defaultMode": "plan"
  },
  "hooks": {},
  "env": {}
}
```

**权限模式选择**：

| 模式 | 说明 | 适用场景 |
|------|------|----------|
| `plan` | 计划模式，只读分析 | 代码审查、学习 |
| `acceptEdits` | 自动接受编辑 | 快速开发 |
| `bypassPermissions` | 绕过权限检查 | 完全信任 |

:::

::: details Hooks 配置

Hooks 在特定事件时自动执行脚本，详见 2.2 VibeCoding 工作流 - Hooks 自动化 (./02-vibecoding-workflow.md)。

**基本结构**：

```json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/format.sh"
          }
        ]
      }
    ]
  }
}
```

**常用事件**：

| 事件 | 触发时机 | 是否需要 matcher |
|------|----------|------------------|
| `PreToolUse` | 工具调用前 | ✅ 需要 |
| `PostToolUse` | 工具调用后 | ✅ 需要 |
| `PostToolUseFailure` | 工具执行失败后 | ✅ 需要 |
| `Notification` | 发送通知时 | ❌ 不需要 |
| `UserPromptSubmit` | 用户提交提示时 | ❌ 不需要 |
| `Stop` | 主代理完成响应时 | ❌ 不需要 |

:::

::: details MCP 服务器配置

MCP 服务器配置让 AI 能够连接外部服务。

**项目级配置**（`.mcp.json`，推荐）：

```json
{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/"
    },
    "postgres": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${DATABASE_URL}"
      }
    }
  }
}
```

**settings.json 中的配置**（旧方式，仍支持）：

```json
{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/"
    }
  }
}
```

**常用 MCP 服务器**：

| MCP | 功能 | 需要配置 |
|-----|------|----------|
| **GitHub** | 仓库操作 | GitHub Token |
| **PostgreSQL** | 数据库查询 | 连接字符串 |
| **Brave Search** | 网络搜索 | API Key |
| **Filesystem** | 文件系统访问 | 允许的路径 |

:::

### 团队配置模板

::: details 前端团队模板

```json
// .claude/settings.json
{
  "permissions": {
    "defaultMode": "acceptEdits",
    "disallowedTools": ["Bash(rm -rf:*)", "Bash(write .env:*)"]
  },
  "env": {
    "PACKAGE_MANAGER": "pnpm"
  },
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "pnpm format --write \"$CLAUDE_PROJECT_DIR\"/@file_path"
          }
        ]
      }
    ]
  }
}
```

```json
// .mcp.json
{
  "mcpServers": {
    "filesystem": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "$CLAUDE_PROJECT_DIR"]
    }
  }
}
```

:::

::: details 后端团队模板

```json
// .claude/settings.json
{
  "permissions": {
    "defaultMode": "plan",
    "disallowedTools": ["Bash(DROP TABLE:*)", "Bash(DELETE FROM:*)"]
  }
}
```

```json
// .mcp.json
{
  "mcpServers": {
    "postgres": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${DATABASE_URL}",
        "PG_READONLY": "true"
      }
    }
  }
}
```

:::

## 团队协作工作流

```mermaid
flowchart TD
    A[团队讨论规范] --> B[创建配置文件]
    B --> C[提交到 Git]
    C --> D[团队成员拉取]
    D --> E[AI 自动读取配置]
    E --> F[所有人行为一致]

    G[新成员加入] --> D

    style C fill:#e3f2fd
    style E fill:#c8e6c9
    style F fill:#c8e6c9
```

**实际操作**：

```bash
# 1. 团队负责人创建配置
vim CLAUDE.md
vim .claude/settings.json
vim .mcp.json

# 2. 提交到 Git
git add CLAUDE.md .claude/ .mcp.json
git commit -m "docs: 添加团队 AI 配置"
git push origin main

# 3. 团队成员拉取
git pull origin main

# 4. AI 自动读取，无需额外操作
```

## 核心理念

**配置是手段，不是目的**

```mermaid
graph LR
    A[目标: AI 理解项目] --> B[方式1: 对话]
    A --> C[方式2: README]
    A --> D[方式3: 配置文件]
    A --> E[方式4: 项目文档]

    B --> F[选择最简单的方式]
    C --> F
    D --> F
    E --> F

    G[团队协作] --> D
    H[多机开发] --> D

    style B fill:#c8e6c9
    style C fill:#c8e6c9
    style D fill:#e3f2fd
```

**记住**：

1. **对话优先**：先沟通，再配置
2. **文档为主**：README 和项目文档更完整
3. **配置为辅**：团队协作时才必需
4. **让 AI 帮你**：把文档给 AI，让它自己生成配置

## 常见问题

### Q1: CLAUDE.md 和 .cursorrules 有区别吗？

**A**: 本质一样，只是文件名不同。

| 工具 | 文件名 |
|------|--------|
| Claude Code | `CLAUDE.md` |
| Cursor | `.cursorrules` |
| Qoder/Trae | `.iderules` |

**核心内容都是**：技术栈 + 编码规范 + 禁止行为

### Q2: settings.json 修改后不生效？

**A**: 检查以下几点：

1. **JSON 格式**：确保格式正确
2. **文件位置**：确认是项目级还是用户级
3. **优先级**：本地级会覆盖项目级

### Q3: 团队协作如何统一配置？

**A**: 提交到 Git，所有人拉取后自动生效。

```bash
# 提交配置
git add CLAUDE.md .claude/settings.json .mcp.json
git commit -m "docs: 添加团队 AI 配置"
git push

# 成员拉取
git pull
```

### Q4: 如何处理个人密钥？

**A**: 使用分层配置。

- **项目级** (`.claude/settings.json`)：提交到 Git，不含密钥
- **用户级** (`~/.claude/settings.json`)：不提交，包含个人密钥
- 使用 `${VAR_NAME}` 引用环境变量

## 相关内容

- 前置：2.2 VibeCoding工作流详解
- 详见：2.3 MCP、插件与 Skills
- 详见：10.10 Skills 团队知识共享
- 详见：10.11 Agent Skills 团队协作
- 后续：第三章 PRD文档驱动开发
