agentl/kernel/). L’interpréteur, le planificateur, le raisonneur bayésien et le Studio proposent des actions. Seul le noyau les autorise.
Le passage d’une action
- La proposition est figée : une copie isolée, que ni le planificateur ni l’approbateur ne peuvent modifier.
- La politique est évaluée sur cette copie. Une exception vaut
DENY. - L’approbateur reçoit une seconde copie. Une exception de l’approbateur vaut refus, jamais accord.
- Le permis est émis en dernier. Il est à usage unique et lié au condensat canonique de l’action : outil ou sous-agent, arguments.
Host.invoke, AsyncHost.invoke et le registre host.subagents exigent ce permis. Sans lui, ou avec un permis émis pour d’autres arguments, ils lèvent PermitError :
Ce qui a été approuvé est donc exactement ce qui s’exécute. Un défaut du planificateur, du Studio ou d’un hôte peut produire une mauvaise proposition. Il ne peut plus produire une exécution que la politique n’a pas autorisée.
Tester un outil
Un test qui appelaithost.invoke directement lève désormais PermitError. Deux façons de faire :
Le contexte de l’action en cours
Dans un outil,current_action() rend le contexte de l’action autorisée :
Les invariants
La suitetests/test_kernel_invariants_aaa.py énonce dix invariants, un test par invariant :
I1 est aussi vérifié sur le code source : seul le noyau appelle l’hôte. La liste des fichiers de confiance est
agentl.kernel.TCB_FILES, et un test échoue si elle dépasse son budget.
Modèle formel
Le protocole du noyau (autorisation, intention, exécution, crash, reprise) est modélisé en TLA+ et vérifié exhaustivement par TLC sur des bornes finies. Cinq mutants plausibles doivent être attrapés, sinon la vérification échoue.Exécution durable
Reprendre après un crash sans doubler un effet.
Provenance
Des gardes qui lisent d’où vient une valeur.