Vue d'ensemble
IAGA Sentinel se place à côté de vos agents IA et produit le registre que l'agent lui-même ne peut pas produire : chaque action gouvernée, signée, chaînée, et dont on peut prouver après coup qu'elle n'a pas été altérée.
Ce que c'est
Les agents touchent désormais au shell, au système de fichiers, aux bases de données, aux API tierces et aux secrets. Quand un régulateur, un auditeur ou votre DPO vous demande de prouver ce qu'un agent a fait, la plupart des équipes n'ont rien à montrer. IAGA Sentinel produit cette preuve. Chaque verdict de gouvernance devient un reçu signé en Ed25519, relié à un journal en ajout seul chaîné par hachage, vérifiable hors ligne en contrôlant les signatures Ed25519 et les maillons de la chaîne de hachage à partir d'une seule clé publique, et structuré pour s'aligner sur l'article 12 du règlement européen sur l'IA (tenue de registres). Transformer cette chaîne en dossier de documentation technique annexe IV relève d'Enterprise · prévu.
Trois fonctions dans un seul binaire
- Un noyau. Les lancements de processus passent par
iaga run, qui consulte le pipeline de gouvernance avant de créer le processus. Le sidecar HTTP fonctionne toujours pour les agents intégrant le SDK. - Un journal signé. Chaque verdict de gouvernance produit un reçu signé en Ed25519, relié au précédent dans un journal en ajout seul chaîné par hachage, propre à chaque exécution. Le rejeu revérifie hors ligne l'intégralité de la chaîne signée.
- Un cerveau de raisonnement. Des modèles ONNX optionnels émettent des indices, jamais des verdicts. Le moteur de risque déterministe décide, à pondérations de risque fixées ; le ML produit des scores que la politique peut lire.
Les verdicts peuvent être durcis avec Dictum : un DSL de politique typé, à évaluation déterministe par parcours d'arbre et doté d'un vérificateur de types Hindley-Milner, chargeable comme surcouche --policy au-dessus du système de profils YAML. La surcouche fusionne selon le principe du plus strict l'emporte : elle ne peut donc que restreindre ce que le moteur a déjà décidé.
Ce que les versions récentes ont apporté
- 1.9.2 — une coquille de politique ne bloque plus tout. Une politique Dictum qui référençait un chemin de contexte inexistant — une coquille comme
action.risk_scoreau lieu derisk.score— se chargeait auparavant sans broncher, puis bloquait toutes les actions, y compris celles que la politique ne concernait pas, en affichant des raisons qui renvoyaient à la ligne de base. Deux politiques d'exemple livrées dans le dépôt présentaient exactement ce bogue. Désormais,iaga serve --policyvalide chaque chemin par rapport au contexte que le pipeline construit réellement et sort en code2, en nommant le chemin fautif et les racines valides. La règle fail-closed est inchangée, et c'est délibéré : un attaquant ne doit pas pouvoir désactiver un garde-fou en le faisant échouer. Ce qui a changé, c'est qu'une erreur d'écriture n'atteint plus le point où cette règle s'applique. Les deux exemples (no_pii_egress.dictum,strict.dictum) et la fixturesample_context.jsonont été corrigés, et un test échoue désormais si le schéma accepté et le contexte construit divergent à nouveau. Les reçus, le contrat de sérialisation et le langage Dictum sont inchangés : les reçus 1.9.0 et 1.9.1 se vérifient sans modification. - 1.9.1 — un manuel d'amorçage. Un seul fichier,
AGENTS.md: un parcours autosuffisant menant d'un dépôt fraîchement cloné à la compilation, au tableau de bord, à la connexion MCP et à la vérification hors ligne des reçus, pour un humain comme pour un agent LLM. Aucun code modifié. Il a aussi corrigé la façon dont le runtime Dictum était documenté, vérifiée contre un serveur en fonctionnement plutôt que lue dans le code source : l'attribution de politique vit dansauditEvent.reasons, pas dansrisk.reasons;policy_hashest le SHA-256 de l'AST compilé, pas des octets du fichier ; et l'objetusageexigeprovideretmodel. - 1.9.0 — intégrité de la preuve et déploiement. En clôture d'une revue de code externe, trois choses ont cessé d'être du simple best-effort. Les reçus peuvent désormais être fail-closed (
IAGA_SENTINEL_RECEIPT_FAIL_CLOSED) : normalement, un reçu impossible à signer laisse un écart entre la piste d'audit SQL et la chaîne signée pendant que le verdict est tout de même renvoyé ; avec la variable activée, l'appel échoue au lieu de renvoyer un verdict sans preuve. Désactivé par défaut, si bien que 1.8.1 reste identique à l'octet près, et les limites sont documentées ouvertement (la ligne d'audit est écrite avant le reçu, donc un plantage entre les deux diverge toujours).workspaceIdettenantIdne sont plus tirés du corps de la requête : ils dérivent du profil de l'agent, et une requête qui en déclare un autre reçoit403 scope_mismatchau lieu d'être évaluée contre les seuils et les listes d'autorisation de cet espace de travail. Une configuration impossible à analyser est désormais fatale, là où elle enregistrait auparavant un avertissement et continuait avec zéro profil, paraissant configurée alors qu'elle ne gouvernait rien. S'y ajoutent un chart Helm et des manifestes Kubernetes, avec la clé de signature sur un volume inscriptible afin que le système de fichiers racine puisse rester en lecture seule. - 1.8.1 — une console opérateur reconstruite, et la maîtrise des coûts activée par défaut. Le tableau de bord est désormais une application multivue structurée (monochrome strict, graphiques en direct) avec des rapports d'audit téléchargeables en CSV, JSON ou PDF via un pipeline d'impression, à l'échelle de toute la flotte ou d'un seul agent. La visibilité sur les coûts et les modèles est fournie d'emblée : le feature
cost-controlest activé par défaut, et les reçus restent identiques à l'octet près quand aucun usage n'est rapporté, si bien que la garantie de déterminisme est préservée. - 1.5.6 — Dictum. Le langage de politique typé anciennement appelé APL s'appelle désormais Dictum de bout en bout : fichiers
.dictum, la crateiaga-sentinel-dictum, le feature de compilationdictum, et une raisondictum[…]sur chaque reçu signé. Le renommage préserve le comportement : le format de sérialisation des reçus reste identique à l'octet près et.apl/--aplcontinuent de fonctionner comme alias. La version livre aussi un kit de démonstration autonome “Test Me Now”. - 1.5.4 — la politique applique ce qu'elle promettait. Le
secret_ref()de Dictum détecte désormais de véritables identifiants et des données personnelles à l'intérieur d'une charge utile, et une nouvelle fonction intégréeurl_host()donne aux politiques une liste d'autorisation de sortie par hôte. Chaque blocage ou examen porte sa cause dans l'événement d'audit et le reçu signé, et les reçus se chaînent par hachage sur toute une session en une seule chaîne infalsifiable. - 1.5 — maîtrise des coûts. La dépense en jetons et en dollars des LLM est tarifée localement (sans API de facturation externe), capturée dans le reçu signé et le registre d'audit, et exposée via
/v1/cost/*, un panneau du tableau de bord etiaga cost, avec des budgets par session exprimables en Dictum et un cache de réponses déterministe. Livrée désactivée par défaut en 1.5 ; activée par défaut depuis la 1.8.1, avec des reçus identiques à l'octet près quand aucun usage n'est rapporté. - 1.4 — la surface d'intégration. Des exemples d'adaptateurs prêts à copier pour une douzaine de frameworks (Claude Code, Claude Agent SDK, OpenAI, LangChain, LangGraph, CrewAI, AutoGen, LlamaIndex, Vercel AI, Microsoft Agent Framework, PydanticAI), plus un adaptateur MCP et une crate cliente Rust légère.
Une posture honnête
IAGA Sentinel applique de façon souple et certifie de façon stricte. La preuve signée et la vérification hors ligne sont réelles dès aujourd'hui, depuis un dépôt fraîchement cloné avec le jeu de features par défaut. L'application au niveau du noyau faisant autorité (eBPF/LSM) n'est pas dans la version ouverte ; elle figure à la feuille de route Enterprise, et iaga kernel status le dit en rapportant authoritative: no. Tant qu'elle n'est pas livrée, la valeur est ici la preuve, pas le blocage. Nous ne commercialisons pas une application des règles que nous ne fournissons pas.
La preuve ne dépend pas de nous. N'importe qui peut vérifier une chaîne de reçus hors ligne à partir d'une seule clé publique, sans appel distant et sans devoir faire confiance à IAGA. La preuve est cryptographique, et non déclarative.
Ce qui le distingue
- Une preuve, pas un témoignage. Des reçus Ed25519 chaînés par hachage, vérifiables hors ligne à partir d'une seule clé publique, sans appel distant.
- Posture honnête. L'application souple est déclarée dans la preuve elle-même (
is_authoritative: false) ;iaga kernel statusrapporteauthoritative: no. Nous ne commercialisons pas une application des règles que nous ne fournissons pas. - Souverain par le déploiement. S'exécute sur l'infrastructure de votre choix, sans appel distant à l'exécution ; la BUSL-1.1 se convertit en Apache-2.0 ; aucun service opéré par IAGA ne détient jamais de copie de votre preuve.
- Façonné pour le règlement européen sur l'IA. Le reçu s'aligne sur la journalisation de l'article 12 et est structuré pour alimenter la documentation technique annexe IV dont un système à haut risque aura besoin d'ici le 2 décembre 2027 pour les systèmes à haut risque autonomes, et le 2 août 2028 pour ceux embarqués dans des produits réglementés, à la suite du report du Digital Omnibus de 2026.
Où aller ensuite
- Comment ça marche : les reçus, le journal chaîné par hachage et la vérification hors ligne.
- Correspondance règlement IA : l'article 12 et l'annexe IV, obligation par obligation.
- Démarrage rapide : trois commandes jusqu'à un verdict signé, vérifiable hors ligne.
- Tutoriel : de zéro à la preuve vérifiée, en 16 parties, dépannage compris.
- Référence : les features Cargo, la CLI, les variables d'environnement et la surface HTTP.
- Le code source est sur GitHub, en source-available sous licence BUSL-1.1.
