Naar hoofdinhoud springen

Geef je AI-agent een Beancount-grootboek met bea

Geef een AI-agent twee boekhoudtaken met bea: importeer een bank-CSV met eerst een voorbeeldweergave ter controle, en beantwoord een saldovraag met BQL en rapportuitvoer.

Geef een externe AI-agent twee boekhoudtaken en houd elke grootboekwijziging onder jouw controle: importeer een bank-CSV met een preview-eerst-controle en beantwoord vervolgens een saldovraag op basis van query- en rapportuitvoer.

Installeer bea met de CLI-snelstart. Lokale import-, query- en rapportopdrachten hebben geen Beancount.io-account nodig. Je chatagent heeft alleen een eigen abonnement of API-sleutel nodig. Alleen de ingebouwde bea ask-helper heeft gehoste inloggegevens nodig, en deze recepten gebruiken die niet.

Twijfel je tussen tools? Vijf boekhoudtools voor AI-agenten vergelijkt Beancount.io, hledger, Xero, QuickBooks Online en Puzzle op dezelfde agent-workflowcriteria, met gedateerde bronnen.

Wat de agent doet en wat bea doet​

De agent stelt categorieën voor en stelt queries op. Bea valideert de grootboekstructuur en berekent de totalen. Je voert elke onderstaande opdracht zelf uit. De agent schrijft nooit rechtstreeks in jouw grootboek.

Recept 1: een afschrift importeren met door de agent voorgestelde categorieën​

Zet een bankexport om in gevalideerde boekingen. De agent stelt de categorisatieregels voor. Preview en duplicaatcontrole bepalen wat er wordt weggeschreven.

Vereisten​

Je hebt bea en een verse demomap nodig. Geen account en geen Python-importer.

De invoer voorbereiden​

Maak de map en het grootboek aan. Expliciete --file-doelen houden elke opdracht gericht op de demoboeken.

mkdir ai-agent-demo && cd ai-agent-demo
bea --no-input init books --currency USD --date 2026-08-01 --opening-balance "Assets:Checking 1000"
bea --file books/main.bean add open --date 2026-08-01 --account Expenses:Transport:Fuel -c USD

Sla dit voorbeeld op als statement.csv:

Date,Payee,Narration,Amount
2026-08-02,Whole Foods,groceries,-20.00
2026-08-03,Shell,gas,-40.00
2026-08-04,Unknown Shop,mystery,-9.99

Sla deze categorisatieregels op als rules.toml:

[[rule]]
match = "whole foods|trader joe|corner market"
account = "Expenses:Groceries"
 
[[rule]]
match = "shell|chevron|exxon"
account = "Expenses:Transport:Fuel"

De taakprompt kopiëren​

Plak deze prompt samen met de CSV-inhoud naar je externe agent:

Propose Beancount categorization rules for my bank CSV rows.
Suggest one TOML rule per merchant with a match pattern and a
destination expense account. Never change dates, payees, or amounts.
Leave rows you cannot categorize confidently unmatched: they post to
Expenses:Uncategorized with flag ! for my review. I run bea import
preview and apply locally. You do not write my ledger.

De CLI-equivalenten uitvoeren​

Eerst een preview, daarna de beoordeelde boekingen toepassen en het resultaat verifiëren:

bea --file books/main.bean import statement.csv --csv date=Date,amount=Amount,payee=Payee,narration=Narration --account Assets:Checking --rules rules.toml
bea --file books/main.bean import statement.csv --apply
bea --file books/main.bean check
bea --file books/main.bean list transaction --flag '!'
bea --file books/main.bean query "SELECT account, sum(position) WHERE account = 'Assets:Checking' GROUP BY account"

De verwachte uitvoer controleren​

De preview rapporteert 3 klaar, 0 exacte duplicaten, 0 mogelijke duplicaten en sluit af met code 0. Er wordt niets weggeschreven. De toepassingsrun rapporteert 3 boekingen geschreven. De controle rapporteert geen fouten. De !-wachtrij toont de enige niet-overeenkomende rij van Unknown Shop op -9,99 USD. De saldoquery rapporteert 930,01 USD op de betaalrekening. Het herhalen van de toepassing rapporteert 0 klaar, 3 exacte duplicaten en schrijft 0 boekingen.

Beoordelen en corrigeren​

Categoriseer de !-rij bewust opnieuw in je grootboek nadat je die hebt gelezen. Een geslaagde controle bewijst alleen dat het grootboek in evenwicht is. Het zegt niets over de vraag of Expenses:Uncategorized de juiste rekening is. Voor het duplicaatbeleid, conflictbeheer en het geavanceerde Python-pad volg je de bank-CSV-walkthrough.

Recept 2: een saldovraag beantwoorden zonder boekingen​

Beantwoord één vraag uit de demoboeken: hoeveel ging er in augustus 2026 naar boodschappen en brandstof. De agent stelt de query op. Alleen-lezen opdrachten leveren het antwoord.

Vereisten​

Je hebt het demogrootboek uit recept 1 of je eigen boeken nodig. Elke onderstaande opdracht is alleen-lezen.

De taakprompt kopiëren​

Plak deze prompt naar je externe agent:

Draft a Beancount query (BQL) that answers: how much did I spend on
groceries and fuel in August 2026. Use my account names exactly as
listed by bea list open. Propose read-only commands only: bea query
or bea report with an explicit --file target. Do not propose ledger
edits to fix a surprising total. A surprising total means the query
or the books need review, not a compensating entry.

De CLI-equivalenten uitvoeren​

Voer de opgestelde query uit tegen een expliciet grootboekdoel en controleer daarna kruislings met een rapport:

bea --file books/main.bean query "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY account"
bea --file books/main.bean report income-statement --time 2026-08

Machineconsumenten voegen de globale --json-vlag toe vóór het subcommando:

bea --file books/main.bean --json query "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY account"

JSON-enveloppen, exitcodes en de plaatsing van globale vlaggen volgen de CLI-referentie. De querytaalgids documenteert het volledige BQL-oppervlak.

De verwachte uitvoer controleren​

De query rapporteert 20,00 USD voor Expenses:Groceries, 40,00 USD voor Expenses:Transport:Fuel en 9,99 USD voor Expenses:Uncategorized. Boodschappen plus brandstof is 60,00 USD. De resultatenrekening komt overeen: 69,99 USD aan augustusuitgaven met een nettowinst van -69,99 USD. De JSON-variant retourneert dezelfde rijen binnen data.rows met kolommetagegevens in data.columns.

Beoordelen en corrigeren​

Een query tegen een verkeerde rekeningnaam print (no rows) op stderr en sluit nog steeds af met code 0. Vergelijk de naam met de uitvoer van bea list open en voer de query opnieuw uit. Corrigeer een verrassend totaal nooit door het grootboek aan te passen zodat het bij het antwoord past. Corrigeer de query of corrigeer de boeken en voer daarna bea check opnieuw uit.

Eerste uitdaging: drie synthetische rijen in evenwicht brengen​

Een draagbare eerste uitdaging met expliciete invoer en een onafhankelijk afgeleid antwoord. Download de drie bestanden hieronder, voer de import uit en controleer de twee totalen. Geen account en geen productafhandeling.

Open boeken op 2026-09-01 in USD met 1000 USD op de betaalrekening. Boek drie septemberrijen: een klantbetaling van 2000,00 USD, een hostingrekening van 29,00 USD en een cafébezoek van 12,50 USD. De betaalrekening eindigt op 2958,50 USD, van 1000 + 2000 - 29 - 12,50. De septemberwinst is 1958,50 USD, van 2000 - 29 - 12,50. Beide verwachtingen komen uit die rekenkunde, niet uit rapportuitvoer.

De invoer voorbereiden​

Maak de map aan en open de twee rekeningen die het sjabloon niet bevat. Expenses:Dining komt al uit het CLI-sjabloon.

mkdir agent-challenge && cd agent-challenge
bea --no-input init books --currency USD --date 2026-09-01 --opening-balance "Assets:Checking 1000"
bea --file books/main.bean add open --date 2026-09-01 --account Income:Consulting -c USD
bea --file books/main.bean add open --date 2026-09-01 --account Expenses:Software -c USD

Die drie opdrachten produceren het grootboek hieronder. Download het als main.bean in plaats van het te typen.

option "title" "Personal ledger"
option "operating_currency" "USD"
 
; Add more accounts with bea add open. Amounts on credit accounts are negative.
; bea import books rows it cannot categorize to Expenses:Uncategorized with flag '!'.
2026-09-01 open Assets:Checking USD
2026-09-01 open Assets:Savings USD
2026-09-01 open Assets:Cash USD
2026-09-01 open Liabilities:CreditCard USD
2026-09-01 open Income:Salary USD
2026-09-01 open Income:Interest USD
2026-09-01 open Expenses:Groceries USD
2026-09-01 open Expenses:Dining USD
2026-09-01 open Expenses:Rent USD
2026-09-01 open Expenses:Transport USD
2026-09-01 open Expenses:Utilities USD
2026-09-01 open Expenses:Fees USD
2026-09-01 open Expenses:Uncategorized USD
2026-09-01 open Equity:OpeningBalances USD
 
2026-09-01 * "Opening balances"
  Assets:Checking          1000 USD
  Equity:OpeningBalances  -1000 USD
 
2026-09-01 open Income:Consulting USD
 
2026-09-01 open Expenses:Software USD

Sla dit afschrift op als statement.csv, of download het als statement.csv:

Date,Payee,Amount
2026-09-02,Client,2000.00
2026-09-03,Hosting,-29.00
2026-09-04,Cafe,-12.50

Sla deze regels op als rules.toml, of download ze als rules.toml. Elke regel benoemt een rekening die het startgrootboek opent.

[[rule]]
match = "client"
account = "Income:Consulting"
 
[[rule]]
match = "hosting"
account = "Expenses:Software"
 
[[rule]]
match = "cafe"
account = "Expenses:Dining"

De uitdaging uitvoeren​

Eerst een preview, daarna toepassen en verifiëren. Bedragen, datums, veldnamen en rekeningnamen zijn in elke landinstelling identiek. Alleen de omliggende tekst wordt vertaald.

bea --file books/main.bean import statement.csv --csv date=Date,amount=Amount,payee=Payee --account Assets:Checking --rules rules.toml
bea --file books/main.bean import statement.csv --csv date=Date,amount=Amount,payee=Payee --account Assets:Checking --rules rules.toml --apply
bea --file books/main.bean check
bea --file books/main.bean query "SELECT account, sum(position) WHERE account = 'Assets:Checking' GROUP BY account"
bea --file books/main.bean report income-statement --time 2026-09

De verwachte uitvoer controleren​

De preview rapporteert 3 klaar, 0 exacte duplicaten, 0 mogelijke duplicaten en sluit af met code 0. De toepassingsrun rapporteert 3 boekingen geschreven. De controle rapporteert geen fouten. De saldoquery bevat 2958,50 USD op de betaalrekening. De resultatenrekening toont 2000,00 USD aan Consulting-inkomsten tegenover 41,50 USD aan uitgaven, voor een nettowinst van 1958,50 USD. Het herhalen van de toepassing rapporteert 0 klaar, 3 exacte duplicaten en schrijft 0 boekingen.

Wanneer een recept een herhalende taak wordt​

De bovenstaande prompts zijn geschikt voor eenmalige taken die handmatig worden uitgevoerd. Taken die je wekelijks herhaalt, lenen zich voor de versiebeheerde skills in de productrepository. Elke link hieronder opent de huidige bron van de skill, die zijn eigen setup- en triggerinstructies bevat. Dit CMS bewaart geen kopieën van deze bestanden.

  • Start een nieuw grootboek vanuit een lege map met beancount-init. Het maakt het grootboekbestand, een Fava-runner en een Python-project aan.
  • Zet een bankexport om in gecategoriseerde boekingen met beancount-import. Het plaatst elke rij in de wachtrij, stelt categorieën voor op basis van de grootboekgeschiedenis, slaat al geïmporteerde rijen over en schrijft pas na bevestiging. Recept 1 hierboven is de handmatige vorm van deze taak.
  • Bewijs dat één rekening overeenkomt met het afschrift met beancount-reconcile. Het vergelijkt het grootboek met het afschrift en voegt na bevestiging een saldo-assertie aan het einde van de periode toe.
  • Beantwoord een vraag uit de boeken met beancount-ask. Het voert alleen-lezen queries uit en toont elke query naast het bijbehorende cijfer. Recept 2 hierboven is de handmatige vorm van deze taak.
  • Sluit een maand af met beancount-close. Het reconcileert elke actieve rekening, controleert terugkerende boekingen en controlemarkeringen en legt de afsluiting vast als een commit.

De volledige collectie staat in de canonieke skill-structuur.

Geef een shell-capabele agent bea, of laad een skill in een client​

Dit zijn twee afzonderlijke stappen. Het installeren van bea installeert of configureert nooit skills.

Een shell-capabele agent heeft de opdracht in zijn pad nodig. Installeer het met de CLI-snelstart; daarna voert de agent dezelfde bea-opdrachten uit die de recepten tonen. De agent stelt voor, jij beoordeelt en bea valideert.

Een skill wordt geladen in de agentclient zelf, via het eigen skillmechanisme van die client. De productrepository stelt één canonieke structuur beschikbaar aan beide ondersteunde clients: Claude Code leest die onder .claude/skills en Codex onder .agents/skills, als gekoppelde mappen naar dezelfde bron. Wijs de skilllocatie van de client aan naar de skillmap die je nodig hebt en blijf de huidige bron lezen voor triggerzinnen en updates.

bea ask laadt zijn eigen skills afzonderlijk, vanuit een SKILL.md naast je grootboek — zie Bea ask uitbreiden met skills.

Ask-achtige vragen zonder bea ask​

Recept 2 beantwoordt grootboekvragen met een externe agent plus alleen-lezen bea query- en bea report-opdrachten. Dat pad is lokaal. Het vereist geen account en geen extra installatie.

bea ask is een aparte ingebouwde helper. Het is noch het bovenstaande recept, noch de beancount-ask-skill. Het leidt de vraag door de gehoste AI-dienst, dus het vereist de ask-extensie en gehoste inloggegevens, zoals gedocumenteerd in de CLI-referentie. Installeer eerst de basis-CLI en voeg de extensie alleen toe wanneer je gehoste antwoorden wilt.

Geciteerde uitvoer en CLI-verificatie​

Elke bovenstaande opdracht is uitgevoerd tegen het gepubliceerde bea 0.1.0-pakket in een verse map. Geciteerde aantallen, saldi en berichten zijn CLI-verificatie.

Eén client heeft de eerste uitdaging voltooid op een verse kopie van de downloads zonder vooraf aangeleverde regels. Muse Code 1.1.1 (model muse-spark-1.3-contributor) leidde zijn eigen categorisatie af, bekeek 3 klaar zonder iets te schrijven, paste 3 boekingen toe en rapporteerde 2958,50 USD op de betaalrekening met 1958,50 USD septemberwinst — overeenkomend met de bovenstaande verwachtingen. De enige mislukte toepassing (een sandbox-cachevergrendeling, hersteld via XDG_CACHE_HOME) is in het dossier bewaard. Lees de volledige prompt, toolsequentie en verificatie in het run-transcript, of herspeel het werkende pad met het demo-script en zijn vastgelegde uitvoer.

Die run is CLI-uitvoerverificatie van een enkele uitvoering, geen modelbenchmark. Het beweert niets over andere clients, boekhoudkundige nauwkeurigheid in het algemeen of onbeheerd productiegebruik.

Het volledige bewijsverhaal — invoer, methodologie, waargenomen resultaten, fouten, beperkingen en downloads — is gepubliceerd als Kan jouw agent deze boeken in evenwicht brengen?.

Verken het bredere onderzoek achter deze workflows op Bean Labs, het onderzoekscentrum voor boekhoudautomatisering van Beancount.io.

Bron: https://beancount.io/nl/docs/Solutions/accounting-with-ai-agents