TL;DR
- In Claude Code erzwingt jev-gateway nie ein Tool. Eine einzige Zeile,
steer: thinking || cached ? "hint" : "tool_choice", schaltet in den Hint-Modus, sobald die Anfrage Extended Thinking oder eine gecachte Konversation enthält, und eine echte Claude-Code-Anfrage enthält beides schon im ersten Turn. - Der Hint ist ein
<system-reminder>aus zwei Sätzen, angehängt an die letzte User-Nachricht. Das Modell darf ihn ignorieren, und wenn Claude Code bereits einen eigenen System-Reminder als letzten Block angehängt hat, wird der Hint gar nicht erst angehängt. - Der eigene Benchmark des Gateways (120 Sessions) zeigt: Routing lohnt sich beim Debuggen und kostet bei Feature-Arbeit, zumindest mit Claude-Modellen: Opus 5 mit +61% Input-Tokens, +47% Requests und +83% Zeit bei der Feature-Aufgabe, Sonnet 5 mit +16% Input und +37% Zeit.
- Bei Codex greift Jev: Das Gateway erzwingt dort das Tool, Jev steuerte 76 bis 100% der Codex-Requests, aber nur 34 bis 51% der Claude-Code-Requests.
- Auf unserer Maschine gemessen: Eine saubere Claude-Code-2.1.280-Anfrage trägt schon 24 Tools und 47,411 Prefix-Tokens; ein normales Setup mit MCP-Servern trägt 40 Tools und 57,277 Tokens, und das Gateway schickt dieses Roster bei jedem Aufruf erneut an Jev.
- fast-jev-compaction, das meistbesternte Jev-Tool, hat offene Issues: Die Hooks registrieren sich auf aktuellen Claude-Code-Builds nicht, und komplette Transkripte gehen an eine Drittanbieter-API. Noch nicht.
Was die Messungen sagen
Jev ist ein Entscheidungsmodell, kein Textgenerator. Der Anbieter berechnet Input mit $0.042 / MTok bei kostenlosem Output, nennt eine End-to-End-Antwortzeit von 70ms-500ms und schreibt unter seiner Schlagzeile "193.6x faster, 444.6x cheaper", dass diese Werte "are on the higher end of real world gains" sind s3. Derselbe Beitrag räumt ein, dass die Referenzantworten aus dem Mittel von GPT-6 Astra und Fable 5.1 bestehen, was den Vergleich zugunsten von OpenAI- und Anthropic-Modellen verzerrt s3.
jev-gateway hängt sich über eine einzige Umgebungsvariable in Claude Code ein: bin/clients.mjs setzt ANTHROPIC_BASE_URL auf das lokale Gateway und lässt den Max-Login unberührt s1. In src/adapters/messages.ts fragt das Gateway Jev, welches Tool zum nächsten Schritt passt, und entscheidet dann, wie die Antwort weitergegeben wird. Ist in der Anfrage thinking aktiviert oder sind cache_control-Blöcke vorhanden, gibt es einen Hint. Sonst setzt es tool_choice s1. Der Hint lautet sinngemäß: Ein Tool-Routing-Modell schlägt das genannte Tool als relevantesten nächsten Schritt vor, ignoriere das, wenn es nicht zu dem passt, was der User tatsächlich gefragt hat. Er wird als <system-reminder>-Block an die letzte User-Nachricht angehängt s1.
Die Anthropic-API lässt keine andere Wahl. Bei aktiviertem manuellem Extended Thinking werden tool_choice: any und tool_choice: tool nicht unterstützt und liefern einen Fehler, und Claude Opus 5.5, Claude Fable 5.1 und Claude Mythos 5.1 liefern bei erzwungener Tool-Nutzung unabhängig von Thinking einen 400 s4. Eine Nuance, die der Kommentar des Gateways übersieht: Laut Docs unterstützt Claude Opus 5 erzwungene Tool-Wahl auch mit aktivem Thinking s4. Zum Caching: Die Hierarchie ist tools, dann system, dann messages; eine Änderung an tool_choice invalidiert nur den Messages-Cache, während das Bearbeiten einer Tool-Definition den gesamten Cache invalidiert. Deshalb hängt das Gateway einen Block an, statt eine Tool-Beschreibung umzuschreiben s5.
Der Benchmark, den kaum jemand zitiert, ist der des Gateway-Autors selbst. Sechs Modelle, zwei Aufgaben, fünf Läufe pro Modus, 120 Agent-Sessions am 2026-09-18 und 19, GPT-Modelle in Codex 0.154, Claude-Modelle in Claude Code 2.1, jeder Agent sauber ohne MCP-Server, Plugins oder Skills s2. Bei chess-bugfix brauchte jedes Modell mit Routing weniger Tokens, und nichts wurde weniger korrekt. Bei chess-san, der Feature-Aufgabe, machte Routing Opus 5 und Sonnet 5 deutlich schlechter, und die Autoren nennen die Ursache: Das Gateway hintet nur bei Claude-Modellen, sodass ein unpassender Hint einen Umweg kostet, statt kostenlos ignoriert zu werden s2. Routing kostete einmal auch Korrektheit: GPT-5.6 Luna löste chess-san allein fünf von fünf Mal und mit Routing drei von fünf Mal s2. Die Autoren ergänzen, dass Input-Tokens größtenteils gecacht sind (80 bis 96%), eine Input-Ersparnis also weniger Geld wert ist als dieselbe Ersparnis bei Output-Tokens, und dass Jev selbst zwischen einem halben Cent und zehn Cent pro fünf Läufe kostete s2. Einer der 120 Läufe, chess-bugfix.on.3 in der Luna-Serie, ist als contaminated markiert, nachdem der Agent das Testskript eines anderen Laufs in /tmp gefunden hatte s2.
Die README-Fußnote, die unseren eigenen Test motiviert hat: Mit --user-tools schickte ein Setup bei jeder Claude-Code-Anfrage 285 Tools und rund 200,000 Tokens mit, gegenüber 6 Tools und 7,000 Tokens im sauberen Zustand s2. Wir haben denselben Platz gemessen. Eine saubere Claude-Code-2.1.280-Anfrage trägt 24 Tools, 87,547 Zeichen Tool-Definitionen und 47,411 abgerechnete Prefix-Tokens (16,221 geschrieben, 31,190 gelesen); das volle Setup trägt 40 Tools, 93,179 Zeichen Definitionen und 57,277 Prefix-Tokens, alle geschrieben. Beide enthalten thinking: {type: "adaptive"} und 3 cache_control-Blöcke, kein tool_choice, genau die Bedingung, die in messages.ts den Hint-Modus festnagelt s1. Eine einzelne "ok"-Antwort kostet $0.07 API-Äquivalent im sauberen Sonnet-5-Lauf und $1.15 im vollen Fable-5.1-Lauf, abgelesen an den Feldern total_cost_usd und usage von Claude Code selbst, an derselben Stelle, an der der Launcher des Gateways sitzt s1.
Zu fast-jev-compaction, dem Plugin hinter dem Thread zur "instant compaction" (Score 495, 117 Kommentare) s9: Die offenen Issues wiegen schwerer als die Sternzahl. #21 meldet Hooks (0) nach der Installation, weil session.compact und turn.complete auf Claude Code 2.1.272 keine erkannten Hook-Events sind, #88 sagt, Hooks könnten die Compaction nicht ersetzen und komplette Transkripte gingen an eine Drittanbieter-API, #65 dokumentiert 9 aufeinanderfolgende erfundene "work done"-Berichte nach einer Compaction, #89 sagt, die Compaction werde bei --resume rückgängig gemacht s7. Die Top-Beschwerde im Thread, mit 84 Punkten, betrifft die ToS und Datenkontrollen des Anbieters s9. Das Skill-Suggestion-Cookbook ist der eine gemessene Gewinn, den der Anbieter für ein Agent-Roster veröffentlicht: falsch geladene Skills sinken von 16.8% auf 7.3%, und ein geladener Skill, obwohl keiner passt, sinkt von 9.8% auf 4.0% s13.
Messwerte
Der Benchmark des Gateways, Prozentwerte gegenüber demselben Modell mit ausgeschaltetem Routing s2.
chess-bugfix: fünf eingebaute Bugs finden und beheben
| Modell | Gelöst, an / aus | Output-Tokens | Input-Tokens | LLM-Requests | Sekunden | Von Jev gesteuert |
|---|---|---|---|---|---|---|
| GPT-6 Astra | 5/5 · 5/5 | 1,226 (-57%) | 96k (-7%) | 5 (0%) | 41 (-39%) | 100% |
| GPT-5.6 Sol | 5/5 · 5/5 | 3,211 (-57%) | 202k (-40%) | 9 (-36%) | 78 (-36%) | 93% |
| GPT-5.6 Luna | 1/4 · 0/5 | 10,519 (-12%) | 506k (-10%) | 19.5 (-15%) | 200 (+10%) | 86% |
| Fable 5.1 | 5/5 · 5/5 | 8,675 (-13%) | 276k (-19%) | 14 (-22%) | 148 (+6%) | 45% |
| Opus 5 | 5/5 · 5/5 | 16,693 (-7%) | 406k (-22%) | 18 (-14%) | 218 (+2%) | 38% |
| Sonnet 5 | 5/5 · 5/5 | 16,623 (-41%) | 616k (-48%) | 26 (-26%) | 243 (-25%) | 34% |
chess-san: Algebraische Notation zu einer funktionierenden Engine hinzufügen
| Modell | Gelöst, an / aus | Output-Tokens | Input-Tokens | LLM-Requests | Sekunden | Von Jev gesteuert |
|---|---|---|---|---|---|---|
| GPT-6 Astra | 5/5 · 5/5 | 3,663 (0%) | 143k (+2%) | 7 (0%) | 88 (+8%) | 95% |
| GPT-5.6 Sol | 5/5 · 5/5 | 5,096 (-9%) | 147k (-39%) | 7 (-36%) | 78 (-16%) | 86% |
| GPT-5.6 Luna | 3/5 · 5/5 | 6,809 (-14%) | 315k (-51%) | 14 (-42%) | 121 (-14%) | 76% |
| Fable 5.1 | 5/5 · 5/5 | 13,497 (-24%) | 331k (-27%) | 13 (-19%) | 167 (-26%) | 51% |
| Opus 5 | 5/5 · 5/5 | 20,152 (+22%) | 676k (+61%) | 25 (+47%) | 390 (+83%) | 44% |
| Sonnet 5 | 5/5 · 5/5 | 23,487 (+9%) | 991k (+16%) | 32 (+3%) | 327 (+37%) | 42% |
Unser eigener Request-Mitschnitt, an der Stelle, an der jev-gateway sitzt s1.
| Sauber | Voll | |
|---|---|---|
| Von Claude Code gewähltes Modell | claude-sonnet-5 | claude-fable-5-1 (User-Einstellung, 1M) |
thinking in der Anfrage |
{type: "adaptive"} |
{type: "adaptive"} |
cache_control-Blöcke |
3 | 3 |
tool_choice |
nicht vorhanden (auto) | nicht vorhanden (auto) |
| Tools in der Anfrage | 24 | 40 (28 built-in + 12 MCP) |
| Tool-Definitionen, Zeichen | 87,547 | 93,179 |
| System-Prompt, Zeichen | 27,754 | 12,436 |
| Gesamte Anfrage, Zeichen | 134,882 | 155,718 |
| Abgerechnete Prefix-Tokens (Cache write + read) | 47,411 (16,221 geschrieben, 31,190 gelesen) | 57,277 (alle geschrieben) |
| Output-Tokens | 4 | 4 |
| API-Äquivalent-Kosten eines "ok" | $0.07 | $1.15 |
Protokoll: Ein Logging-Proxy mit 60 Zeilen auf 127.0.0.1:8790 leitet jede Anfrage Byte für Byte an https://api.anthropic.com weiter und protokolliert, was sie enthält, genau der Platz, den bin/clients.mjs jev-gateway gibt. Claude Code 2.1.280 lief headless, claude -p "Reply with the single word ok. Do not use any tool." --output-format json --max-turns 1, aus einem privaten Expo-Repo mit 1,021 getrackten Dateien, mit einem claude.ai-Abonnement. Sauber: CLAUDE_CONFIG_DIR auf einem leeren Verzeichnis, --strict-mcp-config, --setting-sources project. Voll: die normalen User-Einstellungen der Maschine, das .mcp.json des Projekts, User-MCP-Server und installierte Plugins. Eine Anfrage pro Konfiguration, nur der erste Turn; ohne Jev-Key sind die Regressionswerte der Bench des Gateways nachgespielt, nicht reproduziert.
Das machst du am Montag
- Miss deinen eigenen Platz, bevor du einen Router hinzufügst: Starte einen Logging-Proxy, richte
ANTHROPIC_BASE_URLdarauf, führeclaude -p "Reply with the single word ok." --output-format json --max-turns 1aus und liescache_creation_input_tokenspluscache_read_input_tokensin der Ausgabe ab. - Zähle die Tools in dieser Anfrage. Wenn selten genutzte MCP-Server das Roster aufblähen, entferne sie aus
.mcp.jsonoder beschränke sie pro Projekt; diese Einsparung wirkt bei jeder Anfrage, mit oder ohne Router. - Wenn du Jev trotzdem in Claude Code willst, öffne
src/adapters/messages.tsin deinem Clone von jev-gateway und prüfe diesteer-Zeile: Mit Thinking oder Caching kaufst du einen Hint, keine Route. - Lass die Bench des Gateways mit
--user-toolsauf deinem eigenen Repo laufen, statt den Schach-Tabellen zu trauen; behalte Routing nur, wenn eine Bug-Suche weniger Requests ohne Änderung bei gelöst/nicht gelöst zeigt. - Installiere fast-jev-compaction nicht, bevor die Issues #21, #88 und #89 geschlossen sind; prüfe nach der Installation, dass
/hooksmehr als null Hooks auflistet. - Lies die ToS des Anbieters, bevor du einen Key einfügst: Jede gerouteteten Anfrage schickt dein Tool-Roster und die letzte Nachricht mit, und das Compaction-Plugin schickt komplette Transkripte.
- Wenn du auch Codex nutzt, teste Jev zuerst dort: Erzwungenes
tool_choiceist das, was sich in der Bench auszahlt.
Weiterlesen
- Die Tabelle zur erzwungenen Tool-Nutzung pro Modell, mit den Modellen, die einen 400 liefern, und den Thinking-Modi, die
anyundtoolblockieren s4. - Die Tabelle zur Cache-Invalidierung:
tools, dannsystem, dannmessages, und dietool_choice-Zeile, die das Design des Gateways erklärt s5. - Issue #24 bei jev-gateway: Das sessionkonstante Tool-Roster wird bei jeder Anfrage erneut an Jev geschickt, der Kostentreiber, den das Dashboard verbirgt s14.
- Der Datenintegritäts-Abschnitt im Bench-README: 119 von 120 Läufen blieben unter sich, ein Lauf in
runs.jsonlalscontaminatedmarkiert s2. - Eine unabhängige Einschätzung von Jev als Klassifikator oder Filter auf öffentlichen und privaten Daten, außerhalb des Coding-Agent-Rahmens s12.
- Warum die Evals des Anbieters gegen zwei Modelle statt gegen die Ground Truth messen und was das mit den Schlagzeilen-Multiplikatoren macht s11.
- Ein Drittanbieter-Review von jev-gateway, das die Aufteilung "Jev picks, the LLM writes" und die Localhost-Exponierung durchgeht, am selben Tag behoben s8.
- Der HN-Launch-Thread, in dem die Frage nach Preis und Subvention offen diskutiert wird s10.
Quellen
- jev-gateway, GitHub, vinilana. Warum lesen:
src/adapters/messages.tsenthält die eine Zeile, die zwischen Hint und erzwungenem Tool entscheidet, undbin/clients.mjszeigt, dass der Launcher nurANTHROPIC_BASE_URLsetzt. - jev-gateway-bench, GitHub, vinilana. Warum lesen: die komplette 120-Session-Tabelle und die eigene Auswertung der Autoren, inklusive des einen kontaminierten Laufs.
- Introducing System One Models & Jev, TypeSafe AI. Warum lesen: Preise, Latenz und die Fußnote, die die 444.6x-Behauptung einschränkt, vom Anbieter selbst.
- Forcing tool use, Anthropic docs. Warum lesen: die Tabelle pro Modell, welche
tool_choice-Werte einen Fehler auslösen. - Prompt caching, Anthropic docs. Warum lesen: die Invalidierungshierarchie, die das Hint-Design erzwingt.
- fast-jev-compaction, GitHub, tamaratran. Warum lesen: Öffne den Issues-Tab vor dem README.
- jev-gateway Review: Jev Picks, the LLM Writes, mrjev.com. Warum lesen: ein externer Durchgang durch die Architektur des Gateways.
- Instant Claude Code compaction is my favorite use of Jev so far, r/ClaudeCode. Warum lesen: der Praktiker-Thread, mit dem ToS-Einwand ganz oben.
- HN: Introducing System One Models and Jev, Hacker News. Warum lesen: die Launch-Debatte zu Preis und Nachhaltigkeit.
- The Evals: Measured Against Two Models, Not Against Truth, novcog. Warum lesen: eine Kritik der Evaluationsmethode hinter den Multiplikatoren des Anbieters.
- Testing Jev on public and private data: classifier or filter, Aman Kumar. Warum lesen: eine unabhängige Messung außerhalb von Coding-Agents.
- Skill suggestion cookbook, TypeSafe docs. Warum lesen: die einzigen veröffentlichten Zahlen zur Roster-Auswahl, 16.8% auf 7.3%.
- jev-gateway issue #24, GitHub. Warum lesen: die Kosten des erneuten Roster-Versands, die niemand mitzählt.
- Jev + Claude Code: compaction and a Sonnet 5 source check, jevmodel.ai. Warum lesen: ein zweiter Blick auf die Compaction-Behauptung mit einem Sonnet-5-Check.
FAQ
Erzwingt jev-gateway in Claude Code jemals ein Tool?
Nur wenn die Anfrage weder Extended Thinking noch cache_control-Blöcke enthält. Unsere mitgeschnittenen Erst-Turn-Anfragen hatten beides, im sauberen wie im vollen Setup, also hintet das Gateway in der Praxis.
Warum schreibt das Gateway nicht einfach die Tool-Beschreibungen um, um stärker zu steuern?
Das Ändern von Tool-Definitionen invalidiert den gesamten Prompt-Cache, tools, system und messages. Einen Block an die letzte User-Nachricht anzuhängen berührt nur die Messages-Ebene, den günstigsten Ort für einen Hint.
Ist Jev dann nutzlos fürs Coding?
Nein. Die Bench zeigt, dass es sich bei Codex auszahlt, wo das Tool erzwungen wird und 76 bis 100% der Requests gesteuert werden, und bei Debugging-Aufgaben für jedes Modell. Es ist die Darstellung als "günstigstes Claude Code", die die eigenen Zahlen des Gateways nicht stützen.
Sollte ich fast-jev-compaction ausprobieren?
Warte, bis die Issues zur Hook-Registrierung (#21, #88) und das --resume-Issue (#89) geschlossen sind, und entscheide, ob es für deine Repos akzeptabel ist, dass komplette Transkripte an eine Drittanbieter-API gehen.
AIDive