All notable changes to jev-router are documented here. The format follows Keep a Changelog, and this project uses Semantic Versioning.
0.4.2 - 2026-10-12
- An explicit model on a subagent's Agent call is now kept for its whole life. Before, the subagent's first step asked Jev and replaced it. Every spawn outcome (explicit model, routed pick, failed pick) is now recorded, so a subagent never asks Jev again behind a decision made at spawn.
- The band no longer drops what other plugins draw above the prompt: it composes with them (theirs above, the band last, right above the input), also when routing is off.
0.4.1 - 2026-10-10
- Re-measured the long-session benchmark with 5 sessions per strategy and the new
leandefault. The guard still cuts model switches (6 to 7 down to 1) and halves cache re-writes, but it does not lower cost: guard on and off both cost +42% against Opus. The earlier "+24% vs +38%" (3 sessions) was noise and is retracted.leanaveraged the same cost as Opus in long warm sessions (range $0.26 to $0.63 per session); plain Sonnet was 43% cheaper. README, benchmarks, site and charts updated.
0.4.0 - 2026-10-10
- The default is now the
leanpreset: a Sonnet ceiling and effort capped atmedium. Chosen by a pre-registered rule on 100 more graded runs: 39/40 hard tasks done against 38/40 for always-Opus and always-Sonnet, at $0.064 per run against $0.163 (Opus) and $0.062 (Sonnet); 18/18 on the multi-step set at $0.061 per run. Opus is still used when Jev is at least 90% sure (ceilingBreak). To keep the old behaviour setpreset: balanced(or/jev preset balanced).
/jev preset lean|balanced|maxand apresetoption;/jev statusshows the active preset.- Benchmark harness:
> strategy filter, a lean strategy, and an opt-in Wilson interval for pass rates (CI=1). CI checks that the shipped defaults match the lean preset.
0.3.0 - 2026-10-09
- The band shows the model that really ran the last step. A mismatch reads
sonnet (picked opus); after a Jev failure it shows the session model instead of "waiting for the first task"; it flips from warm to cold on its own. - Model ceiling and floor (
ceiling,floor,ceilingBreak,/jev ceiling,/jev floor), applied before the cache guard. Off by default. A sonnet ceiling finished 20/20 hard tasks at half the cost of opus. - A real long-session benchmark (
benchmarks/session.mts, one process per session via stream-json) and a debug line with the cache state per Jev call.
- README and charts now use the measured long-session numbers. The earlier simulation's "3x more" is replaced by +38% (guard off) and +24% (guard on) against opus, and the README says plainly that in a long warm session routing cost more than staying on opus.
0.2.0 - 2026-10-09
- Per-step routing: Jev is asked again before every step of a task, not only at the prompt (
routeSteps). - Per-subagent routing: each subagent is routed at spawn from its full task prompt, sets the subagent's model and tags its description in the subagent list (
routeSubagents). Verified live. - Effort cap,
highby default, so thexhigh/maxthat Jev suggests on hard tasks no longer drives cost above always-opus. Lift it for one prompt with a!fullprefix or/jev full; change it with/jev cap <effort|none>or theeffortCapoption. The band shows the cap (⤓xhigh) and the unlock (🔓). - Circuit breaker: three failed Jev calls in a row pause routing, then it recovers; strict stickiness with a warm cache makes no step calls.
- Per-prompt markers:
!opus,!sonnet,!haiku,!fablepin a model and skip Jev;!cheap,!efficientset the mode; they combine with!full. - Escalation: after
escalateAfterfailed tool calls in a row the rest of the task moves up one model (verified live). - Estimated savings tally in
/jev statusagainstbaselineModel, kept across sessions;/jev stats clearresets it. - Privacy:
redact(on by default),sendHistory,maxTaskChars, and an opt-in localfallback: heuristicwhen Jev is down. - A debug log line per Jev call (
jev prompt|step N|agent), used to verify the above live. - CI workflow, band render test and an animated band GIF.
- Benchmark on harder tasks graded by hidden tests (100 real runs). On those tasks plain sonnet did as well as opus and cost 61% less; jev-router sits between them.
- Benchmarks for the effort cap and for multi-step and subagent routing on tasks with tools, with updated README images.
- Ponytail cleanup pass over the hook module: one subagent router, one usage tally (steps per model, in
/jev status), shared benchmark helpers, and the band GIF now renders the realsegments()so it cannot drift.
- Supply-chain hygiene: CI actions pinned to commit SHAs, Dependabot for Actions, a SECURITY.md, and no secret-looking literals in the tests (plugin-scanner: 100/100).
- Secret redaction now catches lowercase names (
password=,client_secret:,api_key=), JSON keys ("apiKey": "...") anduser:password@in URLs, and no longer mangles type words liketoken: string. - A pinned model (
!opus) now works without a Jev key, and the marker no longer sticks to the next prompt. A prompt with no key no longer runs on the previous task's pick. - The hard-task benchmark's hidden tests and reference solutions are sealed in an archive and unpacked only into a random temp directory while grading, so an agent cannot read them from disk. (A first run was discarded because they were readable.)
- Background-task notifications no longer trigger a Jev call or overwrite the task text.
- Spinner leak: the band ticker now stops on
turn.completeand on/jevcommands, and cancels itself if a prompt never completes.
- Jev routing per prompt: before each task, ask TypeSafe Jev which Claude model and effort fit best, then run the turn on it. Modes:
efficient,balanced,cheap. - The band above the prompt: mode, model tier, effort, confidence and cache state, with a spinner while a task runs.
/jevcommands:efficient,balanced,cheap,sticky,on,off,status,key.- Cache stickiness (
auto,strict,off): while the prompt cache is warm, a downgrade is refused and an upgrade needs a confident pick, so routing does not throw away a cache it would pay to rebuild. - Benchmarks: routing fit, cost, stability, overhead and cache stickiness over 30 tasks, plus real token usage and cost per mode against no plugin.
- Ponytail-style README with logo, hero art and benchmark charts.