Дайте на външен AI агент две счетоводни задачи и дръжте всяка промяна в ledger-а под ваш контрол: импортирайте банков CSV с проверка преди запис, след това отговорете на въпрос за баланс от заявка и отчетен изход.
Инсталирайте bea с CLI бърз старт. Локалните команди за импорт, заявки и отчети не изискват акаунт в Beancount.io. Вашият чат агент се нуждае само от собствен абонамент или API ключ. Само вграденият помощник bea ask изисква хоствани идентификационни данни, и тези рецепти не го използват.
Избирате между инструменти? Пет счетоводни инструмента за AI агенти сравнява Beancount.io, hledger, Xero, QuickBooks Online и Puzzle на същите критерии за агентски работни потоци, с датирани източници.
Какво прави агентът и какво прави bea
Агентът предлага категории и изготвя заявки. Bea валидира структурата на ledger-а и изчислява сумите. Вие изпълнявате всяка команда по-долу сами. Агентът никога не записва директно във вашия ledger.
Рецепта 1: импортиране на извлечение с предложени от агента категории
Превърнете банков експорт във валидирани записи. Агентът предлага правилата за категоризация. Прегледът и проверката за дубликати решават какво се записва.
Предпоставки
Нужни са ви bea и свежа демо директория. Без акаунт и без Python импортер.
Подготовка на входните данни
Създайте директорията и ledger-а. Изричните --file цели държат всяка команда насочена към демо книгите.
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Запазете този пример като 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Запазете тези правила за категоризация като rules.toml:
[[rule]]
match = "whole foods|trader joe|corner market"
account = "Expenses:Groceries"
[[rule]]
match = "shell|chevron|exxon"
account = "Expenses:Transport:Fuel"Копирайте подканата за задачата
Поставете тази подкана на вашия външен агент заедно с CSV съдържанието:
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.Изпълнете CLI еквивалентите
Прегледайте първо, след това приложете проверените записи и проверете резултата:
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"Проверете очаквания изход
Прегледът отчита 3 готови, 0 точни дубликата, 0 възможни дубликата и излиза с 0. Той не записва нищо. Прилагането отчита Записани 3 записа. Проверката отчита без грешки. Опашката ! изброява единния несъпоставен ред от Unknown Shop на -9.99 USD. Заявката за баланс отчита 930.01 USD в разплащателната сметка. Повтарянето на прилагането отчита 0 готови, 3 точни дубликата и записва 0 записа.
Преглед и корекция
Прекатегоризирайте реда ! умишлено във вашия ledger, след като го прочетете. Успешна проверка доказва само че ledger-ът е балансиран. Тя не казва нищо за това дали Expenses:Uncategorized е правилната сметка. За политиката за дубликати, обработката на конфликти и разширения Python път, следвайте ръководството за банков CSV импорт.
Рецепта 2: отговор на въпрос за баланс без записвания
Отговорете на един въпрос от демо книгите: колко е отишло за хранителни стоки и гориво през август 2026. Агентът изготвя заявката. Само за четене команди произвеждат отговора.
Предпоставки
Нужен ви е демо ledger-ът от рецепта 1 или вашите собствени книги. Всяка команда по-долу е само за четене.
Копирайте подканата за задачата
Поставете тази подкана на вашия външен агент:
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.Изпълнете CLI еквивалентите
Изпълнете изготвената заявка срещу изрична ledger цел, след това проверете с отчет:
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Машинните потребители добавят глобалния флаг --json преди подкомандата:
bea --file books/main.bean --json query "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY account"JSON обвивките, кодовете за изход и разположението на глобалните флагове следват CLI справката. Ръководството за езика на заявките документира пълната BQL повърхност.
Проверете очаквания изход
Заявката отчита 20.00 USD за Expenses:Groceries, 40.00 USD за Expenses:Transport:Fuel и 9.99 USD за Expenses:Uncategorized. Хранителните стоки плюс горивото са 60.00 USD. Отчетът за приходите и разходите се съгласява: 69.99 USD от августовски разходи с нетна печалба от -69.99 USD. JSON вариантът връща същите редове вътре в data.rows с метаданни за колони в data.columns.
Преглед и корекция
Заявка срещу грешно име на сметка отпечатва (няма редове) на stderr и все пак излиза с 0. Сравнете името с изхода от bea list open и изпълнете заявката отново. Никога не коригирайте изненадваща сума, като редактирате ledger-а, за да съответства на отговора. Поправете заявката или поправете книгите, след това стартирайте отново bea check.
Първо предизвикателство: балансиране на три синтетични реда
Преносимо първо предизвикателство с изрични входни данни и независимо изведен отговор. Изтеглете трите файла по-долу, изпълнете импорта и проверете двете суми. Без акаунт и без продуктова каса.
Отворете книги на 2026-09-01 в USD с 1000 USD в разплащателната сметка. Поставете три септемврийски реда: плащане от клиент от 2000.00 USD, сметка за хостинг от 29.00 USD и посещение в кафене от 12.50 USD. Разплащателната сметка завършва на 2958.50 USD, от 1000 + 2000 - 29 - 12.50. Септемврийската печалба е 1958.50 USD, от 2000 - 29 - 12.50. И двете очаквания идват от тази аритметика, не от отчетен изход.
Подготовка на входните данни
Създайте директорията и отворете двете сметки, които шаблонът не носи. Expenses:Dining вече идва от CLI шаблона.
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Тези три команди произвеждат ledger-а по-долу. Изтеглете го като main.bean вместо да го пишете.
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Запазете това извлечение като statement.csv, или го изтеглете като statement.csv:
Date,Payee,Amount
2026-09-02,Client,2000.00
2026-09-03,Hosting,-29.00
2026-09-04,Cafe,-12.50Запазете тези правила като rules.toml, или ги изтеглете като rules.toml. Всяко правило назовава сметка, която началният ledger отваря.
[[rule]]
match = "client"
account = "Income:Consulting"
[[rule]]
match = "hosting"
account = "Expenses:Software"
[[rule]]
match = "cafe"
account = "Expenses:Dining"Изпълнете предизвикателството
Прегледайте първо, след това приложете и проверете. Суми, дати, имена на полета и имена на сметки са идентични във всеки език. Само прозата около тях е преведена.
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Проверете очаквания изход
Прегледът отчита 3 готови, 0 точни дубликата, 0 възможни дубликата и излиза с 0. Прилагането отчита Записани 3 записа. Проверката отчита без грешки. Заявката за баланс държи 2958.50 USD в разплащателната сметка. Отчетът за приходите и разходите показва 2000.00 USD от консултантски приходи срещу 41.50 USD от разходи, за нетна печалба от 1958.50 USD. Повтарянето на прилагането отчита 0 готови, 3 точни дубликата и записва 0 записа.
Когато една рецепта стане повтаряща се задача
Подканите по-горе подхождат за еднократни задачи, управлявани ръчно. Задачи, които повтаряте седмично, подхождат на версионираните умения в продуктовото хранилище. Всяка връзка по-долу отваря текущия източник на умението, който носи свои собствени инструкции за настройка и задействане. Тази CMS не пази копия от тези файлове.
- Започнете свеж ledger от празна директория с beancount-init. Той създава ledger файла, Fava runner и Python проект.
- Превърнете банков експорт в категоризирани записи с beancount-import. Той поставя на етап всеки ред, предлага категории от ledger историята, пропуска вече импортирани редове и записва само след потвърждение. Рецепта 1 по-горе е ръчната форма на тази задача.
- Докажете, че една сметка съответства на извлечението си с beancount-reconcile. Той сравнява ledger-а с извлечението и поставя assertion за краен баланс след потвърждение.
- Отговорете на въпрос от книгите с beancount-ask. Той изпълнява само за четене заявки и показва всяка заявка до нейната цифра. Рецепта 2 по-горе е ръчната форма на тази задача.
- Приключете месец с beancount-close. Той реконсилира всяка активна сметка, проверява повтарящи се записи и флагове за преглед, и записва приключването като commit.
Пълната колекция живее в каноничното дърво на уменията.
Дайте bea на агент с шел възможности, или заредете умение в клиент
Това са две отделни стъпки. Инсталирането на bea никога не инсталира или конфигурира умения.
Агент с шел възможности се нуждае от командата в своя път. Инсталирайте я с CLI бърз старт, след това агентът изпълнява същите bea команди, които рецептите показват. Агентът предлага, вие преглеждате, и bea валидира.
Умение се зарежда в самия агентски клиент, чрез собствения механизъм за умения на този клиент. Продуктовото хранилище излага едно канонично дърво на двата поддържани клиента: Claude Code го чете под .claude/skills и Codex под .agents/skills, като свързани директории към същия източник. Насочете местоположението на уменията на клиента към папката с умението, от което се нуждаете, и продължете да четете текущия му източник за фрази за задействане и актуализации.
bea ask зарежда своите собствени умения отделно, от SKILL.md до вашия ledger — вижте Разширяване на bea ask с умения.
Въпроси от типа ask без bea ask
Рецепта 2 отговаря на ledger въпроси с външен агент плюс само за четене bea query и bea report команди. Този път е локален. Той не изисква акаунт и допълнителна инсталация.
bea ask е отделен вграден помощник. Той не е нито рецептата по-горе, нито умението beancount-ask. Той насочва въпроса през хостваната AI услуга, така че се нуждае от допълнителната ask и хоствани идентификационни данни, както е документирано в CLI справката. Инсталирайте основния CLI първо, след това добавете допълнителната само когато искате хоствани отговори.
Цитирани изходи и CLI проверка
Всяка команда по-горе беше изпълнена срещу публикувания bea 0.1.0 пакет в свежа директория. Цитираните бройки, баланси и съобщения са CLI проверка.
Един клиент е завършил първото предизвикателство на свежо копие от изтеглянията без предварително предоставени правила. Muse Code 1.1.1 (модел muse-spark-1.3-contributor) изведе своя собствена категоризация, прегледа 3 готови без нищо записано, приложи 3 записа и отчете 2958.50 USD в разплащателната сметка с 1958.50 USD септемврийска печалба — съответстващи на очакванията по-горе. Единственият му неуспешен опит за прилагане (заключена sandbox кеш памет, възстановена чрез XDG_CACHE_HOME) е запазен в записа. Прочетете пълната подкана, последователността от инструменти и проверката в транскрипта на изпълнението, или преиграйте работния път с демо скрипта и неговия записан изход.
Това изпълнение е CLI-изходна проверка на единично изпълнение, не бенчмарк на модели. То не твърди нищо за други клиенти, счетоводна точност като цяло, или неконтролирана производствена употреба.
Пълната доказателствена история — входни данни, методология, наблюдавани резултати, неуспехи, ограничения и изтегляния — е публикувана като Може ли вашият агент да балансира тези книги?.
Разгледайте по-широкото изследване зад тези работни потоци в Bean Labs, изследователския център за счетоводна автоматизация на Beancount.io.