Une exécution d'agent enregistrée a fait passer un grand livre synthétique de trois lignes, d'un CSV bancaire à des livres vérifiés. Le solde d'ouverture était de 1000 USD, le relevé contenait trois lignes, et les réponses attendues ont été dérivées de l'arithmétique avant l'exécution de tout rapport : le solde de vérification se termine à 2958.50 USD, le profit de septembre est de 1958.50 USD. L'exécution a atteint exactement ces chiffres, après un échec réel qu'elle a diagnostiqué elle-même.
Entrées
Le défi consiste en trois fichiers publiés sous /downloads/agent-accounting/, avec le scénario complet dans le guide de comptabilité avec agents IA. Les livres ouvrent le 2026-09-01 en USD avec 1000 USD dans Assets:Checking. Le relevé contient trois lignes de septembre : un paiement client de 2000.00 USD le 2026-09-02, une facture d'hébergement de -29.00 USD le 2026-09-03, et une visite au café de -12.50 USD le 2026-09-04. Les règles associent le client à Income:Consulting, l'hébergement à Expenses:Software, et le café à Expenses:Dining, et chaque compte nommé dans les règles est ouvert dans le grand livre de départ à la date requise.
Les attentes proviennent des lignes plus le solde d'ouverture, indépendamment de toute sortie de rapport : 1000 + 2000 - 29 - 12.50 donne 2958.50 USD de solde de vérification, et 2000 - 29 - 12.50 donne 1958.50 USD de profit de septembre. Une entrée modifiée ou une attente incorrecte échoue à la vérification au lieu d'afficher un rapport d'apparence plausible.
Méthodologie
Deux couches, maintenues séparées. D'abord, un vérificateur CLI installé (scripts/check-agent-accounting.py, épinglé à bea 0.1.0) exécute les requêtes d'aperçu, d'application, de ré-application, de vérification, de solde et de compte de résultat dans un répertoire temporaire frais avec une configuration isolée. Il affirme que l'aperçu signale 3 prêts et n'écrit rien, que la première application écrit 3 entrées, que la ré-application signale 0 prêts avec 3 doublons exacts et n'écrit rien, que l'identité octet par octet survit à l'aperçu et aux écritures rejetées, que la vérification est propre, et que les deux totaux correspondent à l'arithmétique ci-dessus. Il tente également une transaction non équilibrée (Assets:Checking -5 USD contre Expenses:Dining 4 USD), exige une sortie à 1, et vérifie que les octets du grand livre sont inchangés.
Ensuite, une exécution réelle d'agent sur une copie fraîche des téléchargements. Le client était muse 1.1.1 (Muse Code) avec le modèle muse-spark-1.3-contributor, lancé en mode sans interface avec des outils de shell et d'écriture de fichiers dans le répertoire de travail, outils web désactivés, et aucune intervention humaine pendant l'exécution. Point crucial, aucun rules.toml n'a été fourni — l'agent a dérivé sa propre catégorisation à partir des comptes ouverts du grand livre.
Résultats observés
L'agent a effectué 22 appels d'outils (21 shell plus 1 écriture de fichier) et est sorti avec le code 0. Il a inspecté le CSV et les 16 comptes ouverts, lu la surface d'aide CLI, écrit son propre rules.toml (correspondances littérales en majuscules, équivalentes aux motifs canoniques car la correspondance est insensible à la casse), affiché 3 prêts sans rien écrire, appliqué 3 entrées, et exécuté une vérification propre. Ses totaux rapportés étaient de 2958.50 USD au solde de vérification et 1958.50 USD de profit de septembre. L'opérateur a ré-exécuté les deux requêtes en lecture seule sur le grand livre de l'agent par la suite et a confirmé les mêmes chiffres par rapport aux valeurs attendues indépendantes.
La courte démonstration ci-dessous rejoue de manière déterministe ce chemin fonctionnel à partir des téléchargements canoniques. C'est une relecture, pas l'exécution en direct :
$ bea --version
bea 0.1.0
$ bea import (preview)
csv → Assets:Checking: 3 ready, 0 exact duplicates, 0 possible duplicates
$ bea import --apply
Wrote 3 entries to $WORK/books/main.bean.
$ bea check
$WORK/books/main.bean: no errors
$ bea balance Assets:Checking
Checking 2,958.50 USD
$ bea report income-statement -t 2026-09
Net Profit: 1,958.50 USD
checking: 2958.50 USD (expected)
profit: 1958.50 USD (expected)
REPLAY OK: preview 3/0, applied 3, check clean, 2958.50 / 1958.50 USD.Échecs et interventions
La transcription conserve la séquence originale, y compris les échecs. Deux appels exploratoires ont échoué sans conséquence (pip n'était pas installé ; une sonde de chemin d'installation modifiable a trouvé des sources hors de site-packages) et l'agent a continué. Un échec était réel : la première --apply s'est terminée avec Operation not permitted sur un verrou de cache hors de l'espace de travail, car le bac à sable bloquait les fichiers de verrou sous le cache du répertoire personnel. L'agent a recherché dans les sources du produit, a trouvé que le répertoire de cache respecte XDG_CACHE_HOME, a ré-exécuté avec celui-ci pointé dans le répertoire de travail, a écrit les mêmes 3 entrées que celles affichées à l'aperçu, et a supprimé le cache temporaire ensuite. Aucun grand livre n'a jamais été édité à la main ; chaque entrée provient de bea import --apply. Interventions pendant l'exécution : aucune — elle était sans interface avec approbation désactivée, et un humain n'a examiné le journal d'événements qu'après coup.
Limites
Il s'agit d'une vérification de sortie CLI d'une seule exécution d'un seul client sur des données synthétiques — pas d'un benchmark de modèles. Elle ne prétend rien sur d'autres clients, sur la précision comptable en général, ou sur une utilisation de production sans supervision. Deux distinctions importent. D'abord, le jugement de catégorie versus la validation structurelle : l'agent a choisi à quel compte chaque ligne appartenait, et ce jugement n'est aussi bon que sa lecture de trois lignes sans ambiguïté. Tout ce que bea a vérifié ensuite — le solde, la structure à somme nulle, la détection des doublons — est structurel : une vérification réussie prouve que le grand livre est équilibré, jamais que Expenses:Dining était le bon compte pour le café. Ensuite, le grand livre est un jouet : trois lignes, une seule devise, aucune ambiguïté de catégorisation, aucun historique conflictuel. Un relevé plus difficile testerait le jugement ; celui-ci teste la boucle.
Téléchargements
Toutes les entrées du défi et l'enregistrement complet de l'exécution, en tant que fichiers statiques partagés par toutes les locales :
- main.bean — grand livre de départ, valide tel que publié
- statement.csv — les trois lignes synthétiques
- rules.toml — catégories déterministes
- agent-run.transcript.md — l'invite réelle, la séquence complète d'outils avec les échecs conservés, et la vérification indépendante
- demo-replay.sh — rejeu déterministe étiqueté du chemin fonctionnel (nécessite
bea 0.1.0dans le PATH) - demo-replay.txt — sortie de rejeu capturée avec légende, l'alternative textuelle pour regarder la démonstration
Reproduisez-le : téléchargez les trois entrées, affichez d'abord l'aperçu, appliquez, et vérifiez les deux totaux par rapport à 1000 + 2000 - 29 - 12.50. Le guide des agents parcourt les mêmes étapes à la main.





