Every prompt, routed to the right model.
One endpoint and one model name, jev-auto, for Claude Code, Codex and Cursor. Renames go to a fast model; race conditions go to a frontier one.
- Task
- hard_debugging
- Tier
- frontier
- Model
- anthropic/claude-opus-5-5
Runs natively on Anthropic's own API, so the stream passes straight through.
Your agent talks to JEV. JEV picks the model.
JEV routes with a few rules that run in microseconds, with no extra LLM call. When the model speaks the client's protocol, bytes stream through untouched. When it doesn't, JEV translates both ways, including tool calls.
jev-auto
- ConstraintsKey present, context fits, supports tools and vision
- ClassifyRename, debug, refactor, review… sets the tier
- RankClosest tier, native protocol first, then price
- StickTool loops stay on one model, which keeps caches warm
- Recover429 or 5xx falls back; repeated tool errors move up a tier
Two commands, then use your tools as usual.
jev setup finds your clients, backs up their config and points them at JEV. jev uninstall-config restores every file exactly.
- Install and add a key
Any provider works. Gemini and Groq have free tiers.
- Start JEV
jev servelistens on 127.0.0.1:4000. - Run
jev setupThis writes six env entries into
~/.claude/settings.json. Then runclaudeas normal.
{
"env": {
"ANTHROPIC_BASE_URL": "http://127.0.0.1:4000",
"ANTHROPIC_AUTH_TOKEN": "<your JEV key>",
"ANTHROPIC_MODEL": "jev-auto",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "jev-auto",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "jev-smart",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "jev-fast"
}
}- Start JEV
jev serve - Run
jev setupThis adds a marked provider block that uses the Responses wire format. An existing
modelline is commented out, not deleted. - Run
codexTo try one model directly, run
codex -m jev-smart.
model = "jev-auto" model_provider = "jev" [model_providers.jev] name = "JEV" base_url = "http://127.0.0.1:4000/v1" wire_api = "responses"
- Deploy JEV to a public URL
Cursor sends requests from its own servers, so it can't reach localhost. Deploy free on Cloudflare.
- Paste three values
Go to Settings → Models → API Keys.
jev setupcopies them to your clipboard. - Choose
jev-autoPick it in the Chat or Agent model menu.
OpenAI API Key <your JEV key> Override OpenAI Base URL https://jev.<you>.workers.dev/v1 Custom model jev-auto
Not routed: Cursor Tab and other Cursor-owned features always use Cursor's own models. JEV handles Chat and Agent requests.
- Use the JEV URL as the base URL
The three endpoints are
/v1/messages,/v1/responsesand/v1/chat/completions. - Use a JEV model name
jev-auto, or any exact model such asopenai/gpt-5. - Read the route
Every response carries an
x-jev-routeheader, andjev whyexplains the decision.
curl http://127.0.0.1:4000/v1/chat/completions \
-H "Authorization: Bearer $JEV_API_KEY" \
-H "content-type: application/json" \
-d '{"model":"jev-auto","messages":[{"role":"user","content":"Explain this regex"}]}'Five names that work in every client.
Set it once. Change behaviour by changing the name, not the provider.
| Name | What it does | Use it for |
|---|---|---|
jev-auto | Classifies each prompt and picks the tier | Everything (the default) |
jev-fast | Fast tier only | Titles, small edits, quick answers |
jev-smart | Frontier tier only | Hard bugs, architecture, security work |
jev-cheap | Lowest-priced available model | Bulk or background jobs |
jev-free | Free-tier and local providers only | Zero spend; with Ollama alone, fully offline |
What works today.
| Feature | Claude Code | Codex | Cursor |
|---|---|---|---|
| Routing through JEV | Yes | Yes | Chat and Agent |
| Automatic setup | Yes | Yes | Paste 3 values |
| Streaming and tool calls | Yes | Yes | Yes |
| Fallback and escalation | Yes | Yes | Yes |
Works with local jev serve | Yes | Yes | Needs a public URL |
| Tab completion | n/a | n/a | Handled by Cursor |
Turn an API into tools your agent can use.
Start from a template or an OpenAPI spec. Generated servers are one file with no dependencies, and they run free on Cloudflare Workers.
jev mcp import openapi.jsonEach operation becomes a tool. DELETE, admin and internal endpoints are skipped unless you pass
--all.jev mcp test .Runs the handshake, checks schemas and calls every read-only tool, all without starting a server.
jev mcp lint .Scores names and descriptions, marks tools read-only, write or destructive, and blocks committed secrets.
jev mcp deployGives you a free public URL on workers.dev.
jev mcp install pets <url>Adds the server to every client it finds and prints a one-click Cursor link.
Claude CodeCodexCursor
$ jev mcp import petstore.json 4 endpoints → 2 tools [x] get_pet_by_id GET /pet/{petId} [x] find_pets_by_status GET /pet/findByStatus [ ] DELETE /pet/{petId} skipped: destructive [ ] POST /admin/flush skipped: internal $ jev mcp test pet-store-mcp ✓ initialize → pet-store-mcp 0.1.0 ✓ tools/list → 2 tools ✓ get_pet_by_id: schema valid ✓ get_pet_by_id({"petId":1}) → 1423 ms ⚠ find_pets_by_status({}) → 400 missing `status` 8 passed, 1 warnings, 0 failed $ jev mcp lint pet-store-mcp MCP tool quality: 82/100 ⚠ get_pet_by_id READ_ONLY parameters without description: petId
Run it in the cloud for $0.
The same code runs on Cloudflare Workers' free plan, which allows 100,000 requests a day with no cold starts. JEV refuses every request until you set a key, so it never runs as an open proxy.
npx wrangler login jev deploy # prints your JEV key npx wrangler secret put GEMINI_API_KEY # once per provider key jev setup --url https://jev.<you>.workers.dev --key <your JEV key>
Cloudflare Workers is the main target. Deno Deploy and Vercel Edge run the same file.
Gemini, Groq, Cerebras and OpenRouter :free models. Use jev-free to stay on them.
Oracle Cloud's ARM VM can run small Ollama models on its CPU.
There's no reliable free GPU for serving models. Colab and Kaggle forbid it, so use the free APIs instead.
Stop choosing models by hand.
Install JEV, run jev setup, and keep working.