Saltar al contenido principal

¿Puede tu agente cuadrar estos libros?

Publicado 6 min de lecturaMike ThriftMike Thrift
¿Puede tu agente cuadrar estos libros?

Una ejecución registrada de agente llevó un libro mayor sintético de tres filas desde un CSV bancario hasta libros verificados. El saldo inicial era 1000 USD, el estado de cuenta contenía tres filas, y las respuestas esperadas se derivaron de la aritmética antes de que se ejecutara cualquier informe: verificación termina en 2958.50 USD, ganancia de septiembre es 1958.50 USD. La ejecución alcanzó esos números exactamente, después de un fallo real que se autodiagnosticó.

Entradas

El desafío son tres archivos publicados bajo /downloads/agent-accounting/, con el escenario completo en la guía de contabilidad con agentes. Los libros abren el 2026-09-01 en USD con 1000 USD en Assets:Checking. El estado de cuenta contiene tres filas de septiembre: un pago de cliente de 2000.00 USD el 2026-09-02, una factura de hosting de -29.00 USD el 2026-09-03, y una visita a un café de -12.50 USD el 2026-09-04. Las reglas asignan al cliente a Income:Consulting, al hosting a Expenses:Software, y al café a Expenses:Dining, y cada cuenta que las reglas nombran se abre en el libro mayor inicial en la fecha requerida.

Las expectativas provienen de las filas más el saldo inicial, independientemente de cualquier salida de informe: 1000 + 2000 - 29 - 12.50 es 2958.50 USD de verificación, y 2000 - 29 - 12.50 es 1958.50 USD de ganancia de septiembre. Una entrada cambiada o una expectativa incorrecta hace fallar la verificación en lugar de imprimir un informe de apariencia plausible.

Metodología

Dos capas, mantenidas separadas. Primero, un verificador CLI instalado (scripts/check-agent-accounting.py, fijado a bea 0.1.0) ejecuta vista previa, aplicar, aplicar de nuevo, verificar, saldo y consultas de estado de resultados en un directorio temporal nuevo con configuración aislada. Asegura que la vista previa reporte 3 listos y no escriba nada, que la primera aplicación escriba 3 entradas, que la aplicación repetida reporte 0 listos con 3 duplicados exactos y no escriba nada, que la identidad de bytes sobreviva a la vista previa y a escrituras rechazadas, que la verificación esté limpia, y que ambos totales coincidan con la aritmética anterior. También intenta una transacción desequilibrada (Assets:Checking -5 USD contra Expenses:Dining 4 USD), exige salida 1, y verifica que los bytes del libro mayor no hayan cambiado.

Segundo, una ejecución real de agente en una copia nueva de las descargas. El cliente era muse 1.1.1 (Muse Code) con modelo muse-spark-1.3-contributor, lanzado sin cabeza con herramientas de shell y escritura de archivos dentro del directorio de trabajo, herramientas web deshabilitadas, y sin intervenciones humanas durante la ejecución. Críticamente, no se proporcionó rules.toml — el agente derivó su propia categorización de las cuentas abiertas del libro mayor.

Resultados observados

El agente hizo 22 llamadas a herramientas (21 de shell más 1 escritura de archivo) y salió con 0. Inspeccionó el CSV y las 16 cuentas abiertas, leyó la superficie de ayuda de la CLI, escribió su propio rules.toml (coincidencias literales en mayúsculas, equivalente a los patrones canónicos porque la coincidencia no distingue mayúsculas), previsualizó 3 listos sin escribir nada, aplicó 3 entradas, y ejecutó una verificación limpia. Sus totales reportados fueron 2958.50 USD en verificación y 1958.50 USD de ganancia de septiembre. El operador re-ejecutó ambas consultas de solo lectura contra el libro mayor del agente después y confirmó las mismas cifras contra los valores esperados independientes.

La breve demostración a continuación reproduce ese camino de trabajo de manera determinista desde las descargas canónicas. Es una repetición, no la ejecución en 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.

Fallos e intervenciones

La transcripción conserva la secuencia original, con los fallos incluidos. Dos llamadas exploratorias fallaron de forma inofensiva (pip no estaba instalado; una sonda de instalación editable encontró fuentes fuera de site-packages) y el agente continuó. Un fallo fue real: la primera --apply murió con Operation not permitted en un bloqueo de caché fuera del espacio de trabajo, porque el sandbox bloqueaba archivos de bloqueo bajo la caché de inicio. El agente buscó en las fuentes del producto, encontró que el directorio de caché respeta XDG_CACHE_HOME, lo re-ejecutó apuntándolo dentro del directorio de trabajo, escribió las mismas 3 entradas que la vista previa había mostrado, y eliminó la caché temporal después. Ningún libro mayor fue editado a mano; cada entrada vino de bea import --apply. Intervenciones durante la ejecución: ninguna — fue sin cabeza con aprobación desactivada, y un humano revisó el registro de eventos solo después del hecho.

Limitaciones

Esto es verificación de salida CLI de una ejecución de un cliente en datos sintéticos — no un punto de referencia de modelos. No afirma nada sobre otros clientes, sobre precisión contable en general, ni sobre uso de producción sin supervisión. Dos distinciones importan. Primero, juicio de categoría versus validación estructural: el agente eligió a qué cuenta pertenecía cada fila, y ese juicio es tan bueno como su lectura de tres filas sin ambigüedad. Todo lo que bea verificó después — el saldo, la estructura de suma cero, la detección de duplicados — es estructural: una verificación que pasa prueba que el libro mayor cuadra, nunca que Expenses:Dining era la cuenta correcta para el café. Segundo, el libro mayor es un juguete: tres filas, una moneda, sin ambigüedad de categorización, sin historial conflictivo. Un estado de cuenta más difícil probaría el juicio; este prueba el bucle.

Descargas

Todas las entradas del desafío y el registro completo de la ejecución, como archivos estáticos compartidos por cada locale:

  • main.bean — libro mayor inicial, valida como publicado
  • statement.csv — las tres filas sintéticas
  • rules.toml — categorías deterministas
  • agent-run.transcript.md — el prompt real, la secuencia completa de herramientas con fallos conservados, y la verificación independiente
  • demo-replay.sh — repetición determinista etiquetada del camino de trabajo (necesita bea 0.1.0 en PATH)
  • demo-replay.txt — salida de repetición capturada con subtítulo, la alternativa de texto a ver la demo

Reprodúcelo: descarga las tres entradas, previsualiza primero, aplica, y verifica los dos totales contra 1000 + 2000 - 29 - 12.50. La guía de agentes recorre los mismos pasos a mano.

Comparte este artículo

Fuente: https://beancount.io/es/bean-labs/research-logs/2026/09/10/can-your-agent-balance-these-books

Publicado: 10 de septiembre de 2026