Un'esecuzione registrata dell'agente ha portato un registro sintetico di tre righe da un CSV bancario a libri contabili verificati. Il saldo di apertura era 1000 USD, l'estratto conto conteneva tre righe e le risposte attese sono state derivate con l'aritmetica prima di eseguire qualsiasi report: il conto corrente chiude a 2958.50 USD, l'utile di settembre è 1958.50 USD. L'esecuzione ha raggiunto esattamente quei numeri, dopo un vero errore che l'agente ha diagnosticato da solo.
Input
La sfida consiste in tre file pubblicati in /downloads/agent-accounting/, con lo scenario completo nella guida alla contabilità con agenti AI. I libri si aprono il 2026-09-01 in USD con 1000 USD in Assets:Checking. L'estratto conto contiene tre righe di settembre: un pagamento cliente di 2000.00 USD il 2026-09-02, una fattura di hosting di -29.00 USD il 2026-09-03 e una visita al bar di -12.50 USD il 2026-09-04. Le regole mappano il cliente su Income:Consulting, l'hosting su Expenses:Software e il bar su Expenses:Dining, e ogni conto nominato dalle regole viene aperto nel registro iniziale alla data richiesta.
Le aspettative derivano dalle righe più il saldo di apertura, indipendentemente da qualsiasi output di report: 1000 + 2000 - 29 - 12.50 fa 2958.50 USD di conto corrente, e 2000 - 29 - 12.50 fa 1958.50 USD di utile di settembre. Un input modificato o un'aspettativa sbagliata fa fallire la verifica invece di stampare un report dall'aspetto plausibile.
Metodologia
Due livelli, tenuti separati. Primo, un verificatore CLI installato (scripts/check-agent-accounting.py, vincolato a bea 0.1.0) esegue preview, apply, repeat apply, check, balance e query di conto economico in una nuova directory temporanea con configurazione isolata. Afferma che la preview riporta 3 pronti e non scrive nulla, che il primo apply scrive 3 registrazioni, che il repeat apply riporta 0 pronti con 3 duplicati esatti e non scrive nulla, che l'identità dei byte sopravvive a preview e scritture rifiutate, che il check è pulito e che entrambi i totali corrispondono all'aritmetica precedente. Tenta anche una transazione non bilanciata (Assets:Checking -5 USD contro Expenses:Dining 4 USD), richiede exit 1 e verifica che i byte del registro siano invariati.
Secondo, una vera esecuzione dell'agente su una copia fresca dei download. Il client era muse 1.1.1 (Muse Code) con modello muse-spark-1.3-contributor, avviato headless con strumenti shell e scrittura file all'interno della workdir, strumenti web disabilitati e nessun intervento umano durante l'esecuzione. Fondamentalmente, nessun rules.toml è stato fornito — l'agente ha derivato la propria categorizzazione dai conti aperti nel registro.
Risultati osservati
L'agente ha effettuato 22 chiamate di strumento (21 shell più 1 scrittura file) ed è uscito con codice 0. Ha ispezionato il CSV e i 16 conti aperti, ha letto la superficie di aiuto della CLI, ha scritto il proprio rules.toml (corrispondenze letterali maiuscole, equivalenti ai pattern canonici perché il matching non fa distinzione tra maiuscole e minuscole), ha mostrato in anteprima 3 pronti senza scrivere nulla, ha applicato 3 registrazioni ed eseguito un check pulito. I totali riportati sono stati 2958.50 USD nel conto corrente e 1958.50 USD di utile di settembre. L'operatore ha rieseguito entrambe le query di sola lettura sul registro dell'agente successivamente e ha confermato le stesse cifre rispetto ai valori attesi indipendenti.
La breve demo qui sotto ripropone in modo deterministico quel percorso funzionante dai download canonici. È una riproduzione, non l'esecuzione dal vivo:
$ 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.Errori e interventi
La trascrizione mantiene la sequenza originale, errori inclusi. Due chiamate esplorative sono fallite in modo innocuo (pip non era installato; un tentativo di percorso per installazione modificabile ha trovato fonti fuori da site-packages) e l'agente è andato avanti. Un errore era reale: il primo --apply è terminato con Operation not permitted su un lock di cache fuori dall'area di lavoro, perché la sandbox bloccava i file di lock nella cache home. L'agente ha cercato nei sorgenti del prodotto, ha scoperto che la directory della cache rispetta XDG_CACHE_HOME, ha rilanciato puntandola all'interno della workdir, ha scritto le stesse 3 registrazioni mostrate in anteprima e ha rimosso la cache temporanea successivamente. Nessun registro è mai stato modificato a mano; ogni registrazione è arrivata da bea import --apply. Interventi durante l'esecuzione: nessuno — era headless con approvazione disattivata e un essere umano ha esaminato il log degli eventi solo a posteriori.
Limiti
Questa è una verifica di output CLI di un'unica esecuzione di un client su dati sintetici — non un benchmark di modelli. Non afferma nulla su altri client, sull'accuratezza contabile in generale o sull'uso di produzione senza supervisione. Due distinzioni contano. Primo, giudizio di categoria versus validazione strutturale: l'agente ha scelto a quale conto apparteneva ogni riga, e quel giudizio è valido solo quanto la sua lettura di tre righe inequivocabili. Tutto ciò che bea ha verificato successivamente — il saldo, la struttura a somma zero, il rilevamento dei duplicati — è strutturale: un check superato dimostra che i libri quadrano, mai che Expenses:Dining fosse il conto giusto per il bar. Secondo, il registro è un giocattolo: tre righe, una valuta, nessuna ambiguità di categorizzazione, nessuna storia in conflitto. Un estratto conto più difficile metterebbe alla prova il giudizio; questo mette alla prova il ciclo.
Download
Tutti gli input della sfida e la registrazione completa dell'esecuzione, come file statici condivisi da ogni locale:
- main.bean — registro iniziale, valido come pubblicato
- statement.csv — le tre righe sintetiche
- rules.toml — categorie deterministiche
- agent-run.transcript.md — il prompt effettivo, la sequenza completa degli strumenti con gli errori mantenuti e la verifica indipendente
- demo-replay.sh — riproduzione deterministica etichettata del percorso funzionante (richiede
bea 0.1.0nel PATH) - demo-replay.txt — output di riproduzione catturato con didascalia, l'alternativa testuale alla visione della demo
Riproducila: scarica i tre input, fai prima la preview, poi apply, e verifica i due totali rispetto a 1000 + 2000 - 29 - 12.50. La guida agli agenti illustra gli stessi passaggi manualmente.





