☰
Claude Code 三个月实战:用 CLAUDE.md 与 settings.json 把效率提升 3 倍的最佳实践
2026/9/27 19:46:11 网站建设 项目流程

1. 为什么你的 Claude Code 用了一个月还是「不听话」

先说结论:Claude Code 本身不慢,慢的是每次都要重新交代一遍项目背景。我接手过一个中途换人的项目,代码没文档、测试跑不起来、目录结构靠猜。第一周我几乎在重复同一件事:告诉它构建命令是什么、哪个目录别乱动、提交信息按什么格式写。等到第三周我把这些内容沉淀进CLAUDE.md和settings.json,同样的任务量,来回沟通次数肉眼可见地掉下来。

这篇聚焦的是长期使用中的配置沉淀,不是「怎么装 Claude Code」。适合已经能跑起来、但每次开新会话都要重新解释项目的人,也适合同时维护三四个仓库、经常在项目之间切换的人。核心就两条主线:CLAUDE.md负责项目记忆,settings.json负责权限与环境骨架。再配合一个统一的 API 通道,把 Key 管理这件事从每个项目里抽出来。

我试过最笨的办法:把项目说明写在聊天框里,每次粘贴。结果是上下文一满就被挤掉,AI 该忘还是忘。后来改成文件沉淀,重启会话后它自己就能读到,这才是长期可用的做法。

2. 前置准备:用 TaoToken 统一 Key 与 API 通道

在写配置文件之前,先把「请求往哪发、用哪个 Key」这件事定下来。多项目切换时最烦的就是每个仓库一套环境变量,改来改去还容易把 Key 提交上去。我的做法是走一个统一通道,项目里只引用环境变量名,不写死值。

TaoToken 在这里扮演的是统一入口:官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api 。你需要先去控制台拿一个 Key,然后把它配到环境变量里,Claude Code 通过ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN两个变量识别。

拿 Key 的入口在控制台,接入细节看文档,这两处配合着看最省事:

  • 控制台(创建/管理 Key):https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
  • 接入文档(环境变量写法):https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite

如果你只是想先验证模型通不通,可以用模型对话页面发一条测试消息:https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 。长期编码和 Agent 场景,建议直接看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。

环境变量建议写在 shell 的 profile 里,而不是项目文件里。这样切项目时不用改,也不会误提交:

# ~/.zshrc 或 ~/.bashrc export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="sk-你的Key"

改完执行source ~/.zshrc,再用echo $ANTHROPIC_BASE_URL确认生效。这一步做完,后面所有项目共用同一个通道,settings.json里就不用再碰 Key 了。

3. 可复制配置:CLAUDE.md 模板与 settings.json 骨架

3.1 CLAUDE.md 要写「可执行的事实」,不是口号

很多人写CLAUDE.md没效果,问题出在写的是愿望而不是事实。「代码要写好」「遵循最佳实践」这种句子,AI 没法翻译成动作。换成具体命令、具体路径、具体命名规则,它执行得就很干脆。

下面是我现在用的项目级模板,可以直接抄,把命令和路径换成你自己的:

# 项目规范 ## 开发环境 - Node.js 18+,包管理器 pnpm 8+ - 安装依赖: pnpm install - 启动开发: pnpm dev - 构建: pnpm build ## 代码风格 - 缩进 2 空格,不用 Tab - 组件名 PascalCase,函数名 camelCase - 常量 UPPER_SNAKE_CASE - 导入顺序: 内置模块 -> 第三方 -> 本地 ## 提交规范 - 提交前必须运行 pnpm test - 提交信息格式: type: description - type 可选: feat / fix / docs / style / refactor / test ## 目录结构 - src/api 接口路由 - src/components 通用组件 - src/hooks 自定义 Hook - src/utils 工具函数 - 不要修改 src/generated 下的文件,那是自动生成的

注意最后一条「不要修改」,这类负向约束非常有用。AI 默认会「顺手帮你优化」,明确划出禁区能省掉很多回滚。

3.2 文件放哪:作用域对照

CLAUDE.md可以放在不同位置,作用范围不一样。放错地方是「写了没反应」的头号原因。

位置作用域典型用途
./CLAUDE.md当前项目团队共享规范,提交到 Git
~/.claude/CLAUDE.md所有项目个人偏好,比如回复语言、注释风格
./CLAUDE.local.md当前项目本地个人临时配置,加进.gitignore

推荐结构是这样,团队规范和个人偏好分开,互不干扰:

my-project/ ├── CLAUDE.md # 团队规范,提交 ├── CLAUDE.local.md # 本地配置,不提交 └── src/

3.3 规则太长就拆:.claude/rules/ 按需加载

单个CLAUDE.md建议控制在 200 行以内。我早期写过 400 多行,结果后面的内容基本被忽略。拆成多个文件后效果好很多,尤其是前后端规范差异大的项目:

my-project/ ├── CLAUDE.md └── .claude/ └── rules/ ├── frontend.md ├── backend.md └── testing.md

rules还支持条件加载,用 frontmatter 里的paths指定触发范围。只有 AI 处理匹配文件时,这段规则才会进上下文,既省 token 又不互相干扰:

--- paths: - "src/api/**/*.ts" - "routes/**/*.js" --- # API 开发规范 - 遵循 RESTful 风格 - 错误响应统一为 { code, message, data } - 每个接口补 OpenAPI 注释

3.4 settings.json:权限与环境骨架

CLAUDE.md管「怎么做」,settings.json管「能做什么」。把常用命令加进允许列表,能减少大量确认弹窗;把危险操作挡在外面,能避免误删。

项目级配置放在.claude/settings.json,本地覆盖放.claude/settings.local.json:

{ "permissions": { "allow": [ "Bash(pnpm test:*)", "Bash(pnpm lint:*)", "Bash(pnpm build:*)", "Bash(git status)", "Bash(git diff:*)" ], "deny": [ "Bash(rm -rf:*)", "Bash(git push --force:*)", "Read(./.env)", "Read(./secrets/**)" ] }, "env": { "NODE_ENV": "development" } }

deny里的Read(./.env)很关键。哪怕 Key 走的是环境变量,也建议把敏感文件读权限关掉,多一层保险。多项目切换时,如果发现规则串了,可以在本地配置里排除其他项目的记忆文件:

{ "claudeMdExcludes": [ "../other-project/CLAUDE.md" ] }

4. 验证:重启会话确认记忆生效、请求走通

配置写完不验证,等于没写。我固定做两步检查。

第一步,确认记忆被加载。重启 Claude Code 会话,直接问它:

你看到了哪些项目规则?把构建命令和提交格式复述一遍。

如果它能准确说出pnpm build和type: description,说明CLAUDE.md生效了。如果答得含糊,八成是文件位置不对或者被别的规则覆盖了。

第二步,确认请求走通。在会话里让它跑一个只读命令,比如:

运行 git status,然后告诉我当前分支。

能正常返回分支名,说明 API 通道和权限配置都没问题。如果卡在鉴权,先回到第 2 节检查ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN是否在当前 shell 生效。想单独验证模型连通性,用模型对话页面发一条消息最快:https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 。

第三步,验证条件规则。让 AI 改一个src/api/下的文件,观察它是否按backend.md里的错误响应格式来写。这一步能确认paths触发是否正常。

5. 本篇常见错排查

问题一:CLAUDE.md 写了但 AI 不遵守。先查指令是否具体,再看文件位置。放在项目根目录的./CLAUDE.md才会被当前项目读取,放到子目录里通常不生效。最后检查有没有和~/.claude/CLAUDE.md里的规则冲突,冲突时以更具体的那条为准。

问题二:规则太多,AI 记不全。这是上下文预算问题,不是 AI 笨。分层处理:核心规范放CLAUDE.md,专业规范放.claude/rules/按需加载,可复用的工作流单独抽出来手动触发。别把所有东西塞进一个文件。

问题三:不同项目的规则串了。典型症状是在 A 项目里 AI 提到 B 项目的目录。用claudeMdExcludes排除,或者检查是不是把规则写进了~/.claude/CLAUDE.md这个全局位置。

问题四:权限弹窗太多,打断节奏。把高频只读命令加进allow,比如git status、pnpm lint。但rm -rf、git push --force这类一定要留在deny里,别图省事放开。

问题五:改了 settings.json 没反应。配置文件是会话启动时读取的,改完要重启会话。另外确认改的是.claude/settings.json而不是别的路径,JSON 语法错误也会导致整份配置被忽略,可以用编辑器校验一下。

问题六:请求报鉴权失败。九成是环境变量没生效。新开一个终端窗口执行echo $ANTHROPIC_AUTH_TOKEN,如果为空,说明 profile 没加载或者写错了文件。注意别把 Key 写进settings.json提交到仓库。

6. 把配置沉淀成习惯

三个月下来最大的体会是:Claude Code 的效率不取决于模型多强,而取决于你愿不愿意花半小时把项目事实写清楚。CLAUDE.md是给 AI 的项目说明书,settings.json是安全边界,统一 API 通道是省掉重复配置的底座。三者配齐,新会话开局就能干活,多项目切换也不用重新交代。

如果你还在每个项目里单独配 Key,建议先把环境变量统一到 TaoToken 通道,再去控制台建 Key、对照文档接入:控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。长期编码场景直接上 Coding Plan 更省心:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。

最后留一个我一直在用的习惯:每次踩到新坑,顺手往CLAUDE.md或对应rules文件里补一条具体规则。配置不是一次写完的,是跟着项目一起长出来的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询