AI Helpers
Un GPU, une charte,
tous les agents de code.
Une passerelle souveraine compatible OpenAI, posée devant votre propre GPU — votre propre processeur graphique. Elle porte les standards de l'équipe, applique des règles qu'on ne peut pas contourner, et compte le budget de contexte avec le tokenizer du serveur au lieu de croire l'estimation du client.
Deux attaques que personne d'autre ne filtre
Les deux ont été trouvées en envoyant des charges dans le vrai moteur, pas en relisant les motifs — comme la plupart des règles de ce projet.
La sortie qui exfiltre parce qu'on la regarde
Un résultat d'outil portant  n'a besoin d'aucune instruction ni d'aucune coopération du modèle : dès qu'un client le rend, le moteur de rendu va chercher l'adresse et la chaîne de requête atterrit dans le journal d'accès de quelqu'un d'autre. Rien ne demande à l'agent d'envoyer quoi que ce soit, donc une règle qui cherche une demande d'envoi ne trouve rien.
La charge utile ne peut pas être le signal — un seuil de longueur est une chose sous laquelle on se place, et les noms de paramètres appartiennent à l'attaquant. Ce qui marche est une liste blanche d'hôtes dont le contenu non fiable peut se télécharger, c'est-à-dire le modèle de la Content Security Policy, qui ne raisonne jamais sur la charge utile.
Une estimation qui refuse du mauvais côté
Quand aucun tokenizer n'est joignable, le budget retombe sur un ratio — et ce ratio sous-estimait jusqu'à 37 %, dans la direction même de l'incident qui a fait naître ce projet. Mesuré sur treize fichiers réels et trois familles de tokenizers, le vrai chiffre va de 2,51 à 4,23 caractères par jeton.
Il prend désormais le plancher mesuré, donc l'estimation n'est jamais optimiste, et il le dit : elle surestime la prose ordinaire d'environ la moitié, ce qui est la direction récupérable. Un chiffre qui peut refuser une requête ne doit jamais la flatter.
Pourquoi c'est au serveur de compter
Le 25/09/2026, une session s'est crue sous sa limite et a envoyé 40 433 tokens à un serveur configuré pour 32 768. Le serveur a compté pour de vrai, a refusé la requête entière, et la session est morte.
Le client ne mentait pas. Il estimait, avec sa propre règle de tokenisation, plus optimiste que celle du modèle sur le français et sur le code. L'écart était de 55 %. Tous les harnais font cela : Claude Code compacte à contexte effectif − 13 000, soit une estimation sur une estimation.
Le seul qui puisse compter juste est celui qui tient le tokenizer, et c'est le serveur.
| schémas d'outils (7) | 2 875 | client |
| prompt système du client | 960 | client |
| charte | 465 | ai-bunker |
| index des savoirs | 142 | ai-bunker |
| PLANCHER | 4 442 |
backend=server exact=True — compté par le moteur, pas estimé. Un plancher qu'on ne peut pas décomposer est un plancher qu'on ne peut pas réduire.
Quatre étapes, et l'ordre compte
Tout client qui parle OpenAI parle ai-bunker, et reçoit les quatre sans avoir été configuré pour. C'est l'argument qui justifie de mettre cela au point d'entrée plutôt que dans le harnais de chaque développeur : un plugin se désactive en éditant un fichier, et un autre harnais ne l'a simplement jamais eu.
L'étape 4 s'applique aussi au streaming, ce que tout client d'agent demande par défaut. Un appel d'outil livré en fragments est assemblé et jugé par le même chemin de code qu'un appel atomique, pendant que le texte autour continue de couler intact : aucun client ne peut échapper au filtrage en demandant un flux.
Des règles livrées avec leurs preuves
Une expression régulière est la chose la plus facile à se tromper ici, et une regex fausse échoue en silence : elle cesse d'apparier, personne ne le voit, le garde-fou a disparu. Chaque règle porte donc ses propres exemples, et ils tournent en intégration continue (CI).
$ ai-bunker rules --check
rules loaded 27
assertions passed 247
assertions failed 0
rules carrying evidence 100%
Trois motifs livrés étaient faux au premier jet — dont un dont la borne ne pouvait pas franchir le point de ~/.aws/credentials. Les exemples ont attrapé les trois avant tout déploiement.
2
portées : le texte qui entre, les commandes qui sortent
3,85
bits/car. — le seuil d'entropie mesuré qui distingue un identifiant d'un espace réservé
0
motif catastrophique autorisé à charger — le garde-fou en a attrapé deux dans un jeu de règles en production
Ce que ce n'est pas
- Pas un routeur à cent fournisseurs. LiteLLM est simplement meilleur là-dessus, et ai-bunker se place devant lui plutôt que de le concurrencer.
- Pas un classificateur de contenu. LLM Guard et Guardrails AI livrent des modèles entraînés ; ici ce sont des expressions régulières versionnées. Relisibles et gratuites à l'exécution — un arbitrage, pas une victoire.
- Pas mature. C'est un 0.2.0-alpha à côté de projets qui ont des années de production.
Ce que c'est
Les passerelles routent. Les garde-fous inspectent. Aucun ne compte.
ai-bunker est l'intersection, et ce coin de la carte reste peu peuplé. Moins vide qu'en 2025 cependant : un budget de jetons à la passerelle est désormais un motif que d'autres décrivent. Ce qui reste étroit, c'est de savoir quel tokeniseur fait le comptage.
Chaque chiffre de ce site a été mesuré. Là où une valeur est une estimation, elle le dit.