Route Claude Code through Account Pool with per-machine tokens - #3042
Draft
SawyerHood wants to merge 4 commits into
Draft
Route Claude Code through Account Pool with per-machine tokens#3042SawyerHood wants to merge 4 commits into
SawyerHood wants to merge 4 commits into
Conversation
SawyerHood
pushed a commit
that referenced
this pull request
Sep 4, 2026
The ratchet keeps provider ids out of core, and only plugins/provider-* were excluded. Account Pool proxies one named provider's traffic, so it is provider-side code and must name claude-code; CI on #3042 failed the ratchet for its two plugin files. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The ratchet keeps provider ids out of core, and only plugins/provider-* were excluded. Account Pool proxies one named provider's traffic, so it is provider-side code and must name claude-code; CI on #3042 failed the ratchet for its two plugin files. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
SawyerHood
force-pushed
the
bb/account-pool-env
branch
from
September 4, 2026 02:53
17a36d8 to
cbbe36d
Compare
Collaborator
Author
|
CI for this head ran via manual dispatch after the restack (the pull_request trigger did not fire): https://github.com/get-bb/bb/actions/runs/33832575481 — all jobs passed.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stack layer 3 of 3 (top). Prerequisites: #3035 (provider env contribution hook) and #3036 (Account Pool hub) below it in this stack.
Human comments
What was wrong
The Account Pool hub existed, but Claude Code sessions were not routed to it
automatically: the plugin still exposed one global bearer key, had no
per-thread bypass, and could not replace an unauthenticated machine's local
Claude health with the readiness supplied by an enabled pool account. This is
the BB-90 stack layer on
bb/account-pool-hubandbb/provider-env-contribution.What changed
exact server-relative hub route and a secret bearer token minted lazily per
machine. The resolver contributes nothing when no account is enabled or the
thread is bypassed.
into a single-process cache, constant-time bearer matching across every
current and grace token, serialized mint/use/rotation updates, a ten-minute
rotation grace window, and removal of the obsolete global key file. Last-use
persistence is throttled to once per machine per minute, expired grace tokens
are pruned with the next write, and status never returns token values.
bb pool token rotate --machine <id-or-name>andbb pool bypass <thread-id> [--off], with matching plugin RPC operations anddiscoverability updates in the CLI skill, generated guide source, and
configuration docs.
visible in
bb pool status, including proxied hosts that are relying on thepool, plus a plugin warning log when a disable leaves those threads on hosts
without usable local Claude credentials. The dispose-time inspection is
guarded against failures and bounded to two seconds.
bb.providers.experimental_contributeEnvHealth, with fake-host support,Plugin Guide documentation, API audit notes, API map inventory, and SDK
version 0.4.45. The server presents an
unauthenticatedorexpiredClaudeprovider as ready/
Proxiedonly when the same live plugin also has an envresolver and the Account Pool has an enabled account.
does not change the server-to-daemon wire, so it does not bump
HOST_DAEMON_PROTOCOL_VERSION.Not in this PR
action.
bb.sdk.threads.sendwould create a real provider turn, so this PRdoes not fake the requested disable-time thread notice or bypass action. The
safety gap is instead explicit in
bb pool statusand the disable log.discards the previous attachment before it can emit the same cosmetic
rebuild warning used by an in-place bypass change. In e2e thread
thr_stxrb938ec, the freshprovider.env-resolvedevent without poolentries and the successful
LOCAL AGAINresponse demonstrate the actualdisable behavior. The bypass path in that thread does retain the attachment
and emits the expected rebuild warning.
multi-machine path is verified by the daemon-side runtime test that expands
serverPathagainst its loopback machine-auth URL, plus a live 200 responsefrom the dev hub's
HEAD /api/hello; this does not claim a live remotethread.
How you verified
per-host contributions and secret masking, distinct machine tokens, bypass
through CLI and RPC, token rotation and grace expiry, the single-process
cache and last-use write throttle, secret-free status, proxied and
unauthenticated routed-host warnings, bounded/failure-safe disable logging,
and the existing authenticated streaming/drain paths. These behaviors had no
implementation before this change; all 16 tests pass.
an adjacent env resolver and marks only credential-blocked provider health
ready when a contribution is active.
pnpm exec turbo run typecheck --filter=@get-bb/plugin-sdk --filter=@bb/server --filter=@bb/plugin-api-map --filter=bb-plugin-account-pool --continue— 9 tasks passed.pnpm exec turbo run test --filter=@get-bb/plugin-sdk --filter=@bb/server --filter=@bb/plugin-api-map --filter=bb-plugin-account-pool --continue --force— 11 tasks passed; Account Pool 13 tests, SDK 22 files, API map 11 files, and server 227 files / 2205 tests.pnpm exec turbo run typecheck test --filter=bb-plugin-account-pool --filter=@bb/server --filter=@get-bb/plugin-sdk --continue --force— 13 tasks passed; Account Pool 16 tests, SDK 22 files, and server 227 files / 2205 tests.pnpm exec turbo run typecheck test --filter=@bb/agent-runtime --continue --force— typecheck passed and 22 files / 319 tests passed, including loopbackserverPathexpansion and secret event masking.node .github/workflows/check-plugin-sdk-version.mjs— passed with the SDK surface change and version bump.git diff --check origin/bb/account-pool-hub...HEAD— passed.thr_stxrb938ecreturnedPOOL OKthrough the hub with an expanded loopback URL and masked token inprovider.env-resolved; quota utilization moved from unknown to 28%/34%.Bypass returned
DIRECT OKwith no pool env and the rebuild warning. Plugindisable returned
LOCAL AGAINusing local credentials with no pool env, andthe plugin was re-enabled. Per-machine token rotation also completed, and a
live hub hello request returned HTTP 200. BB-90 has the reduced JSON evidence
and both rendered UI screenshots attached.
Part of #1552
Task: BB-90