命令字典
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
生成长期有效的 OAuth 令牌
claude setup-tokenclaude setup-tokenclaude setup-token 是一个 CLI 子命令,用来为 CI 和脚本生成长期有效的 OAuth token。官方 CLI reference 的描述是:"Generate a long-lived OAuth token for CI and scripts. Prints the token to the terminal without saving it. Requires a Claude subscription."
认证文档补充了几点:
/login 相同的浏览器授权流程,授权后 token 打印到终端。CLAUDE_CODE_OAUTH_TOKEN 环境变量。claude setup-token
官方文档只给出这一种形式,没有列出任何 flag。
拿到 token 后,在需要认证的环境里设置环境变量:
export CLAUDE_CODE_OAUTH_TOKEN=your-token
官方文档没有说明退出码,也没有 --output-format 之类的结构化输出。已知的输出行为只有:token 在浏览器授权完成后打印到终端(stdout/stderr 的具体归属文档未说明)。
GitHub Actions:官方文档的做法是在本地运行 claude setup-token,把结果存为仓库 secret CLAUDE_CODE_OAUTH_TOKEN,然后在 workflow 里通过 claude_code_oauth_token 输入传给 anthropics/claude-code-action:
- uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
官方文档说明,如果 workflow 示例里写的是 anthropic_api_key 那一行,使用订阅认证时把它替换成 claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} 即可。
认证优先级:CLAUDE_CODE_OAUTH_TOKEN 在认证优先级列表中排第 5,低于云厂商凭据、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_API_KEY 和 apiKeyHelper,高于 /login 保存的订阅 OAuth 凭据。同一环境里设了 ANTHROPIC_API_KEY 时,后者会先被使用(交互模式下需先经你批准,-p 非交互模式只要存在就使用)。
与之相关的是 /login,二者的差异:
/login | claude setup-token | |
|---|---|---|
| 授权流程 | 浏览器 OAuth | 同一套浏览器授权流程 |
| 结果存放 | 由 Claude Code 保存到本机凭据存储 | 只打印到终端,不保存 |
| 有效期 | 文档称会到期,到期前 3 天启动时提示续期 | 一年 |
| 适用场景 | Pro、Max、Team、Enterprise 用户的默认订阅认证 | CI、脚本等无法浏览器登录的环境 |
如果在 CLAUDE_CODE_OAUTH_TOKEN 已设置时运行 /login,当前会话会切换到新登录,但每个新会话仍会重新读取该环境变量,直到你把它从 shell profile 或 settings 的 env 块中移除。
| 约束 | 说明(均来自官方文档) |
|---|---|
| 需要订阅 | 需要 Pro、Max、Team 或 Enterprise 计划 |
| 只能发模型请求 | 不能建立 Remote Control 会话,也不能获取 claude.ai connectors;本地配置的 MCP server 仍可用 |
| 不支持 bare mode | --bare 不读取 CLAUDE_CODE_OAUTH_TOKEN,应改用 ANTHROPIC_API_KEY 或 apiKeyHelper |
| 不保存 token | 命令只打印,需要自行复制并妥善保管 |
| 绑定个人订阅 | GitHub Actions 文档指出 OAuth token 绑定运行 claude setup-token 那个人的订阅;跨仓库共享的 secret 建议改用 Claude Console 的 API key |
| 组织限制 | 设置了 forceLoginMethod 时该命令会遵守;但 forceLoginOrgUUID 对它不生效,它可能在另一个组织下签发 token |
CLAUDE_CODE_OAUTH_TOKEN secret,让 claude-code-action 使用订阅额度而非 API 计费(GitHub Actions 文档:"If you authenticate with an OAuth token, runs use your Claude subscription instead of API billing")。CLAUDE_CODE_OAUTH_TOKEN 后运行 claude。ANTHROPIC_API_KEY:优先级更高,会盖过 OAuth token(交互模式下需先经你批准才会使用,-p 非交互模式只要存在就使用);若该 key 属于已禁用或过期的组织,可能导致认证失败。--bare:脚本传了 --bare 时,CLAUDE_CODE_OAUTH_TOKEN 不会被读取。/login 后新会话仍读旧 token:环境变量没移除时,每个新会话都会再次读取它。现在拒绝意外的额外参数