当前位置: 首页 > news >正文

04 — CLAUDE.md 入门:给 AI 写一份“员工手册“

本节目标

完成本节后,你将能够:

  1. 准确解释 CLAUDE.md 是什么以及它为什么是最重要的配置文件

  2. 理解 CLAUDE.md 的三层加载优先级体系

  3. 使用/init自动生成并手动精炼 CLAUDE.md

  4. 编写一份包含 5 个核心模块的高质量 CLAUDE.md

  5. 严格遵守 150 行预算规则,写出精炼高效的项目规则


核心知识点

CLAUDE.md 到底是什么

CLAUDE.md 是 Claude Code 的项目级配置文件。你可以把它理解为:

一份给 AI 工程师的"员工手册"

就像一个新入职的工程师需要了解公司的代码规范、项目结构、构建命令和禁止操作一样,Claude Code 在每次启动时都会自动读取 CLAUDE.md,让它的行为符合你的预期。

它使用 Markdown 格式,放在项目的根目录(或其他关键目录)。Claude Code 会在每个会话开始时自动加载它。

什么时候必须有 CLAUDE.md?

CLAUDE.md 不是必须的——没有它 Claude Code 也能工作。但在以下场景中,它会从"可有可无"变成"必不可少":

  • 你的项目使用了特定的代码风格(比如所有函数必须加 JSDoc 注释)

  • 你的项目有非标准的构建或测试命令

  • 你希望 Claude Code 遵循特定的命名规范

  • 你有一些绝对不能被修改的文件或目录

  • 你的项目使用 monorepo 结构,不同子目录有不同规则

  • 你希望团队中所有成员的 Claude Code 行为一致

三层加载优先级体系

Claude Code 按以下顺序加载 CLAUDE.md 文件,后面的会覆盖前面的

1. 全局配置: ~/.claude/CLAUDE.md (你个人的全局偏好) 2. 项目根目录: ./CLAUDE.md (项目级通用规则) 3. 子目录配置: ./subdir/CLAUDE.md (目录级特定规则)

实际例子

~/.claude/CLAUDE.md → "总是使用中文回复"(个人全局偏好) ​ ~/project/CLAUDE.md → "这个项目使用 ESLint + Prettier,禁止用 var"(项目规则) ​ ~/project/src/api/CLAUDE.md → "API 层所有函数必须添加 try-catch,返回统一格式 {success, data, error}"(目录特定规则)

当你让 Claude Code 修改~/project/src/api/user.ts时,它会同时遵守三层规则:用中文回复、不用 var、加上 try-catch 和统一返回格式。

什么是/init自动生成

Claude Code 提供了/init命令,它会自动分析你的项目结构,然后生成一份 CLAUDE.md 草稿。

自动生成的内容通常包括:

  • 项目的技术栈(识别的语言、框架、构建工具)

  • 目录结构概览

  • 常见的构建和测试命令

  • 基本的代码风格建议

但这只是起点。自动生成的内容往往是"通用的"而不是"你的项目的"。真正的价值在于你对这份草稿的精炼。

一份高质量 CLAUDE.md 的五个核心模块

经过大量实践验证,一份有效的 CLAUDE.md 应该包含以下内容:

模块 1:构建与运行命令

## 构建与命令 - 开发服务器: `npm run dev` - 构建生产版本: `npm run build` - 运行所有测试: `npm test` - 运行单个测试: `npm test -- -t "test name"` - 类型检查: `npm run typecheck`

模块 2:代码风格约定

## 代码风格 - 使用 TypeScript 严格模式,禁止使用 `any` - 函数命名使用 camelCase,React 组件使用 PascalCase - 所有公共 API 函数必须包含 JSDoc 注释 - 优先使用 const 和箭头函数 - 文件最长 400 行,超出则拆分

模块 3:项目架构约定

## 架构约定 - src/components/ — UI 组件,每个组件一个目录 - src/hooks/ — 自定义 React Hooks - src/utils/ — 纯函数工具,无副作用 - src/api/ — API 调用层,统一错误处理格式 - 组件不直接调用 API,必须通过 hooks 层

模块 4:禁止操作清单

## 禁止操作 - 不要修改 package-lock.json 或 yarn.lock - 不要删除任何 .test.ts 文件 - 不要在没有讨论的情况下修改数据库 schema - 不要引入超过 50KB(gzip)的新依赖 - 不要修改 .github/workflows/ 下的 CI 配置

模块 5:语言和交互偏好

## 交互偏好 - 使用中文回复所有消息 - 在修改文件前先解释将要做什么 - 遇到不确定的情况时,先提问而不是猜测 - 修改超过 30 行时,提供修改摘要

150 行预算规则——最重要的纪律

Claude Code 会把 CLAUDE.md 的全文加载到每个会话的上下文中。上下文窗口是有限且昂贵的资源。因此有一条黄金法则:

CLAUDE.md 的总长度不应超过 150 行(约 2000-3000 字符)

为什么是 150 行?

  • 上下文窗口约 200K token(Sonnet 4),CLAUDE.md 消耗约 1000-2000 token

  • 这意味着 CLAUDE.md 只占约 1% 的上下文预算——合理

  • 如果 CLAUDE.md 长达 500 行(约 5000 token),它占了约 2.5%——开始不划算

  • 超过 1000 行(约 10000 token),它占 5%——严重浪费

精简技巧

  • 写"做什么"和"不做什么",不要写"为什么"

  • 用列表和短句,不要用段落体

  • 重复的内容合并到一处

  • 每季度审视一次,删除过时内容


实操步骤

步骤 1:在一个项目中生成你的第一份 CLAUDE.md

找一个小项目目录,或使用上一节创建的 playground:

cd ~/claude-playground claude

在交互模式中输入:

/init

观察 Claude Code 的行为:

  1. 它会扫描项目文件结构

  2. 读取 package.json 等配置文件

  3. 生成一份 CLAUDE.md 草稿

  4. 展示给你预览

  5. 你确认后写入文件

步骤 2:阅读并评审自动生成的内容

cat CLAUDE.md

用批判的眼光审视每一条内容:

  • 哪些描述是准确的?留用。

  • 哪些是自动生成的不相关内容?删除。

  • 哪些是你的项目特有的规则但没被生成出来?补充。

步骤 3:手动精炼 CLAUDE.md

以下是一个实战示例。假设你的项目是一个 React + TypeScript 的前端应用,使用 Vite 构建:

# MyApp 项目规范 ​ ## 命令 - 开发: `npm run dev` (端口 3000) - 构建: `npm run build` (输出到 dist/) - 测试: `npm test` (Vitest) - 类型检查: `npm run typecheck` ​ ## 技术栈 - React 19 + TypeScript 5.x 严格模式 - Vite 6.x 构建 - Tailwind CSS 4.x 样式 - Vitest 测试 - React Router 7 路由 ​ ## 代码风格 - 文件名: 组件用 PascalCase, 工具用 camelCase - 禁止 any 类型, 禁止 console.log (debug 用 debug 包) - 所有组件导出必须有 displayName - 组件 props 用 interface 而非 type - CSS 只用 Tailwind 类名, 不写自定义 CSS ​ ## 架构 - src/components/ — 通用 UI 组件 - src/features/ — 按功能组织的页面和业务逻辑 - src/hooks/ — 自定义 hooks - src/api/ — API 调用, 统一用 fetcher.ts 封装 - 组件不和 API 直连, 通过 hooks 层 ​ ## 禁止 - 不要引入新的状态管理库 (已选用 Zustand) - 不要修改 vite.config.ts 的核心配置 - 不要删除任何 .test.ts 文件 - 不要添加超过 30KB 的新依赖 ​ ## 交互 - 用中文回复 - 修改前先说明意图

步骤 4:验证 CLAUDE.md 是否生效

清空会话后重新启动 Claude Code:

claude

现在提一个问题来验证规则是否被遵守:

帮我添加一个新的工具函数

观察 Claude Code 是否:

  • 用中文回复 ✓

  • 把文件放在 src/utils/ 下 ✓

  • 使用了 camelCase 命名 ✓

  • 没有用any类型 ✓

步骤 5:创建多层 CLAUDE.md(进阶)

# 创建子目录的 CLAUDE.md mkdir -p src/api

src/api/CLAUDE.md中写入:

# API 层规则 ​ ## 强制要求 - 所有 API 函数必须返回 {success: boolean, data?: T, error?: string} 格式 - 每个 API 函数必须有 try-catch - 使用 src/api/fetcher.ts 发起请求, 不要直接调用 fetch - API 函数命名: getXxx, createXxx, updateXxx, deleteXxx

然后在交互模式中测试:

在 src/api/ 下创建一个获取用户列表的函数

验证它是否遵循了子目录的特定规则。


避坑指南

坑 1:把 CLAUDE.md 写成了项目文档

错误:在 CLAUDE.md 里长篇大论地解释项目背景、业务逻辑、历史决策。

CLAUDE.md 是"操作手册",不是"百科全书"。你不需要告诉 AI 为什么当初选了 React 而不是 Vue——你只需要告诉它在使用 React 时需要遵守什么规范。

坑 2:规则太模糊,无法验证

错误示例:"写出高质量的代码"正确示例:"每个函数不超过 40 行,圈复杂度不超过 5,嵌套不超过 3 层"

模糊的规则等于没有规则。每一条规则都应该是可验证的——你能明确判断"这条遵守了"还是"这条被违反了"。

坑 3:禁止清单没有具体文件路径

错误示例:"不要修改配置文件"正确示例:"不要修改 vite.config.ts、tsconfig.json、.eslintrc.js"

不给具体文件路径,AI 只能猜测,而猜测往往是错误的。

坑 4:CLAUDE.md 超过 200 行

超过 200 行的 CLAUDE.md 说明你在把"代码规范"和"项目文档"混在了一起。代码规范放 CLAUDE.md,项目文档放 README.md 或 Wiki。定期审查 CLAUDE.md,每次会话后如果发现有不常用的规则,删除它。

坑 5:团队成员各自修改 CLAUDE.md,导致冲突

如果你的团队都使用 Claude Code,CLAUDE.md 应该纳入版本控制,通过 PR 流程来修改。每个人可以有自己的~/.claude/CLAUDE.md来设置个人偏好,但项目级的 CLAUDE.md 必须经过团队共识。


课后作业

  1. 创建:在你最常用的项目中使用/init生成 CLAUDE.md,然后手动精炼到 150 行以内。

  2. 测试:精炼前后各让 Claude Code 完成一个同样的小任务(如"创建一个新的工具函数"),对比输出质量差异。记录你的观察。

  3. 审查:检查你的 CLAUDE.md,确认每条规则都是"可验证的"。对于模糊的规则,重写成具体可验证的形式。

  4. 实验:在子目录中创建一个 CLAUDE.md,加入一条与根目录不同的规则。然后让 Claude Code 在该子目录下完成任务,验证子目录规则是否覆盖了根目录规则。


总结

CLAUDE.md 是 Claude Code 系统中最重要的文件,没有之一。它决定了 AI 在你项目中的行为边界和质量标准。记住三个核心原则:

  1. 精炼胜于全面:150 行的好规则远胜 500 行的泛泛之谈

  2. 可验证胜于抽象:每一条规则都必须是可以明确判断遵守与否的

  3. 层级治理:全局偏好放~/.claude/CLAUDE.md,项目规范放项目根目录,目录特定规则放子目录

把 CLAUDE.md 想象成你给 AI 工程师写的"入职第一天该知道的所有事情"——如果一件事不那么重要,就不要写进去。每一条冗余的规则都在消耗宝贵的上下文窗口。

http://www.zskr.cn/news/1415733.html

相关文章:

  • 5分钟快速上手:在macOS上免费运行Windows应用的终极解决方案
  • 未来 5 年哪些行业可能迎来爆发?
  • RoboCom备赛救急实录:当VNC崩溃时,我是如何用NoMachine在5分钟内搞定Windows远程Linux的
  • Cortex-M3/M4总线传输机制与性能优化指南
  • Detect It Easy:让文件类型检测变得简单高效
  • 告别依赖地狱:手把手教你用APT和源码编译解决SecureCRT 8.3在Ubuntu 20.04的安装难题
  • 厦门市思明区潇吴设备租赁:厦门靠谱的电瓶车租赁找哪家 - LYL仔仔
  • 大模型时代,程序员如何转型?收藏这份Agent工程师进阶指南!
  • DIY笔记本移动电源:基于18650电池与IP2368模块的双向快充方案
  • 抖音视频怎么保存到相册:全场景操作方法与失败问题排查方案 - 科技热点发布
  • 别再为numpy版本报错发愁了!手把手教你用Anaconda搞定Qlib量化环境(附保姆级避坑指南)
  • 如何用猫抓浏览器扩展实现网页资源一键捕获:终极免费资源嗅探工具
  • Agent对电信装维工单调度的优化效果如何?2026企业级智能体调度方案详解与技术实测
  • 规模化构建平台:从理论到实践,如何应对企业级挑战
  • 《我的世界》红石数字电路:3位二进制转十进制转换器设计与实现
  • 5个技巧掌握抖音批量下载工具:轻松获取无水印视频的终极指南
  • 一年GMV超7亿元、黄子韬持股近20%,朵薇却为何品控频频翻车?
  • 告别ORA-12560!手把手教你用Oracle Instant Client 19免安装版连接远程数据库(附完整环境变量配置)
  • 基于ATmega2560的机械鸟嵌入式系统:寄存器编程与机电一体化实践
  • 基于Terraform的Amazon SageMaker生产级推理端点部署实战
  • BetterNCM Installer终极指南:5分钟掌握网易云音乐插件一键安装
  • 微信群管理工具避坑指南 深度解析封号原因,合规工具才适合长期运维
  • 【Sora 2作品集视频生成实战指南】:20年AIGC专家亲授7大高保真提示工程技巧,错过再等一年
  • 告别数据线!用XShell 7和Termux把你的安卓手机变成随身Linux服务器
  • 你的SSD移动硬盘速度跑不满?可能是USB接口和UASP协议没设置对(以三星T7为例)
  • Honey Select 2终极增强补丁:一站式游戏体验完整解决方案指南
  • CentOS 8系统被‘锁死’?手把手教你修复因编译OpenSSL引发的libk5crypto.so.3符号缺失问题
  • 基于ESP32与MicroPython的桌面多功能终端:蓝牙音箱时钟环境监测器DIY全攻略
  • 2026年北京除蟑螂能力最强天花板推荐公司:为什么北京祥尔生物值得重点关注? - 企业深度横评dyy6420
  • 2027年香港春季电子产品展Hong Kong Electronics Fair - 中国组团单位- 新天国际会展 - 新天国际会展