On this page
Haarness Router
The Haarness Router puts all your model providers behind one endpoint. Your provider keys live on the router, and Haarness only needs the router's address. You can run it yourself or use the managed one in Haarness Cloud.
Connect a router you run
You need a running router; Run the router yourself shows how. Then connect it from any Haarness app.
Desktop: Settings → Providers → Connect Haarness Router. Enter the router address, such as
http://localhost:8080, and connect. The button appears while Desktop uses a Haarness server on
this computer.
Terminal UI: /providers, then Connect Haarness Router, or /connect, then
Haarness Router….
Command line, on the machine that runs the Haarness server:
haarness provider connect-router http://localhost:8080When it works you see the number of models the router offers, for example
Connected router · 12 models available. The models appear in the picker once no turn is
running.
If the address or key is wrong, nothing is saved and you can try again.
Use its models
Router models appear as router/ followed by the router's own model name. Aliases you defined on
the router appear too.
haarness models router
haarness run -m router/openai/gpt-5-nano "Hello"
haarness run -m router/fast "Hello" # an aliasThe list refreshes from the router, so models you add there show up without reconnecting.
A router that needs an access key
A new self-hosted router accepts requests without a key, and its dashboard at /ui has no password.
On anything but your own computer, require a key and
protect the dashboard or turn it off. To require a key, start it like this:
export HAARNESS_ROUTER_KEY="$(openssl rand -hex 32)"
haarness-router --config config.toml --require-keyDesktop and the terminal UI notice that the router requires a key and ask for it after you enter the address. From the command line, pipe the key in:
printf '%s' "$HAARNESS_ROUTER_KEY" \
| haarness provider connect-router https://router.example.com --key-stdinThe key is never accepted as a command-line argument. Haarness stores it in its credential store, not in configuration. The router uses its own key only to let you in; it never passes it on to a provider.
Several routers
Connect as many as you like. The first gets the id router, the next router_2, and so on; use
that id in model names, such as router_2/fast.
Choose Advanced in the connect form, or pass these flags, to set:
| Setting | CLI flag | Effect |
|---|---|---|
| Connection name (optional) | --name "Team router" |
The name shown in pickers |
| Available in | --project |
Only this project, not every project |
On a remote Haarness server
When the terminal UI is attached to a server on another machine, the connection is checked and
saved on that server. localhost then means the server's machine, not yours. If a turn is running,
the router becomes available when it finishes.
Addresses
- Without
http://orhttps://,localhostand127.0.0.1addresses use HTTP and everything else uses HTTPS./v1is added if you leave it out. - A router on another machine must use HTTPS. Haarness only accepts plain HTTP on
localhost,127.0.0.1and[::1]; it skips any otherhttp://router, andhaarness providersprints why. - An address with a user name, password, query or
#part is refused.
Use the managed router in Haarness Cloud
With a Haarness Cloud account you do not need provider accounts or a router of your own. Sign in
with haarness login or Sign in to Haarness in Desktop, then choose Haarness Cloud in the
model picker. Requests are paid with Cloud credits. See
Models and routers.
Your own provider keys in Cloud
A Cloud router set to Your provider keys uses your keys and your provider bills you; it never falls back to Cloud credits. In Routers, choose Provider keys on the router, pick a provider and paste its key. Keys are stored encrypted, never shown again, and shared with everyone who uses that router in your account. Most providers need only an API key; three need more:
| Provider | Needs |
|---|---|
| Amazon Bedrock | A Bedrock API key and its region |
| Azure OpenAI | Your Azure resource name and an API key |
| Google Vertex AI | Your Google Cloud project, location and an OAuth access token |
Vertex access tokens expire; replace the token when it does. Models are discovered with your key.
If one is missing, for example a custom Azure deployment, add it under
Advanced model settings → Additional model IDs and call it as provider/model-id.