I Ran Claude Code With and Without Jev. It costed 3 times less with Jev.
Three ways to connect Jev to Claude Code, and a side-by-side test of what model routing does to the bill.
Claude is brilliant. But on a real, large project the token cost adds up quickly, and it doesn’t matter whether you pay per API token or have a subscription. Either you wince at the final bill or you keep hitting your limits.
I’ve been a software engineer for 16 years and have used AI coding tools every day for the last few. Since I started pairing Claude Code with Jev, my token consumption has dropped dramatically. This post walks through the setup and then shows the numbers from a side-by-side run.
What Jev does here
Jev is a small model from TypeSafe. It doesn’t write prose or code. It answers narrow questions with typed judgments and probabilities, and it costs close to nothing per call.
That makes it a good fit for one specific job: deciding how hard a task is before an expensive model touches it. Listing the files in a directory doesn’t need Opus. Designing an architecture might. If something cheap makes that call for every request, you stop paying top-tier prices for trivial work.
Step 0: get an API key
1. Create an account at typesafe.ai.
2. Add some balance. I added $5, which turned out to be far more than I needed (more on that at the end).
3. Go to the API keys section, create a key, and give it a name you’ll recognize later.
4. Copy it immediately. It is shown only once.
If the key ever leaks, rotate it.
Then export it in your terminal:
export TYPESAFE_API_KEY=your-key-hereWay 1: the official skills
TypeSafe publishes official skills for Claude Code. Installation is two lines copied from the repo’s README into your terminal. With the API key exported, start Claude Code and ask it to call Jev.
claude plugin marketplace add typesafe-ai/skills
claude plugin install typesafe@typesafe-aiI asked whether a snippet containing `cons` was correct code. Claude invoked the skill, and Jev came back with a structured answer instead of a paragraph:
- Is the code syntactically valid, with no language given? Undecided.
- If it’s JavaScript? Probably not.
- Does it contain a misspelled keyword, if it’s JavaScript? Yes, with a probability of 0.95.
The “undecided” was the interesting part. I had meant `cons` as a typo for `const`, but `cons` is a real function in Lisp. I don’t know Lisp. Jev declined to guess until it was told the language, which is the behavior you want from something making routing decisions.
This is the officially recommended route and the one I use day to day.
Way 2: a community MCP server
There is also a community-built MCP server for Jev. It is not an official TypeSafe project, so use it at your own risk, though I haven’t run into problems.
Installation is one command from its README. Afterwards the server shows up in Claude Code’s MCP list with tools such as verify, screen, find and rank.
Get Code and Bird’s stories in your inbox
Join Medium for free to get updates from this writer.
You can call a tool by name or just ask in natural language and let Claude choose. When I pasted an example from the docs, Claude picked the rank tool on its own. When I asked for a verification, it went through verify. Both answers were right.
Way 3: the Jev router
The router is where the savings come from. It is a proxy that sits between you and the models: it takes each call, asks Jev how complex the request is, and sends it to the most suitable model you have access to.
Check it out here https://github.com/gargpratyush/jev-router
Without it you have two bad options. Run everything on Opus and pay a lot, or run everything on Haiku and put up with a model that isn’t smart enough for the hard parts. The router gives you the balance per request.
You install it with npm, add your API key, and launch Claude Code through the router’s own command instead of the usual one. The `/model` picker then shows the Jev router.
Two quick tests:
- ”List the files and folders in the current directory” was routed to Haiku.
- ”Create an architecture for an AI-powered video editor” was routed to Sonnet. I expected Opus. Jev decided Sonnet was enough.
One gotcha: the router has its own status line showing which model handled the last call. My custom status line was overriding it, so I had to disable mine before it appeared.
The demo: same prompt, two sessions
For the comparison I went back to the official skills and used a Claude Code mod called Run Ledger. It does the same routing as the router, and it also shows the estimated cost of every run, session and subagent.
The setup:
- Two Claude Code sessions in two separate git worktrees, both set to Sonnet.
- Session A, without Jev: the ledger in recommend-only mode. It shows what Jev would have picked but changes nothing.
- Session B, with Jev: the ledger set to route automatically, so Jev picks the model for each subagent.
- The same prompt in both: build a small bill-splitting CLI tool, with the work divided among several subagents running in parallel.
What happened:
Without Jev — it costed $1.39. With Jev — $0.39.
Both sessions produced a working tool. The routed one cost $1 less, which is more than three times cheaper.
This was a single run of one small task, so treat it as an illustration and not a benchmark. Still, the mechanism is easy to see in the subagent list: most of the parallel work was simple enough for Haiku, and only one piece needed Sonnet. On a larger project with more subagents, that gap has more room to grow.
What Jev itself cost
After two days of experimenting, including this demo, I checked the usage page in the TypeSafe console. My balance still showed $5. Each day’s spend was a fraction of a cent, and the total was under one cent.
At enterprise scale the number would be more noticeable. For personal use, I expect that $5 to last me around a month.
Most of what a coding agent does in a session is not hard. Paying a top-tier model for all of it is the expensive default, and a nearly free judgment call in front of each request is enough to change that.
If you want to try it, start with the official skills. Add the router when you want the routing to happen automatically.
Have you tried Jev with Claude Code? I’d like to hear how it went.
This post is based on my video walkthrough: watch it on YouTube








