AIDive

Pack video

Jev in Claude Code: modalità hint, il benchmark del gateway e una cattura delle richieste

13 min di lettura

TL;DR

  • Dentro Claude Code, jev-gateway non forza mai un tool. Una riga, steer: thinking || cached ? "hint" : "tool_choice", passa alla modalità hint appena la richiesta contiene extended thinking o una conversazione in cache, e una vera richiesta di Claude Code porta entrambi già al primo turno.
  • L'hint è un <system-reminder> di due frasi aggiunto all'ultimo messaggio utente. Il modello è libero di ignorarlo, e quando Claude Code ha già aggiunto un proprio system reminder come ultimo blocco, l'hint non viene allegato affatto.
  • Il benchmark del gateway stesso (120 sessioni) dice che per i modelli Claude il routing paga sul debugging e costa sulle feature: Opus 5 con +61% di token in input, +47% di richieste e +83% di tempo sul task di feature, Sonnet 5 con +16% di input e +37% di tempo.
  • Con Codex Jev morde davvero: il gateway forza il tool, e Jev ha guidato dal 76 al 100% delle richieste Codex contro il 34-51% di quelle Claude Code.
  • Misurato sulla nostra macchina: una richiesta pulita di Claude Code 2.1.280 porta già 24 tool e 47,411 token di prefisso; un setup normale con server MCP porta 40 tool e 57,277 token, e il gateway rimanda quell'elenco a Jev a ogni chiamata.
  • fast-jev-compaction, il tool Jev con più stelle, ha issue aperte che dicono che i suoi hook non si registrano sulle build attuali di Claude Code e che le trascrizioni complete partono verso un'API di terzi. Per ora no.

Cosa dicono le misurazioni

Jev è un modello decisionale, non un generatore di testo. Il suo vendor prezza l'input a $0.042 / MTok con output gratuito, dichiara un tempo di risposta end-to-end di 70ms-500ms, e sotto il proprio titolo "193.6x faster, 444.6x cheaper" scrive che queste cifre "are on the higher end of real world gains" s3. Lo stesso post ammette che le risposte di riferimento sono la media di GPT-6 Astra e Fable 5.1, il che sbilancia il confronto verso i modelli OpenAI e Anthropic s3.

jev-gateway si collega a Claude Code con una sola variabile d'ambiente: bin/clients.mjs imposta ANTHROPIC_BASE_URL sul gateway locale e lascia stare il login Max s1. In src/adapters/messages.ts il gateway chiede a Jev quale tool si adatta al passo successivo, poi decide come passare la risposta. Quando la richiesta ha thinking attivo o blocchi cache_control, manda un hint. Altrimenti imposta tool_choice s1. L'hint dice: un modello di routing dei tool suggerisce che il tool indicato è il passo successivo più rilevante, ignoralo se non corrisponde a ciò che l'utente ha davvero chiesto. Viene aggiunto all'ultimo messaggio utente come blocco <system-reminder> s1.

L'API di Anthropic non lascia altra scelta. Con l'extended thinking manuale attivo, tool_choice: any e tool_choice: tool non sono supportati e restituiscono un errore, e Claude Opus 5.5, Claude Fable 5.1 e Claude Mythos 5.1 restituiscono un 400 per l'uso forzato dei tool a prescindere dal thinking s4. Una sfumatura che il commento del gateway non coglie: la documentazione dice che Claude Opus 5 supporta la scelta forzata del tool con il thinking attivo s4. Sul caching, la gerarchia è tools, poi system, poi messages; un cambio di tool_choice invalida solo la cache dei messaggi, mentre modificare la definizione di un tool invalida l'intera cache, ed è per questo che il gateway aggiunge un blocco invece di riscrivere la descrizione di un tool s5.

Il benchmark che quasi nessuno cita è quello dell'autore del gateway. Sei modelli, due task, cinque run per modalità, 120 sessioni di agente tra il 2026-09-18 e il 19, modelli GPT in Codex 0.154, modelli Claude in Claude Code 2.1, ogni agente pulito, senza server MCP, plugin o skill s2. Su chess-bugfix ogni modello ha usato meno token con il routing e nessuno è diventato meno corretto. Su chess-san, il task di feature, il routing ha peggiorato nettamente Opus 5 e Sonnet 5, e gli autori ne indicano la causa: il gateway manda solo hint con i modelli Claude, quindi un hint fuori luogo costa una deviazione invece di essere ignorato gratis s2. Il routing è costato in correttezza anche una volta: GPT-5.6 Luna ha risolto chess-san cinque volte su cinque da solo e tre su cinque con il routing s2. Gli autori aggiungono che i token in input sono per lo più in cache (dall'80 al 96%), quindi un risparmio sull'input vale meno denaro dello stesso risparmio sull'output, e che Jev stesso è costato tra mezzo centesimo e dieci centesimi ogni cinque run s2. Uno dei 120 run, chess-bugfix.on.3 nella serie Luna, è marcato contaminated dopo che l'agente ha trovato in /tmp lo script di test di un altro run s2.

La nota del README che ha motivato il nostro test: con --user-tools, un setup mandava 285 tool e circa 200,000 token a ogni richiesta Claude Code, contro 6 tool e 7,000 token in versione pulita s2. Abbiamo misurato la stessa posizione. Una richiesta pulita di Claude Code 2.1.280 porta 24 tool, 87,547 caratteri di definizioni dei tool e 47,411 token di prefisso fatturati (16,221 scritti, 31,190 letti); il setup completo porta 40 tool, 93,179 caratteri di definizioni e 57,277 token di prefisso, tutti scritti. Entrambe portano thinking: {type: "adaptive"} e 3 blocchi cache_control, nessun tool_choice, che è esattamente la condizione che blocca la modalità hint in messages.ts s1. Una singola risposta "ok" costa $0.07 equivalenti API nel run pulito con Sonnet 5 e $1.15 nel run completo con Fable 5.1, letti dai campi total_cost_usd e usage di Claude Code stesso, la stessa posizione occupata dal launcher del gateway s1.

Su fast-jev-compaction, il plugin dietro il thread sulla "compaction istantanea" (punteggio 495, 117 commenti) s9, le issue aperte contano più del numero di stelle: la #21 segnala Hooks (0) dopo l'installazione perché session.compact e turn.complete non sono eventi hook riconosciuti su Claude Code 2.1.272, la #88 dice che gli hook non possono sostituire la compaction e che le trascrizioni complete vengono inviate a un'API di terzi, la #65 documenta 9 report consecutivi inventati di "lavoro completato" dopo una compaction, la #89 dice che la compaction viene annullata con --resume s7. La critica principale nel thread, con 84 punti, riguarda i ToS e i controlli sui dati del vendor s9. Il cookbook sul suggerimento delle skill è l'unico risultato misurato che il vendor pubblica per un elenco di agenti: la skill sbagliata caricata scende dal 16.8% al 7.3%, e una skill caricata quando nessuna si adatta scende dal 9.8% al 4.0% s13.

Misurazioni

Il benchmark del gateway, percentuali rispetto allo stesso modello con il routing disattivato s2.

chess-bugfix: trovare e correggere cinque bug iniettati

Modello Risolto, on / off Token in output Token in input Richieste LLM Secondi Guidato da Jev
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: aggiungere la notazione algebrica a un motore funzionante

Modello Risolto, on / off Token in output Token in input Richieste LLM Secondi Guidato da Jev
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%

La nostra cattura delle richieste, la posizione occupata da jev-gateway s1.

Pulito Completo
Modello scelto da Claude Code claude-sonnet-5 claude-fable-5-1 (impostazione utente, 1M)
thinking nella richiesta {type: "adaptive"} {type: "adaptive"}
Blocchi cache_control 3 3
tool_choice assente (auto) assente (auto)
Tool nella richiesta 24 40 (28 integrati + 12 MCP)
Definizioni dei tool, caratteri 87,547 93,179
System prompt, caratteri 27,754 12,436
Richiesta intera, caratteri 134,882 155,718
Token di prefisso fatturati (scrittura cache + lettura) 47,411 (16,221 written, 31,190 read) 57,277 (all written)
Token in output 4 4
Costo equivalente API di un "ok" $0.07 $1.15

Protocollo: un proxy di logging di 60 righe su 127.0.0.1:8790 inoltra ogni richiesta a https://api.anthropic.com byte per byte e registra ciò che contiene, esattamente la posizione che bin/clients.mjs dà a jev-gateway. Claude Code 2.1.280 eseguito in headless, claude -p "Reply with the single word ok. Do not use any tool." --output-format json --max-turns 1, da un repo Expo privato di 1,021 file tracciati, con un abbonamento claude.ai. Pulito: CLAUDE_CONFIG_DIR su una directory vuota, --strict-mcp-config, --setting-sources project. Completo: le normali impostazioni utente della macchina, .mcp.json del progetto, server MCP utente e plugin installati. Una richiesta per configurazione, solo il primo turno; nessuna chiave Jev, quindi le cifre di regressione sono il bench del gateway rieseguito, non riprodotto.

Da fare lunedì

  • Prima di aggiungere un router, misura la tua posizione: avvia un proxy di logging, punta ANTHROPIC_BASE_URL su di esso, esegui claude -p "Reply with the single word ok." --output-format json --max-turns 1 e leggi cache_creation_input_tokens più cache_read_input_tokens nell'output.
  • Conta i tool in quella richiesta. Se server MCP che usi di rado spingono in alto l'elenco, toglili da .mcp.json o limitali per progetto; quel taglio pesa su ogni richiesta, con o senza router.
  • Se vuoi comunque Jev in Claude Code, apri src/adapters/messages.ts nel tuo clone di jev-gateway e verifica la riga steer: con thinking o caching attivi, stai comprando un hint, non una route.
  • Esegui il bench del gateway sul tuo repo con --user-tools invece di fidarti delle tabelle sugli scacchi; tieni il routing solo se un task di caccia ai bug mostra meno richieste senza cambiare il risolto/non risolto.
  • Non installare fast-jev-compaction finché le issue #21, #88 e #89 non sono chiuse; verifica che /hooks elenchi più di zero hook dopo l'installazione.
  • Leggi i ToS del vendor prima di incollare una chiave: ogni richiesta instradata spedisce il tuo elenco di tool e l'ultimo messaggio, e il plugin di compaction spedisce le trascrizioni complete.
  • Se usi anche Codex, prova Jev prima lì: il tool_choice forzato è ciò che il bench mostra pagare.

Per approfondire

  • La tabella dell'uso forzato dei tool per modello, con quali modelli restituiscono un 400 e quali modalità di thinking bloccano any e tool s4.
  • La tabella di invalidazione della cache: tools, poi system, poi messages, e la riga tool_choice che spiega il design del gateway s5.
  • L'issue #24 su jev-gateway: l'elenco dei tool, invariato per tutta la sessione, viene rimandato a Jev a ogni richiesta, il centro di costo che la dashboard nasconde s14.
  • La sezione sull'integrità dei dati nel README del bench: 119 run su 120 tenuti da soli, un run marcato contaminated in runs.jsonl s2.
  • Una lettura indipendente di Jev come classificatore o filtro su dati pubblici e privati, fuori dall'ottica dei coding agent s12.
  • Perché le valutazioni del vendor misurano rispetto a due modelli e non alla verità di riferimento, e cosa questo fa ai moltiplicatori del titolo s11.
  • Una recensione di terzi di jev-gateway che percorre la divisione "Jev sceglie, l'LLM scrive" e la sua esposizione su localhost, corretta lo stesso giorno s8.
  • Il thread di lancio su HN, dove la questione di prezzi e sussidi viene discussa apertamente s10.

Fonti

FAQ

jev-gateway forza mai un tool dentro Claude Code?

Solo quando la richiesta non ha né extended thinking né blocchi cache_control. Le nostre richieste catturate al primo turno avevano entrambi, sia nel setup pulito sia in quello completo, quindi in pratica il gateway manda un hint.

Perché il gateway non riscrive semplicemente le descrizioni dei tool per guidare più forte?

Modificare le definizioni dei tool invalida l'intera cache del prompt: tools, system e messages. Aggiungere un blocco all'ultimo messaggio utente tocca solo il livello dei messaggi, che è il posto più economico dove mettere un hint.

Quindi Jev è inutile per programmare?

No. Il bench lo mostra pagare su Codex, dove il tool è forzato e dal 76 al 100% delle richieste è guidato, e sui task di debugging per ogni modello. A non essere supportato dai numeri del gateway è lo slogan del "Claude Code più economico".

Dovrei provare fast-jev-compaction?

Aspetta che le issue sulla registrazione degli hook (#21, #88) e quella su --resume (#89) siano chiuse, e decidi se accettare che le trascrizioni complete partano verso un'API di terzi nei tuoi repo.