1. 为什么 Claude Code 的配置总在换项目后失效
Claude Code CLI 和普通聊天式 AI 最大的区别,是它把「项目上下文」当成一等公民。你在一个 Git 仓库里跑claude,它会自动读取当前目录的CLAUDE.md作为项目记忆,再叠加~/.claude/settings.json里的全局偏好。问题就出在这:很多人只配了全局 Key,没配项目级记忆,换一个仓库后模型又开始瞎猜技术栈;或者反过来,CLAUDE.md写得很全,但 Key 通道没打通,一执行命令就报鉴权错误。
我试过在三个不同仓库之间来回切,最典型的翻车场景是:在 A 仓库里 Claude 知道用 Pydantic V2,切到 B 仓库后它默认给你生成 V1 写法,因为 B 仓库根本没有CLAUDE.md。另一个高频问题是settings.json里环境变量名写错,导致 CLI 启动时读不到统一 Key,每次都要手动 export。
这篇就聚焦一件事:用CLAUDE.md管项目记忆,用settings.json管 Key 通道和运行偏好,让 Claude Code CLI 在任意 Git 仓库里都能一次配置、稳定复用。适合已经在用 Claude Code、但配置散落各处、想统一收口的人;也适合从 Cursor 转过来、想搞清楚两者配置差异的开发者。
2. TaoToken 统一 Key 通道的前置准备
Claude Code CLI 本身支持通过环境变量指定 API 端点。我们要做的,是让这个端点指向 TaoToken 的统一入口,这样无论你后面切哪个模型、哪个项目,Key 都不用改。
先拿到 Key。打开控制台页面,登录后在 API Keys 里创建一个新 Key,复制出来。这个 Key 就是后面所有配置里唯一需要替换的敏感信息。
注意:Key 只显示一次,建议创建后立刻存进密码管理器,不要直接提交到 Git 仓库。
TaoToken 的 API 入口是https://taotoken.net/api,注意这个地址不带任何查询参数,直接作为 base URL 使用。Claude Code 需要的环境变量通常是ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN这两个,具体变量名以你本地 CLI 版本的文档为准,但思路一致:把 base URL 指向统一入口,把 token 指向你刚创建的 Key。
如果你还没装 Claude Code CLI,先确认 Node 环境,然后全局安装。安装命令按官方文档来即可,这里不展开。装完后用claude --version确认能正常输出版本号,再进行下一步配置。
3. settings.json 骨架与 CLAUDE.md 模板
3.1 settings.json 的可复制配置
Claude Code 的全局配置放在~/.claude/settings.json。下面这份骨架可以直接复制,把sk-你的Key换成你自己的:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的Key" }, "preferences": { "auto_execute_commands": false, "confirm_destructive_operations": true }, "project_defaults": { "test_framework": "pytest", "formatter": "black" } }几个参数说明一下。auto_execute_commands设为false,意思是 Claude 建议执行的命令需要你确认后才跑,避免它自动删文件。confirm_destructive_operations保持true,涉及rm、git reset这类操作会二次确认。project_defaults是给新项目用的默认值,老项目会被CLAUDE.md覆盖。
提示:如果你在多个终端环境里工作,建议把 Key 放进系统环境变量,
settings.json里只写变量引用,避免明文散落。但 Claude Code 对变量引用的支持因版本而异,最稳的还是直接写在这个文件里,并确保文件权限是600。
3.2 CLAUDE.md 项目记忆模板
在 Git 仓库根目录创建CLAUDE.md,Claude Code 启动时会自动读取。模板如下:
# CLAUDE.md ## 项目信息 - 名称: 你的项目名 - 技术栈: FastAPI + SQLAlchemy + PostgreSQL - Python 版本: 3.11+ ## 开发规范 - 使用 Pydantic V2 - 所有函数添加类型注解 - 使用 Google Style Docstrings ## 常用命令 ```bash uvicorn app.main:app --reload pytest tests/ -v black src/ tests/项目结构
app/ ├── main.py ├── models/ ├── routers/ └── services/
这份模板的关键在于「常用命令」和「开发规范」两节。Claude Code 在执行任务前会先读这两节,所以你把测试命令写进去,它就不会瞎猜用 `python -m unittest`。技术栈写清楚,它就不会给你生成过时写法。 ### 3.3 和 Cursor 的配置差异 Cursor 用的是 `.cursor/rules/` 目录下的规则文件,Claude Code 用的是根目录 `CLAUDE.md`。两者不互通,但可以共存。如果你两个工具都用,建议把公共规范抽成一份,分别软链或复制到两个位置。Cursor 的规则更偏向编辑器内的补全提示,Claude Code 的 `CLAUDE.md` 更偏向 CLI 执行任务时的上下文注入,粒度更粗但影响范围更大。 ## 4. 验证 Key 通道是否生效 配置写完不代表生效。下面这套验证流程可以复现一次完整的接入检查。 第一步,确认 CLI 能读到配置。在仓库根目录执行: ```bash claude --version能输出版本号说明 CLI 本身没问题。接着进入交互模式:
claude第二步,在交互里问一个只有读到CLAUDE.md才能答对的问题:
> 这个项目用什么测试框架?如果配置生效,它应该回答pytest,而不是泛泛地说「常见的有 unittest 和 pytest」。这一步验证的是CLAUDE.md被正确加载。
第三步,验证 Key 通道。让它执行一个需要调用模型的简单任务:
> 用一句话说明当前项目的技术栈如果 Key 通道没打通,这里会报鉴权错误或超时。能正常返回说明ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN都生效了。
第四步,验证 Git 集成。在交互里输入:
> 查看当前有哪些修改Claude Code 会调用git status并解析结果。如果它返回了真实的文件改动列表,说明 CLI 的 Git 操作链路是通的。
注意:如果第三步报错但第一步正常,优先检查
settings.json的 JSON 格式是否合法,一个多余的逗号就会导致整个文件被忽略。
5. 本篇常见错误排查
5.1 报鉴权失败或 401
最常见的原因是 Key 复制时带了空格,或者ANTHROPIC_AUTH_TOKEN的值没有加引号导致被截断。检查settings.json里 Key 那一行,确保是完整的字符串。另一个原因是 base URL 写成了带路径的形式,比如https://taotoken.net/api/v1,正确写法就是https://taotoken.net/api,不要自己加后缀。
5.2 CLAUDE.md 不生效
先确认文件名大小写。必须是全大写的CLAUDE.md,claude.md在部分系统上读不到。再确认位置,必须在 Git 仓库根目录,子目录里的不会被自动加载。如果都对了还不生效,用claude进入交互后问「你读到了哪些项目配置」,看它的回答里有没有你写的内容。
5.3 命令执行被卡住
如果 Claude 建议执行命令后一直等你确认,检查auto_execute_commands是不是设成了false。这是预期行为,不是 bug。想让它自动跑,改成true,但建议只在可信仓库里这么做。
5.4 和 Cursor 规则冲突
两个工具同时开着时,Cursor 可能用.cursor/rules/里的规则覆盖你的预期。解决办法是让两份配置的公共部分保持一致,或者干脆在 Cursor 里关掉对当前仓库的规则加载,只用 Claude Code 的CLAUDE.md。
6. 把 Key 通道收口到一处
配置这件事,散着放迟早出问题。我的做法是:settings.json只管 Key 和全局偏好,CLAUDE.md只管项目记忆,两者职责不重叠。这样换项目时只需要确认新仓库有没有CLAUDE.md,Key 通道完全不用动。
如果你还没创建 Key,去控制台页面建一个,然后按第 3 节的骨架填进settings.json。接入过程中遇到报错,先对照第 5 节排查,大部分问题出在 JSON 格式和文件名大小写上。需要查具体参数时,接入文档里有完整的变量说明。验证模型是否正常响应,可以直接在模型对话里发一条测试消息,确认通道本身没问题,再回到 CLI 里排查配置层。长期在多个仓库间做编码和 Agent 任务的话,Coding Plan 能把额度统一管理,省得每个项目单独配。