文章目录
- 前言
- 技巧三:投资你的 CLAUDE.md 文件
- 核心思想
- 适合新手的应用场景:为 hello-world 项目创建 CLAUDE.md
- 步骤 1:创建初始 CLAUDE.md 文件
- 1. 克隆仓库
- 2. 创建 .claude 目录(可选,用于组织)
- 3. 创建 CLAUDE.md 文件
- 4. 查看目录结构(了解项目特点)
- 步骤 2:手动编写基础 CLAUDE.md(新手入门版)
- 步骤 3:启动 Claude 并让它识别 CLAUDE.md
- 步骤 4:首次训练 Claude(纠正错误并更新 CLAUDE.md)
- 步骤 5:观察 Claude 如何更新 CLAUDE.md
- 步骤 6:第二次训练(处理另一个常见错误)
- 步骤 7:第三次训练(建立主动检查机制)
- 步骤 8:无情地编辑 CLAUDE.md(定期清理)
- 步骤 9:进阶用法 - 为特定任务维护笔记目录
- 步骤 10:最终测试 - 验证训练效果
- 技巧三的核心要点总结
- 补充:CLAUDE.md VS Skills:核心区别对照表
- 总结
- 参考资料
前言
Claude Code 创始人 Boris Cherny 刚刚分享了一系列使用 Claude Code 的技巧,内容直接来自其内部团队。
技巧三:投资你的 CLAUDE.md 文件
核心思想
- 训练 Claude 成为项目的专家:CLAUDE.md 是一个持续更新的项目说明书
- 减少重复错误:让 Claude 为自己的错误建立规则
- 提升输出质量:通过迭代训练降低 Claude 的错误率
适合新手的应用场景:为 hello-world 项目创建 CLAUDE.md
场景描述
作为一个新手,您正在学习使用 leachim6/hello-world 仓库:
- 需要让 Claude 理解这个独特的项目结构(按语言分目录)
- 需要避免一些常见错误(如修改错误的文件、错误理解项目意图)
- 希望 Claude 能按项目规范提供帮助
完整操作流程与步骤
步骤 1:创建初始 CLAUDE.md 文件
1. 克隆仓库
gitclone https://github.com/leachim6/hello-world.gitcdhello-world2. 创建 .claude 目录(可选,用于组织)
mkdir-p .claude3. 创建 CLAUDE.md 文件
touch.claude/CLAUDE.md4. 查看目录结构(了解项目特点)
ls-la目录结构说明:
hello-world/
├── a/ # A+语言的Hello World
├── b/ # B语言的Hello World
├── c/ # C语言的Hello World
├── … # 各种语言的目录
└── .claude/ # 我们刚创建的配置目录
└── CLAUDE.md
步骤 2:手动编写基础 CLAUDE.md(新手入门版)
使用文本编辑器打开 .claude/CLAUDE.md,添加以下基础内容:
# hello-world 项目 CLAUDE.md## 项目概述这是一个展示各种编程语言如何编写"Hello, World!"程序的仓库。 每个语言的代码都放置在以该语言缩写命名的目录中。## 核心规则### 1. 目录结构规则- 每个目录名是编程语言的缩写(如`j/`表示Java,`p/`表示Python) - 每个目录下都有一个"HelloWorld"文件(扩展名对应语言) - **重要:** 不要改变这种目录命名约定### 2. 文件命名规则- 文件名必须是`HelloWorld`(大小写敏感) - 扩展名必须符合对应语言的惯例 - 示例:Python的文件必须是`HelloWorld.py`,不是`hello_world.py`### 3. 代码内容要求- 每个文件必须准确打印"Hello, World!"- 不能添加额外的功能或复杂的逻辑 - 保持代码的简洁性和教育性### 4. 请求处理指南当用户请求修改代码时:1. 首先确认用户指的是哪个语言目录2. 确保修改后的代码仍然输出"Hello, World!"3. 避免改变原有项目的教育目的### 5. 避免的常见错误- 不要把不同语言的代码混在一起 - 不要为这个简单的项目添加不必要的依赖 - 不要修改目录结构## 支持的编程语言(示例)- Python:`p/HelloWorld.py`- Java:`j/HelloWorld.java`- JavaScript:`j/HelloWorld.js`- C++:`c++/HelloWorld.cpp`## 最近更新的规则[这里会在训练过程中自动更新]步骤 3:启动 Claude 并让它识别 CLAUDE.md
# 在项目目录中启动ClaudeclaudeClaude Code 会自动检测项目中的 .claude/CLAUDE.md 文件并读取其内容。
步骤 4:首次训练 Claude(纠正错误并更新 CLAUDE.md)
现在我们来模拟一个新手常见的错误场景:
场景:你想让 Claude 帮你"改进 Python 的 Hello World 代码"
错误示范(故意犯错,用于训练):
帮我把 Python 的 Hello World 改成更有趣的版本。Claude可能会建议:
好的,我可以帮你改进 Python 的 Hello World。 建议可以将`p/HelloWorld.py`改为: ```python def greet(name="World"):returnf"Hello, {name}!"if__name__=="__main__":print(greet())这样可以让用户自定义问候的对象。
**纠正训练**(这是技巧三的核心): 这个修改违反了项目的核心原则。hello-world 项目的目的是展示各种语言最基本、最标准的"Hello, World!"写法,不应该添加额外的功能或复杂化。 请记住: 这个项目是教育性质的,要保持代码的简洁性 每个语言目录下的代码应该是最基础的标准写法 不要改变项目的教育目的 现在,请根据这次对话,更新你的 CLAUDE.md 文件,以确保未来不再犯同样的错误。步骤 5:观察 Claude 如何更新 CLAUDE.md
Claude 会自动在.claude/CLAUDE.md文件末尾添加新的规则:
## 最近更新的规则2024-XX-XX更新: - 禁止为hello-world项目添加额外功能或复杂化代码 - 牢记项目的教育目的:展示最基本、最标准的语言语法 - 保持每个语言示例的简洁性和基础性 - 当用户请求"改进"时,确认他们是否理解这只是教育示例步骤 6:第二次训练(处理另一个常见错误)
场景:你想添加一个新的语言示例(比如 Go 语言)
帮我添加Go语言的Hello World示例。Claude 可能会询问:
好的,我应该把Go语言的示例放在哪个目录? 选择1:创建一个新的`go/`目录 选择2:放在`g/`目录(很多语言目录用单个字母) 选择3:查看现有目录命名模式再做决定你作为新手不知道,就看看现有情况:
我看一下现有的目录命名...我看到了`j/`(Java)、`p/`(Python)、`c++/`(C++)我需要知道Go语言的正确缩写应该是什么?这时,Claude 可能会根据现有模式猜测:
基于现有模式,大多数语言使用: - 单个字母:`j/`(Java),`p/`(Python),`r/`(Ruby)- 若有冲突:`c++/`(C++)Go语言的常见缩写是`go`,所以我建议创建`go/`目录。 现在创建`go/HelloWorld.go`: ```go package mainimport"fmt"funcmain(){fmt.Println("Hello, World!")}但这是错误的!我们需要检查实际情况:
查看 GitHub 仓库真实目录:
ls-la|grep-i go发现其实已经有 g/HelloWorld.go!Go语言的目录其实是 g/。
纠正训练: 你的建议是错误的!我刚才查看了实际的目录结构,Go语言的示例已经在`g/HelloWorld.go`中了。 请记住:在为这个项目添加帮助时,一定要先查看现有的目录结构,而不是凭空猜测。 请更新你的 CLAUDE.md,添加规则来避免未来犯类似错误。Claude 更新后的 CLAUDE.md:
## 最近更新的规则2024-XX-XX更新: - 禁止为hello-world项目添加额外功能或复杂化代码 - 牢记项目的教育目的:展示最基本、最标准的语言语法 - 保持每个语言示例的简洁性和基础性 - 当用户请求"改进"时,确认他们是否理解这只是教育示例2024-XX-XX更新: - **重要:** 在处理hello-world项目请求时,必须先查看现有目录结构 - 不要凭空猜测目录命名约定,先用`ls`或`find`命令确认 - 记住Go语言的目录是`g/`,不是`go/`- 建议:可以创建一个目录名查找的技能或脚本步骤 7:第三次训练(建立主动检查机制)
现在你应该训练 Claude 变得更主动:
从现在开始,当你收到关于hello-world项目的请求时,我希望你主动:1. 首先列出相关语言的现有目录(如果提到具体语言)2. 询问用户是否了解项目的教育性质3. 确认用户意图是否与项目目标一致 例如,如果有人问:"我想让JavaScript的Hello World更有趣",你应该:1. 首先指出:`js/HelloWorld.js`文件已经存在2. 询问:你了解这个项目的目的是展示最基础的语法示例吗?3. 提醒:添加功能可能会偏离项目的教育目的 请把这个主动检查流程添加到 CLAUDE.md 中。步骤 8:无情地编辑 CLAUDE.md(定期清理)
一周后,你的 CLAUDE.md 可能会变得杂乱:
## 最近更新的规则规则1:不要添加功能 规则2:检查现有目录 规则3:提醒教育目的 规则4:Python不能有函数 规则5:Java要保持简单 规则6:目录索引是 g/forGo 规则7:确认文件是否已存在 规则8:..."这时进行清理:
请审查并优化当前的 CLAUDE.md。 要求:1. 合并相似的规则(如检查目录和确认存在的规则)2. 删除过于具体的示例,归纳为通用原则3. 重新组织规则,使其更清晰易读4. 保留关键、可泛化的规则清理后的版本:
# hello-world 项目 CLAUDE.md## 核心原则(永久有效)1. **教育优先**:本项目是基础语法示例,不得复杂化2. **结构保守**:不得改变目录结构或命名约定3. **代码简洁**:每个示例必须是该语言最基础的"Hello, World!"## 工作流程(处理请求时必须遵守)1. **检查阶段**: - 先检查现有目录结构(`ls`相关目录) - 确认文件是否已存在 - 若不熟悉目录命名,主动询问说明2. **验证阶段**: - 询问用户是否理解项目的教育性质 - 确认请求是否符合项目目标 - 如有偏离,明确提醒用户3. **执行阶段**: - 若需修改,保留原始简单性 - 若需添加,遵循现有命名模式 - 完成后自主验证是否符合核心原则## 快速参考表|语言|目录|文件名||------|------|--------||Python|`p/`|`HelloWorld.py`||Java|`j/`|`HelloWorld.java`||JavaScript|`js/`|`HelloWorld.js`||Go|`g/`|`HelloWorld.go`||C++|`c++/`|`HelloWorld.cpp`|## 训练历史摘要- 禁止为教育项目添加复杂功能(多次确认) - 强制前置目录检查流程(避免重复添加) - 主动澄清项目目的机制(减少误解)步骤 9:进阶用法 - 为特定任务维护笔记目录
文档中提到的高级用法:
我希望你为每个主要任务维护一个笔记目录。 现在,请你为"Python代码改进请求"创建一个笔记记录。 把这次交互中学到的教训记录下来。Claude 创建:
创建了`.claude/notes/python-improvement-reflection/`内容:# Python改进请求记录## 案例1:用户请求"让Python Hello World更有趣"- 错误:建议添加greet()函数 - 教训:项目要求保持最基础语法 - 规则:hello-world项目的代码不应该有函数封装 - 建议回复模板:"这是一个基础语法示例,添加功能会偏离项目目的。"## 未来策略当遇到类似请求时:1. 引用项目说明2. 提供替代方案(如链接到真正项目)3. 解释教育目的的价值步骤 10:最终测试 - 验证训练效果
测试一下现在的 Claude 有多聪明:
我想让JavaScript的Hello World示例支持模板字符串。训练后的 Claude 应该回复:
首先,让我查看一下现有的JavaScript示例: 现有文件:`js/HelloWorld.js`我需要提醒你的是,hello-world项目的目的是展示各种语言最基础、最标准的语法。 JavaScript中最基础的Hello World写法是: ```javascript console.log("Hello, World!");如果你改用模板字符串:
console.log(`Hello, World!`);这确实展示了 ES6 模板字符串语法,但仍保持了基础性。
但是:
- 你是否了解这不是一个真正的项目,而是教育示例?
- 你是否要展示最基础的语法,还是想展示现代特性?
- 更改后会破坏项目的一致性吗?
建议:
- 如果要保持与其他语言的一致性,建议用最基础的写法
- 如果想展示模板字符串,可以考虑在注释中添加示例
**这才是经过CLAUDE.md训练的智能Claude!**技巧三的核心要点总结
- 即时修正:每次纠正后都必须说"更新你的 CLAUDE.md"
- 无情编辑:定期合并、简化、清理规则
- 量化改进:目标是"错误率可衡量地下降"
- 渐进训练:从简单规则开始,逐步增加复杂性
- 引用机制:可以让 CLAUDE.md 指向更多的笔记目录
- 自主验证:好的 CLAUDE.md 会让 Claude 主动提问和验证
补充:CLAUDE.md VS Skills:核心区别对照表
从文档可以看出团队的实际用法:
CLAUDE.md是“软技能”:训练 Claude 的思维方式和决策逻辑
Skills是“硬技能”:扩展 Claude 的操作能力和效率
两者都重要,但目的不同:
- CLAUDE.md → 提升输出质量(减少错误)
- Skills → 提升工作效率(自动化重复)
理想的工作流:
1. 用 CLAUDE.md 训练 Claude 理解项目
2. 用 Skills 让 Claude 高效执行
3. 执行中发现问题 → 更新 CLAUDE.md
4. 重复操作 → 创建新的 Skill
总结
- CLAUDE.md 是 Claude 的大脑训练手册——它塑造 Claude 对特定项目的理解和决策方式,让 Claude 变得“更聪明、更懂这个项目”。
- Skills 是 Claude 的工具套装——它扩展 Claude 能够执行的操作范围,让 Claude 变得“更有能力、更高效”。
在 Claude Code 团队看来,一个成熟的用户应该:
- 投资 CLAUDE.md 来减少沟通成本和质量问题
- 创建 Skills 来消除重复劳动
两者结合实现最高效的人机协作。
文档中的一句关键话体现了这种理念:“Claude 在为自己编写规则方面表现得惊人地出色”(指CLAUDE.md)同时 “如果你每天做某件事超过一次,就把它变成一个技能”(指 Skills)。
参考资料
- Claude Code官方出教程了!创始人分享十大神级技巧,内部团队原来是这样用的