mrkeyoor.com_
Fri 16 Oct 19:46 UTC
LLM Toolsevaluationupdated 21 Sept 2026

router review

Weave Router is a source-available Go proxy that chooses a model for each request from a coding agent or application. It accepts Anthropic, OpenAI, and Gemini request formats, scores the action locally, and sends it to an enabled provider behind one endpoint.

+11stars / 7d
Verdict

Our Router run installed 325 packages, built in 87 seconds, and passed all 106 Go tests in 49 seconds, which is enough evidence for a controlled trial. Use it when your model mix changes by task and you can evaluate routing quality against fixed-model controls. Keep production traffic behind checks for credential encryption, request translation, client-setting changes, and Elastic License 2.0 terms.

We ran it

Lab card: what happened when we ran routerScreenshot of router (weaveos.com/products/router)
Install✓ · 50s335 packages
Build✓ · 124s
Tests✓ · 126s149 passed · 0 failed of 149 (go test)
Repo2520 files~357,779 lines of source · 34.9 MB · 12 CI workflows · Dockerfile

Answers from our run

Does router build from source?

Dependencies installed in 50 seconds (335 packages), and the build succeeded in 124 seconds. We cloned commit dda8123 into a clean Debian container with 3 CPUs and no project-specific setup.

Do router's tests pass?

Yes: 149 of 149 passed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use router?

Vendors planning to resell the software as a hosted router: Elastic License 2.0 bars a managed service that exposes a substantial set of its features.

What are the alternatives to router?

LiteLLM, Portkey AI Gateway, Helicone. Our Router run installed 325 packages, built in 87 seconds, and passed all 106 Go tests in 49 seconds, which is enough evidence for a controlled trial.

Setup4/5106 tests passed, self-hosting still needs Postgres and secrets
Docs5/5Client, endpoint, routing, secret, and deployment details are specific
Community4/54,596 stars with same-day code and issue activity
Maturity3/5Clean lab run, but no GitHub release and open translation bugs

Discussed on

  1. hnShow HN: Smart model routing directly in Claude, Codex and Cursor216 points
  2. hnShow HN: Optimal model routing directly in Claude, Codex and Cursor4 points

Who it’s for

Teams already paying several model providers and willing to test automatic model choice against their own tasks.
Claude Code, Codex, opencode, or pi users who want one installer to configure a routed endpoint.
Platform engineers who need provider credentials, routing records, spend controls, and OTLP traces in one service.
Self-hosters prepared to run Postgres, encrypt stored provider keys, and compare router accounting with provider invoices.

Who it’s NOT for

Vendors planning to resell the software as a hosted router: Elastic License 2.0 bars a managed service that exposes a substantial set of its features.
Operators who cannot enforce encryption for customer credentials: the configuration guide says BYOK secrets are stored unencrypted when EXTERNAL_KEY_ENCRYPTION_KEY is absent.
Agent workflows that depend on exact tool-schema translation: open issue 1385 reports four fields stripped or ignored on the Anthropic path, including pattern and strict.
Claude Code users who do not want an installer changing attribution settings: issue 1361 reports that a deliberately empty attribution block is overwritten.
Self-hosters expecting the Compose quick start to work unchanged on Docker Desktop: issue 1360 reports provider variables failing to reach the container on macOS.

Setup reality

Our sandbox install succeeded in 46 seconds and added 325 packages. The build succeeded in 87 seconds. Go tests finished in 49 seconds with 106 passed and 0 failed out of 106. The 24.6 MB checkout contained 1,473 files and about 195,742 source lines.

Self-hosting needs Postgres, at least one upstream provider key, a router key, and a dashboard password for administration. BYOK deployments should configure the documented AES-256-GCM keyset. Multi-replica setups also need Pub/Sub for cache invalidation.

The current README asks for Go 1.25 or newer. Hosted installation needs Node 18 or newer, and several client paths need jq. Our measured commit built and passed tests in golang:1.24-bookworm. The optional HMM policy adds a sidecar and Google API key.

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.

Alternatives

ProjectWhat it isPick it when
LiteLLM gh↗A multi-provider gateway with broad API coverage, budgets, logging, and load balancing.pick this instead when provider coverage and gateway administration matter more than Weave's bundled per-action scorer.
Portkey AI GatewayAn AI gateway centered on providers, guardrails, fallbacks, and observability.pick this instead when policy controls and a permissive license matter more than a local automatic model selector.
HeliconeAn open-source gateway and observability stack for tracing and evaluating model calls.pick this instead when request observability and evaluations are the main job, rather than automatic model selection.

What people are saying

  1. [github-trending] router-for-me/CLIProxyAPI
  2. [github-trending] weave-os/router
  3. [github-trending] theagentrouter/agent-router
  4. [theverge] TP-Link’s first Wi-Fi 8 router is almost here
  5. [github-trending] workweave/router
  6. [velocity-scout] remix-run/react-router

Sources

  1. Weave Router README
  2. Router configuration reference
  3. Elastic License 2.0 text in Router
  4. Measured Router commit 092f53d
  5. Issue 1385: tool fields lost in translation
  6. Issue 1361: Claude attribution setting overwritten
  7. Issue 1360: provider environment missing in Compose

More llm tools reviews

IQuest-Q1 · iCode · tokenspeed · Naive-N0.5-Flash · Strata · AnyJev · the whole board →