The router chooses a model for every upstream request
Weave Router sits between an agent and the model providers it may call. It accepts Anthropic Messages, OpenAI Chat Completions, and Gemini requests, then selects a model and provider for each action. In the project's terminology, an action is one upstream API request, which may be only one step inside a longer agent turn. This finer grain lets a cheap model handle routine steps while another handles work the scorer classifies differently.
The default selector is an in-process ONNX embedder and cluster scorer. An optional HMM policy runs as a companion service, but make up-hmm and a Google API key are needed to use it locally. Clients may force a model, disable routing, or restrict the enabled catalog. Those controls matter because the router is making a quality and cost decision repeatedly, not choosing one model for an entire 20-message session.
Claude Code and Codex need configuration changes, not rewrites
The npm installer knows how to configure Claude Code, Codex, opencode, and pi. Applications can instead point an existing Anthropic, OpenAI, or Gemini client at the proxy. Native endpoints cover messages, chat completions, Gemini generation, token counting, model lists, and a route-only request that returns the decision without calling a provider. That last endpoint is useful for examining policy behavior before paying for completions.
The installer requires Node 18 or newer, and several client paths also require jq. Codex receives a managed provider block plus native skills for forcing a model and sending feedback. Claude Code gets slash commands and a status line. Cursor is labeled early beta in the README, with a warning that performance may be weaker, so Cursor-heavy teams should treat compatibility as an experiment rather than assume parity.
What happened when we ran it
Our sandbox installed 325 packages in 46 seconds and built commit 092f53d in 87 seconds. The checkout held 1,473 files, about 195,742 source lines, and 24.6 MB before installation. It includes a Dockerfile, compose file, and 8 CI workflows. Those are good repository mechanics for a gateway that touches credentials and rewrites requests across provider APIs.
The Go test step completed in 49 seconds. All 106 tests passed, with 0 failures out of 106. This was a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, no secrets, and the supplied golang:1.24-bookworm image. The run did not call Anthropic, OpenAI, Gemini, or OpenRouter, so it proves the measured build and test path, not routing quality or provider compatibility under live traffic.
Self-hosting keeps the scorer local but still calls providers
The local Compose path starts the router, Postgres, dashboard, and scorer. Prompts travel from that router to the configured upstream provider, while the README says they do not pass through WorkWeave. One OpenRouter key is the recommended baseline, although direct Anthropic, OpenAI, Gemini, and compatible gateways are configurable. A router key authenticates clients separately from those upstream keys, and confusing the 2 credential types will produce a broken or unsafe setup.
Production configuration needs more care than make full-setup. Postgres holds installations, router keys, encrypted provider keys, and usage records. Multi-replica deployments need Pub/Sub for cache invalidation. The dashboard password defaults to admin, with a startup warning, and BYOK values remain unencrypted if EXTERNAL_KEY_ENCRYPTION_KEY is absent. Content capture for telemetry is off by default; enabling it changes the privacy review because prompts and outputs can enter OTLP logs.
Elastic License 2.0 blocks a competing hosted service
The source is available, but the license is not Apache, MIT, or another permissive choice. Elastic License 2.0 permits use, copying, distribution, and modification under stated conditions. It forbids providing third parties a hosted or managed service that exposes a substantial set of the software's features. An internal gateway is a different case from reselling Router as part of your own public AI platform, and the latter needs legal review.
GitHub's API reported no latest release for the repository. That absence is not evidence that development stopped: the last push was August 28, 2026, and current pull requests were changing provider translation, billing, client savings, and routing controls. GitHub listed 2,232 stars and 135 combined issues and pull requests. The code is moving quickly, so pinning a commit or image matters even without a formal release tag.
The savings display needs billing-data verification
Open issue 1003 identifies a concrete accounting mismatch. Generated client artifacts apply a fixed cache-read multiplier of 0.1, while the server catalog holds different multipliers for 17 of 69 models. The report says this can understate or overstate displayed savings depending on the route. An open pull request in the recent activity aims to use catalog multipliers, but a pending change is not a shipped guarantee.
That issue does not show that model selection or provider billing is wrong. It shows that the user-facing comparison can drift from the catalog, which is enough to change an adoption plan. Export routing decisions, compare provider invoices, and calculate savings outside the status line during a pilot. If the proxy improves spend without hurting task completion, it earns a place; if you only need one provider and one model, it adds 1 more service to debug.

