Subscription pooling
RouteKit pools named subscriptions behind live provider catalogs.
Subscription accounts and single-model routing are RouteKit responsibilities. FusionKit v4 references live namespaced model IDs but does not expose account commands.
Install the independent CLI and enroll a supported subscription:
npm install -g @velum-labs/routekit
routekit config init
routekit accounts login claude-code --name personal
routekit accounts login codex --name work
routekit accounts status
routekit models list
routekit startThe first-launch subscription kinds are claude-code and codex.
accounts login <kind> runs the official CLI OAuth flow, enrolls the
credential, enables the matching provider, and verifies live model discovery.
Pass --no-browser on a headless host to prefer a device-code or copyable-URL
flow you can finish from a browser on another device.
For claude-code and codex, RouteKit runs the official provider login in
private temporary state, imports the credential, and never replaces the user's
normal CLI login; use accounts add only to import the current official CLI
login. The Claude Code tool command remains routekit claude [provider/model].
Rename a native account label without another OAuth login:
routekit accounts rename codex work personalThe command supports claude-code and codex, rejects missing sources and
existing targets, and migrates quota/cooldown state with the credential in one
recoverable daemon transaction. Account lists, status, usage, doctor, and pool
routing use the new label after the router generation is replaced.
API-key providers such as openai, anthropic, and openrouter use one
unlabeled, registry-defined environment variable such as OPENAI_API_KEY.
RouteKit does not currently have named API credential slots, so API keys cannot
be listed or renamed independently of provider configuration. Replace the
environment variable and restart RouteKit to change an API credential;
accounts rename is only for enrolled subscriptions.
Pool policy lives on the provider:
providers:
claude-code:
strategy: capacity_weighted
switchThreshold: 0.9RouteKit discovers each healthy account, publishes the union, and routes a
model only to members that advertise it. Quota windows, refresh, cooldowns, and
reset times remain independent per account. Use the advertised namespaced ID
in .fusionkit/fusion.json:
A provider can stop honoring an access token while the token's own expiry claim
still looks valid, so RouteKit does not rely on that claim alone. A rejected
discovery, or a 401 or 403 on a served request, spends one OAuth refresh for
that account, rate limited to one every five minutes, and retries before the
rejection is believed. If discovery still fails the member keeps its last known
model list instead of dropping out of rotation, so an upstream blip degrades a
pool rather than emptying it. routekit accounts status shows the live
per-account view.
Capability conflicts are deterministic. Explicit reasoningCapabilities
configuration wins first. Otherwise, native pools use the first successfully
discovered account in configured order that reports reasoning metadata for the
model. Directory-backed accounts are ordered by account filename; explicit
paths retain caller order. Failed accounts and accounts without that metadata
are skipped.
Anthropic model discovery supplies nested capabilities.effort and
capabilities.thinking metadata. RouteKit projects only levels explicitly
marked supported into Codex's effort picker; it does not invent a default or
offer levels omitted by the provider. Explicit router overrides still take
precedence over discovered metadata.
{
"version": "fusionkit.fusion.v4",
"router": { "config": ".routekit/router.yaml" },
"ensembles": {
"default": {
"members": [
"claude-code/claude-sonnet-4-5",
"openrouter/qwen/qwen3-coder"
],
"judge": "claude-code/claude-sonnet-4-5"
}
}
}fusionkit doctor checks that all referenced namespaced model IDs are
advertised by RouteKit.
Inside the matching native picker, RouteKit shortens only that provider's
subscription models: Claude Code shows
claude-code/claude-sonnet-4-6 as claude-sonnet-4-6, while Codex shows
codex/gpt-5.5 as gpt-5.5. The alias resolves back to the namespaced catalog
entry and uses the same managed account pool over the provider-native protocol.
Models from other providers stay source-qualified, and Fusion/configuration
surfaces remain strictly namespaced.
Inspect current limits at any time with routekit usage (or
routekit usage --watch 10). It reads live pools from the normal RouteKit
gateway when one is running and otherwise checks enrolled accounts directly.
fusionkit stop never stops an external RouteKit daemon. An embedded RouteKit
router composed by FusionKit is process-owned and closes with the Fusion stack.