功能

为脚本选择账号

作者:jhyunwoo
最后更新于 2026年10月20日
已使用 ccam 0.8.0 和 Claude Code 2.1.302 核实

本页由英文机器翻译而来,欢迎指正。 在 GitHub 上编辑此页

本页内容

ccam pick 输出已登录账号中余量最多的那个账号的名称,供脚本用它启动 Claude Code。只要还有足够多有余量的账号,同时启动的并行任务就会各自拿到不同的账号,这样一批 claude -p 任务会分散到你的各个账号上,而不是耗尽其中一个。

用法

ccam "$(ccam pick)" -p "fix the failing tests"
for task in parse lint docs; do
  ccam "$(ccam pick)" -p "do the $task task" > "$task.json" &
done; wait
ccam pick --json                      # the account and its usage
ccam pick --model opus                # also count the Opus weekly limit
ccam pick --max-usage 80 --strategy expiring
ccam pick --wait=2h                   # nobody has room: wait for a reset
ccam --fallback "$(ccam pick)" -p "…" # also switch if this account hits its limit mid-job
$ ccam pick --json
{
  "name": "work",
  "slot": 2,
  "email": "dev@company.com",
  "five_hour": { "percent": 12, "resets_at": "2026-10-20T15:10:00Z", "known": true },
  "weekly": { "percent": 41, "resets_at": "2026-10-24T09:00:00Z", "known": true },
  "source": "live"
}

退出码:在标准输出上给出名称时为 0;没有账号还有余量或没有已登录账号时为 75(EX_TEMPFAIL);其他错误(例如错误的选项)为 1。

选项

选项 作用 默认值
--json 输出账号、它的 5 小时和每周用量,以及这些数字的来源 关闭
--model <model> 同时计入该模型的每周时间窗口,例如 opus 无
--max-usage <1-100> 优先选择用量低于此值的账号 auto_max_usage,否则为 100
--strategy headroom|expiring 5 小时用量最低的账号,或 5 小时时间窗口最早重置的账号 auto_strategy,否则为 headroom
--wait[=<duration>] 没有账号还有余量时,等待第一个账号重置,最多等待这么久 关闭;单独给出时为 5h
--dry-run 只做选择,不记录这次选择 关闭

工作原理

  1. ccam 列出已登录的账号(API 密钥账号没有限制,因此不包括在内)。
  2. 它获取一个锁(~/.local/state/ccam/picks.lock),所以同时运行的选择会一个接一个地进行。
  3. 它以与 ccam usage 相同的方式、使用 60 秒缓存,一次性查询每个账号的用量。
  4. 先排除最近 2 分钟内被选中过的账号(~/.local/state/ccam/picks/<name>),再用 ccam next --auto 的选择规则在其余账号中选择:优先选择低于 auto_max_usage 的账号,按策略选择,从不选择已达 100% 的账号。
  5. 如果每个有余量的账号最近都被选中过,规则会重新在所有这些账号中选择,因此三个账号上的第四个并行任务会与其中一个共用账号。
  6. 记录这次选择并释放锁,然后输出名称。

这 2 分钟的时间窗口很重要,因为新任务的用量需要一段时间才会体现在数字中:如果没有它,同时启动的五个并行任务都会把同一个账号看作余量最多的账号。

安全性与边界情况

  • ccam pick 只读取用量并写入选择时间;除了 ccam usage 本身会做的之外,它从不为令牌续期或读取令牌。
  • 选择并不会预留账号。2 分钟后,两个脚本仍可能在同一个账号上启动;可以用 --fallback 在该账号达到限制时恢复。
  • 使用 --wait 等待时不持有锁,所以其他选择在此期间照常进行。
  • ccam pick 会忽略 ccam folder:它只按用量选择。