arkcli-auth について
arkcli-auth は、arkcli のログイン状態、ID、API Key 選択を管理するスキルです。ブラウザー/ブラウザーレスの SSO、状態確認、認証情報の削除を扱い、Profile ごとの Key プールも区別します。
主な機能
- 01認証状態と ID の確認
- 02ブラウザー SSO ログイン
- 03ブラウザーレス SSO の二段階実行
- 04通常の API Key の選択・作成
- 05ログアウトとローカル認証情報の削除
活用シーン
- 01arkcli タスク前のログイン
- 02Agent や CI 環境での SSO 完了
- 03現在の ID の確認
- 04通常の API Key の選択または認証情報の削除
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ volcengine/ ark-cli --skill arkcli-authインストール後、Claude Code で/arkcli-authを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/api-key-query.mdarkcli-auth-init-volc.mdarkcli-auth-login.mdarkcli-auth-status.mdarkcli-auth-whoami.mdauth-modes.mdidentity-resolution.mdrealname-gate.mdscripts/key-metadata.jq詳細
プロジェクトの README よりarkcli auth
CRITICAL — 开始前 MUST 先用 Read 工具读取 ../arkcli-shared/SKILL.md,其中包含认证闸门、配置排查与共享安全规则
CRITICAL — 用户目标是其他业务命令时,必须先判断是不是被认证阻塞,再决定是否进入本 skill。
CRITICAL — auth 是身份/TTY 工作流,全域不注册 --dry-run;不要生成该 flag。
CRITICAL — Key 列表、当前 Profile 选中 Key、最近有调用的 Key 是三个不同事实。声称“最近使用”前,须完整分页并按真实 LastAccessTime 解析时区后取最大值;列表第一条、名称中的日期、CreateTime 或 Active 状态都不能代替最近调用证据。查询/聚合与披露边界见 API Key 查询与交付。
⚠️ 0.1.16 变化总览(必读):
- SSO 登录引入 Gate 1+2:浏览器流后比对 SSO trn 与
is_default profile.OwnerTrn,4-case 分别走BuildFirstProfile(新建) /GUIDE_SKIP(复用) / 提示切 default / 提示新建。详见docs/runtime/volc-sso.md。 - AK/SK 登录通道暂关:
auth login --access-key / --secret-key已注释,promptui 也移除"AK/SK"选项;SSO(火山)+arkcli auth login --no-browser(注册在 auth login,由 volc-sso 继承)是唯一登录入口。 - auth status / auth whoami 输出新增 profile 切面字段:
active_profile.{name,type,region,project,owner_trn}和profiles_summary[...];顶层auth_method/logged_in/volc_sso/ark_api_key等老字段全部保留(向后兼容)。 - Profile 管理迁移到
arkcli profile:config init/list/show/switch/delete已 deprecated,详见../arkcli-config/SKILL.md。 - 0.1.17 首登动态选 project:
BuildFirstProfile的 project 步骤改为经 IAMListProjects拉当前身份名下真实 active project 列表交互选(拉取失败/无权限回退兜底default,不阻断登录)。登录后想换 project 不必重登:arkcli profile project [<name>](拉同一列表重选,把 platform profile 重派生到新 project,个人版 plan profile 保留),详见../arkcli-profile/SKILL.md。 - 1.0.4 起
arkcli auth login交互式浏览器 SSO 分支支持借用本机 volcengine-cli 登录态:检测到ve >= 1.0.45且已ve login时,直接接管 STS 落一份 arkcli identity (identity_store/<key>/metadata.json.source="ve", 不写 IDToken/refresh_token/ClientID; STS 由 volcengine-go-sdk 内部持 refresh_token 自动 refresh)。用户视角: 少一次浏览器授权; agent 视角:auth_method变成"sts"而非"sso", 但logged_in=true。检测失败 / ve 未登录 → 自动降级 arkcli 原生 SSO OAuth 流。详见references/arkcli-auth-login.md的"volcengine-cli 登录态借用"节。
适用场景
- 第一次登录
arkcli - 切换到 Volc SSO
- 登录后重新获取或切换 ARK API Key
- 查看当前凭证状态
- 回答"我是谁 / 我的 IAM ID 是多少 / 我属于哪个账号"——用
arkcli auth whoami - 清理本地登录状态
- 其他业务 skill 因未登录、凭证过期、身份不匹配而被阻塞
- 云开发机 / CI 已注入
VOLC_INIT_*凭证,无交互引导 —— 用arkcli init-volc(不是 SSO)
无交互引导(init-volc)
云开发机 / CI 等已经把火山凭证注入成 VOLC_INIT_* 环境变量的场景,用 arkcli init-volc 一条命令、零交互地落一个火山 platform profile 并设为 default,让后续 arkcli / OpenCode 调用开箱即用(数据面用 API Key,控制面用 STS)。
- 触发词:"云开发机引导 / 无交互初始化 / 已注入 VOLC_INIT 怎么让 arkcli ready / CI 里跳过 SSO"
- 跟
auth login的区别:init-volc不登录、不交互、不联网,纯消费环境变量;本地终端用户首次引导仍走auth login(SSO) - 详细环境变量契约、落地行为、输出见
references/arkcli-auth-init-volc.md
Agent 快速执行顺序
待授权优先于重新登录。 本轮或用户提供的上一轮状态为 stage=authorize_pending、用户尚未完成授权且没有 code 时,等待用户;不要重新执行任何 auth login、config init 或原业务命令。可只读检查一次 auth status:若已有所需的有效凭据则恢复原任务;logged_in=false 只说明尚未登录,不表示 pending 过期或丢失,仍须等待。仅收到 CLI 明确的会话过期/不存在错误或用户明确要求重启登录,才重开 Phase 1。
- 业务命令开始前如果不确定认证状态,先执行
arkcli auth status - 需要识别当前用户身份("我创建的 / 我的 xxx" 语义)时,用
arkcli auth whoami,不要去~/.arkcli/.env里手动解 JWT - 未登录或凭证失效时,火山方舟场景直接通过 Bash 执行
arkcli auth login volc-sso(不要只是"提示用户去跑")。SSO 是 0.1.16 唯一可用登录通道,覆盖控制面 BFF + 数据面绝大多数能力- 执行前用一句话告知用户:"检测到未登录,我现在为你启动 SSO 登录,请在弹出的浏览器中完成授权"
- Bash 调用必须设
timeout=600000(10 分钟) - 启动失败(浏览器没装、
open失败、端口被占用、超时等)→ 不原地重试,把 stderr 贴回给用户,请用户手动在终端跑对应租户的登录命令(火山:arkcli auth login volc-sso) - 命令成功后立即回到用户原始任务,不要停在 auth 结果
- agent / 沙箱 / CI 无浏览器登录走两段式
--no-browser(AK/SK 通道 0.1.16 暂关,提到 AK/SK 时告知并引导走这里):agent 终端通常非 TTY,--no-browser现为两段式,不再阻塞读 stdin(旧版在沙箱必报读取授权码失败: EOF—— 进程在拿到授权码前就被 EOF 打断):- Phase 1:跑
arkcli auth login --no-browser。它打印授权 URL 并以 JSON 输出{"stage":"authorize_pending","authorize_url":"...","next_command":"..."}后立即退出(不傻等)。把authorize_url原样转发给用户,请他在任意设备浏览器完成 SSO,复制页面显示的 base64 授权码回来。 - Phase 2:拿到授权码后跑
arkcli auth login --no-browser --code <授权码>完成登录(读 Phase 1 落盘的 PKCE/state 换 token)。--code必须连--no-browser(单独写会报--code 仅在 --no-browser 模式下有效)。 - 两段必须同一运行环境:Phase 1 落盘
~/.arkcli/.sso-pending.json、Phase 2 读它接力,两条命令须共享同一HOME/ 同一持久化卷(同一容器 / 开发机);跨容器或跨 HOME 派发会让 Phase 2 报「没有待完成的…会话」。期间不要动~/.arkcli/。 - flag 位置:
--no-browser/--code注册在auth login,并由volc-sso继承;两种入口都支持。Agent 示例统一用arkcli auth login --no-browser,Phase 2 同时带--no-browser --code。 - 出错恢复:
会话过期(TTL 10min)/没有待完成的会话→ 重跑 Phase 1(确保同一 HOME);base64 解码失败/state 不匹配(CSRF)/ token 交换瞬时失败 → pending 仍在盘,TTL 内纠正后直接重试 Phase 2(贴对当前 authorize_url 的码,必要时从同一 URL 重新授权拿新码),不必重跑 Phase 1。 - 真人终端(TTY)下
arkcli auth login --no-browser仍是一条命令交互式(打印 URL 后当场粘贴),行为不变。
- Phase 1:跑
- 用户明确要求挑选登录方式时,因 stdin 交互 agent 无法替用户选,让用户自己跑
arkcli auth login - 只有在用户明确要求清理本地凭证时,才执行
arkcli auth logout
核心规则
auth status是默认入口;不要上来就login- 登录成功后,应回到用户原始目标继续执行,而不是停在 auth 结果本身
auth logout是破坏性操作,必须由用户明确提出auth status会对敏感字段做掩码,可直接用于排障,并会展示当前生效的project_nameauth login成功后会输出auth_method;凭证存储位置是实现细节,不再回显路径- SSO 登录(
arkcli auth login volc-sso)与auth apikey都会在选中 API Key 之后写入凭证存储;0.1.16 final clean-slate 模型: 整 arkcli 同一时间只 active 一个 identity, 新 SSO 跟旧 sub 不一致时清空所有 profile (含跨 tenant) 重建 - API Key 必须按 profile 类型分池理解:
platform/coding-plan个人版使用普通 API Key;agent-plan个人版使用Scene=RealAgentPlanPersonal的专属 Key;agent-plan-team/coding-plan-team使用GetSeatInfo返回的席位 Key。普通池里“有 Key”不能证明 Agent Plan/团队版 Key 可用。 - TTY 首登发现普通池为空时会先询问是否创建;确认后只调用一次
CreateApiKey,再最多读 3 次状态。Agent Plan 专属记录存在但非 Active 时会询问是否轮转;确认后也只轮转一次、最多读 3 次状态。非 TTY、用户拒绝或无专属记录时绝不写。 - TTY 首登中,如果用户选择的 profile 类型在 API Key 获取阶段报错(例如 Agent Plan 轮转后检查 3 次仍为
Restricted),CLI 会保留已选 region/project、从本轮候选中移除该失败类型,并重新让用户选择其他消费场景。失败类型不会再次 silent backfill,避免重复获取或二次轮转;这属于 profile 级重选,绝不会拿普通/Coding Plan Key 冒充 Agent Plan 专属 Key。 - v3 ve handoff 分支 (1.0.4 起, 仅火山 SSO 交互式登录): 检测到本机装有
volcengine-cli >= 1.0.45且已ve login时,arkcli auth login会先尝试借用其登录态直接落 arkcli identity (省一次浏览器授权)。落盘差异见references/arkcli-auth-login.md: 不落token.json(IDToken/refresh_token/ClientID 由 ve SDK 管), 但落sts.json+metadata.json.source="ve";auth whoami显示auth_method="sts"而非"sso", 是合法登录态。检测失败 / ve 未登录 → 自动降级 arkcli 原生 SSO OAuth。 arkcli auth apikey只列举并选择普通 API Key 池,写入 identity/.env 兼容凭证;它不读取或修复 Agent Plan 专属 Key、也不读取团队席位 Key。当前是 Plan profile 时优先使用profile apikey refresh或对应 Plan 的轮转/席位流程,不能把auth apikey的saved=true解读为 Plan Key 已恢复。它也不能让广场语音模型获得+chat/+gen/+deploy/+code-example/usage/pricing能力。arkcli auth apikey create创建、验证并保存一把普通 API Key到当前 identity/.env 兼容凭证;TTY 必须确认,非交互环境收到requires_confirmation后必须走共享 Skill 的宿主确认流程;只发一次CreateApiKey,随后最多做 3 次只读状态检查,成功输出不包含明文 Key。它同样不能创建或修复 Agent Plan 专属 Key、团队席位 Key;已有 Profile 要切换默认 Key 时仍用profile apikey refresh/use。- 语音模型能力边界回答只说明 arkcli 不支持;不要主动给"先控制台开通再 API Key/SDK 调用"这类替代流程,除非用户另问官方接入文档。
- 只查不切的 list API Key(只想看 account 下有哪些 key,不想切换当前 key): 跑
arkcli api apikey.list --params '{"PageSize":100}' --page-all --format json,不要跑auth apikey— 后者是交互式选择并写入凭证存储,会改变当前生效 key - 当前已选 key 的元信息(name / suffix / project / 状态): 看
auth status输出里的ark_api_key字段,不需要再调远端
与其他 skill 的串联
查询 Key 列表、辨别掩码与明文、向下游注入凭证前,先读 API Key 查询与交付。保留“查元数据 → 定位真实 ID → 必要时授权导出”的业务流程;不要默认回显全部明文。
arkcli-models、arkcli-chat、arkcli-gen、arkcli-deploy、arkcli-usage被鉴权错误阻塞时,先回到这里- 如果用户其实是在排查 profile / base-url / region 覆盖问题,应转
../arkcli-config/SKILL.md
自然语言触发词 + 跨技能指引表
| 用户怎么说 | 走哪个命令/skill |
|---|---|
| "我是谁/我的身份/当前用户/哪个账号/我自己的 IAM 用户 ID" | arkcli auth whoami |
| "查同事 zhangsan 的 IAM 用户 ID/查别人的 IAM 用户 ID" | 转 arkcli-profile(查看当前 profile 并列出可用 API Key)+ 提示用户使用 arkcli iam 命令(如有) |
| "API Key 泄露/废弃旧 Key/换新 Key/rotate/轮换 API Key" | 转 arkcli-plans:plans personal rotate-apikey 或 plans team rotate-apikey |
| "命令突然报 key 失效/401/InvalidApiKey 但我没换过 key"(疑似后端轮换) | 转 arkcli-profile:先 arkcli profile apikey refresh 同步后端 key 再重试(遇失败才触发的反应式自愈,非预防性);refresh 救不了再看 references/auth-modes.md |
| "看账号有哪些 Key/Key 列表/只查不切" | arkcli api apikey.list,按上述 reference 分页查看元数据,不改变当前 Key |
| "看当前 Profile 的 Key 库存" | 转 arkcli-profile:说明同步影响后用 profile apikey list |
| "切换默认 Key/用另一个 Key" | 转 arkcli-profile:arkcli profile apikey use <key> |
| "创建一把普通 API Key" | arkcli auth apikey create;非交互环境按 requires_confirmation 走宿主确认流程 |
| "AK/SK 登录/access key/secret key" | 告知通道暂关:当前版本 AK/SK 登录通道暂时关闭,请使用 SSO 登录,运行 arkcli auth login |
命令一览
| 命令 | 说明 |
|---|---|
arkcli auth status | 查看当前认证状态(凭证健康度) |
arkcli auth whoami | 查看当前认证身份(用户名 / IAM 用户 ID / 账号 ID 等),脚本与 Skill 用 |
arkcli auth login | 交互式选择登录方式(火山 SSO 浏览器 / 火山 SSO 无浏览器) |
arkcli auth login volc-sso | 浏览器 SSO 登录 |
arkcli auth login --no-browser | 无浏览器 SSO(cross-device)。TTY:一条命令交互式粘贴;非 TTY(agent/沙箱):Phase 1,打印 URL + authorize_pending JSON 后退出 |
arkcli auth login --no-browser --code <授权码> | 无浏览器 SSO Phase 2:把 base64 授权码喂回完成登录(agent/沙箱两段式的第二步) |
| arkcli auth apikey | 选择普通 API Key 并写入对应 identity store;不代表 Agent Plan 专属/团队席位 Key 可用 |
| arkcli auth apikey create | 创建、验证并保存一把普通 API Key 到当前身份;不输出明文 Key,不处理 Plan 专属/席位 Key |
| arkcli auth logout | 删除本地凭证 |