7小时前
|
|
|
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 启动程序)是看不到的,所以依然会把你拦在外面要求登录。
🫵 来啊,说点有用的废话!
▲