ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CLAUDE.md 指南:Claude Code 的项目记忆该怎么写?

CLAUDE.md 指南:Claude Code 的项目记忆该怎么写? 1. 为什么你的 Claude Code 总是“失忆”从一次真实翻车说起你有没有遇到过这种情况跟 Claude Code 聊了半小时把项目结构、命名习惯、构建命令都交代得清清楚楚结果关掉终端再开一个新 session它又像个刚入职的实习生问你“这个项目用什么包管理器”“测试怎么跑”。你只能把之前说过的话再复述一遍重复劳动让人抓狂。这个问题的根源不在于模型笨而在于你没有把项目上下文沉淀成一份它能自动读取的“长期记忆”。Claude Code 专门设计了一个叫CLAUDE.md的文件来解决这件事。它本质上是一个放在项目根目录的普通 markdown 文件但特殊之处在于每次你启动 Claude Code 会话它都会自动把这个文件完整读进上下文作为整段对话的默认前提。你后面提的需求、它做的判断全都建立在这份“团队约定”之上。换句话说CLAUDE.md不是可选的提示词而是 Claude Code 的默认配置。它决定了模型在开口之前就已经知道什么。对于需要多轮开发、反复迭代的工程师来说写好这个文件等于给项目装了一个稳定的记忆锚点。这篇指南会从零开始给你一套可直接复制的模板结构演示加载后怎么验证记忆是否生效以及如何持续迭代更新把项目上下文变成一份可维护的 markdown 资产。2. 前置准备TaoToken 接入 Claude Code 的完整配置流程在深入CLAUDE.md的写法之前得先确保你的 Claude Code 能正常跑起来。如果你还在为 API 接入折腾可以走 TaoToken 这条路径它提供了兼容 Anthropic 接口的接入方式配置过程不复杂。首先你需要一个可用的 API Key。打开 TaoToken 的 API Keys 管理页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite创建一个新的 Key复制保存好。这个 Key 就是你后续所有请求的凭证。接下来是配置 Claude Code 的接入信息。Claude Code 支持通过环境变量或配置文件来指定 Base URL 和 API Key。我实测下来最稳妥的方式是设置两个环境变量。在你的 shell 配置文件比如~/.zshrc或~/.bashrc里加入以下内容export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的实际Key保存后执行source ~/.zshrc让配置生效。这里注意Base URL 填的是https://taotoken.net/api不要多加路径Claude Code 会自动拼接后续的端点。如果你更习惯用配置文件的方式也可以在项目根目录创建一个.claude/settings.json写入{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的实际Key } }这两种方式选一种就行。环境变量适合全局使用项目级配置文件适合团队共享同一套接入参数。配置完成后在终端输入claude启动如果能看到正常的对话界面说明接入已经通了。这里要提醒一点API Key 属于敏感信息不要直接提交到 Git 仓库。如果是团队协作建议把.claude/settings.json加入.gitignore或者用环境变量注入的方式让每个人用自己的 Key。接入搞定之后就可以正式开始写CLAUDE.md了。接下来的内容会围绕模板结构、加载验证、迭代更新三个核心环节展开每一步都有可复制的代码和配置。3. 可直接复制的 CLAUDE.md 模板项目背景、目录约定、命令清单、禁区说明写CLAUDE.md最忌讳的是把它当成项目文档来写。它不是 README不需要面面俱到地介绍项目历史、架构演进、贡献指南。它的读者是 Claude Code 这个 agent目标只有一个让模型在最短的 token 消耗内掌握这个项目的“操作规则”。我试过把 400 多行的CLAUDE.md精简到 80 行以内Claude 的规则遵守率反而明显提升。原因很简单每次会话启动CLAUDE.md都会被完整加载进上下文窗口行数越多消耗的 token 越多模型注意力被稀释得越厉害。社区里有实测数据200 行以内的遵守率大概在 92%超过 400 行就掉到 70% 左右。所以模板设计的第一原则是能一行说清绝不写三行。下面这份模板是我在多个项目里迭代出来的结构你可以直接复制到项目根目录的CLAUDE.md里按实际情况替换占位内容。# 项目约定 ## 项目背景 - 这是一个 [项目类型如React 后台管理系统]核心功能是 [一句话描述]。 - 技术栈TypeScript React 18 Vite Zustand。 - 包管理器pnpm禁止使用 npm 或 yarn。 - Node 版本要求 18.0.0。 ## 目录约定 - src/api/所有接口请求封装按模块分文件。 - src/components/通用组件每个组件一个目录。 - src/pages/页面级组件与路由一一对应。 - src/stores/Zustand 状态管理按业务域拆分。 - src/utils/纯函数工具禁止在这里写业务逻辑。 - docs/项目文档架构说明放 docs/architecture.md。 ## 命令清单 - 安装依赖pnpm install - 启动开发pnpm dev - 构建生产pnpm build - 运行测试pnpm test - 代码检查pnpm lint - 类型检查pnpm typecheck - 提交前必须执行pnpm lint pnpm typecheck pnpm test ## 代码规范 - 所有 TypeScript 文件使用 2 个空格缩进。 - 组件文件使用 PascalCase 命名工具函数使用 camelCase。 - 禁止使用 any 类型必要时用 unknown 加类型守卫。 - 接口请求统一走 src/api/request.ts 封装禁止直接调用 fetch。 - 样式使用 CSS Modules禁止内联 style。 ## 禁区说明 - 禁止修改 src/config/prod.ts 中的生产环境配置。 - 禁止在代码中硬编码任何密钥、token、密码。 - 禁止删除 src/utils/legacy/ 下的兼容代码除非明确确认。 - 禁止直接操作生产数据库所有数据库变更走 migration。 - 禁止提交 console.log 调试语句到主分支。 ## 工作流 - 新功能开发前先阅读 docs/architecture.md 了解模块划分。 - 修改公共组件时同步更新对应的 Storybook 文档。 - 提交 PR 前确保 pnpm lint pnpm typecheck pnpm test 全部通过。这份模板大概 60 行左右覆盖了项目背景、目录约定、命令清单、代码规范、禁区说明、工作流六个模块。每个模块都遵循“具体可验证”的原则。比如“使用 2 个空格缩进”是 Claude 能自检的规则它写完代码可以自己数“代码要规范”就是模糊的愿望模型只能猜。关于目录约定有个技巧只写那些 Claude 容易搞混的目录。比如src/api/和src/utils/的边界新人容易把请求逻辑写到 utils 里这种就要明确写出来。至于src/components/这种一看名字就知道用途的可以不写省下的 token 留给更关键的规则。命令清单是这份文件里价值最高的部分。Claude Code 在执行任务时经常需要跑命令如果你不告诉它用pnpm它可能默认用npm导致 lock 文件冲突。把常用命令和提交前的检查命令写清楚能省掉大量来回纠正的时间。禁区说明要写得果断。哪些文件不能动、哪些操作不能做直接列出来。模型对“禁止”类指令的敏感度比较高写清楚能有效避免误操作。但注意不要写太多条控制在 5 条以内每条都是真正踩过坑的。如果你用的是 Claude Code 的 coding plan 模式这份CLAUDE.md会在每次会话启动时自动加载。你可以在 TaoToken 的模型对话页面https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite先测试一下模型对规则的理解确认没问题再放到项目里。模板写好后下一步是验证它到底有没有生效。很多人写完就扔那儿了从来没确认过 Claude 是不是真的读进去了。下一节会演示具体的验证方法。4. 加载与验证怎么确认 Claude Code 真的读进了你的项目记忆写完CLAUDE.md只是第一步更关键的是确认它真的被加载了。我见过不少人把文件放错位置或者文件名拼错结果 Claude 压根没读到还在那儿纳闷为什么规则不生效。验证方法其实很简单分三步走。第一步确认文件位置和文件名。CLAUDE.md必须放在项目根目录文件名全大写扩展名是.md。如果你放在src/或者docs/下面Claude Code 默认不会加载。你可以用ls -la检查一下根目录有没有这个文件。第二步启动 Claude Code 后直接问它一个只有读了CLAUDE.md才能答对的问题。比如你的模板里写了“包管理器用 pnpm”你就可以问“这个项目用什么包管理器安装依赖”如果它回答 pnpm说明文件被加载了。如果它回答 npm 或者说不确定那就是没读到。第三步测试一条禁区规则。比如你写了“禁止修改 src/config/prod.ts”你可以故意让它“帮我把 src/config/prod.ts 里的 API 地址改一下。”观察它的反应。如果它拒绝执行并提醒你这是禁区说明规则生效了。如果它直接动手改那要么是文件没加载要么是规则写得不够明确。除了手动测试Claude Code 还提供了一个/memory命令可以查看当前会话加载了哪些记忆文件。在对话中输入/memory它会列出所有被加载的CLAUDE.md及其路径。这个命令特别适合排查“为什么规则没生效”的问题。如果列表里没有你的文件那就回去检查路径和文件名。还有一个常见问题是多级CLAUDE.md的加载顺序。Claude Code 支持在子目录里也放CLAUDE.md比如src/components/CLAUDE.md。当你在某个目录下工作时它会同时加载根目录和当前目录的CLAUDE.md子目录的规则优先级更高。这个机制适合做模块级的细粒度约定。比如根目录写全局规范src/api/CLAUDE.md里写接口层的特殊规则。验证通过后你可能会发现有些规则 Claude 还是记不住。这时候不要急着加更多规则先检查现有规则是不是够具体。比如“代码要格式化”这种就太模糊改成“所有 TypeScript 文件用 2 个空格缩进”就明确多了。规则的可验证性直接决定了遵守率。另外如果你在团队里共享CLAUDE.md建议把它提交到 Git 仓库。这样每个人拉取代码后都能获得同一套项目记忆新人入职也不用从头交代项目约定。但记得把包含 API Key 的配置文件排除掉只提交纯规则的CLAUDE.md。验证环节做完你就有了一个能稳定生效的项目记忆文件。但项目是会变的技术栈升级、目录调整、命令变更CLAUDE.md也得跟着更新。下一节会讲迭代维护的方法以及常见的报错排查。5. 常见报错与排查401、local proxy failed、reading choices 怎么处理即使配置都对了实际使用中还是会遇到各种报错。这一节整理了几个高频问题每个都附上排查思路和解决方法。401 错误Unauthorized这是最常见的接入问题通常意味着 API Key 无效或者没被正确读取。排查步骤首先确认ANTHROPIC_API_KEY环境变量是否设置成功在终端执行echo $ANTHROPIC_API_KEY看有没有输出。如果没有说明环境变量没生效检查 shell 配置文件是否 source 了。其次确认 Key 本身有没有过期或被删除去 TaoToken 的 API Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite核对一下。最后检查 Base URL 是否写对应该是https://taotoken.net/api不要多加/v1之类的路径。local proxy failed本地代理失败这个报错通常出现在你设置了本地代理但代理没启动或者代理配置和 Claude Code 的请求方式冲突。排查方法先检查环境变量里有没有HTTP_PROXY或HTTPS_PROXY的设置如果有确认代理服务是否在运行。如果不需要代理直接 unset 掉这两个变量。另外Claude Code 的配置文件.claude/settings.json里如果写了 proxy 相关的配置也要检查是否和当前网络环境匹配。reading choices读取响应失败这个报错说明请求发出去了但返回的数据格式不对Claude Code 解析不了。常见原因是 Base URL 配错了比如漏了/api或者多写了/v1。正确的写法是https://taotoken.net/apiClaude Code 会自动拼接/v1/messages这样的端点。如果你手动改了端点路径就容易出现这个错误。另一个可能是模型 ID 写错了检查一下你请求的模型名称是否在 TaoToken 支持的列表里。OAuth 相关报错如果你用的是 Claude Code 的 OAuth 登录方式而不是 API Key可能会遇到 token 过期或者刷新失败的问题。这种情况下最直接的办法是重新执行登录流程。在终端运行claude login按提示重新授权。如果还是不行检查一下系统时间是否准确OAuth 对时间偏差比较敏感。规则不生效Claude 不遵守 CLAUDE.md这个不算报错但比报错更让人头疼。排查顺序先用/memory命令确认文件被加载了然后检查规则是否具体可验证模糊的规则模型没法执行最后看行数是否超过 200 行太长的话精简一下把不重要的规则删掉或者拆到子目录的CLAUDE.md里。Codex auth.json 配置问题如果你同时用 Codex 和 Claude Code可能会混淆两者的配置文件。Codex 用的是auth.jsonClaude Code 用的是环境变量或.claude/settings.json。两者不要混用。Codex 的auth.json里通常包含base_url、api_key、model三个字段而 Claude Code 需要的是ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY。如果你在 Claude Code 里填了 Codex 的配置就会报错。排查问题的核心思路是先确认接入层Base URL Key Model ID三件套是否完整且正确再确认CLAUDE.md是否被加载最后检查规则本身是否可执行。大部分问题都出在前两步。如果你在排查过程中需要更详细的接入文档可以参考 TaoToken 的文档页面https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite里面有完整的配置示例和常见问题说明。6. 把项目记忆变成可维护的资产迭代更新与团队协作CLAUDE.md不是写完就一劳永逸的。项目在变规则也得跟着变。我见过太多团队CLAUDE.md还是半年前写的里面提到的命令早就换了目录结构也调整了结果 Claude 按旧规则执行反而帮倒忙。迭代更新的第一个原则是每次踩坑后把解决方案沉淀进去。比如 Claude 又一次用了 npm 而不是 pnpm你就在命令清单里把“禁止使用 npm”加粗强调。又比如它误删了某个关键文件你就在禁区说明里补上这条。CLAUDE.md应该是一份“活文档”随着项目一起生长。第二个原则是定期精简。每过一两个月回头看看哪些规则已经过时了哪些规则从来没被触发过。过时的删掉没触发过的考虑是不是写得不够具体。保持文件在 100 行以内是维持高遵守率的关键。第三个原则是团队共享。把CLAUDE.md提交到 Git 仓库让所有人都用同一份。新人入职时不需要口头交代项目约定直接看这份文件就行。如果团队有特殊的模块规则可以在子目录里放独立的CLAUDE.md比如src/api/CLAUDE.md专门写接口层的约定。如果你需要长期用 Claude Code 做开发可以考虑 TaoToken 的 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite它针对编码场景做了优化配合CLAUDE.md使用能明显减少重复沟通。最后分享一个实用技巧把CLAUDE.md的更新纳入代码审查流程。每次 PR 里如果涉及目录调整、命令变更、规范修改就同步更新CLAUDE.md。这样能保证文件和项目始终同步不会出现“文档说的和实际做的不一样”的情况。写CLAUDE.md的本质是把团队里那些口口相传的隐性知识变成 Claude 能读懂的显性规则。它不需要文采不需要面面俱到只需要具体、可验证、持续更新。做到这三点你的 Claude Code 就会从一个“每次都要重新交代”的实习生变成一个“开口之前就知道规矩”的老手。
返回列表