OpenCode Zenkeyless RTK Token Saver OpenAI + Anthropic

One router, every model. Free coding, no downtime.

Real web bridges for Qwen, GLM 5.3, DeepSeek and Gemini — plus the free OpenCode Zen provider. All behind one endpoint: OAuth connection with zero key copy-paste, automatic failover and token compression. One binary, no dependencies.

qwen3.8-max GLM 5.3 deepseek-chat gemini-3.6-flash oc/big-pickle · free
Windows Linux macOS Docker sk- keys
0live models in catalog
0built-in providers
$0cost to start
0file to run
qwen3.8-max
glm-5.3
deepseek-chat
gemini-3.6-flash
oc/big-pickle · free
omnirouter — zsh
OpenCode Free · No API Key

Like 9router: free models,
zero keys

The built-in oc provider connects to OpenCode’s Zen gateway — exactly what 9router does. Its free models only need a random session ID, which OmniRouter generates for you. No sign-up, no keys.

  • No key, no sign-up — install and call free models instantly.
  • Live model list — refreshed from the official zen source every 60 seconds; nothing is hardcoded.
  • SSE streaming + tool-calling — transparent pass-through; the OpenAI format stays intact.
  • Anthropic support — the /v1/messages route is fully translated for oc; thinking blocks included.
  • Paid zen models? Just set OPENCODE_API_KEY — the same route unlocks glm-5.3, claude and gpt.
  • Custom sessions — take control with the x-session-id header.
NO KEY NEEDED# free zen models — zero keys curl http://localhost:8080/v1/chat/completions \ -H "Authorization: Bearer sk-omni" \ -H "Content-Type: application/json" \ -d '{ "model": "oc/big-pickle", "messages": [{"role":"user","content":"hi"}] }' # more free ids for agentic coding "model": "oc/nemotron-3-ultra-free" "model": "oc/mimo-v2.5-free" # paid zen? just add a key: # OPENCODE_API_KEY=... -> oc/glm-5.3

Free zen IDs rotate over time — OmniRouter refreshes the list every 60 seconds; whatever shows up lands in your catalog and dashboard instantly.

RTK Token Saver

Every request, 20–40% cheaper

Output from tools like git diff, grep and long logs typically burns 30–50% of an agentic prompt budget. OmniRouter’s built-in Token Saver — inspired by RTK in 9router — compresses them before they reach the model: automatic detection, zero configuration, safe by design.

git-diff

Huge hunks are dropped; the file list and a +/− stat per file stay behind. A 50k-char diff shrinks to a few hundred bytes.

grep & logs

Duplicate lines are deduped, per-file caps applied and repeats collapsed as ×N — output shrinks by orders of magnitude.

find / ls / tree

Long path listings compress into file and folder counts plus a sample of top paths — the model keeps a correct picture of your project.

smart-truncate

Huge generic text? The head and tail of what matters are kept; the middle is replaced with a removal marker.

Safety guaranteed

If a filter errors or grows the payload, the original text passes through silently — compression can never break a request.

Caveman & Ponytail

Output modes: short, technical replies with Caveman; YAGNI coding styles in Lite / Full / Ultra with Ponytail — both ride on RTK.

# bypass for one single request (like 9router) X-Omni-Token-Saver: off # output mode on the fly X-Omni-Prompt-Mode: caveman # | ponytail-full | off # global default — dashboard or env RTK=on PROMPT_MODE=off
Custom Combos

Fallback chains,
your name

Like 9router, build named combos: expensive first, then cheap, then free. When a step fails or runs out of quota, the next answers silently. The auto model runs this smart chain by itself.

# dashboard -> combos -> "free-stack" 1. qwen/qwen3.8-max # strongest agent 2. gemini/gemini-3.6-flash # guest, no cookie 3. oc/big-pickle # free, no key # then from any client: { "model": "combo:free-stack" } # result: coding that never stops -- $0
  • Define from the dashboard or straight from env via COMBOS
  • Use it like any model: "model": "combo:my-stack"
  • The free-stack preset ships with a fresh install
  • Plays nice with key quotas and per-model allowlists
Everything Included

Everything you expect from a router

Every 9router capability that makes sense on a web-bridge architecture — plus things only OmniRouter has: real DeepSeek PoW, live Google model discovery and automatic tool detection.

Failover across providers

429, 401 or 5xx? The next candidate steps in before the first streamed byte, while failing providers cool down briefly and healthy traffic keeps flowing.

Two protocols, one router

/v1/chat/completions and /v1/messages — full OpenAI and Anthropic translation with thinking blocks and tool-calling on both sides.

Live stats & logs

Real tokens per request (usage extracted from JSON and SSE tails), 48 hourly buckets per provider/model/key, and a 500-entry ring log.

Virtual keys

sk- keys with request quotas and model allowlists like qwen/*, fully managed from the dashboard — web tokens never reach a client.

Model alias

Map any name to any upstream model. Point "glm" at glm-5.3; clients stay untouched and switching models is one click.

Custom providers

Plug any OpenAI-compatible API: Gemini AI Studio, OpenRouter, Groq, Ollama, LM Studio — with ready presets and automatic model fetch.

Local count_tokens

/v1/messages/count_tokens answers without an upstream round-trip — for client context budgeting.

Dashboard 2.0

An overview with the 48-hour chart, providers, Token Saver, combos, keys, a streaming playground with thinking output and a live log — all local.

One file, anywhere

A single dependency-free Go binary for Windows, Linux and macOS (amd64 + arm64); start.sh, start.bat and docker-compose included.

Quick Start

Three steps to your first answer

No Node, no Python, no Docker. Grab the binary, run it, take a key from the dashboard — done.

Download & run

Grab a release or build it yourself:

git clone https://github.com/Godde3s/omnirouter cd omnirouter && go build -o omnirouter . ./omnirouter # or start.bat on windows

Dashboard & key

Open localhost:8080 (password: ADMIN_PASSWORD). An sk- key is ready; drop your web tokens into .env.

# .env -- all optional QWEN_TOKEN=... DEEPSEEK_TOKENS=... GEMINI_COOKIES=... # empty = guest OPENCODE_API_KEY=... # paid zen only

Point any client at it

Set the endpoint, pick a model — or just use auto:

Base URL: http://localhost:8080/v1 API Key: sk-... # from dashboard Model: auto # or combo:free-stack
Bring Your Own Agent

Connect every client

If a tool speaks OpenAI or Anthropic, it speaks OmniRouter. Copy the snippet, set endpoint and key — done.

In ~/.config/opencode/opencode.jsonoc/* models need no external key:

{ "provider": { "omni": { "npm": "@ai-sdk/openai-compatible", "name": "OmniRouter", "options": { "baseURL": "http://localhost:8080/v1", "apiKey": "sk-omni" }, "models": { "oc/big-pickle": {}, "qwen/qwen3.8-max": {}, "auto": {} } } } }

Cline → API Provider settings:

Provider: OpenAI Compatible Base URL: http://localhost:8080/v1 API Key: sk-omni # from dashboard Model: qwen/qwen3.8-max # or combo:free-stack

For Cline’s Anthropic mode, the same Base URL with the /v1/messages route and your sk- key works.

Claude Code connects via the Anthropic protocol:

export ANTHROPIC_BASE_URL=http://localhost:8080 export ANTHROPIC_API_KEY=sk-omni export ANTHROPIC_MODEL=qwen/qwen3.8-max claude "hello!"

In ~/.codex/config.toml:

model_providers.omni] name = "OmniRouter" base_url = "http://localhost:8080/v1" env_key = "OMNI_API_KEY" model = "auto" model_provider = "omni"

Cursor → Settings → Models → OpenAI API Key → Override Base URL:

Base URL: http://localhost:8080/v1 API Key: sk-omni Model: oc/big-pickle # or any catalog id

Hermes speaks OpenAI with full tool-calling — live-tested with the R1→R2 cycle:

endpoint: http://localhost:8080/v1 api_key: sk-omni model: qwen/qwen3.8-max tools: true # proven live
OAuth Device Flow · RFC 8628

Connect in one click, no key copying

Like 9router: your tool announces itself, you approve one code. Every client gets its own virtual key that you can revoke from the dashboard at any moment.

CClineVS Code coding assistant — OpenAI & Anthropic
KKilo CodeArchitect / Code / Debug profiles
GGitHub CopilotYour Copilot subscription as a router client
HHermes AgentAutonomous agent with full tool-calling
CClaude CodeAnthropic terminal via the messages route
XCodex CLIOpenAI terminal with config.toml
RRoo CodeCline fork with multiple modes
CContinueOpen-source assistant for VS Code & JetBrains
OOpenCodeTerminal TUI client — already keyless
UCursorAI editor with Base URL override
DFactory DroidFactory AI agent
+Any other toolAny OpenAI- or Anthropic-compatible client
1Your tool asks for a code. One simple call to POST /oauth/device/start with a client name returns an 8-character code like K7QW-2XRT — the same standard Copilot and Cline use.
2You approve it. Open the /oauth/authorize page, check the client and code, hit “Approve & connect” — or approve or deny it from the dashboard.
3A key is minted. The tool picks up its dedicated virtual sk-omni-… key via POST /oauth/device/poll; its usage is tracked separately and revocation is instant.
9router Parity

9router’s features, one by one

OmniRouter takes the 9router pattern seriously — every capability that makes sense on our web-bridge architecture is implemented.

OAuth Device Flownew in v1.3.0Connect Cline, Kilo Code, GitHub Copilot, Hermes and 8 more clients over RFC 8628 — no key copy-paste.
Virtual Keys per ClientEach connection gets its own virtual key with independent stats, optional caps and instant revocation from the Connections panel.
OpenCode Free (no auth)oc providerThe zen route: keyless, automatic model fetch, optional key for paid models.
RTK Token Saverbuilt-intool_result compression with auto-detecting filters; on by default plus a bypass header.
Headroom Token SaversimplifiedCaveman and Ponytail output modes are built in; no external compressor needed.
Caveman / PonytailPrompt modes from the dashboard or the X-Omni-Prompt-Mode header.
Custom CombosNamed combo:* chains with sequential fallback.
Smart FallbackThe auto chain plus per-provider retry and health-aware cooldown.
Format TranslationOpenAI, Anthropic and each bridge’s web format — Google, DeepSeek PoW and the rest.
Quota TrackingReal token stats per key, provider and model, with hourly buckets and key quotas.
Multi-AccountAccount and token pools per bridge, with rotation and cooldown on 429.
Auto Token RefreshGoogle PSIDTS heartbeat, automatic DeepSeek PoW and Qwen bx — all automatic.
Request LoggingA live log with latency, tokens and RTK bytes saved.
Usage AnalyticsA 48-hour chart and a top-models table in the dashboard.
Virtual API Keyssk- keys with quotas and allowlists — web tokens never reach a client.
Deploy AnywhereSingle binaries for Windows, Linux and macOS plus Docker; this very page runs on GitHub Pages.
Count Tokens/v1/messages/count_tokens computed fully locally.
Cloud SyncSync the omnirouter.json file yourself; we don’t want a cloud service.
Model Rankings

Which model for agents?

Our own live tests on this very router — coding, tool-calling and guest-mode stability.

01

qwen3.8-max agent

Strongest for coding and tool-calling — the full R1→R2 cycle proven live. needs token

Agentic quality96%
02

GLM 5.3 new

Z.AI’s fresh flagship — live in the catalog. The fast GLM 5.3-flash variant covers chat and light agents.

Agentic quality92%
03

gemini-3.6-flash guest

The most stable tokenless mode — Google guest and the first fallback in every combo; real vision too.

Agentic quality86%
04

deepseek-chat PoW

Strong reasoning with automatic PoW — the official DeepSeek wasm inside the binary, no external service.

Agentic quality88%
05

oc/big-pickle keyless

zen’s free tier for a zero-to-hero start; with nemotron-3-ultra-free and mimo-v2.5-free.

Agentic quality74%

Any other model

Add a custom provider — AI Studio, OpenRouter, Groq, Ollama — the rest of the path is identical.

Flexibility
Changelog

From v1.0 to v1.3.1

v1.3.12026-09current
  • Site goes fully English — every section, label and code sample rewritten in optimized LTR English with Latin-tuned typography (Inter + Space Grotesk, line-height 1.6–1.75)
  • Mobile cascade bug fixed at the root — overrides moved to the end of the stylesheet so grids collapse properly (2-col / 1-col); 12px type floors and safe breaking of long code tokens (overflow-wrap:anywhere)
  • Changelog repaired — v1.2.0 was mislabeled as v1.3.0; the timeline now reads v1.0 → v1.3.1 in the right order
v1.3.02026-09
  • OAuth Device Flow (RFC 8628) — keyless connection for Cline, Kilo Code, GitHub Copilot, Hermes and any other client; the 9router pattern with /oauth/device/start and /oauth/device/poll
  • Connections panel in the dashboard — live-badged pending requests, connected clients with independent stats, one-click copy and instant revocation
  • Consent page at /oauth/authorize — shows client and code; allowed only from localhost or with an admin session; codes expire in 15 minutes and are single-use
  • Virtual keys — every connection gets a dedicated sk-omni-… with client and user_code fields in the store; works with existing quotas and allowlists
  • Mobile typography pass — split-grid overflow fixed, 12px terminal font floor, tighter kicker letter-spacing on phones
v1.2.02026-09
  • OpenCode Zen provider (oc) — free keyless models, automatic fetch, translated Anthropic and an optional key for paid zen
  • RTK Token Saver — automatic tool_result compression: git-diff, grep, file-list, dedup and smart-truncate, plus bytes-saved stats
  • Named comboscombo:* chains with sequential fallback and the ready-made free-stack
  • Prompt modes — Caveman and Ponytail in three levels, via the X-Omni-Token-Saver and X-Omni-Prompt-Mode headers
  • GLM 5.3 — Z.AI’s new flagship naming across the catalog and fallback chains
  • Dashboard 2.0 — a professional sidebar layout with Token Saver, combos and a new playground
  • Fixed a bridge health-check bug (auth on model fetch)
v1.1.0 → v1.1.12026-09
  • Guest Gemini bridge — cookie-free with a live-proven PONG — plus the PSIDTS heartbeat
  • Real usage stats, per-provider alias, key quotas and allowlists
  • Important fix: stream now defaults to false per the OpenAI spec — clients like OpenCode that omit the field get JSON instead of an error
  • Streaming playground with thinking and an alias editor
v1.0.02026-08
  • Router core: live catalog, three-format resolve and failover across 4 web bridges
  • Real DeepSeek PoW — official wasm inside wazero, no CGO
  • Web dashboard, sk- virtual keys and start scripts
Roadmap
  • Persist saver and combo settings from the dashboard to file
  • Voice support (STT & TTS) for self-hosted providers
  • Settings sync across devices
FAQ

Frequently asked questions

Can I really code without any keys at all?
Yes — there are two keyless routes. First, guest Gemini: the gemini bridge needs no cookies at all and answered even from a datacenter IP in our tests. Second, the free OpenCode Zen models via the oc provider, which only needs a random session ID the router generates. The ready-made combo:free-stack stacks them back to back.
How do I connect Cline or Kilo Code without copy-pasting keys?
With the v1.3.0 OAuth Device Flow. Call POST /oauth/device/start once with a client name; you get an 8-character code. Approve it on the /oauth/authorize page — done. The tool picks up its virtual key automatically via poll and shows up in the dashboard’s Connections panel with its own stats. Exactly the Copilot-and-Cline connection experience 9router offers.
What happens when the free zen quota runs out?
If another step follows oc/* in the auto chain or your combo, the router moves on by itself. FreeUsageLimitError is retryable like any other 429 and triggers failover. For extra quota, set OPENCODE_API_KEY to unlock paid models like oc/glm-5.3.
How does RTK make sure nothing important is lost?
The filters understand tool content structure: diffs, git status, grep output and path listings. Only repetitive bulk is summarized — plus/minus stats, paths and unique lines stay put. If a filter is unsure or the output grows larger than the input, the original text passes through untouched. You can also switch it off per request with the X-Omni-Token-Saver: off header.
Where do my web tokens go? Is it safe?
Tokens stay in your local .env or store and are only exchanged between the router and the provider sites. Clients only ever see the router’s own virtual sk- keys. Nothing is sent to any server beyond the providers themselves — everything is one local binary.
Why OmniRouter instead of running bridges side by side?
Standalone bridges each have a port, a format and a token. OmniRouter puts them all behind one standard endpoint: a single key for everything, automatic model resolve, failover across services, unified quota and stats, and a Token Saver applied to all of it — practically impossible with separate bridges.
How do I run it on Windows?
Grab windows-amd64.zip from Releases, extract it and run start.bat — the first run creates a .env file and prints a short guide. macOS (Intel and ARM) and Linux (amd64 and ARM64) binaries are in the same release.
Ready in 60 seconds

Start tonight, build for $0.

One binary, five providers, free keyless models — and a chain that never stops.