It makes 1 routing decision for each upstream action
Weave Router sits between an agent and its model providers, choosing where each upstream API request goes. The project calls that request an action, which may be one piece of a longer agent turn. It accepts 3 request families: Anthropic Messages, OpenAI Chat Completions, and Gemini. Clients keep one endpoint while the selected model changes underneath them.
The default policy uses an in-process ONNX embedder and cluster scorer. Users can also force or exclude models. The measured checkout had 1,473 files and about 195,742 source lines, so diagnosing a bad choice means tracing a substantial system rather than one selection function.
Self-hosting means Postgres, provider keys, and port 8080
The local setup starts Router and Postgres on port 8080 and creates a separate rk_ client credential. At least one upstream provider key is still required because requests ultimately go to a model vendor. A dashboard password enables administration. Without it, the guide says inference remains available while dashboard login is disabled.
Our measured checkout was 24.6 MB and included a Dockerfile, a Compose file, and 8 CI workflows. Multi-replica deployments need Pub/Sub for cache invalidation. The optional HMM strategy adds a companion service and Google API key. The hosted installer is lighter to operate, but it modifies the selected client's configuration.
What happened when we ran it
Our sandbox installed 325 packages in 46 seconds and built commit 092f53d in 87 seconds. We used an unprivileged Debian container with 3 CPUs, 8 GB of RAM, no secrets, and the golang:1.24-bookworm image. Installation and compilation both succeeded. The current README asks for Go 1.25 or newer, so our result describes the measured commit and image rather than every later checkout.
The Go test step finished in 49 seconds with 106 passed and 0 failed out of 106. Our scan found no tests directory, although package-level Go tests ran. The clean result establishes that the available suite passed in our sandbox. It says nothing about route quality, live provider compatibility, or the advertised savings because the container had no provider secrets and made no paid model calls.
Open issue 1385 shows 4 tool fields lost in translation
Issue 1385 reports that the Anthropic path drops a regex pattern, ignores function.strict, loses the control that disables parallel tools, and does not recognize an allowed_tools selector. The report includes a request and forwarded payload. An agent can receive a valid response while operating under a weaker tool contract than its caller supplied.
Passing 106 tests does not cancel that report. Translation bugs may miss the exact schema your agent sends. Before rollout, replay representative tool definitions through the proxy and inspect the upstream payload. Workflows that depend on constrained strings, strict functions, or limited tool subsets need those cases in their own regression suite.
One missing encryption setting leaves BYOK secrets in plaintext
The configuration guide says provider keys are stored unencrypted in Postgres when EXTERNAL_KEY_ENCRYPTION_KEY is unset. The process logs a warning but continues. The setting expects a Tink AES-256-GCM keyset. A deployment holding real credentials should fail its own configuration check when that value is missing, because a warning is easy to overlook.
Our sandbox had no secrets, so its 87-second build and 49-second test run did not exercise credential storage. It also did not test Postgres permissions, backups, key rotation, or restore behavior. Those are operator responsibilities around the service. The security boundary includes database access and telemetry settings as well as the router process.
Issue 1361 says the installer rewrites Claude attribution
Open issue 1361 reports that the Claude Code installer replaces a deliberately empty attribution block in ~/.claude/settings.json. In the reproduction, the new values ask Claude Code to credit Weave Router in generated commits and pull requests, while sessionUrl: false disappears. Teams should diff client configuration before and after installation.
The 46-second sandbox installation measured the Go repository path, not the hosted npm setup or its file edits. Codex gets a managed provider block and Router skills. Claude Code gets commands and status integration. Try the installer under a disposable user profile first, then record exactly which files it changes.
Elastic License 2.0 rules out a competing hosted service
Router's source is visible and modifiable under Elastic License 2.0. The license permits use, copying, distribution, and derivative works under its terms, but bars a hosted service that gives third parties access to a substantial set of Router's features. It also requires recipients to receive the terms and modified copies to carry prominent notices. A company selling an AI gateway needs legal review.
GitHub's API showed 4,596 stars, 128 combined issues and pull requests, and a last push on September 21, 2026. The latest-release endpoint returned no GitHub Release. Recent reports cover translation, installer behavior, and a Compose environment problem, while the same-day push shows continued work. Pin a commit or image because operators have no release tag to follow.
The 106-of-106 result earns a pilot, not trust by default
The 106 passing tests and successful 87-second build make Weave Router straightforward to investigate. Approval needs a second body of evidence: route quality on your tasks, agreement with provider invoices, faithful request translation, encrypted keys, and acceptable client-file changes. Those checks turn the model-selection claim into a decision rather than a hunch.
If one provider and model already handle your workload, 325 installed packages plus Postgres add machinery without solving a demonstrated problem. If your agents alternate between routine actions and work needing a stronger model, Router gives you a serious way to test per-action selection. Keep a fixed-model control beside it, because a lower bill only matters when task completion holds up.

