功能

用量上限不该结束你的会话。

每个服务方最终都会拦下你,Happier 改变不了这一点。它能做的是把会话保留在上限处、告诉你什么时候重置,并从停下的地方重新开始工作。打开“总是等待并恢复”,它就会不用人盯着把整件事做完 —— 一个设置,你回来看到的是一个继续跑下去的会话,而不是一个停住的会话。这是在一个账号上的情形。如果你自己拥有好几个订阅,下面还有更好的答案:把它们组成池,一个会话把其中一个用干了,就换到下一个。

只有一个账号时,Happier 会等过重置,再把会话接下去

某个服务方拒绝了一轮,Happier 会显示“已达用量上限”,如果服务方给出了重置时间也一并显示。接下来:等待 —— “限额重置后恢复”会保留会话并自行把它接下去 —— 或者“立即检查限额”重新探测一次,或者不再等待。等待是能保住你一下午的那个选择:Happier 记住重置时间,替你重新检查,如果会话在此期间已经退出就再启动一次,并发送一条提示,从被打断的上下文继续。把“总是等待并恢复”勾上一次,之后就不会再问你 —— 此后的每一次限额都以同样的方式处理,不需要有人盯着。Codex 会话还更进一步,只要设置了“自动继续”,它就会自己把这次等待准备好。

这条横幅会为 Claude Code、Codex、OpenCode、Gemini 和 Pi 出现。注册表里的其他智能体都不会以 Happier 能据此行动的形式报告用量上限,所以在那里你看到的就是服务方自己的 CLI 打印出来的内容。

把你自己拥有的订阅组成池,会话就能在它们之间继续下去

池属于某个已连接的服务,而不是某个智能体。已连接的服务是一类凭据 —— 一个 Claude 订阅、一个 Codex 订阅、一个 Anthropic 或 OpenAI 密钥、一个 Gemini 登录 —— 而池是你在其中某一类上的一组自有账号。你运行哪个智能体是另一个选择,在你启动会话时做出。

所以同一个池服务于不止一个智能体。Claude 订阅和 Anthropic 密钥由 Claude Code、OpenCode 和 Pi 使用;Codex 订阅和 OpenAI 密钥由 Codex、OpenCode 和 Pi 使用;Gemini 登录由 Gemini 使用。把你的两个 Claude 账号建成一个池,那天下午不管你打开的是 Claude Code、OpenCode 还是 Pi,它都在那里。

在你建立一个池之前,什么都不会切换,而池是你有意做出来的东西:设置 → 已连接服务,打开这些账号所属的服务,然后 池 → 创建池,给它起个名字,把你想放进去的账号加进来。在它存在之前,每个会话都用你选定的那一个账号,并在那个账号停下时停下。

池一旦存在,对于那些能在运行中的会话内更换账号的服务,它一开始就带着自动回退开启。池上有一个开关 —— “自动回退” —— 关掉它,你得到的就是一个手动切换的池;如果你更愿意每次自己决定,这也是一种合理的用法。

这些默认值是有意不进取的。Happier 会回退到另一个成员,优先选剩余配额最多的那个,每轮最多一次、每个会话小时最多三次,两次之间有三十秒冷却。当服务方说某个上限会在某个时间重置时,Happier 就照它说的办,在那之前不把该账号当作候选。池是为了不因为重新登录而白白搭进去二十分钟;它不是一个轮换服务,而每小时的上限就是为了不让它悄悄变成那种服务。

人们常把这叫作负载均衡。Happier 做的事更窄,在你为第二个订阅付钱之前值得知道:它不会为了让各个账号保持均衡而把工作摊开。只要你当前所在的账号还有余量,就什么都不会挪动。池的存在是为了某一个账号用完的那一刻 —— 产品里把它叫作自动回退,而它就是这个意思。

池如何回退:它挑哪一个账号,以及多久挑一次

新建的池所采用的默认值。它们全都可以按池修改。

设置默认值原因
它挑哪一个账号剩余配额最多的取自最近一次用量快照。另外两种方式是固定的优先级顺序和完全手动。
什么会触发切换用量上限、认证过期、账号变更令牌刷新失败不会触发,因为刷新失败的原因通常换一个账号也解决不了。
预防性切换剩余低于 15%仅当另一个成员有更新鲜的可用配额时。把它设为 0,Happier 就一直等到真正的上限。
每轮切换次数1一轮不能把你整个池走一遍。如果下一个账号也用完了,会话会停下并如实说明。
每个会话小时的切换次数3这是上限,不是目标。
两次切换之间的冷却时间30 秒防止服务方一次反复抖动的响应引出一连串账号变更。
服务方的重置时间遵守如果服务方说某个成员在下午 4 点之前都用完了,那么在下午 4 点之前它就不是候选。

哪些账号可以组池,以及哪些智能体可以使用它们

你可以连接的每个账号占一行。能使用一个池,和能在一轮进行途中更换账号,是两种不同的能力,后者更少见。

你连接的账号可以使用它的智能体会话中途切换配额计量条
Claude 订阅Claude Code、OpenCode、PiClaude Code
Anthropic API 密钥Claude Code、OpenCode、PiClaude CodeNo
Codex 订阅Codex、OpenCode、PiCodex
OpenAI API 密钥Codex、OpenCode、PiCodexNo
GeminiGemini

OpenCode、Pi 和 Gemini 都可以指向一个池化的账号,也可以在它的成员之间移动,但都免不了会话重启 —— 所以对这三个来说,你是在会话开始之前而不是进行途中选择账号。Happier 运行的其他每一个智能体都通过它自己的 CLI 登录,完全不参与这件事。

GitHub 也是一个已连接的账号,而它是不在这里的那一个:没有智能体运行在 GitHub 令牌上。Happier 用它来发布仓库或开拉取请求,所以它既没有池,也没有配额计量条。

你自己的账号,以及你的服务方条款允许什么

账号池是给你自己拥有的账号用的。这个功能的形态是一个人手上有好几个自己的登录 —— 一个个人 Max 订阅和一个工作用的 Claude 席位、一个 Codex 订阅和一个 OpenAI 密钥 —— 在一个地方保持可见、可切换,而不是每次用完就给 CLI 重新做一次认证。

它不是一种让几个人共用一个订阅的办法。服务方的条款 —— Anthropic 的和 OpenAI 的都一样 —— 禁止多人共享同一个订阅,组池并不改变这一点:如果你这样用,你就超出了你的服务方条款,而这不是任何客户端能替你解决的。

我们不是律师,我们不提供任何保证,而且服务方的条款会变。请自己读一遍。如果你的组织和某个服务方有协议,在连接工作账号之前先核对它。

在应用里建一个池,从 CLI 在它上面启动会话

在同一个服务上连接两个账号,建一个池,再确认计量条读得到数。建池是应用里的活 —— 设置 → 已连接服务,选中服务,池 —— 因为没有命令能创建它;happier connect 只是在 shell 里把一个账号登录进来,到此为止。在你已经建好的池上启动会话,则是落在 CLI 里的那一半:happier --auth cs:<id> 接受一个配置档或一个池的 id。当一个配置档和一个池共用同一个 id、短写法分辨不出它们时,还有一种更长的写法 cs:group:<id>。

先要把账号连接起来,这部分有一份配置参考:每个服务方的登录如何工作、哪个智能体可以使用哪种凭据,以及配额快照从哪里来。

自托管的 relay 可以把这个功能关掉,也可以把配额计量条与组池分开关闭。如果你在别人的服务器上,而“池”这个界面不见了,那是服务器给出的答案,而不是 bug。