Intro: a hint, not savings
Jev will not make Claude Code cheaper, and the gateway's own benchmark says so. This article reads jev-gateway's code and its benchmark repository, then puts a logging proxy in front of a real Claude Code session to see what a router would receive.
Jev is TypeSafe's decision model: a probability returned in milliseconds, wired into Claude Code by six videos in one week. The pitch is "the cheapest agentic coding loop". The gateway's own numbers show Opus 5 making 47% more requests and taking 83% more time on a feature task with routing on.
How does a router that answers in milliseconds make Claude Code slower? It comes down to one line of code. Inside Claude Code, Jev gets exactly two sentences, and a normal session hands it 40 tools on every call.
What Jev is, and what the wave sells
Jev is a decision model from TypeSafe. It generates no text: you ask a typed question and it answers with a choice, a score, or a yes/no probability. The vendor's figures:
| Figure | Value |
|---|---|
| Input price | $0.04 per million tokens |
| Output price | free ("too cheap to meter") |
| Latency | 70 to 500 ms |
| Home page headline | 194× faster, 445× cheaper |
The blog post under that headline says the two multipliers are the higher end of real-world gains, measured against the average of two frontier models, a comparison the authors admit is biased toward those models.
Six videos in five days wired Jev into Claude Code. The biggest sits at 139,000 views and calls it the cheapest agentic coding loop yet. Two repositories carry the wave: jev-gateway, a local proxy for Claude Code and Codex created five days earlier with 181 stars, and fast-jev-compaction, a compaction plugin created the day before that, at 6,400 stars. The gateway is where Claude Code plugs in, so that is where the reading starts.
One env var, one line: hint mode
jev-gateway sits between Claude Code and the Anthropic API. It launches Claude Code with a single environment variable, ANTHROPIC_BASE_URL, pointed at a local port. Nothing else changes; a comment in the source says there is no gateway credential, so a Pro or Max login keeps working as is.
Inside the adapter (src/adapters/messages.ts, line 99), one line decides what Jev is allowed to do:
steer: thinking || cached ? "hint" : "tool_choice"
With extended thinking on, or a cached conversation, the gateway can only hint. Otherwise it forces the tool. The comment above the line explains why: the API rejects a forced tool while extended thinking is on, and changing tool_choice invalidates the cached conversation Claude Code rereads on every turn.
To check what a real request looks like, a 60-line logging proxy took the gateway's seat on the same kind of port, with Claude Code launched through it and one request sent on a real repository. The request carries thinking: adaptive and three cache markers; tool_choice is absent; 24 tools ride along on a clean install. Run the gateway's line against that request and the forced path never fires. Every Claude Code call lands in hint mode. The README says as much: expect better tool picks on large tool lists, not lower cost or latency.
The hint: two sentences, and where it cannot land
What Jev gets to do inside Claude Code is two sentences appended to the last message: "a routing model suggests this tool is the most relevant move now. Ignore this if it doesn't fit." That is the whole intervention. The model is free to ignore it, and tool_choice stays on auto.
Forcing a tool is not an option, per Anthropic's docs: a forced tool returns a 400 error on Opus 5.5 and Fable 5.1, and errors with manual thinking on the other models. Changing tool_choice is out too: the prompt caching docs say it invalidates the messages cache, the largest part of a long session. Editing a tool's description invalidates the entire cache: tools, system and messages.
| Change to the request | Effect on the prompt cache |
|---|---|
| Append a hint to the last user message | cached prefix unchanged |
Change tool_choice |
messages cache invalidated |
| Edit a tool definition | tools, system and messages invalidated |
The gateway's comment says why the hint goes last: the cached prefix stays byte-for-byte identical to what Claude Code resends on the next turn. A guard sits in front of it: when the last message is not the user's, the request passes through untouched. Both captured requests ended on a system block that Claude Code appends itself, an environment reminder in one and a hook's output in the other. On that shape, the hint has nowhere to land. It does land on other turns, since tool results come back as user messages, and the benchmark counts Jev steering a third to half of Claude Code requests.
The benchmark nobody quotes
The gateway's own benchmark, jev-gateway-bench, answers the opening question. It ran 120 sessions, five runs per cell, on the same Claude Code and the same subscription everyone uses, with no MCP servers, plugins or skills. Two tasks on a small chess engine: a bug hunt with five injected bugs, and a feature, adding algebraic notation.
| Model, task | Routing on vs off |
|---|---|
| Opus 5, feature | +61% input tokens, +47% requests, +83% time (still solved 5/5) |
| Sonnet 5, feature | +16% input tokens, +37% time |
| Sonnet 5, bug hunt | −48% input tokens, −25% time |
Debugging is where routing pays, in the authors' words. Their explanation is the answer to the question: the gateway only hints with Claude models, so a hint that does not fit costs a detour instead of being ignored for free.
Codex gets the forced version. Jev decided 76 to 100% of Codex requests, against a third to half of Claude Code's. One model in the other harness got cheaper and wrong, three solves out of five instead of five. Cheaper and wrong is not a saving.
The limits are real: five runs per cell is a small sample, it is one toy engine, and nobody has rerun it. Input is mostly cached too, so an input saving is worth less than an output saving.
What my session hands it: 24 tools clean, 40 full
What does a normal Claude Code session hand a router on every call? The proxy log answers: 40 tools. Same repository, same single-word prompt, two setups: a clean install with an empty config and no MCP server, and a normal setup with its servers and plugins.
| Clean install | Normal setup | |
|---|---|---|
| Tools in the request | 24 | 40 (16 from MCP servers and plugins) |
| Prefix tokens billed | 47,411 | 57,277 |
| Output tokens | 4 | 4 |
| API-equivalent cost of one "ok" | $0.07 | $1.15 |
The roster is the bill. The heaviest definitions are built in: the shell tool alone is 12,000 characters, the agent tool almost 9,000.
The benchmark's footnote saw six tools and 7,000 tokens on a clean install, and 285 tools on one loaded setup. Today's clean Claude Code ships far more tools built in, and the loaded case is rarer: most MCP tools sit behind a search tool, deferred, so the roster a router sees stays small. Whatever its size, the gateway sends that roster to Jev on every request; an open issue on the repository says the full cost is paid before most answers are discarded. Nothing there is Jev's fault, and nothing there is Jev's to fix.
Verdict per use
Routing inside Claude Code: no. It is a hint the model may ignore, it made feature work slower on both Claude models, and the one win is on debugging. The exception is a day of bug hunts on a very large tool roster, which the README itself names as the case.
The compaction plugin, fast-jev-compaction: not yet. It needs an early-access hook flag, its open issues say the hooks do not register on some builds, and after one compaction the model wrote nine reports saying the work was done, all fabricated. Practitioners got there first: the top thread on the plugin has 491 points, and its top objection is not speed but the terms of service on sending transcripts to a third party.
Codex: that is the real target. There the gateway forces the tool, Jev steered up to every request, and the bug hunt ran on 57% fewer output tokens.
| Use | Verdict |
|---|---|
| Routing in Claude Code | No, except bug hunts on a very large tool roster |
| fast-jev-compaction | Not yet |
| Codex | Yes |
One thing the wave got right: the subscription login never moves, the gateway only changes a URL. The limits of this reading: five runs per cell, one chess engine, a benchmark repository nobody reran, and no routed session of my own. I measured the roster and the request, not Jev. Jev itself is cheap. The detour is not.
AIDive