第 5 章 配置体系
本章目标
- 理解 Claude Code 的三级配置架构(全局 / 用户 / 项目)
- 掌握 settings.json 的常用参数及其作用
- 学会编写高质量的 CLAUDE.md
- 理解 .claude 目录的完整结构和各文件用途
- 能根据项目需求定制 Claude Code 行为
5.1 三级配置架构
Claude Code 的配置分为三个层级,逐级合并,形成最终生效的配置。
flowchart TD
subgraph 优先级:低 → 高
A[全局级配置<br/>~/.claude/settings.json] --> B[用户级配置<br/>~/.claude/settings.local.json]
B --> C[项目级配置<br/>.claude/settings.json]
end
C --> D[最终生效配置]
| 层级 | 路径 | 作用范围 | 典型用途 |
|---|---|---|---|
| 全局级 | ~/.claude/settings.json | 所有项目 | 通用模型选择、全局权限规则、个人偏好 |
| 用户级 | ~/.claude/settings.local.json | 所有项目 | 个人密钥、本地调试开关(不提交到版本控制) |
| 项目级 | .claude/settings.json | 当前项目 | 项目特定的权限、工具配置、团队约定 |
合并规则:
- 数组类型的配置项(如权限规则)是叠加的
- 标量类型的配置项(如模型选择)是覆盖的 —— 项目级覆盖用户级覆盖全局级
- 设置某个值为
null表示"清除"该配置,回退到下一级
⚠️
settings.local.json默认不应加入版本控制。它用于存放个人敏感信息(API Key、本地路径等)。
5.2 settings.json 参数详解
以下是 settings.json 中主要的配置项分类说明。
模型相关
{
"model": "claude-sonnet-4-6",
"modelOverrides": {
"fast": "claude-opus-4-7"
}
}
| 参数 | 类型 | 说明 |
|---|---|---|
model | string | 默认使用的模型 ID |
modelOverrides | object | 针对特定场景的模型覆盖,如 fast 模式使用的模型 |
权限相关
{
"permissions": {
"allow": ["Read(./src/**)"],
"deny": ["Read(./.env)", "Read(./secrets/**)"],
"defaultMode": "default"
}
}
| 参数 | 类型 | 说明 |
|---|---|---|
permissions.allow | string[] | 自动允许的规则列表 |
permissions.deny | string[] | 始终拒绝的规则列表 |
permissions.defaultMode | string | 默认权限模式,可选 default / acceptEdits / plan / bypassPermissions |
⚠️
bypassPermissions模式会跳过所有审批环节,仅应在完全受控的环境(如 CI/CD)中使用。
Hook 相关
{
"hooks": {
"SessionStart": [
{ "matcher": "*", "command": "echo 'Claude Code started at $(date)'" }
]
}
}
详见第 8 章 Hook 系统。
MCP 相关
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@anthropic-ai/mcp-server-filesystem"]
}
}
}
详见第 11 章 MCP 协议与集成。
外观与行为
{
"theme": "dark",
"showTokensCounter": true,
"autoCompactEnabled": true,
"continueOnSameLine": true
}
| 参数 | 类型 | 说明 |
|---|---|---|
theme | string | 主题:dark、light、system |
showTokensCounter | boolean | 是否显示 Token 用量统计 |
autoCompactEnabled | boolean | 是否启用上下文自动压缩 |
continueOnSameLine | boolean | 是否允许回复与消息同行显示 |
环境变量
{
"env": {
"NODE_ENV": "development",
"HTTP_PROXY": "http://proxy:8080"
}
}
通过 env 字段为 Claude Code 的执行环境注入环境变量。项目级配置中的 env 会与系统环境合并。
5.3 CLAUDE.md 深入
在第 3 章我们介绍了 CLAUDE.md 的基本概念,这里进一步深入编写技巧。
CLAUDE.md 应该包含什么
# CLAUDE.md
## 项目简介
一行描述项目做什么、为谁做。
## 技术栈
- 运行时:Node.js 20
- 语言:TypeScript 5.x (strict mode)
- 框架:Express 4.x
- 数据库:PostgreSQL 15 + Drizzle ORM
- 缓存:Redis 7
## 项目约定
### 代码风格
- 使用 Prettier + ESLint,配置在项目根目录
- 函数参数超过 3 个时使用对象参数
- 异步函数统一返回 Result<T, Error> 类型
### 文件组织
- 新 API 路由添加到 src/routes/
- Service 层放在 src/services/,一个 service 一个文件
- 类型定义放在 src/types/,按领域分文件
### 测试要求
- Service 层函数必须有单元测试
- API 路由需要有集成测试
- 测试文件与源文件同目录,命名 xxx.test.ts
## 禁止事项
- 不要修改 src/migrations/ 目录
- 不要提交 .env 文件
- 不要使用 any 类型
- 不要安装未经审批的 npm 包
什么不该写进 CLAUDE.md
| 不该写 | 理由 |
|---|---|
| 完整的 API 文档 | 太冗长,用单独的 docs/ 文件 |
| 业务逻辑详解 | Claude 能通过读代码理解 |
| 个人偏好(如"我不喜欢 for 循环") | 这是你的偏好,不是项目约定 |
| TODO 列表 | 用 Git Issues 管理 |
| 安装步骤 | 这些属于 README.md |
💡 判断标准:如果一段话描述的是"项目规则"(每个人都应当遵守),放进 CLAUDE.md;如果描述的是"你应该做什么"(任务),不要放 —— 在对话中说。
CLAUDE.md 的位置
Claude Code 会按以下顺序查找 CLAUDE.md:
- 项目根目录
./CLAUDE.md - 项目
.claude/CLAUDE.md - 用户目录
~/.claude/CLAUDE.md
多个存在的 CLAUDE.md 内容会合并。通常建议放在项目根目录,便于团队成员发现和维护。
CLAUDE.md 的维护
- 代码审查时:如果团队采纳了新约定,同步更新 CLAUDE.md
- 新人入职时:让新人读 CLAUDE.md 了解项目规范,也让他们补充遗漏
- 迭代时:删除过时的规则,保持精简
5.4 .claude 目录结构全览
项目根目录/
├── CLAUDE.md # 项目上下文描述(可选,也可放在此处)
└── .claude/
├── settings.json # 项目级配置
├── settings.local.json # 本地配置(不提交到版本控制)
├── CLAUDE.md # 项目上下文描述(可选)
├── scheduled_tasks.json # 持久化定时任务(由 CronCreate 自动管理)
└── memory/ # Memory 系统持久化目录(详见第 15 章)
├── MEMORY.md # 记忆索引
└── *.md # 各类型记忆文件
| 文件 / 目录 | 作用 | 是否提交 Git |
|---|---|---|
CLAUDE.md (根目录) | 项目上下文描述 | 是 |
.claude/settings.json | 项目级配置 | 是(团队共享) |
.claude/settings.local.json | 本地个人配置 | 否 |
.claude/CLAUDE.md | 项目上下文(备选位置) | 是 |
.claude/scheduled_tasks.json | 定时任务持久化 | 视团队策略 |
.claude/memory/ | Memory 系统数据 | 否(个人知识库) |
⚠️
.claude/settings.local.json和.claude/memory/应加入.gitignore。
5.5 配置实战:定制你的 Claude Code
场景一:前端项目
{
"model": "claude-sonnet-4-6",
"permissions": {
"allow": [
"Read(./src/**)",
"Edit(./src/**)",
"Bash(npm test)",
"Bash(npm run dev)",
"Bash(npm run build)"
],
"deny": [
"Read(./.env*)",
"Read(./node_modules/**)"
]
}
}
CLAUDE.md 要点:
- 使用 React 18 + TypeScript + Tailwind CSS
- 组件命名使用 PascalCase,文件使用 kebab-case
- 状态管理使用 Zustand
场景二:后端 API 项目
{
"model": "claude-opus-4-7",
"permissions": {
"allow": [
"Read(./src/**)",
"Edit(./src/**)",
"Bash(npm test)",
"Bash(npx jest -- --testPathPattern=)"
],
"deny": [
"Read(./src/migrations/**)",
"Bash(*production*)"
]
}
}
CLAUDE.md 要点:
- NestJS + PostgreSQL + Prisma
- 所有 API 返回统一的
{ code, data, message }格式 - 数据库迁移文件不可修改,只能读取
💡 配置是活的。不要一次写死所有规则 —— 先在对话中手动审批几次,观察哪些操作反复出现,再把它们加入 allow。配置是使用中"长出来的",不是一次性设计出来的。
本章要点回顾
- Claude Code 配置分三级:全局(
~/.claude/)→ 用户(settings.local.json)→ 项目(.claude/),优先级逐级升高 - settings.json 控制模型、权限、Hook、MCP、外观行为等各个方面
- CLAUDE.md 写的是项目规则和约定,不是教程、不是 TODO、不是个人偏好
- .claude 目录中,
settings.json和CLAUDE.md应提交版本控制,settings.local.json和memory/不应提交 - 好的配置是"长出来的":先用 ask 模式观察高频操作,再逐步加入 allow