cc-api-key-auth-token-conflict
CC 启动时 API_KEY 与 AUTH_TOKEN 冲突(第三方 API 场景)
适用场景
使用第三方 Anthropic-compatible API(DeepSeek、OpenRouter 等),在 .zshrc 中设置了自己的 API Key:
1 | export ANTHROPIC_API_KEY="sk-xxx" |
症状
每次启动 Claude Code 时提示 ANTHROPIC_API_KEY 和 ANTHROPIC_AUTH_TOKEN 同时存在,产生冲突或要求选择。
根本原因
Claude Code 启动时会执行以下逻辑:
- 检测到环境变量中存在
ANTHROPIC_API_KEY - 自动将
ANTHROPIC_API_KEY的值复制到ANTHROPIC_AUTH_TOKEN - 然后检测到两个变量同时存在 → 报冲突
所以即使 .zshrc 里只设置了 ANTHROPIC_API_KEY,CC 启动后 ANTHROPIC_AUTH_TOKEN 会被自动填上相同的值,触发"同时存在"的检测。
为什么之前尝试的方法无效
| 方法 | 为什么无效 |
|---|---|
注释掉 .zshrc 中的 ANTHROPIC_API_KEY |
CC 已经在首次运行时将 API Key 持久化到了内部存储,之后的启动不再依赖 .zshrc 中的环境变量,而是从持久化存储中读取并自动设置两个变量 |
/logout |
/logout 清除的是 OAuth 登录态,跟 API Key 无关。第三方 API 场景根本不存在登录态 |
source ~/.zshrc 后重启 |
CC 从持久化存储读取,不是从 shell 环境 |
真正的解决方案
关键点:CC 首次配置时的那个选择
当 CC 首次运行或检测到新的环境变量时,会弹出类似提示:
“检测到环境变量中有 ANTHROPIC_API_KEY,是否使用?”
- 选 Yes → CC 将 API Key 持久化到内部存储,之后每次启动自动复制到
AUTH_TOKEN,造成永久冲突 - 选 No → CC 不在内部持久化 API Key,只用环境变量中的
ANTHROPIC_API_KEY直连第三方 API,不会自动复制到AUTH_TOKEN,没有冲突
修复步骤
-
清除 CC 内部持久化的 API Key 凭证:
1
rm -rf ~/.claude/credentials*
-
确保
.zshrc中保留了 API Key(第三方 API 必须用这个):1
2export ANTHROPIC_API_KEY="sk-xxx"
export ANTHROPIC_BASE_URL="https://api.deepseek.com/anthropic" -
重启终端,启动 Claude Code
-
当 CC 询问"是否使用环境变量中的 ANTHROPIC_API_KEY"时,选择 No
-
CC 之后就会直接用环境变量中的
ANTHROPIC_API_KEY认证,不再自动复制到AUTH_TOKEN,冲突消失
关键教训
- CC 的"是否使用环境变量中的 API Key"这个问题,选 Yes = 持久化 + 自动复制 AUTH_TOKEN = 永久冲突。第三方 API 用户应该选 No
- 一旦选了 Yes,API Key 被持久化到
~/.claude/credentials*,之后改.zshrc也没用——CC 读取的是内部存储,不是 shell 环境 /logout对第三方 API 场景毫无意义——没有 OAuth,不存在"登出"- 清除
~/.claude/credentials*是重置这个选择的唯一方法
相关环境变量
| 变量 | 设置者 | 说明 |
|---|---|---|
ANTHROPIC_API_KEY |
用户(.zshrc) |
第三方 API Key |
ANTHROPIC_AUTH_TOKEN |
CC 自动复制 | 启动时从 API_KEY 复制而来 |
ANTHROPIC_BASE_URL |
用户(.zshrc) |
第三方 API 端点 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 None!

