Comment cet agent est tenu
Cet agent est tenu comme un service de production : chaque réponse servie passe un contrôle mécanique, un banc de cas fixes le note chaque semaine avec un juge, et les chiffres de cette page sortent en direct de la base qui les produit.
À retenir
Lecture des mesures…
Les mesures ne sont pas joignables
Le service qui calcule ces agrégats ne répond pas en ce moment. Les chiffres, eux, ne sont pas perdus : ils vivent dans la base de l’agent, et cette page les relit à chaque chargement.
Cette page ne garde aucune copie de secours, et c’est volontaire : un chiffre figé dans le HTML survivrait à la panne en affirmant quelque chose que plus rien ne vérifie.
Le banc de non-régression
Chaque semaine, l’agent repasse le même jeu de questions et un juge note chacune de ses réponses. Ce panneau ne trace aucune courbe, et c’est exactement ce qu’il a à dire aujourd’hui.
Une note n’a de sens que comparée à une note prise avec le même instrument. Le détecteur exige plusieurs passes comparables avant de conclure.
Comparable veut dire quatre choses à la fois : le même jeu de cas, le même juge, le même modèle derrière l’agent, et aucun cas laissé sans note. Le jeu a changé plusieurs fois pendant sa mise au point, et chaque changement remet le compteur à zéro, comme le passage de Gemini à Claude Haiku le 12 octobre 2026. C’est à dessein : comparer des notes prises avec deux instruments différents, ce serait mesurer les modifications du code et les appeler qualité.
La série temporelle apparaîtra à cet endroit quand le compteur atteindra son seuil. D’ici là, la place est occupée par la règle, qui est elle-même le propos : un instrument qui refuse de conclure sur un point est plus convaincant qu’une courbe tracée sur trois.
Les passes comparables, l’une après l’autre
La dernière passe comparable, axe par axe
Comment c’est mesuré
Chaque barre compte les cas selon la note que le juge leur a donnée, de 5 à 0, et le nombre écrit dans un segment est un nombre de cas. Une note sous la porte de l’axe fait échouer le cas, quelle que soit la note des autres axes ; la concision est notée mais ne fait rien échouer. Un cas échoue aussi, hors du juge, quand un contrôle mécanique le refuse ou que l’outil attendu n’a pas été appelé : la liste au-dessus des barres compte les cas par cause, sans publier les questions du banc. Une passe seule ne dit rien d’une tendance, et elle ne se comparera à aucune autre avant que le compteur du dessus atteigne son seuil.
Le contrôle mécanique, sur toutes les réponses servies
Chaque réponse servie est relue par un contrôle sans réseau et sans modèle, axe par axe. Il ne coûte rien, il tourne sur la totalité des réponses, et son verdict est écrit en base à côté de la réponse qu’il juge.
Comment c’est mesuré
Un contrôle qui ne s’applique pas est marqué non applicable, jamais faux. Sans cette règle, une réponse qui n’avait aucun chiffre volatil à dater compterait comme défectueuse, et le tableau mentirait dans le sens qui l’arrange.
Pourquoi une réponse échoue
Observés, sans peser sur le verdict
Et l’aveu qui vaut mieux que le silence : le juge du banc ne note pas le trafic réel. Privé des extraits sur lesquels il devrait s’appuyer, son ancrage s’effondre, mesuré. Ce qui tourne à la place est ce tableau : gratuit, sans réseau, sur chaque réponse servie.
La latence, et sur quoi elle est mesurée
Le temps que met une réponse complète, et le temps que met le premier mot à s’afficher. Deux mesures différentes, deux populations différentes, et la page dit laquelle est laquelle.
Les réponses servies depuis le cache
Seule une première question y entre, après les quatre gardes, et seulement une réponse qui a passé le contrôle mécanique ; tout changement de données, de consigne ou de modèles l’invalide, et une entrée expire d’elle-même.
Le temps jusqu’au premier mot
Comment c’est mesuré
Seuls les appels en flux portent un vrai temps de premier mot. Sur le chemin non streamé, les en-têtes n’arrivent qu’une fois la réponse entière prête : leur mesure vaut la durée totale, et la compter ici afficherait des dépassements qui n’en sont pas.
Pas de courbe par jour, et la raison est méthodologique.
Une latence mesurée sur du trafic libre n’est pas comparable d’un jour à l’autre, parce que ce ne sont pas les mêmes questions. Le banc, lui, pose exactement les mêmes à chaque passe : c’est la seule série de latence qu’on ait le droit de comparer dans le temps, et elle est publiée avec le banc, plus haut, passe par passe.
Ce qui est refusé avant tout appel de modèle
Une part des demandes n’atteint jamais un modèle : une garde les arrête d’abord. Cette section compte ces blocages et nomme leurs motifs, sans jamais montrer la question qui les a déclenchés.
Ce que les gardes ont bloqué
Comment c’est mesuré
Les motifs sont recopiés mot pour mot d’une liste figée dans le code du filtre. Aucun texte de visiteur ne sort de la base : la page compte des blocages, elle ne montre pas des questions.
Le compte, lui, est juste ; c’est le libellé qui l’est moins. Plusieurs entrées de la liste d’origine sont écrites comme des variantes de celle qui les précède, et ne se lisent qu’à leur place dans le fichier. Le tri par nombre de blocages les détache de cet antécédent : une même étiquette peut alors réunir des tentatives que la liste d’origine distingue.
Ce que ces blocages ne prouvent pas
Ce filtre est une première ligne : il arrête ce qui est bon marché et évident. Un filtre par expressions régulières sur l’injection de prompt est intrinsèquement perméable, et le banc qui vit dans le même dépôt le mesure plutôt que de l’espérer. Le 27 août 2026, sur huit formulations tenues à l’écart de sa conception, il n’en a arrêté qu’une. La correction des faux positifs généralise ; le gain de rappel, non.
La défense réelle est ailleurs, et elle est structurelle : les outils de l’agent sont en lecture seule, le corpus qu’il consulte est déjà public, et le prompt système ne contient aucun secret. Une injection qui passerait ce filtre n’ouvrirait rien, parce qu’il n’y a rien à ouvrir.
Un second filtre, et un second avis
Chaque question est aussi lue par un classifieur d’injection entraîné, retenu sur un banc de questions tenues à l’écart des motifs du premier filtre. Au-dessus de son seuil, il bloque, mais pas seul : un modèle de langage relit la question comme une simple donnée, et le refus ne tient que si les deux sont d’accord. Ce second avis ne peut que débloquer ; en panne ou dans le doute, le refus tient.
Comment c’est mesuré
Une réponse servie qu’il aurait refusée est une question que le second avis a jugée légitime, ou une réponse servie pendant une panne du classifieur. Cette page ne lit pas les questions : elle les compte.
Le graphe d’état, lu à chaque chargement
Cet agent n’est pas un appel de modèle enveloppé dans une boucle : c’est une machine à états, et voici la sienne. Le dessin ci-dessous n’est pas une image exportée un jour de mise au point, c’est la topologie que le service publie de son propre graphe.
Comment c’est mesuré
Cette topologie est relue à chaque ouverture de cette page, dans le service qui fait tourner l’agent, exactement comme les chiffres des autres panneaux. Un nœud ajouté au graphe demain apparaît ici au chargement suivant, sans qu’une ligne de cette page change. L’empreinte ci-dessus est celle de la topologie servie : deux chargements qui la partagent ont vu le même agent.
Les noms des boîtes sont ceux que le code de l’agent donne à ses nœuds, tels que le service les publie. Aucun n’a été réécrit pour cette page, et c’est ce qui rend le dessin vérifiable : ce sont les mêmes mots dans le graphe et dans le fichier qui le construit.
La boucle, mesurée
Comment c’est mesuré
Un tour est un appel du modèle. Une réponse en un tour a été écrite sans appeler aucun outil ; chaque tour de plus ajoute une série d’appels d’outil. Au dernier tour permis, l’agent ne peut plus en appeler et doit conclure avec ce qu’il a.
Avec quoi la réponse est fabriquée
La chaîne de modèles dans son ordre de repli, le corpus que ces réponses citent, et les outils que l’agent appelle pour aller chercher ses faits. Un maillon jamais appelé le dit, au lieu de laisser croire qu’il a travaillé.
Un maillon peu appelé est un maillon peu éprouvé. Ce décompte dit ce que le repli a réellement porté sur la fenêtre, et non ce qu’il porterait si le premier maillon venait à tomber.
La chaîne de repli, et ce qu’elle a réellement servi
Pourquoi la chaîne a quitté un maillon
Comment c’est mesuré
Un maillon renonce pour l’une de deux raisons, et elles ne se confondent pas : par lenteur, quand le premier mot n’est pas arrivé dans son budget de temps ; par erreur, quand le fournisseur a répondu une erreur (quota, panne) jusqu’au bout de ses nouvelles tentatives. Chaque transition est écrite telle qu’elle a eu lieu : l’ordre de la chaîne a changé pendant la fenêtre, et un maillon quitté ce jour-là n’est pas forcément en tête aujourd’hui.
Le corpus que lisent les outils
Une source n’est réingérée que si son fichier a changé : la date est celle du dernier changement réellement écrit en base, pas celle d’une vérification.
Les outils, et ce qu’ils coûtent en temps
Aucun de ces outils n’écrit quoi que ce soit. Ils lisent le dossier, les publications, la thèse, la veille et le radar. Le seul qui produise du texte prépare un brouillon de message que le visiteur relit et envoie lui-même : rien ne part sans son clic.
Ce que le service rattrape, et ce qu’il coûte
Un service qui réessaie tout seul ses maillons ratés, et le prix d’une réponse. Deux chiffres qui décrivent l’instrument et non son audience : ils ne bougent pas si personne ne vient.
Le coût
Un coût unitaire est honnête à tout volume ; un coût cumulé ne raconterait que l’affluence. On affiche l’unité, jamais le total.
Le même profil, depuis votre propre assistant
Le Worker qui sert ce site expose aussi un serveur MCP public. Ajouté comme connecteur dans Claude ou ChatGPT, il laisse votre assistant interroger le profil de Baptiste Blouin avec son propre modèle : l’agent mesuré plus haut n’intervient pas.
Neuf outils
get_profile- Le profil par section : synthèse et disponibilité, expérience, formation et thèse, compétences, FAQ recruteur.
list_projects- Les projets, avec période, pile technique et liens ; filtrables par technologie ou thème (« RAG », « Rust »).
search_private_projects- Les fiches relues de ses projets privés, aux dépôts non publiés : période, compétences, pile, compétences démontrées et résultats ; recherche par mots-clés.
search_publications- Les sept publications à comité de lecture, classées par pertinence pour une question, résumés compris.
get_veille- Une édition de la veille IA : digest du jour, récap de la semaine ou tendances sur quatre semaines, sources citées.
search_veille- Recherche par mots-clés dans les digests quotidiens, sur quatorze jours au plus.
get_radar- Le Radar de l’écosystème IA : vue d’ensemble, ou classement complet d’un panneau avec sa provenance.
analyze_skill- Une technologie nommée, vérifiée sur le CV et les fiches des projets privés : déclarée, servie dans un projet privé, citée dans un projet, ou absente. Sinon, ce qu’il maîtrise de proche et son estimation du temps pour s’y mettre.
evaluate_job_offer- La grille de l’évaluation d’offre du site et toutes les pièces du profil : votre assistant rédige lui-même l’évaluation, et l’offre ne quitte pas votre conversation.
Comment il est tenu
- Lecture seule : aucun outil n’écrit, n’envoie ni ne modifie quoi que ce soit, et aucune authentification n’est demandée.
- Sans état : Streamable HTTP, sans session ; chaque requête se suffit à elle-même.
- Débit limité : 60 requêtes par minute et par adresse IP, puis une erreur 429 avec
Retry-After. - Aucun modèle de langage côté serveur : les réponses sont du Markdown compact, tiré des mêmes sources que le site.
La même adresse figure dans llms.txt, pour les agents qui lisent le site.