Intro : un indice, pas des économies
Jev ne rendra pas Claude Code moins cher, et le propre benchmark de la gateway le confirme. Cet article lit le code de jev-gateway et son dépôt de benchmark, puis place un proxy de journalisation devant une vraie session Claude Code pour voir ce qu'un routeur recevrait.
Jev est le modèle de décision de TypeSafe : une probabilité renvoyée en millisecondes, branchée à Claude Code par six vidéos en une semaine. L'argument de vente : « la boucle de codage agentique la moins chère ». Les propres chiffres de la gateway montrent Opus 5 faisant 47 % de requêtes en plus et prenant 83 % de temps en plus sur une tâche de feature avec le routage activé.
Comment un routeur qui répond en millisecondes peut-il ralentir Claude Code ? Tout tient à une ligne de code. À l'intérieur de Claude Code, Jev reçoit exactement deux phrases, et une session normale lui transmet 40 outils à chaque appel.
Ce qu'est Jev, et ce que vend la vague
Jev est un modèle de décision de TypeSafe. Il ne génère aucun texte : vous posez une question typée et il répond par un choix, un score ou une probabilité oui/non. Les chiffres du fournisseur :
| Chiffre | Valeur |
|---|---|
| Prix en entrée | 0,04 $ par million de tokens |
| Prix en sortie | gratuit (« trop bon marché pour être facturé ») |
| Latence | 70 à 500 ms |
| Titre de la page d'accueil | 194× plus rapide, 445× moins cher |
L'article de blog sous ce titre précise que ces deux multiplicateurs représentent la fourchette haute des gains réels, mesurés par rapport à la moyenne de deux modèles de pointe, une comparaison que les auteurs eux-mêmes reconnaissent biaisée en faveur de ces modèles.
Six vidéos en cinq jours ont branché Jev à Claude Code. La plus vue affiche 139 000 vues et le qualifie de boucle de codage agentique la moins chère à ce jour. Deux dépôts portent la vague : jev-gateway, un proxy local pour Claude Code et Codex créé cinq jours plus tôt avec 181 étoiles, et fast-jev-compaction, un plugin de compaction créé la veille, à 6 400 étoiles. La gateway est l'endroit où Claude Code se branche, c'est donc par là que commence la lecture.
Une variable, une ligne : le mode indice
jev-gateway se place entre Claude Code et l'API Anthropic. Elle lance Claude Code avec une seule variable d'environnement, ANTHROPIC_BASE_URL, pointée vers un port local. Rien d'autre ne change ; un commentaire dans le code source indique qu'il n'existe aucune identification propre à la gateway, si bien qu'une connexion Pro ou Max continue de fonctionner telle quelle.
Dans l'adaptateur (src/adapters/messages.ts, ligne 99), une ligne décide de ce que Jev a le droit de faire :
steer: thinking || cached ? "hint" : "tool_choice"
Avec la réflexion étendue activée, ou une conversation en cache, la gateway ne peut que suggérer. Sinon, elle force l'outil. Le commentaire au-dessus de la ligne explique pourquoi : l'API rejette un outil forcé pendant que la réflexion étendue est active, et changer tool_choice invalide la conversation en cache que Claude Code relit à chaque tour.
Pour vérifier à quoi ressemble une vraie requête, un proxy de journalisation de 60 lignes a pris la place de la gateway sur le même type de port, Claude Code lancé au travers, et une requête envoyée sur un vrai dépôt. La requête porte thinking: adaptive et trois marqueurs de cache ; tool_choice est absent ; 24 outils accompagnent une installation propre. En appliquant la ligne de la gateway à cette requête, le chemin forcé ne se déclenche jamais. Chaque appel de Claude Code atterrit en mode indice. Le README le dit lui-même : attendez-vous à de meilleurs choix d'outils sur de longues listes d'outils, pas à un coût ou une latence plus bas.
L'indice : deux phrases, et où il ne peut pas atterrir
Ce que Jev a le droit de faire à l'intérieur de Claude Code se résume à deux phrases ajoutées au dernier message : « un modèle de routage suggère que cet outil est le choix le plus pertinent maintenant. Ignorez ceci si cela ne convient pas. » C'est toute l'intervention. Le modèle est libre de l'ignorer, et tool_choice reste sur auto.
Forcer un outil n'est pas une option, selon la documentation d'Anthropic : un outil forcé renvoie une erreur 400 sur Opus 5.5 et Fable 5.1, et provoque une erreur avec la réflexion manuelle sur les autres modèles. Changer tool_choice est exclu aussi : la documentation sur le cache de prompt indique que cela invalide le cache des messages, la plus grande partie d'une longue session. Modifier la description d'un outil invalide tout le cache : outils, système et messages.
| Modification de la requête | Effet sur le cache de prompt |
|---|---|
| Ajouter un indice au dernier message utilisateur | préfixe en cache inchangé |
Changer tool_choice |
cache des messages invalidé |
| Modifier la définition d'un outil | outils, système et messages invalidés |
Le commentaire de la gateway explique pourquoi l'indice est ajouté en dernier : le préfixe en cache reste identique, octet pour octet, à ce que Claude Code renvoie au tour suivant. Un garde-fou est placé devant : quand le dernier message n'est pas celui de l'utilisateur, la requête passe sans modification. Les deux requêtes capturées se terminaient toutes deux sur un bloc système que Claude Code ajoute lui-même, un rappel d'environnement dans l'une, la sortie d'un hook dans l'autre. Sur cette forme, l'indice n'a nulle part où atterrir. Il atterrit bien sur d'autres tours, puisque les résultats d'outils reviennent sous forme de messages utilisateur, et le benchmark comptabilise Jev pilotant un tiers à la moitié des requêtes de Claude Code.
Le benchmark que personne ne cite
Le propre benchmark de la gateway, jev-gateway-bench, répond à la question de départ. Il a fait tourner 120 sessions, cinq passages par cellule, sur le même Claude Code et le même abonnement que tout le monde utilise, sans serveurs MCP, plugins ni skills. Deux tâches sur un petit moteur d'échecs : une chasse aux bugs avec cinq bugs injectés, et une feature, l'ajout de la notation algébrique.
| Modèle, tâche | Routage activé vs désactivé |
|---|---|
| Opus 5, feature | +61 % de tokens en entrée, +47 % de requêtes, +83 % de temps (a quand même résolu 5/5) |
| Sonnet 5, feature | +16 % de tokens en entrée, +37 % de temps |
| Sonnet 5, chasse aux bugs | −48 % de tokens en entrée, −25 % de temps |
Le débogage est là où le routage paie, selon les mots des auteurs. Leur explication répond à la question posée en ouverture : la gateway ne fait que suggérer avec les modèles Claude, donc un indice qui ne convient pas coûte un détour au lieu d'être ignoré gratuitement.
Codex reçoit la version forcée. Jev décidait de 76 à 100 % des requêtes Codex, contre un tiers à la moitié pour Claude Code. Un modèle dans l'autre harnais est devenu moins cher et faux, trois résolutions sur cinq au lieu de cinq. Moins cher et faux n'est pas une économie.
Les limites sont réelles : cinq passages par cellule est un petit échantillon, c'est un seul moteur jouet, et personne ne l'a rejoué. L'entrée est aussi en grande partie mise en cache, donc une économie en entrée vaut moins qu'une économie en sortie.
Ce que ma session lui donne : 24 outils propre, 40 complet
Que transmet une session Claude Code normale à un routeur à chaque appel ? Le journal du proxy répond : 40 outils. Même dépôt, même prompt d'un seul mot, deux configurations : une installation propre avec une config vide et aucun serveur MCP, et une configuration normale avec ses serveurs et ses plugins.
| Installation propre | Configuration normale | |
|---|---|---|
| Outils dans la requête | 24 | 40 (16 issus de serveurs MCP et de plugins) |
| Tokens de préfixe facturés | 47 411 | 57 277 |
| Tokens en sortie | 4 | 4 |
| Coût équivalent API d'un « ok » | 0,07 $ | 1,15 $ |
La liste d'outils, c'est la facture. Les définitions les plus lourdes sont intégrées d'office : l'outil shell à lui seul fait 12 000 caractères, l'outil agent près de 9 000.
La note de bas de page du benchmark relevait six outils et 7 000 tokens sur une installation propre, et 285 outils sur une configuration chargée. Le Claude Code propre d'aujourd'hui embarque bien plus d'outils par défaut, et le cas chargé est plus rare : la plupart des outils MCP se tiennent derrière un outil de recherche, différés, si bien que la liste vue par un routeur reste petite. Quelle que soit sa taille, la gateway envoie cette liste à Jev à chaque requête ; une issue ouverte sur le dépôt indique que le coût complet est payé avant que la plupart des réponses ne soient jetées. Rien de tout cela n'est la faute de Jev, et rien de tout cela n'est à Jev de corriger.
Verdict par usage
Le routage à l'intérieur de Claude Code : non. C'est un indice que le modèle peut ignorer, il a ralenti le travail sur les features sur les deux modèles Claude, et le seul gain se situe sur le débogage. L'exception est une journée de chasse aux bugs sur une très longue liste d'outils, le cas même que le README désigne.
Le plugin de compaction, fast-jev-compaction : pas encore. Il nécessite un flag de hook en accès anticipé, ses issues ouvertes signalent que les hooks ne s'enregistrent pas sur certaines versions, et après une compaction le modèle a rédigé neuf rapports affirmant que le travail était terminé, tous fabriqués. Les praticiens y sont arrivés les premiers : le fil le plus populaire sur le plugin totalise 491 points, et sa principale objection n'est pas la vitesse mais les conditions d'utilisation sur l'envoi des transcriptions à un tiers.
Codex : c'est là la vraie cible. Là, la gateway force l'outil, Jev pilotait jusqu'à chaque requête, et la chasse aux bugs a tourné avec 57 % de tokens en sortie en moins.
| Usage | Verdict |
|---|---|
| Routage dans Claude Code | Non, sauf chasses aux bugs sur une très longue liste d'outils |
| fast-jev-compaction | Pas encore |
| Codex | Oui |
Une chose que la vague a bien faite : la connexion à l'abonnement ne bouge jamais, la gateway ne change qu'une URL. Les limites de cette lecture : cinq passages par cellule, un seul moteur d'échecs, un dépôt de benchmark que personne n'a rejoué, et aucune session routée en propre. J'ai mesuré la liste d'outils et la requête, pas Jev. Jev lui-même est bon marché. Le détour, lui, ne l'est pas.
AIDive