Providers
Where keys live
Every agent model call, including Bedrock and per-agent endpoints, goes through the LLM Gateway. The key comes from the first of:
To set an install key:
--reset-then-reuse-valuesneeds Helm 3.14 or later. It keeps your values and applies the chart’s defaults for the rest.- The LLM Gateway is always on self-hosted, so every provider your agents use needs a key in place 2 or 3. Otherwise the call is refused with a message naming the missing key.
- A key named by an environment variable on agent-controller (custom provider, agent or organization default model) never reads the install’s own credentials. A name on the reserved list reads as no key (reserved key names).
- Pods restart on their own when a secret changes. The
xpander-staticsecret has a Helm keep policy: if a key is not picked up after an upgrade, patch the secret and restartxpander-agent-worker. Full mapping: Hybrid: managing LLM API keys.

Use your own key on a built-in provider: the API key, its name and an optional description. Shown with sample data.
Credits against your own keys
Calls on keys xpander provides are charged in credits. Calls on a key you brought, agent or organization level, never are. Hybrid agents never use xpander’s keys: every provider needs a key in the organization or on the install (secrets.static), and Claude Code on Bedrock needs your own Bedrock auth. See Licenses and who pays.
Provider setup on a self-hosted install
Claude Code speaks to Anthropic, Codex to OpenAI, and OpenCode to any<provider>/<model> slot the proxy routes. Credentials live only on the Agent Controller.
Anthropic direct
Put an Anthropic API key on the controller. It egresses toapi.anthropic.com. To use your own gateway, set LLM_PROXY_ANTHROPIC_BASE_URL.
Anthropic on Amazon Bedrock
Claude Code runs Anthropic models on Bedrock through the proxy’samazon_bedrock leg. The controller resolves AWS auth in this order, and no executor sees it:
Bedrock in a Hybrid deployment needs your own credentials: a Bedrock key or role under Platform > AI governance > Models, or the cluster’s own AWS identity. The account also needs the opt-in above. To use an IAM role instead of a key, see Amazon Bedrock with an IAM role.
The keyless methods apply to the proxy on the Agent Controller. The
agent-worker service has its own constraint on keyless Bedrock: see Amazon Bedrock: key vs IAM.Add a custom provider
Register any OpenAI-compatible endpoint (vLLM, Ollama, NVIDIA NIM) once under Platform > AI governance > Models > Add provider. Same steps: Custom endpoints.1
Name it
Enter a Name. The ID (used in API calls) is derived from it and fixed once added.
2
Set the protocol and address
Protocol: OpenAI-compatible. Base URL: the address as the pods reach it, for example
http://vllm.<namespace>.svc.cluster.local:8000/v1.3
Choose the API key
No key (local or unauthenticated server), Use an existing key, or Create a new key.
4
Test and add models
Test connection reports Reachable and lists the endpoint’s models. A model that accepts function calls carries a
tools badge. Add the models agents may use, then Add provider.5
Choose the organization's models
In the provider’s Keys and models…, tick the models the organization may use. Prices are optional (Edit model > Price per 1M tokens (USD, optional)). They track spend only and are never charged. A model with no price reads as zero spend.

Add provider: name and ID, protocol, base URL, the API key choice, and Test connection under Models. Shown with sample data.
Use a custom provider
POST /v1/agentsaccepts only built-in providers inmodel_provider. A custom ID gets422.- Pick a custom provider per conversation in the composer’s Harness and model popover (Claude Code, Codex, OpenCode).
- Agent readiness in Keys and models… shows whether a harness works with the model, from the last Test model run.
- A local model needs a context window well above the prompt xpander composes. Worked example: Air-Gapped: a worked vLLM setup.
- With no
/responsesroute on the endpoint, the gateway sends Codex calls as chat completions.
Which harness and model a new agent gets
A create that names a runtime, provider, model or harness settings is honored as written. Otherwise it is defaulted, the same way on cloud, Hybrid and Air-Gapped:-
The organization’s default LLM picks the CLI:
No default, or a provider no CLI runs, falls through.
-
The install’s default knobs (env on the
agentsandagent-controllerservices, the chart values below on Air-Gapped). -
The baked defaults: Claude Code on Anthropic direct with Fable 5.1 (
claude-fable-5-1), Codex ongpt-6-astra, OpenCode onanthropic/claude-opus-5.
Claude Code on Bedrock on Air-Gapped needs both harness defaults:
global.harness.defaultProviders.claudeCode: amazon_bedrock and global.harness.defaultModels.claudeCode: <Bedrock model id>. Without them, the first turn fails with 503 no anthropic credential configured for harness agents, even when the organization’s default model is on Bedrock.
Model access per group
Who may use it… under Platform > AI governance > Models sets each group’s models. A model outside the group’s list is hidden from the picker, and a run that names it is refused.
Who may use it on a provider: the organization, then each group, with the models each may use. Shown with sample data.
Next steps
Connect Bedrock with an IAM role
No long-lived keys.
Add a custom endpoint
An OpenAI-compatible runtime.
See who pays for a call
Credits and your own keys.

