Jev suggests
Jev returns a routing judgment.
JEV MODEL ROUTING
Describe a task and let Jev choose a routing lane for your application to review.
This page's live demo returns a routing decision only. It does not call Codex, Claude, or another downstream model.
01 / LIVE ROUTER
Describe a task and any context, then ask Jev to suggest a lane. This demo does not run another model or tool.
Jev signals stay fixed. Policy edits immediately recompute the route and make zero model requests.
Run the selected preset as-is or edit the Task and Context first.
Jev returns a routing judgment.
Your policy applies thresholds and fallback rules.
Your application runs the selected model or tool.
03 / WHO OWNS WHAT
A routing decision is input to policy. It is never authorization to execute a tool, access data, spend budget, or make a production change.
05 / HOW THIS DEMO ROUTES
Plain-language work and optional context.
Choice, Score, and Boolean in one request.
Thresholds and routing rules owned by the app.
An abstract lane for another system to consume.
The route is not a fourth model answer. Threshold changes re-run local policy over the same result, without another Jev request.
06 / JEV PLAYGROUND'S FOUR LANES
For mechanical, low-risk tasks.
For bounded work requiring normal reasoning and verification.
For cross-cutting or deep tasks requiring broader reasoning.
For high-consequence or insufficiently safe automatic routing.
These lanes belong to Jev Playground's demo policy. Real routers may use different candidate sets, tiers, fallback rules, or direct model IDs.
00 / CHOOSE YOUR ROUTER
Choose by where the routing decision needs to live. These setups represent different architectures; they are not a ranking.
Best for understanding how real Jev signals and deterministic application policy choose an execution lane.
Best for people who already use Codex CLI or Claude Code and want Jev to choose a model for each fresh turn.
npm install -g jev-router
jev-codex # or jev-claudeBest for Python applications that want a Claude model-tier decision before their own downstream model call.
Best for developers who want Jev Choice over their own bounded list of models or tools.
Independent community project. It is not an official TypeSafe SDK and not a production authorization system. Run it from source.
| Setup | Best for | Runs real downstream model? | Interface |
|---|---|---|---|
| Jev Playground router | Learning and testing | No | Web |
| jev-router | Codex / Claude Code | Host CLI does | CLI / local proxy |
| Python jev-model-router | Python app routing decision | Caller does | CLI / Python |
| TypeSafe Router | Custom model or tool candidates | No | Web / TypeScript source |
02 / RUN A REAL ROUTER
Requires Node.js 20.12+, Codex CLI and/or Claude Code, an authenticated upstream CLI, and a TypeSafe Jev key. Existing CLI authentication, tools, permissions, sessions, and interface stay with that CLI.
npm install -g jev-routerecho "JEV_API_KEY=..." > ~/.jev-router.envProtect ~/.jev-router.env, restrict access to it, and do not commit it. Prefer an editor or another method that avoids leaving a real key in shell history.
jev-codex
# or
jev-claudeJev chooses a route at each fresh-turn boundary. Codex or Claude Code executes the turn. Selecting a concrete model pauses automatic routing; selecting Jev Router resumes it.
The current project is installed from source; it does not replace the downstream client.
git clone https://github.com/its-panzer/jev-model-router
cd jev-model-router
python -m venv .venv
./.venv/bin/pip install -e .
cp .env.example .envmodel-router "Describe the task here"from model_router import Router
with Router(...) as router:
decision = router.route(prompt)
# Your application now calls its own downstream client
# using the selected model or tier in decision.model_id.Use TypeSafe Router as a source-level reference for a vendor-independent Choice router.
Request + allowed options↓Jev Choice↓Validate selected ID↓Confidence / fallback policy↓Your executorgit clone https://github.com/BunsDev/typesafe-router.git
cd typesafe-router
npm ci
npm run devThe repository currently lives at TypeSafeAI/typesafe-router while its README documents the BunsDev source clone. Its root package is private and is not a published npm install.
04 / ROUTER ARCHITECTURES
gargpratyush/jev-router asks Jev before a new Codex or Claude Code turn, then the real upstream CLI continues.
its-panzer/jev-model-router returns a decision to Python or its CLI; the application makes the downstream call.
TypeSafeAI/typesafe-router supplies candidate IDs and descriptions to Jev Choice, then validates and applies fallback policy.
07 / POLICY AFTER JEV
Jev classifies the task, scores reasoning depth, and estimates high-consequence probability.
Your code applies thresholds, handles missing distributions, checks availability, selects a lane, or stops for review.
Policy remains inspectable, testable, and adjustable without spending another model request. It should define explicit behavior for low confidence, unavailable candidates, and router failure.
08 / BUILD IT YOURSELF
Our implementation asks for task kind, reasoning depth, and consequence, then runs local policy. A direct router can instead ask Jev Choice over actual candidate IDs. Both patterns keep execution outside Jev.
task → semantic signals → deterministic policy → abstract lanetask + candidate catalogue → Jev Choice → validate → fallback → candidateUse stable allowed IDs, validate the returned ID, and keep provider credentials server-side. The Jev API guide covers the typed request contract and error handling.
import type { Answer } from "./types";
const response = await fetch("/api/evaluate", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
state: ["AI TASK", task, "", "CONTEXT", context].join("\n"),
questions: {
task_kind: {
type: "choice",
instructions: "Which task category best describes this work?",
criteria: {
mechanical: "A tiny deterministic correction.",
bounded: "Localized work with clear boundaries.",
cross_cutting: "Work spanning dependent modules or interfaces.",
security_or_data: "Security, privacy, migration, payment, or production-data work.",
unclear: "Insufficiently scoped or none of the other categories.",
},
},
reasoning_depth: {
type: "score",
instructions: "How much architectural reasoning and verification is needed?",
criteria: ["Shallow", "Moderate", "Deep"],
},
high_consequence: {
type: "boolean",
instructions: "Could a materially wrong result create significant or difficult-to-reverse harm?",
},
},
}),
});
const { result } = await response.json();
const route = chooseRoute(result.answers as Record<string, Answer>, 75);
// chooseRoute is deterministic application code.
// It can pause for review; it never asks Jev to execute the task.
return route;A route is a decision for application policy, not permission to run a model or tool.
09 / LIMITATIONS & SECURITY
A per-turn router may send each fresh task or prompt to TypeSafe for routing. Define what data is allowed before enabling it broadly.
Keep the Jev key server-side or process-side. Do not expose it in a browser bundle, logs, source control, or shared shell history.
A local proxy or wrapper still depends on the real upstream CLI, its authentication, and evolving request formats. Keep both components reviewed and current.
Switching models can affect cache behavior, available context, feature support, cost, and output quality. A route is not authorization.
A timeout, outage, or unrecognized answer must follow a declared policy. It must not silently select an unsafe or weaker model.
Jev can make an incorrect routing judgment. The downstream system remains responsible for validation, permissions, and review.
Some projects publish their own evaluations; inspect their source for the latest methodology and results. This page does not reproduce benchmark, latency, or savings claims.
10 / SOURCES