Routing · garde-fous · receipts
AgentLane
Open source · MITCe qu’il fait
Décide quel outil a le droit d’exécuter une tâche IA, refuse ceux qui n’ont jamais réellement fonctionné, et garde la trace de ce qui a vraiment tourné.
Lire le code sur GitHubPreuve
Neuf outils entrent. Quatre ressortent.
Le registre passe quatre portes, dans cet ordre : non prouvé, risque élevé, non pertinent, hors liste courte. Deux outils sont refusés alors qu’ils fonctionnent — parce que personne n’a jamais terminé une tâche à travers eux.
Corriger le test qui échoue dans le compilateur
| Outil | Statut au registre | Verdict |
|---|---|---|
read_file | WORKING_END_TO_END | Retenu |
run_tests | WORKING_END_TO_END | Retenu |
write_file | WORKING_END_TO_END | Retenu |
git_diff | WORKING_END_TO_END | Retenu |
search_files | WORKING_END_TO_END | Hors des quatre premiers |
deploy | WORKING_END_TO_END | Risque élevé — demande un humain |
browser_agent | DETECTED | Pas prouvé de bout en bout |
vector_store | CONFIGURED | Pas prouvé de bout en bout |
send_email | WORKING_END_TO_END | Aucun rapport avec cette tâche |
Reproduit l’ordre publié de selectTools. DETECTED veut dire qu’un binaire a été trouvé, pas qu’un travail y est passé.
Étude de cas
- 1 425 lignes de source, 635 de tests
- 65 tests, typecheck strict sans erreur
- Zéro dépendance runtime
- Problème
- Un agent qui atteint plusieurs providers, plusieurs niveaux d’effort et plusieurs outils doit trancher quatre questions avant d’agir : quelle voie exécute ce travail, quels outils sont réellement prouvés, la boucle avance-t-elle encore, et qu’est-ce qui a effectivement tourné.
- Approche
- Douze modules, chacun une fonction pure sur une entrée explicite. Rien n’appelle de modèle, n’écrit de fichier ni n’ouvre de socket — sauf un adaptateur de provider, inclus justement parce que son comportement réseau mérite d’être lu.
- Architecture
- Un routeur — politique et registre de modèles, sélection d’outils, résolution d’exécuteur, garde anti-boucle — et un cœur : allowlist host et chemin par connecteur MCP, garde anti-injection, receipts d’exécution.
- Ce qui a raté
- Le détecteur de cycles était une traduction ligne à ligne d’une source Apache-2.0. Découvert en comparant les fichiers amont avant publication, réécrit avec un algorithme différent, et l’histoire est consignée dans le message du premier commit plutôt que discrètement effacée.
- Résultat
- Deux idées tenues par les types : « détecté » n’est pas « disponible », et « demandé » n’est pas « observé ». Un receipt garde les deux valeurs séparément, donc il prouve ce qui a tourné et non ce qui avait été demandé.
- Limites
- Ce n’est pas un agent : ni boucle, ni planificateur, ni moteur d’exécution. Ce n’est pas un framework. Et rien n’y est mesuré contre une alternative.