Integrity Panel
The panel, tab by tab.
Le panneau, onglet par onglet.
One page shows the real state of the system and holds the few actions the system cannot take on its own. Here is each tab: what it shows, in plain words, and underneath, what it does in detail.
Une seule page montre l'état réel du système et porte les quelques gestes qu'il ne peut pas faire seul. Voici chaque onglet : ce qu'il montre, en mots simples, puis, en dessous, ce qu'il fait en détail.
The panel belongs to SIA, System Integrity Alignment, the Lab's framework. Training methods such as RLHF, DPO and RLAIF align the model itself. SIA aligns the system around the model: the guardrails, the judges and the twelve layers. The rules therefore hold whichever model runs underneath.
Le panneau fait partie de SIA (System Integrity Alignment), le cadre du Lab. Les méthodes d'entraînement comme RLHF, DPO et RLAIF alignent le modèle lui-même. SIA aligne le système autour du modèle : les garde-fous, les juges et les douze couches. Les règles tiennent donc quel que soit le modèle en dessous.
Screenshots taken on 2026-09-28 from the running panel, read only. What must not leave the house (addresses, ports, file paths, client and pod names, conversation titles) is replaced in the page itself by a word in brackets before the screenshot; the visible text is then read again, and a screenshot that still shows one of those patterns is refused.
Captures prises le 2026-09-28 sur le panneau en service, en lecture seule. Ce qui ne doit pas sortir de la maison (adresses, ports, chemins de fichiers, noms de clients et de pods, titres de conversations) est remplacé dans la page même par un mot entre crochets, avant la capture ; le texte visible est ensuite relu, et une capture qui montre encore un de ces motifs est refusée.
The watch · conversations and guardrailsLa vigie · les conversations et les garde-fous
DashboardTableau de bord

How many conversations the AI agents had this week, how often a guardrail fired, and how often it blocked something. Every number is counted from the agents' own records.
Combien de conversations les agents d'IA ont eues cette semaine, combien de fois un garde-fou s'est déclenché et combien de fois il a bloqué quelque chose. Chaque chiffre est compté dans les journaux des agents eux-mêmes.
Active sessions: the number of distinct conversations with at least one message in the period (COUNT(DISTINCT session_id)), per agent. The per-day bars follow the UTC day.
Guardrail events, blocks, sessions with a block: every agent writes the result of each guardrail to one shared log. The watch copies it into its database as it grows; it tracks the modification time, the size and the position, so nothing is read twice. A block is a block or deny result. The table below gives each guardrail, its results and how often each happened.
The 7, 30 and 90-day filters are parameterized queries. The dialogue agent's conversations are left out on purpose (decision of 2026-07-30); its guardrail events are counted.
Limit: the guardrail log is written in local time without a time zone and compared with a UTC boundary, so at the edge of a period an event can land on the neighbouring day.Sessions actives : le nombre de conversations distinctes qui ont eu au moins un message dans la période (COUNT(DISTINCT session_id)), par agent. Les barres par jour suivent le jour UTC.
Événements des garde-fous, blocages, sessions avec blocage : chaque agent écrit le résultat de chaque garde-fou dans un journal commun. La vigie le recopie dans sa base au fur et à mesure ; elle retient la date de modification, la taille et la position, pour ne rien lire deux fois. Un blocage est un résultat block ou deny. Le tableau du dessous donne chaque garde-fou, ses résultats et leur nombre.
Les filtres 7, 30 et 90 jours sont des requêtes paramétrées. Les conversations de l'agent du dialogue sont exclues exprès (décision du 2026-07-30) ; ses événements de garde-fous sont comptés.
Limite : le journal des garde-fous est écrit en heure locale sans fuseau et comparé à une borne UTC : au bord d'une période, un événement peut tomber sur le jour voisin.SessionsSessions


Every conversation the agents had: which agent, when, how many messages, how many blocks. You can reread one message by message, and ask for a second opinion afterwards.
Toutes les conversations des agents : quel agent, quand, combien de messages, combien de blocages. On peut en relire une message par message, et demander un deuxième avis après coup.
A session is one conversation file in an agent's folder. The watch copies only its metadata and positions, never its content. To show a message, it opens the original file at that position, reads it as JSON only and displays it as plain text, never as HTML; a test checks that no code can be injected this way.
Analyze sends one conversation to a separate judge, after the fact: another model call, with no tools and no API key in its environment, limited to 80,000 characters. Its verdict appears as a suggestion; nothing acts on it automatically.
Une session est un fichier de conversation dans le dossier d'un agent. La vigie ne copie que ses métadonnées et ses positions, jamais son contenu. Pour afficher un message, elle ouvre le fichier d'origine à cette position, le lit comme du JSON seulement et l'affiche en texte brut, jamais en HTML ; un test vérifie qu'on ne peut pas injecter de code par là.
Analyser envoie une conversation à un juge distinct, après coup : un autre appel de modèle, sans outils et sans aucune clé d'API dans son environnement, limité à 80 000 caractères. Son verdict s'affiche comme une suggestion ; rien ne s'en sert automatiquement.
The governor · the actionsLe governor · les gestes
OverviewVue d'ensemble

At a glance: how many AIs are open right now, how many are working, whether the log is intact, and whether the emergency brake is pulled.
D'un coup d'œil : combien d'IA sont ouvertes en ce moment, combien travaillent, si le journal est intact et si le frein d'urgence est tiré.
Sessions and active AIs: read from the session registry that Claude Code keeps itself (the same source as claude agents). A process counts only if it is alive and its start time matches the registry, so a reused process number is never counted twice. Working or waiting comes from the registry; a helper agent (sub-agent) counts if it wrote something in the last 5 minutes.
Events: an SQLite log that only accepts new lines (database triggers refuse any change or deletion), each line signed with HMAC-SHA256. The weekly counters count lines by type over the last 7 days (UTC).
Integrity (the “Intégrité” tile) recomputes the signature of every line with a local key that only its owner can read; a single altered line shows as “ALTÉRÉE”. Runner halt (“Arrêt du runner”) shows whether the emergency brake is pulled: it reads the same flag file as the runner and the panel's executor.
Limit: a sub-agent that thinks for more than 5 minutes without writing anything is not counted as active.Sessions et IA actives : lues dans le registre de sessions que Claude Code tient lui-même (la même source que claude agents). Un processus ne compte que s'il est vivant et que son heure de départ correspond au registre : un numéro de processus réutilisé n'est jamais compté deux fois. « Au travail » ou « en attente » vient du registre ; un agent d'appoint (sous-agent) compte s'il a écrit quelque chose dans les 5 dernières minutes.
Événements : un journal SQLite qui n'accepte que de nouvelles lignes (des déclencheurs de la base refusent toute modification ou suppression), chaque ligne signée en HMAC-SHA256. Les compteurs de la semaine comptent les lignes par type sur les 7 derniers jours (UTC).
Intégrité recalcule la signature de chaque ligne avec une clé locale que seul son propriétaire peut lire ; une seule ligne altérée s'affiche « ALTÉRÉE ». Arrêt du runner indique si le frein d'urgence est tiré : il lit le même fichier-drapeau que le runner et l'exécuteur du panneau.
Limite : un sous-agent qui réfléchit plus de 5 minutes sans rien écrire n'est pas compté comme actif.BriefsBriefs

Everything that needs a look, shown as lights. A green light always shows its proof and the time it was checked. Yellow means to do or in progress, red means blocked, grey means not started.
Tout ce qui demande un regard, sous forme de voyants. Un voyant vert montre toujours sa preuve et l'heure de la vérification. Jaune : à faire ou en cours ; rouge : bloqué ; gris : pas commencé.
“Your briefs”: the person in charge writes a brief, reads it, edits it or files it away. “Execute” wakes the agent who coordinates the work, and that agent starts it with the others; “Pause” stops it. A new brief starts paused, and a deleted brief goes to the archives: nothing is erased.
« Tes briefs » : la personne aux commandes écrit un brief, le relit, le modifie ou le range. « Exécuter » réveille l'agent qui coordonne le travail, et cet agent le lance avec les autres ; « Pause » l'arrête. Un nouveau brief naît en pause, et un brief supprimé part aux archives : rien n'est effacé.
Below the health cards (not shown here, because they name internal work): what waits for a decision, the repairs that are ready but not started, the missions given to the agents over 14 days and whether each one reported back, the cards ready to run, the cards filed since the last sweep, what was done in the last 7 days with its receipt, the plan and the ideas written down.
Sous les cartes de santé (pas montrées ici, parce qu'elles nomment du travail interne) : ce qui attend une décision, les réparations prêtes mais pas lancées, les missions confiées aux agents sur 14 jours et si chacune a fait son rapport, les cartes prêtes à exécuter, les cartes rangées depuis le dernier balayage, ce qui a été fait ces 7 derniers jours avec son reçu, le plan et les idées notées.
Lights: counted over the cards, decisions, missions, plan batches and health checks. A green without a proof is turned back to yellow by the code, not by a person.
Health reads state files and systemd; the panel sends no network probe of its own. Missions: a mission is green if, between its assignment and the same agent's next one, the agent sent a report that cites an existing file, or wrote a handoff with a status section. Done recently: the cards whose success receipt is less than 7 days old. Ideas: a log that only accepts new lines.
Your briefs: the text of a brief is a file in the coordinator's plans folder; its state (running or paused) is a log that only accepts new lines. Editing keeps the previous version; deleting moves the file to the archives. The panel never writes into an agent's window: “Execute” adds a line to that log, and the coordinator's watcher reads it. Every change is a POST protected against cross-site requests, and a brief's path must stay inside the plans folder (no symbolic link).
Limit: “a report that cites an existing file” is a weak proof: the file may belong to someone else.Voyants : comptés sur les cartes, les décisions, les missions, les lots du plan et les contrôles de santé. Un vert sans preuve est ramené au jaune par le code, pas par une personne.
Santé lit des fichiers d'état et systemd ; le panneau n'envoie aucune sonde réseau de lui-même. Missions : une mission est verte si, entre son affectation et l'affectation suivante du même agent, l'agent a envoyé un rapport qui cite un fichier existant, ou écrit un passage de relais avec une section d'état. Fait récemment : les cartes dont le reçu de réussite a moins de 7 jours. Idées : un journal qui n'accepte que de nouvelles lignes.
Tes briefs : le texte d'un brief est un fichier dans le dossier des plans de l'agent qui coordonne ; son état (en cours ou en pause) est un journal qui n'accepte que de nouvelles lignes. Modifier garde la version précédente ; supprimer déplace le fichier aux archives. Le panneau n'écrit jamais dans la fenêtre d'un agent : « Exécuter » ajoute une ligne à ce journal, et le guet de l'agent qui coordonne la lit. Chaque changement est un POST protégé contre les requêtes intersites, et le chemin d'un brief doit rester dans le dossier des plans (aucun lien symbolique).
Limite : « un rapport qui cite un fichier existant » reste une preuve faible : le fichier peut appartenir à quelqu'un d'autre.AgentsAgents

Each open AI, what it is doing, where it runs, and how long it has been in that state.
Chaque IA ouverte, ce qu'elle fait, où elle tourne et depuis combien de temps elle est dans cet état.
One row per session in the registry (see Overview). The activity is the title of the agent's terminal pane; the dialogue agent's activity is hidden on purpose (“dialogue (not shown)”), the same rule as in the watch. “Since” gives the time of the last change of state; the active sub-agents are listed with it. The tab refreshes every 10 seconds.
Une ligne par session du registre (voir Vue d'ensemble). L'activité est le titre du volet de terminal de l'agent ; celle de l'agent du dialogue est masquée exprès (« dialogue (non affiché) »), la même règle que dans la vigie. « Depuis » donne l'heure du dernier changement d'état ; les sous-agents actifs sont listés avec. L'onglet se rafraîchit toutes les 10 secondes.
ScheduleHoraire

What runs on its own on the machine, and when: the nightly backup, the watchers, the tests.
Ce qui tourne tout seul sur la machine, et quand : la sauvegarde de la nuit, les surveillants, les tests.
The systemd timers of both scopes, the user's and the system's (the system's are readable without elevated rights), with a Scope column; times are converted from microseconds counted since 1970. Below them, the crontab, normally empty.
Limit: the operating system's own timers (updates, log rotation) appear too: the tab shows everything the machine runs.Les minuteries systemd des deux portées, celle de l'utilisateur et celle du système (lisibles sans droits élevés), avec une colonne Portée ; les heures sont converties depuis des microsecondes comptées à partir de 1970. En dessous, la crontab, normalement vide.
Limite : les minuteries du système d'exploitation (mises à jour, rotation des journaux) apparaissent aussi : l'onglet montre tout ce que la machine fait tourner.LogsJournal

The full log, with filters, and a check mark on each line that says whether the line is intact.
Le journal complet, avec des filtres, et une coche sur chaque ligne qui dit si elle est intacte.
A query of the signed log (up to 200 lines), with each line's signature checked. It loads as soon as the tab opens, then adds new lines every 10 seconds while the tab stays open and the box is checked.
Une requête du journal signé (jusqu'à 200 lignes), avec la signature de chaque ligne vérifiée. Il se charge dès l'ouverture de l'onglet, puis ajoute les nouvelles lignes toutes les 10 secondes tant que l'onglet reste ouvert et que la case est cochée.
Your handTa main



Everything only the person in charge can do, with a physical key. An agent can ask for a go; it cannot grant one to itself. Refusing never needs the key, because refusing is the safe direction.
Tout ce que seule la personne aux commandes peut faire, avec une clé physique. Un agent peut demander un feu vert ; il ne peut pas se le donner. Refuser ne demande jamais la clé, parce que refuser est le sens sûr.
The bridge opens time-limited access to a production machine and closes on its own. The vault's key can be checked without disturbing it. The emergency brake stops every card, the panel included.
Le pont ouvre un accès limité dans le temps vers une machine de production, puis se referme tout seul. On peut vérifier la clé du coffre sans la déranger. Le frein d'urgence arrête toutes les cartes, le panneau compris.
“Done without you”: a card may run on its own only if its code meets five conditions; otherwise it waits for a click and says which condition holds it back. When the level is armed, a card that meets the conditions runs on its own, with its receipt and an undo button. A single failure disarms the level, and every card waits for a click again until the person in charge re-arms it. A card run with “Run in a terminal” always leaves a receipt and files itself away.
« Fait sans toi » : une carte ne peut s'exécuter seule que si son code remplit cinq conditions ; sinon, elle attend un clic et indique la condition qui la retient. Quand le niveau est armé, une carte qui remplit les conditions s'exécute seule, avec son reçu et un bouton pour l'annuler. Un seul échec désarme le niveau, et toutes les cartes attendent de nouveau un clic, jusqu'à ce que la personne aux commandes le réarme. Une carte lancée par « Exécuter dans un terminal » laisse toujours un reçu et se range toute seule.
Requests for a go: a request's state is the folder its file sits in, and the file moves in one atomic step, so a request cannot be replayed. Granting one takes a touch of the key, with a challenge derived from the request's identifier: the same proof cannot serve for another request.
Bridge: an SSH connection limited in time (1 to 60 minutes), opened with a touch and closed on its own at the end; its state is read again every 5 seconds. Vault: the page reads the key's state passively (is a Yubico USB device plugged in?), and only the “Check the key” button talks to the key. “Open the vault” opens a real terminal on the screen, and the PIN goes from the keyboard to that terminal, never over HTTP.
Sensitive operations: what the runner stopped and escalated, minus what has already run or been authorized; the operation's fingerprint is checked again on the server before it runs. Your key: WebAuthn. Regime: ratifying takes a touch, revoking takes a click (the safe direction). Brake: pulling it takes a click, lifting it takes a touch.
Done without you: the card's code is READ (never run) and checked against five conditions. (1) A category from a closed list: reading, local changes, the alpha (the early version of the product); production and the harness only after the reviewer. (2) No vault, no sudo, no typed input, no billed call outside a capped budget. (3) Backup, rollback, verify and probe lines written as commands. (4) For production and the harness, the reviewer's approval on the card's exact fingerprint. (5) For production, the restricted deploy channel. A card that runs alone gets a receipt and an undo button; at most 20 a day; a single failure disarms the level. Terminal: the output is kept, and if the card did not write its receipt, the panel writes one (OK or FAIL) before filing the card as done or failed.
Limit: the passive state says “a YubiKey is plugged in”, not “this is the vault's key”; only the check can say that.Demandes de feu vert : l'état d'une demande est le dossier où se trouve son fichier, et le fichier se déplace en une seule opération atomique : une demande ne peut pas être rejouée. L'accorder demande un toucher de la clé, avec un défi dérivé de l'identifiant de la demande : la même preuve ne peut pas servir pour une autre demande.
Pont : une connexion SSH limitée dans le temps (de 1 à 60 minutes), ouverte par un toucher et refermée toute seule à la fin ; son état est relu toutes les 5 secondes. Coffre : la page lit l'état de la clé sans la déranger (un périphérique USB de Yubico est-il branché ?), et seul le bouton « Vérifier la clé » s'adresse à la clé. « Ouvrir le coffre » ouvre un vrai terminal à l'écran, et le code PIN va du clavier à ce terminal, jamais par HTTP.
Opérations sensibles : ce que le runner a arrêté et escaladé, moins ce qui a déjà été exécuté ou autorisé ; l'empreinte de l'opération est revérifiée sur le serveur avant l'exécution. Ta clé : WebAuthn. Régime : ratifier demande un toucher, révoquer un clic (le sens sûr). Frein : le tirer demande un clic, le lever un toucher.
Fait sans toi : le code de la carte est LU (jamais exécuté) et vérifié contre cinq conditions. (1) Une catégorie d'une liste fermée : lecture, changement local, l'alpha (la première version du produit) ; la production et le harnais seulement après la relectrice. (2) Ni coffre, ni sudo, ni saisie au clavier, ni appel facturé hors d'un budget plafonné. (3) Des lignes de sauvegarde, de retour arrière, de vérification et de sonde écrites comme des commandes. (4) Pour la production et le harnais, l'accord de la relectrice sur l'empreinte exacte de la carte. (5) Pour la production, le canal de déploiement restreint. Une carte qui s'exécute seule reçoit un reçu et un bouton pour l'annuler ; 20 par jour au plus ; un seul échec désarme le niveau. Terminal : la sortie est gardée et, si la carte n'a pas écrit son reçu, le panneau en écrit un (OK ou FAIL) avant de la ranger parmi les réussies ou les ratées.
Limite : l'état passif dit « une YubiKey est branchée », pas « c'est la clé du coffre » ; seule la vérification peut le dire.ThresholdsSeuils

Every action is sorted before it runs. Here is, rule by rule, how many stopped, how many went through alone, and how many went through after a person approved them.
Chaque geste est classé avant de partir. Voici, règle par règle, combien se sont arrêtés, combien sont passés seuls et combien sont passés après l'accord d'une personne.
A bounded read of the runner's audit log. Stopped: escalations and blocks. Passed alone: runs of the classes allowed to pass alone (read-only, or reversible from a backup). Passed after a hand: all other runs. Every class seen in the log has its own card, so a total that does not add up cannot happen.
Une lecture bornée du journal d'audit du runner. Arrêtés : les escalades et les blocages. Passés seuls : les exécutions des classes autorisées à passer seules (lecture seule, ou réversibles grâce à une sauvegarde). Passés après une main : toutes les autres exécutions. Chaque classe vue dans le journal a sa propre carte : un total qui ne tombe pas juste ne peut pas arriver.
JourneyParcours

Each step between a stranger and a served client, and where the next client would get stuck. Green means measured and working; orange means the piece exists but nobody has seen it serve a client yet; red means measured and missing.
Chaque étape entre un inconnu et un client servi, et l'endroit où le prochain client resterait bloqué. Vert : mesuré et en marche ; orange : la pièce existe, mais personne ne l'a encore vue servir un client ; rouge : mesuré et absent.
The panel never probes anything itself: it reads the cache written by the journey tool, and after 6 hours it labels the measurement as old. A step that nobody probed stays “unknown”, never green.
Le panneau ne sonde jamais rien lui-même : il lit le cache écrit par l'outil du parcours et, passé 6 heures, il indique que la mesure est ancienne. Une étape que personne n'a sondée reste « inconnue », jamais verte.
PrivacyConfidentialité

What must never leave a pod. This is the job of Integrity Warden, a layer of SIA. Two detectors keep watch: one holds back secrets (a password, a key) in what a pod sends to its client; the other finds names, social insurance numbers and health insurance numbers on public pages. The panel shows the type of what was held back, never the value. If one pod's mark shows up in another pod's stream, one client could see another's data: the panel raises a red alert.
Ce qui ne doit jamais sortir d'un pod. C'est le travail d'Integrity Warden, une couche de SIA. Deux détecteurs surveillent : l'un retient les secrets (un mot de passe, une clé) dans ce qu'un pod envoie à son client ; l'autre repère les noms, les numéros d'assurance sociale (NAS) et les numéros d'assurance maladie (NAM) dans les pages publiques. Le panneau montre le type de ce qui a été retenu, jamais la valeur. Si la marque d'un pod apparaît dans le flux d'un autre pod, un client pourrait voir les données d'un autre : le panneau lève une alerte rouge.
The “Check the detectors” button sends INVENTED sentences (a name, a social insurance number, a health insurance number, and a clean sentence from a tradesperson). The detectors must find exactly what was put in, in the right place, and nothing in the clean sentence.
Le bouton « Vérifier les détecteurs » envoie des phrases INVENTÉES (un nom, un NAS, un NAM et une phrase propre d'artisan). Les détecteurs doivent retrouver exactement ce qu'on y a mis, au bon endroit, et rien dans la phrase propre.
The access tokens of both detectors are read on the server at each call and never sent to the page; every answer is cleaned of any token before it leaves. Calls go only to a LOCAL address (any other is refused before the connection opens; no proxy, no redirect followed), without starting another program, with 2.5 seconds per read and the three reads in parallel.
A detector is green only if its answer was read AND contains what it should (rules loaded, model loaded). Unreachable, refused, or answering without the layer: red. Not probed: grey. The secrets filter uses 221 rules; the personal information service uses a French language model. The counters add up per pod, per checkpoint and per type; test measurements are counted apart and never appear in them. The positive check is a protected POST, like the panel's other actions; its answer carries types only, never the sentence. The tab refreshes every 20 seconds, only while it is on screen.
Limit: the secrets filter has no test entry: the button checks only the personal information service, and the secrets filter shows here only through its counters. The counters add up over time: once a pod's mark has crossed into another pod, the alert stays until someone decides how to acknowledge it.Les jetons d'accès des deux détecteurs sont lus sur le serveur à chaque appel et jamais envoyés à la page ; chaque réponse est débarrassée de tout jeton avant de sortir. Les appels ne vont qu'à une adresse LOCALE (toute autre est refusée avant l'ouverture de la connexion ; aucun proxy, aucune redirection suivie), sans lancer d'autre programme, avec 2,5 secondes par lecture et les trois lectures en parallèle.
Un détecteur est vert seulement si sa réponse a été lue ET contient ce qu'elle doit (règles chargées, modèle chargé). Injoignable, refusé, ou qui répond sans la couche : rouge. Pas sondé : gris. Le filtre des secrets applique 221 règles ; le service des renseignements personnels utilise un modèle de langue française. Les compteurs s'additionnent par pod, par point de passage et par type ; les mesures de test sont comptées à part et n'y apparaissent jamais. Le contrôle positif est un POST protégé, comme les autres gestes du panneau ; sa réponse ne porte que des types, jamais la phrase. L'onglet se rafraîchit toutes les 20 secondes, seulement quand il est affiché.
Limite : le filtre des secrets n'a pas d'entrée de test : le bouton vérifie seulement le service des renseignements personnels, et le filtre des secrets n'apparaît ici que par ses compteurs. Les compteurs s'additionnent : une fois qu'une marque de pod est passée dans un autre pod, l'alerte reste tant que personne n'a décidé comment la lever.