One local endpoint can simplify several coding agents
Claude Code Router, or CCR, runs a model gateway on 127.0.0.1:3456 and gives coding agents a stable endpoint while providers change behind it. The desktop or browser UI manages provider keys, model catalogs, agent profiles, routing conditions, retries, and ordered fallbacks. Logs record the resolved route, credential, status, latency, token usage, estimated cost, tool calls, and agent traces.
Claude Code, Claude Design, Codex, Grok CLI, Kimi CLI, Kilo Code, OpenCode, Pi, ZCode, and WorkBuddy are documented. Provider adapters cover Anthropic, OpenAI Chat and Responses, Gemini, OpenRouter, DeepSeek, Kimi, Mistral, Z.AI, Bailian, and custom compatible endpoints. This is useful when a developer genuinely switches among several combinations. It is unnecessary machinery for one client and one API key.
Routing adds resilience and translation risk
CCR can choose models from request headers and bodies, rewrite requests, rotate credentials, retry, and fall back through an ordered list. Separate client keys can expire and carry request, token, or image limits. Fusion features add vision, web search, and MCP tools to model routes, while ToolHub and gateway plugins extend the local service. These controls turn a proxy into a policy layer.
Every protocol adapter is also a place where meaning can change. Open issue 1678 reports that version 3.0.21 silently dropped Anthropic image blocks when translating them to an OpenAI chat-completions provider. Text still arrived, the request returned HTTP 200, and the model behaved as if no image existed. Release 3.0.22 mentions repair of Fusion vision inputs, but the report remained open during our research. Test image, tool, reasoning, streaming, and error cases on the exact route you use.
What happened when we ran it
Our sandbox cloned commit 829298c and installed 1,892 npm packages in 26 seconds. Dependencies occupied 493 MB, while the full checkout was 49.2 MB across 788 files and roughly 227,949 source lines. npm audit reported 0 known vulnerabilities at critical, high, moderate, or low severity. The container had 3 CPUs, 8 GB of RAM, and no secrets.
The build failed with exit 1 after 32 seconds. Electron's Linux files had extracted, dependency scanning ran, and the log reached AppImage creation and embedded block-map work. It then reported that no GitHub Personal Access Token was set programmatically or through GH_TOKEN. Warnings also mentioned duplicate dependency references, a missing desktop name, and a default Linux application category, but the explicit terminal error was the missing token. We do not assign another cause.
The test command failed with exit 1 after 216 seconds. The node:test summary supplied by the lab says 5 passed, 0 failed, out of 5. The final log lines show successful cases numbered 172 through 183, including token formatting, request-log summaries, Fusion profile saves, and media-model bindings. Because that tail contains no failing assertion or wrapper error, it does not explain the nonzero outer exit. The honest result is a failed command with passing reported cases and an unresolved exit source.
The repository has 3 CI workflow files, a Dockerfile, a Compose file, a tests directory, and monorepo workspaces. Our failed release-oriented build does not mean the published desktop binaries cannot run. It means contributors should not expect that target to finish in a secret-free sandbox, and the build script could separate local packaging from GitHub publication more clearly.
Three installation paths serve different owners
The README recommends the desktop app for macOS, Windows, and Linux. Version 3.0.22 has Windows, Linux AppImage, and separate Apple Silicon and Intel macOS downloads. After launch, a user adds a provider, starts the server, applies an agent profile, and checks Logs for the resolved route. This is the shortest path for one developer managing local tools.
The CLI requires Node.js 22 or newer and exposes its management UI on 127.0.0.1:3458; the gateway remains on port 3456. Docker Compose uses port 3458 for management and routes by default. Both are better for a headless machine, but remote access changes the threat model. The gateway contains provider credentials and observes requests, responses, and usage. Put authentication and network restrictions in front rather than binding it broadly for convenience.
Desktop packaging has platform constraints. The README says Windows packaging must run on Windows x64 because better-sqlite3 includes a native Electron module. An open report says macOS builds from versions 3.0.18 through 3.0.20 were ad hoc signed and could not pass the updater's signature check, forcing manual updates. It also reports Gatekeeper rejection. Verify the signing state of 3.0.22 on your own Mac before relying on auto-update.
Release pace is fast, and the queue is large
Release 3.0.22 was published August 24, 2026, one day before the last recorded push. Its changes include fixes for multi-byte streaming chunks, usage-token normalization, Claude Code authentication hooks, account meters, OpenAI Responses session IDs, failed media-download cleanup, and oversized JSON previews. GitHub showed 1,096 open issues and pull requests, with same-day work on OpenAI tool schemas, profile syncing, model context overrides, and provider fields.
That count combines proposed features, support requests, pull requests, and defects, so it is not 1,096 bugs. The pace suggests active maintenance, while the range of recent fixes shows how many edges a multi-protocol gateway owns. Pinning a release is safer than following the latest container tag, especially when route translation can silently alter content.
Use CCR only when central control pays for itself
CCR is the most approachable option here for a developer who wants a desktop control panel around several coding agents. It centralizes keys, profiles, fallbacks, quotas, and logs without requiring a shared infrastructure deployment. LiteLLM and Portkey are better fits when the gateway is a server product for many applications rather than a personal agent console.
The cost is 1,892 dependencies, sensitive local state, client-configuration writes, and protocol adapters that demand tests. Start with one provider and one noncritical agent profile. Confirm text, images, tools, streaming, fallbacks, and log redaction, then add routes. If those checks feel excessive for your use, direct provider configuration is simpler and safer.

