ClaudeCode CLI 使用 CC-Switch 配置了自定义的 api,但是还是一直要求登录 Anthropic

解决方法:
在 ~/.claude.json 添加:"hasCompletedOnboarding": true
注意不是添加到 ~/.claude/settings.json
原理说明:
这个问题涉及 Claude CLI 工具的初始化逻辑和状态持久化机制。
简单来说,这是因为 Claude CLI 在启动时会进行一次(Guard Clause)检查,如果不手动修改这个状态,程序就会死板地认为你是一个“新用户”,从而强制执行官方的登录流程。
以下是详细的原理分析:
- 官方流程预期: 官方设计认为用户必须先通过浏览器登录 Anthropic 账号来获取授权。
- 自定义 API 的冲突: 当你使用
CC-Switch或手动配置自定义 API Endpoint(中转/反代)时,你通常使用的是 API Key(sk-xxx),而不是官方的 OAuth Token。 - 绕过检测: 添加
"hasCompletedOnboarding": true就像是给程序出示了一张“免检通行证”。它欺骗 CLI,让程序认为“这个用户已经登录过了,不用再弹浏览器了”,程序才会继续往下执行,去读取你配置好的自定义 URL 和 Key。
2. 为什么是 ~/.claude.json 而不是 settings.json?
这涉及到配置文件的层级和硬编码路径。
-
~/.claude.json(Root Config):- 这是 CLI 的根状态文件。
- 通常用于存储全局认证信息(Auth Tokens)、安装状态(Onboarding status)和遥测 ID。
- CLI 的源码中,检查“是否完成初始化”的代码逻辑,被硬编码为只读取这个文件。
-
~/.claude/settings.json(Settings Config):- 这是 CLI 的功能配置文件。
- 通常用于存储具体的使用偏好,比如:是否允许终端命令执行、主题颜色、允许的工具(Tools/MCP)配置等。
- 程序是在通过了“根状态”检查之后,才会去加载这个文件里的详细设置。
比喻:
~/.claude.json是大门门禁(你要么进得来,要么进不来)。~/.claude/settings.json是装修手册(进门之后,沙发怎么摆,墙刷什么颜色)。
如果你把通行证(hasCompletedOnboarding)扔进了装修手册里,门口的保安(CLI 启动程序)是看不到的,所以依然会把你拦在外面要求登录。
评论 0 条
暂无评论,来种下第一颗种子。