Files
Peter Steinberger f89fa78584 feat(radius): connect models with browser sign-in and native streaming (#145377)
* refactor(channels): simplify progress rendering ownership

Keep visibility in the compositor and remove redundant mode flags from internal layout helpers. Separate Slack attention-title formatting from native approval task identity construction, avoiding discarded hashes and task objects in Block Kit rendering.

Preserve public SDK and output contracts. Remove one duplicate test left after native start/update builder unification. Related: #145345, #140037.

* fix(ui): let the popover own initial picker focus

WebAwesome already focuses the autofocus input before the opening animation. Remove the duplicate after-show focus that stole focus from a newly opened cloud configuration card. Replace the handler-only unit expectation with a deterministic browser regression that controls the actual animation and preserves initial focus, cloud focus, and machine selection.

* feat(radius): add native model provider and browser sign-in

Support Radius organization API keys and device OAuth, discover account-visible models and tiered prices, and stream native Pi messages through the provider plugin contract. Add setup docs and meaningful auth, catalog, and tool-stream coverage. Regenerate the standard plugin config inventory for the new provider.

* refactor(radius): satisfy provider validation guards

Require captured OAuth and model requests in strict test types. Project optional stream fields directly while preserving validation of supplied values. Focused tests and independent review pass.

* fix(radius): accept live fractional OAuth polling intervals

Radius device authorization advertises interval=0.1 seconds. Accept finite positive fractional intervals and round milliseconds upward; retain expiry and timer bounds. The regression failed against the original parser and all 20 OAuth tests now pass. Live pairing reaches browser authorization.

* fix(radius): publish native model routes and resolve cold starts

Declare pi-messages in the shared API data contract and emit it from authenticated Radius catalogs before registry validation. Resolve cold-start models through the existing provider hook using the same account catalog and pinned auth profile. Remove late normalization hooks and cover real registry deserialization, schema admission, and account-scoped resolution. Live authorization and catalog discovery pass; inference reaches Radius and reports the account billing gate.

* build(radius): integrate plugin publication and documentation metadata

Document the plugin package, exclude its external dist tree from the core npm package, and update extension label routing and the exact release inventory. Regenerate the plugin inventory/reference pages and brand glossary entries. Publication/build-selection and labeler coverage tests pass.
2026-09-11 19:29:25 -07:00

3.2 KiB

summary, read_when, title
summary read_when title
Connect OpenClaw to Radius with browser sign-in or an organization API key
You want to use Radius models in OpenClaw
You need Radius authentication or model discovery help
Radius

Radius is Earendil's model gateway for Pi-compatible clients. The radius plugin connects OpenClaw's agent loop to Radius, including streamed responses, reasoning, images on supported models, and tool calls. Radius owns upstream routing, model policies, rewrites, and billing.

Sign in

Create a Radius account on the Radius website, then sign in from OpenClaw:

openclaw models auth login --provider radius --method oauth --set-default

OpenClaw displays a pairing code and opens the Radius verification page. Enter the code, choose your organization, and authorize access. This device flow also works on a remote Gateway: open the displayed URL in your local browser. OpenClaw stores the OAuth credentials in its auth profiles and refreshes them automatically. Signing in to Pi separately does not sign OpenClaw in.

You can also select Radius during onboarding:

openclaw onboard --auth-choice radius

Organization API key

Create an API key from your organization's API keys page in Radius, then use the interactive prompt:

openclaw models auth login --provider radius --method api-key --set-default

For unattended setup, supply RADIUS_API_KEY through your environment or secret manager and run:

openclaw onboard --auth-choice radius-api-key

Both authentication methods use the selected organization's credits, budgets, and model access. An expired or revoked API key needs replacement; OAuth refresh does not extend an API key's lifetime.

Choose a model

openclaw models list --provider radius --refresh
openclaw models set radius/balanced

OpenClaw discovers the catalog from Radius using your credential. This includes organization models, reasoning capabilities, context limits, and pricing tiers. Sign-in recommends radius/balanced when available, otherwise the first model in your organization's catalog. Use a model ID shown by models list; available models and virtual routes can change.

Radius uses its native Pi message protocol at https://radius.pi.dev/v1. The plugin selects that transport automatically. Do not configure Radius as an OpenAI-compatible /chat/completions endpoint.

Scope and troubleshooting

This plugin provides model access. Radius's optional Pi extension packages, including their /radius commands, web search, artifacts, and Google Workspace tools, are separate integrations and are not installed by this plugin. Organization-side routing and rewrite policies still apply to model requests.

If sign-in expires, start it again and enter the new pairing code. If model discovery rejects authentication, sign in again or replace the organization API key. If no models are available, check the organization's model access and budgets in Radius. A broken or truncated response is reported as an error rather than a successful empty reply.

See Radius documentation, Radius models, and model authentication.