Cmd+, / Ctrl+,).
Quick Setup
- Open Settings (
Cmd+,/Ctrl+,) - Navigate to Providers
- Expand any provider and enter your API key
- Start using models from that provider
Supported Providers
Environment Variables
Providers also read from environment variables as fallback:Advanced: Manual Configuration
For advanced options not exposed in the UI, edit~/.xum/providers.jsonc directly:
OpenAI wire format
The built-inopenai provider supports two wire formats:
Set the format in Settings → Providers → OpenAI → Wire format, or in
~/.xum/providers.jsonc:
openai baseUrl without a path gains /v1 automatically;
add a trailing slash to keep requests at the origin root.
For llama.cpp, vLLM, LM Studio, and multiple local endpoints, prefer named custom
providerType: "openai-compatible" providers instead of changing the built-in OpenAI provider.
Custom providers
Custom providers let you keep the built-inopenai and anthropic providers for their official
APIs while adding named local endpoints, remote gateways, or proxies. Each custom provider selects
the API format that its endpoint accepts.
Add each endpoint as a top-level provider in ~/.xum/providers.jsonc:
openai-compatible, so existing custom
provider setups continue to use Chat Completions.
Base URL normalization depends on the selected format:
openai-compatibleandopenai-responses: an origin-only URL such ashttp://localhost:8080gains/v1. Explicit paths remain unchanged. A trailing slash, such ashttp://localhost:8080/, keeps requests at the origin root.anthropic-messages: trailing slashes are removed and/v1is appended unless the URL already ends in/v1. For example,https://gateway.example/anthropicbecomeshttps://gateway.example/anthropic/v1.
apiKey or apiKeyFile instead of query parameters.
To configure a single OpenAI-shaped gateway through the built-in openai provider instead, see
OpenAI wire format.
Provider IDs must use lowercase letters, digits, _, and -, and must start with a letter or digit. They must not collide with
built-in provider names, and cannot contain ., :, /, or whitespace. Good examples are
local-vllm, llama-cpp, and lm-studio.
llama.cpp
vLLM
LM Studio
baseUrlis resolved from the Xum backend process. In desktop mode, this is your local machine. In server mode, the endpoint must be reachable from the server.- Most compatible servers require the
/v1suffix in the URL. Use the normalization rules above when a gateway mounts its API under another path. - Keep the official providers for provider-specific account features such as Codex OAuth and OpenAI service tiers. Custom providers select the request format but do not inherit those features.
- Custom providers are direct-only and do not participate in gateway routing.
- You no longer need to set a fake
apiKeyto point Xum at a keyless local server.
Coder (Login with Coder)
The Coder provider routes requests through a Coder deployment’s AI Gateway (/api/v2/aibridge), so usage is authenticated, governed, and audited by the
deployment instead of a personal API key.
Deployment prerequisites (admin-side):
- The OAuth2 provider experiment: start
coderdwith--experiments=oauth2(orCODER_EXPERIMENTS=oauth2) - AI Gateway entitlement and
--aibridge-enabled, with at least one provider configured
- Open Settings → Providers → Coder
- Set the Deployment URL (e.g.
https://coder.example.com) - Click Login with Coder and approve the request in your browser
~/.xum/providers.jsonc. Tokens refresh automatically; Disconnect revokes and clears
them.
After login, Xum discovers the deployment’s configured AI Gateway providers and their model
catalogs, listing models as coder:<provider>/<model> (e.g. coder:anthropic/<model>,
coder:my-openai/<model>). Each provider’s type (anthropic, openai, bedrock,
openai-compat, …) decides the wire protocol Xum speaks to its gateway route. Use the
Refresh models button (or the “Settings: Refresh Coder Models” command) to re-discover
without a re-login. You can also add model IDs manually under the provider’s model list;
manual edits are preserved across re-logins and catalog refreshes: added entries stay
listed, and removed catalog entries stay removed.
Listing the deployment’s providers requires an admin-level API on some deployments; when it
is unavailable Xum probes the default provider names instead. If your deployment uses
custom-named provider instances that Xum cannot discover, declare them by hand in
~/.xum/providers.jsonc:
Bedrock Authentication
Bedrock supports multiple authentication methods (tried in order):- Bearer Token - Single API key via
bearerTokenconfig orAWS_BEARER_TOKEN_BEDROCKenv var - Explicit Credentials -
accessKeyId+secretAccessKeyin config - AWS Credential Chain - Automatic resolution from environment,
~/.aws/credentials, SSO, EC2/ECS roles
aws sso login), Xum uses those credentials automatically.
OpenRouter Provider Routing
Control which infrastructure providers handle your requests:order: Priority list of providers (e.g.,["Cerebras", "Fireworks"])allow_fallbacks: Whether to try other providers if preferred ones are unavailableonly/ignore: Restrict or exclude specific providersdata_collection:"allow"or"deny"for training data policies
xAI Search Orchestration
Grok models support live web search. Xum enables this by default withmode: "auto". Customize via searchParameters for regional focus, time filters, or to disable search.
Model Parameter Overrides
Set per-model defaults for parameters like temperature, token limits, and sampling by adding amodelParameters section under any provider:
Supported parameters
Any unrecognized key is passed through as a provider-specific option (for example, OpenRouter routing hints).
Resolution order
When multiple entries could match, the first match wins (no merging across tiers):- Effective model ID - a dated snapshot like
claude-sonnet-4-5-20250929 - Canonical model ID - the model you selected, e.g.
claude-sonnet-4-5 - Wildcard
"*"- catch-all for that provider
"claude-sonnet-4-5" and "*" with different temperatures,
requesting claude-sonnet-4-5 uses the specific entry - the wildcard is not merged in.
Priority with other settings
Formax_output_tokens specifically, the priority chain is:
- Explicit per-message override (from thinking level or UI)
modelParametersconfig value- Model’s built-in default