前两天有个读者私信我说腾讯二面问了这样一个问题“CLAUDE.md 你是怎么维护的”他知道的就是“/init一下”别的平常也没怎么关注。这就好比面试官想让你回答“数据库怎么优化的”结果你回答了“装个 MySQL 就行了”。说了但又好像没说。/init只是起点。CLAUDE.md 这个文件写好了就是超级外挂你的代码交付质量杠杠的。写烂了就是 token 噪音。今天这篇内容给大家来一次硬核拆解。系好安全带我们粗粗粗发01、CLAUDE.md 到底是个什么东西先把概念捋清楚。CLAUDE.md 不是 README不是注释不是文档它是 Claude Code 每次启动时自动读取的持久化指令文件。每次开一个新会话Claude Code 做的第一件事就是把 CLAUDE.md 的内容塞进上下文窗口。写在里面的每一条指令Claude 在整个会话过程中都能“看到”。打个比方CLAUDE.md 就是给 Claude 写的一份“入职须知”。新员工第一天上班不可能把所有业务逻辑口头讲一遍对吧得写一份文档告诉他我们用什么技术栈、代码风格怎么要求、测试怎么跑、哪些坑千万别踩。CLAUDE.md 干的就是这个事。TIPS为了兼容 Codex我通常会让 CLAUDE.md 去加载一下 AGENTS.md省得一个项目维护两份规则。那/init做了什么呢它会扫描代码仓库分析 package.json、Makefile、README 这些文件然后自动生成一份 CLAUDE.md。这份自动生成的文件通常包含构建命令、测试命令、项目结构描述。02、Claude Code 的四层加载体系Claude Code 有一套完整的加载体系可以分为四层搞懂这个体系才能真正用好 CLAUDE.md。第一层全局配置路径是~/.claude/CLAUDE.md所有项目都会加载。适合放个人的编码偏好比如“我喜欢用 2 空格缩进”“commit message 用英文”“别给我写注释代码要自解释”。# ~/.claude/CLAUDE.md- 使用 2 空格缩进- commit message 用英文遵循 Conventional Commits- 不写注释用有意义的变量名和函数名代替第二层项目配置路径是项目根目录下的CLAUDE.md或.claude/CLAUDE.md提交到 git 里团队共享。这是用得最多的一层写构建命令、代码规范、架构约定。第三层本地覆盖路径是CLAUDE.local.md或.claude/CLAUDE.local.md加到.gitignore里只在本地生效。适合放个人的环境变量、调试偏好、或者正在试验的新规则。比如正在搞一个新功能想让 Claude 这段时间多写日志方便调试就可以临时加到 local 文件里不影响团队其他人。第四层子目录配置子目录下也可以有自己的 CLAUDE.md但这一层是按需加载的只有当 Claude 读取到那个目录下的文件时对应的 CLAUDE.md 才会被加载进上下文。这个设计对 monorepo 特别友好。前端目录可以有自己的规则后端目录有另一套互不干扰。my-monorepo/├── CLAUDE.md # 全局项目规则├── frontend/│ └── CLAUDE.md # React 相关规则按需加载├── backend/│ └── CLAUDE.md # Java/Spring 相关规则按需加载└── infra/ └── CLAUDE.md # 部署相关规则按需加载加载顺序是从文件系统根目录一路往下走到启动 Claude Code 的工作目录。所有文件的内容会拼接在一起。如果两个文件的指令冲突了靠近工作目录的那个会因为“最后被读到”而有更高的优先级。我把 Claude Code 的源码翻出来给大家看看。核心逻辑在src/utils/claudemd.ts的getMemoryFiles()函数里// 第一步加载 Managed系统级和 User用户级的 CLAUDE.md rulesconst managedClaudeMd getMemoryPath(Managed)result.push(...(await processMemoryFile(managedClaudeMd, Managed, ...)))const userClaudeMd getMemoryPath(User)result.push(...(await processMemoryFile(userClaudeMd, User, ...)))// 第二步从当前目录一路往上走到根目录收集所有路径const dirs: string[] []let currentDir getOriginalCwd()while (currentDir ! parse(currentDir).root) { dirs.push(currentDir) currentDir dirname(currentDir)}// 第三步反转从根目录往下走依次加载每个目录的 CLAUDE.mdfor (const dir of dirs.reverse()) { // 加载 CLAUDE.mdProject 类型 const projectPath join(dir, CLAUDE.md) result.push(...(await processMemoryFile(projectPath, Project, ...))) // 加载 .claude/CLAUDE.md也是 Project 类型 const dotClaudePath join(dir, .claude, CLAUDE.md) result.push(...(await processMemoryFile(dotClaudePath, Project, ...))) // 加载 .claude/rules/*.md const rulesDir join(dir, .claude, rules) result.push(...(await processMdRules({ rulesDir, type: Project, ... }))) // 加载 CLAUDE.local.mdLocal 类型 const localPath join(dir, CLAUDE.local.md) result.push(...(await processMemoryFile(localPath, Local, ...)))}先收集路径然后dirs.reverse()反转从根目录开始往工作目录走。越靠近工作目录的文件越晚加载所以优先级越高。而且 Project 和 Local 是在同一个循环里处理的CLAUDE.local.md 在 CLAUDE.md 之后加载天然就能覆盖项目规则。注意不要让不同层级的 CLAUDE.md 互相矛盾。这是维护的第一原则。03、LLM 的指令预算CLAUDE.md 写多了会怎么样Anthropic 官方文档原话是这么说的If your CLAUDE.md is too long, Claude ignores half of it because important rules get lost in the noise.翻译一下就是CLAUDE.md 太长Claude 会忽略一半因为重要规则会被噪音淹没。到底多长算“太长”这里要先搞清楚一个概念什么是“指令”CLAUDE.md 里写的每一条规则就是一条指令。比如“日志用 SLF4J不用 System.out”是一条“改了命令入口要同步 Main.java CliCommandParser 测试 文档”也是一条。每条指令通常就是一两句话大约 10-30 个 token。arXiv 上有一篇论文《How Many Instructions Can LLMs Follow at Once?》作者 Daniel Jaroslawicz 等人论文编号 2507.11538专门测了模型同时遵循多条指令的能力。测试方法给模型一个写报告的任务同时附加 N 条约束比如“必须包含关键词 X”“不得用被动语态”“段落不超过 5 句”然后看模型到底能遵守多少条。结论是**即使是最强的前沿模型在 500 条指令密度下准确率也只有 68%**。指令越多遵循率越低而且模型会系统性地偏向序列前面的指令后面的指令更容易被忽略。注意这里的瓶颈不是上下文窗口装不下——而是模型的注意力分配不过来。就像一个人同时记 500 条规矩不是纸写不下是脑子跟不上。再算一下 Claude Code 的情况。系统提示本身就带了大量内置指令权限控制、工具使用规范、安全约束、代码风格要求等这些已经占了相当多的指令位。CLAUDE.md 的内容是叠加在这些之上的。所以留给 CLAUDE.md 的有效空间真的没有大家想象得那么多。论文来源https://arxiv.org/abs/2507.11538这就像给新员工写入职须知。写 10 条他能记住 8 条。写 50 条他能记住 20 条。写 200 条翻都不想翻记住的可能还不到 10 条。怎么判断一条指令该不该放进 CLAUDE.md问两个问题第一如果不写这条Claude 会不会搞错如果 Claude 靠读代码就能推断出来别写。第二这条指令是不是每次会话都需要如果只在特定场景下需要放到rules/目录里做路径限定后面讲别塞在 CLAUDE.md 里浪费预算。Anthropic 官方给了一个非常实用的建议像维护代码一样维护 CLAUDE.md。定期 review发现 Claude 没遵守的指令加“重要”或“务必要执行”强调发现 Claude 本来就会做对的指令果断删掉。来源https://www.anthropic.com/engineering/claude-code-best-practices04、什么样的规则会真正生效指令预算告诉我们 CLAUDE.md 要写的精简一些那就要分清楚哪些规则有用、哪些是噪音。拿 PaiCLI 项目来举例。PaiCLI 是一个纯 Java 实现的 Agent CLI。我直接把它的 AGENTS.md 里的规则拿出来大家感受一下真实的高效规则是什么样的- 构建mvn clean package默认跳过测试- 快速回归mvn test -Pquick- 指定测试mvn test -DtestToolRegistryTest- search_code 是 RAG 语义辅助不是主要的代码定位方式优先用 glob_files → grep_code → read_file- 改了行为 → 同步 AGENTS.md README.md ROADMAP.md- 改了命令入口 → Main.java CliCommandParser.java 测试 文档- 禁止提交 .env、真实 API Key、target/ 产物每一条不说清楚就一定会搞错。Claude 不可能从代码里猜到mvn clean package默认跳过测试。也不可能知道改了一个斜杠命令之后要同步四个地方。更不可能知道search_code在这个项目里只是辅助真正的代码定位靠 glob grep read 三件套。这就是高效规则的样子一句话说清楚不解释不废话但信息密度很高。再看看反面例子- 使用 Java 17 编写代码- 遵循分层架构- 保持代码整洁Claude 看了pom.xml里的java.version17/java.version自然就知道用 Java 17看了agent/tool/cli/memory这些目录自然就知道怎么分层。“保持代码整洁”更是等于没说。总结一下好规则有三个特征第一一句话能写完。如果一条规则需要三行才能说清楚要么拆成三条要么说明它本身就太复杂了应该放到代码注释或文档里。第二Claude 靠自己推断不出来。能从 pom.xml、代码结构、配置文件推断的都不用写。第三有明确的行动指导。“注意安全”是空话“PathGuard 限制在项目根目录禁止绝对路径逃逸和符号链接穿越”才是规则。05、A 厂是怎么写 CLAUDE.md 的来看看 Anthropic 的项目是怎么写的。他们的claude-code-action仓库就是 GitHub Actions 里跑 Claude Code 的那个项目有一份 CLAUDE.md我去翻了一下Commands构建、测试、lint 的具体命令What This Is项目是什么一句话说清楚How It Runs运行机制不是文档式的介绍而是“改代码之前必须知道的事”Key Concepts核心概念3-5 个要点Things That Will Bite You踩坑清单列出会让人踩雷的细节Code Conventions代码约定只写和默认不一样的部分06、rules/ 目录CLAUDE.md 只有一个文件项目复杂了之后很容易臃肿。这时候.claude/rules/目录就派上用场了。rules 目录下的每个.md文件都是一份独立的指令集。没有paths前置字段的 rules 文件和 CLAUDE.md 一样在启动时加载。带paths前置字段的只在 Claude 操作匹配路径的文件时才加载。# .claude/rules/react-conventions.md---paths:- src/components/\*_/_.tsx- src/hooks/\*_/_.ts---- 组件用函数式写法不用 class- props 在函数签名中解构- 自定义 hook 以 use 开头- 状态管理用 zustand不用 redux这份规则只在 Claude 读写src/components/或src/hooks/下的文件时才会被加载。写后端 Java 代码的时候这些前端规则不会占用上下文窗口不浪费指令预算。.claude/├── CLAUDE.md # 核心规则控制在 80 行以内└── rules/ ├── code-style.md # 通用代码风格无路径限定 ├── testing.md # 测试约定无路径限定 ├── security.md # 安全规则无路径限定 ├── frontend.md # 前端规则paths: [src/**/*.tsx] └── api.md # API 规则paths: [src/api/**/*.ts]CLAUDE.md 只放最核心的 5-10 条规则和关键命令其余按主题拆到 rules 目录。这样每条规则都能被精准投放不浪费一个 token 的上下文空间。还有一个进阶用法用path语法导入外部文件。# CLAUDE.mdREADME.mddocs/architecture.md## 项目规则- 所有 API 返回统一用 Result 包装- 日志用 SLF4J不用 System.outREADME.md会在启动时被展开把 README 的内容直接注入到上下文里。这适合那些 README 写得特别好、但不想在 CLAUDE.md 里重复一遍的项目。07、/init 和 /memory/init负责冷启动。新项目第一天跑一下/initClaude 会扫描仓库结构、分析依赖、读 README生成一份基础的 CLAUDE.md。包含构建命令、测试命令、项目基本描述。/memory负责热更新。Claude Code 有一套自动记忆系统。每个项目在~/.claude/projects/目录下都有一个MEMORY.md文件Claude 会把跨会话需要记住的信息自动写到这里。下次启动会话时MEMORY.md 的前 200 行会被自动加载进上下文。关键问题来了什么该写在 CLAUDE.md什么该放在 memory 里CLAUDE.md 放团队共享的、长期稳定的规则。这些内容会提交到 git所有人都能看到、都要遵守。比如构建命令、代码规范、架构约定。memory 放个人的、会变化的、日常协作中积累的经验。实际维护的节奏是这样的第一周跑/init生成基础版 CLAUDE.md。在日常使用中Claude 会自动往 memory 里积累经验。第二周开始review 一遍 memory 里的内容。发现有些经验其实是通用规则就把它提炼到 CLAUDE.md 里。memory 里过时的条目主动清理掉。08、Claude Code 配置体系CLAUDE.md 不是孤立存在的。Claude Code 的整个配置体系有四个角色搞清楚各自的边界很关键。CLAUDE.md 管“建议”。settings.json 管“强制”。权限控制、环境变量、MCP 服务器配置这些放在.claude/settings.json里。没有商量余地硬性约束。{ permissions: { allow: [Bash(npm run *), Bash(git *)], deny: [Bash(rm -rf *), Bash(git push --force)] }}hooks 管“自动化”。如果某件事必须每次都执行别在 CLAUDE.md 里写“请记得格式化代码”直接配一个 hook每次编辑文件后自动跑 Prettier。hooks 由 harness 执行不依赖 Claude 的“记忆”。rules/ 管“精准投放”。前面详细讲过了按路径限定加载规则节省指令预算。一句话记住它们的分工CLAUDE.md 管建议settings.json 管强制hooks 管自动化rules/ 管精准投放。09、一份拿来就能用的模板说了这么多给大家一份实战模板直接复制到项目里改改就能用# CLAUDE.md## Commands- 构建mvn clean package -DskipTests- 测试mvn test- 单个测试mvn test -DtestXxxTest- 代码检查mvn spotbugs:check- 格式化mvn spotless:apply## What This Is一句话说清楚项目是什么。比如PaiCLI 是一个纯 Java 实现的 Agent CLI28K 行代码不依赖 Spring AI/LangGraph4J。## Architecture- 入口Main.java → CliCommandParser 分发命令- Agent 循环AgentLoop.java工具注册在 ToolRegistry- 记忆系统MemoryManager基于文件持久化- 不要动 agent/core/ 下的接口定义下游工具全部依赖它们## Things That Will Bite You- search_code 是 RAG 辅助不是主要代码定位方式优先用 glob → grep → read- 改了命令入口 → 必须同步 Main.java CliCommandParser 测试 文档- FileUtils 的路径处理已经做了沙箱限制不要绕过它自己拼路径- 测试里的 API Key 全部用 mock禁止提交真实 Key## Code Conventions- 日志用 SLF4J不用 System.out- 异常不要吞掉至少 log.warn- 所有 public API 返回统一的 Result 包装类- 新工具必须实现 Tool 接口并在 ToolRegistry 注册## Dont- 不要在业务代码里直接 new Thread用 ExecutorService- 不要改 .env.example 的格式CI 依赖它- 不要往 CLAUDE.md 里加“保持代码整洁”这种废话整个文件不到 50 行但该覆盖的全覆盖了。Commands让 Claude 知道怎么构建测试Architecture让它知道代码在哪Things That Will Bite You防止它踩坑Don’t划出红线。没有一句废话。10、面试怎么回答?回到开头那个问题“CLAUDE.md 你是怎么维护的”如果面试官问到这个问题三句话就够了第一句讲机制CLAUDE.md 是 Claude Code 的持久化指令文件启动时自动加载。它有四层加载体系从系统级到子目录级越靠近工作目录优先级越高。第二句讲原则arXiv 论文实测500 条指令密度下最强模型准确率只有 68%指令越多遵循率越低。所以核心规则放 CLAUDE.md控制在 80 行以内按场景拆分的规则放 .claude/rules/ 目录用 paths 前置字段做路径限定按需加载避免所有规则挤在一个文件里互相淹没。第三句讲实践日常维护靠两个命令——/init 冷启动生成基础版/memory 自动积累跨会话经验。好的规则只写 Claude 自己推断不出来的东西定期 review像维护代码一样维护 CLAUDE.md。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】