fusionkit
Guides

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 start

The 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 personal

The 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.9

RouteKit 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.