我让我的几个 claude 账号自己换着用了
五小时墙,和切号的麻烦
天天用 claude code 的人应该都撞过那个五小时的用量墙:干着干着,5h 窗口满了,就得停下来等重置。我手里有好几个号(一个个人 max、一个工作 max),第一反应肯定是切号。但在 macOS 上切号,实际大概是这么个情况:
- 切号就是重新登录。要走一遍浏览器认证,正在跑的 session 会丢登录,你干到哪儿也跟着丢了。
- 改配置文件没用。
~/.claude/.credentials.json只是个镜像,改了它,正在跑的 session 根本不理。市面上的切号工具大多改的就是这个文件,在 macOS 上等于白改。 - 你不知道每个号还剩多少。哪个号的 5h 窗口快满了,哪个号的登录悄悄过期了,没有地方告诉你,等你发现的时候,基本就是 session 报错那一下。
- 就算工具齐全,也得有人盯着。凌晨三点撞墙,没人帮你切。
所以我想要的很简单。账号快撞墙的时候,自己换到下一个还有余量的号,我照常打字,什么都感觉不到。另外我随时能看到每个号还剩多少。就跟手机从 Wi-Fi 切到蜂窝差不多,电话该打着还打着。
两个工具,各管一半
我搞了两个东西,下面按痛点一个一个讲:
- clauth(我的 fork) — 终端里的账号管理,加一个后台 daemon。它管多账号登录,能在 session 跑着的时候热切换,还能按链自动轮换。用 rust 写的,热切换和浏览器登录这几个核心功能已经合回了上游项目。
- ccsbar(Claude Code Switcher Bar)— 原生 SwiftUI 写的菜单栏 app,相当于 daemon 的仪表盘。上面能看到每个账号的 5h / 7d / fable 用量条和下一步的预报,能一键切换,登录挂了会亮红牌。它自己不碰任何凭据,只读 daemon 的状态,调 daemon 的接口。
热切换,session 不掉线
先讲整件事能成的那个机制。macOS 上的 claude code 每发一次请求,都会去系统钥匙串里重新读一遍登录,读的就是 Claude Code-credentials 这一个条目。它不是启动的时候读一次揣在内存里,是每次请求都重新读。文档里没写这个,是我自己试出来的。
所以只要改写这一个钥匙串条目,session 还在跑着,账号就整个换掉了。不用重启,也不用重新登录,下一个请求用的已经是另一个账号,session 自己完全不知道。
画成时序图大概是这样:
fork 里所有写钥匙串的操作,都走苹果自带的 /usr/bin/security。因为钥匙串的「始终允许」是跟调用它的那个二进制的签名绑在一起的。用系统自带的这个,二进制一直不变,授权一次就一直有效,不会你每重新编译一次就弹一次窗。
登录这边也配了浏览器 OAuth。跑 clauth login <名字> 会打开浏览器,走一遍和 claude code 一样的 PKCE 认证,token 直接存进 profile。加新号用这条命令,旧号掉线了要修也用这条命令(同一个名字再跑一遍,就是原地重新认证)。
自动轮换,撞墙之前就切走
clauth daemon 是个常驻的后台进程,每隔一会儿刷一遍每个账号的用量。你把账号排成一条 fallback 链,当前账号的 5h 窗口一过阈值(默认 95%),它就顺着链找下一个有余量的号,改写钥匙串。不用人看着,终端关了也照样切。你吃个午饭回来,可能已经换到链上第三个号了,活儿照跑。
账号排成 fallback 链,活跃号撞到 95% 之前,daemon 自动沿链切到下一个有余量的号,死号被隔离出链。
下面几个细节,都是真用的时候碰出来的:
- 账号登录失效了(比如 refresh token 被吊销),daemon 会把它踢出链,绝不会把死 token 写进钥匙串。这条很重要,因为死 token 一旦写进去,这台机器上所有正在跑的 claude 都会被登出,比撞墙糟多了。
- 整条链都用完了也有兜底。你可以指定一个兜底账号,所有号都满了就停在它上面;也可以开 wrap-off 模式,直接全停,不再烧配额。
- 还有个可选的 burn-aware 模式,会按你现在的消耗速度往后估。烧得猛就早点切,烧得慢就一直用到快 100% 再切。
把它装成 macOS LaunchAgent(仓库里有现成的脚本),开机自己就起来了,之后这件事就不用你管了。
把状态摆在明面上
后台自动换号的进程有个毛病,坏了你不知道。daemon 死了,数字就冻住不动,看着还像活的。它凌晨切过一次号,你也不知道现在跑在哪个号上。还有登录悄悄过期了,缓存的数字照样显示,看着一切正常。这些事它自己都清楚,就是你看不到。
ccsbar 干的就是把这些全摆出来:
- 每个账号都有 5h / 7d / fable 三条用量条,加上重置倒计时,实时刷新。
- 面板顶上那句「Watching account-1 — would switch to account-2 at 95%」不是 UI 自己猜的。daemon 下一步打算怎么做,会直接发出来,UI 只管显示,所以面板上说的和它实际做的永远对得上。
- 没人看着的时候自动换了号,菜单栏会闪八秒「⇄ 已切到 personal」。手动切换在面板里点两下就行(点开账号,点 Use),成没成功都会明确告诉你。
- daemon 停了,整个面板变灰,盖一个「4 分钟前冻结」的戳。哪个账号登录失效了,就给它亮红牌,再给一个「Log in again」按钮,一点就拉起浏览器重新认证。
daemon 的每个静默故障(冻结、切换、掉登录)都被 ccsbar 拽到菜单栏上,给一个响亮固定的显示。
ccsbar 面板(深色模式):三个账号的用量条、预报、fallback 链
ccsbar 面板(浅色模式)
快速上手
# clauth(我的 fork)
git clone https://github.com/xingfanxia/clauth
cd clauth && cargo install --path .
clauth login work # 浏览器登录第一个号
clauth login personal # 第二个号
clauth # TUI 里把两个号加进 fallback 链、设阈值
# 守护进程(LaunchAgent 开机自启)
./dist/macos/daemon-install.sh
# ccsbar
git clone https://github.com/xingfanxia/ccsbar
cd ccsbar && ./Scripts/package_app.sh
cp -R build/ccsbar.app /Applications/ && open /Applications/ccsbar.app
第一次切换的时候,macOS 会弹一次钥匙串授权,选「始终允许」,以后就不会再问了。
用了几周
daemon 已经帮我轮了好些天的号,我基本感觉不到它在。唯一一次注意到,是我一句话打到一半,菜单栏闪了一下「⇄ 已切到 personal」,然后活儿接着跑。
两个仓库都开着 issue:clauth fork / ccsbar。想看这套东西是怎么搭起来的(包括每次请求都重读钥匙串这件事是怎么试出来的),英文版 I Taught My Claude Accounts to Rotate Themselves 里有完整的过程记录。


