jev-router
★ 650▲ 24gargpratyush/jev-router
Per-turn model routing for Claude Code and Codex. Simple work goes to the fast tier and difficult work to the strong tier.
Local proxy that speaks the System One protocol, records the typed decisions an app already makes, and learns to answer them itself.
View on GitHub →Checked, not fully reviewed
Records your app's typed decisions and trains a local Laya head to answer them. Checked, not fully reviewed: honest about who answered; installs fixed in 0.2.1.
Good for
Watch out for
Tested Oct 11, 2026 at 4d90149b343c · Python 3.12 in Docker on CPU; its test suite, and `stuntd serve` in local mode with laya 0.4.2, 0.3.29, 0.3.24–0.3.28, 0.3.21, 0.3.20 and 0.3.4, driven by the official typesafe-sdk; on 13 October, stuntd 0.2.1 from PyPI with laya 0.4.6
Checked, not fully reviewed. We ran its test suite and started its local mode, the one the README calls “local Jev without an API key”, against laya versions from 0.3.4 to 0.4.2. We did not run proxy mode in front of a paid provider or train a head. No Jev calls.
stuntd sits where your app’s provider base URL used to point. It speaks Jev’s /v1/systemone, the
OpenAI Decisions API, Chat Completions and Anthropic Messages. It records the typed decisions passing
through and distils each decision site into a small head on a frozen Laya encoder. Once a head is
calibrated well enough, it answers that site locally and hands the uncertain cases back to the
provider.
A fresh install did not start at 0.2.0. The README’s pip install "stuntd[train,jev]" allows any
laya>=0.3.4, and pip picks 0.4.2. stuntd serve loads the checkpoint, fails its own warm-up
question because the question’s instructions are empty, and exits. We bisected:
| laya | stuntd serve |
|---|---|
| 0.3.4, 0.3.20, 0.3.21 | starts |
| 0.3.24 to 0.4.2 | exits after the warm-up |
Six tests in one file fail from 0.3.20 on, for a related reason: a test double’s tokenizer does not accept an argument newer laya passes. Its CI is green because it never installs laya. We reported it.
Fixed in 0.2.1, the same day. The warm-up now asks a real question, laya is capped below 0.5,
and CI installs the newest laya. On 13 October a fresh pip install "stuntd[train,jev]" picked
stuntd 0.2.1 with laya 0.4.6, and the README’s three-command quickstart served local Jev. The
official SDK got its answers, with model set to stuntd and the X-Stuntd header saying
mode=local.
Once running, it is honest about who answered. With laya 0.3.20, the official
Python SDK worked against local mode unchanged. The response’s model was stuntd, not
jev-latest. The X-Stuntd header said jev; mode=local; questions=1; live=0; zeroshot=1, and
/v1/models listed only stuntd. The README’s rule is “every answer says how it was served, so a
silent fallback cannot hide”, and on the Jev path that holds in the body as well as the header. On
the OpenAI-compatible path, its code builds a locally served answer with the model name your request
asked for, so there the header is the only signal.
Zero-shot Laya’s limits come through. For “I was charged twice.”, the question “Is it false that this is a billing problem?” came back 0.803 yes. See our Laya review.
Apache-2.0, 70 stars.
See how it compares with other tools in Best Jev tools, tested hands-on.
Review updated Oct 13, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.
gargpratyush/jev-router
Per-turn model routing for Claude Code and Codex. Simple work goes to the fast tier and difficult work to the strong tier.
BillionsBobby/JevRouter
Routes each agent step to a model, subagent, Skill, MCP tool, or CLI with one Jev Choice, requiring confirmation for risky capabilities and keeping decision receipts.
higress-group/HiRoute
Local-first routing and coordination engine for long-running agent work, with a jev-decider extension that routes on typed decisions.
New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.
Powered by Buttondown. See our privacy policy.