外部のAIエージェントに2つの簿記業務を任せ、すべての台帳変更をあなたのレビュー下に置く:プレビュー優先のチェック付きで銀行CSVをインポートし、その後クエリとレポート出力から残高の質問に回答する。
CLIクイックスタートでbeaをインストールする。ローカルのインポート、クエリ、レポートコマンドはBeancount.ioアカウントを必要としない。チャットエージェントは独自のサブスクリプションまたはAPIキーのみが必要。組み込みのbea askヘルパーだけがホスト型認証情報を必要とするが、これらのレシピはそれを使用しない。
ツールを選ぶ際は?AIエージェント向け会計ツール5選が、Beancount.io、hledger、Xero、QuickBooks Online、Puzzleを同じエージェントワークフロー基準で比較し、日付入りの情報源を掲載している。
エージェントが行うこととbeaが行うこと
エージェントはカテゴリを提案し、クエリを起草する。Beaは台帳構造を検証し、合計を計算する。以下のすべてのコマンドは自分で実行する。エージェントが直接台帳に書き込むことはない。
レシピ1:エージェント提案のカテゴリで明細をインポートする
銀行のエクスポートを検証済みエントリに変換する。エージェントが分類ルールを提案する。プレビューと重複レビューが、何を書き込むかを決定する。
前提条件
beaと新しいデモディレクトリが必要。アカウントもPythonインポーターも不要。
入力の準備
ディレクトリと台帳を作成する。明示的な--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 ready, 0 exact duplicates, 0 possible duplicatesを報告し、終了コード0で終了する。何も書き込まれない。適用実行はWrote 3 entriesを報告する。チェックはエラーなしを報告する。!キューはUnknown Shopから-9.99 USDの一致しない1行を一覧表示する。残高クエリは当座預金に930.01 USDを報告する。適用を繰り返すと0 ready, 3 exact duplicatesを報告し、0エントリを書き込む。
レビューと修正
!行を読んだ後、意図的に台帳で再分類する。合格したチェックは台帳の残高が一致することを証明するだけだ。Expenses:Uncategorizedが正しい勘定科目かどうかについては何も示さない。重複ポリシー、競合処理、高度なPythonパスについては、銀行CSVウォークスルーに従う。
レシピ2:書き込みなしで残高の質問に回答する
デモ帳簿から1つの質問に回答する:2026年8月に食料品と燃料にいくら使ったか。エージェントがクエリを起草する。読み取り専用コマンドが回答を生成する。
前提条件
レシピ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相当コマンドの実行
起草されたクエリを明示的な台帳ターゲットに対して実行し、レポートでクロスチェックする:
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の全機能を文書化している。
期待される出力の確認
クエリはExpenses:Groceriesに20.00 USD、Expenses:Transport:Fuelに40.00 USD、Expenses:Uncategorizedに9.99 USDを報告する。食料品と燃料を合わせると60.00 USD。損益計算書も一致する:8月の経費69.99 USD、純利益-69.99 USD。JSONバリアントはdata.rows内の同じ行を、data.columns内の列メタデータとともに返す。
レビューと修正
間違った勘定科目名に対するクエリは、stderrに(no rows)を出力し、それでも終了コード0で終了する。名前をbea list openの出力と比較し、クエリを再実行する。驚くべき合計を修正するために、台帳を編集して回答に合わせることは決してしない。クエリを修正するか帳簿を修正し、その後bea checkを再実行する。
最初のチャレンジ:3つの合成行の残高を一致させる
明示的な入力と独立に導出された回答を持つ、持ち運び可能な最初のチャレンジ。以下の3つのファイルをダウンロードし、インポートを実行し、2つの合計を確認する。アカウントも製品チェックアウトも不要。
2026年9月1日にUSDで当座預金1000 USDで帳簿を開く。9月の3行を記帳する:2000.00 USDのクライアント支払い、29.00 USDのホスティング請求書、12.50 USDのカフェ訪問。当座預金は2958.50 USDで終了する、1000 + 2000 - 29 - 12.50から。9月の利益は1958.50 USD、2000 - 29 - 12.50から。両方の期待値はその算術から来ており、レポート出力からではない。
入力の準備
ディレクトリを作成し、テンプレートが持たない2つの勘定科目を開く。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これらの3つのコマンドが以下の台帳を生成する。タイピングの代わりに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としてダウンロードする。各ルールはスターター台帳が開く勘定科目を指定する。
[[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 ready, 0 exact duplicates, 0 possible duplicatesを報告し、終了コード0で終了する。適用実行はWrote 3 entriesを報告する。チェックはエラーなしを報告する。残高クエリは当座預金に2958.50 USDを保持する。損益計算書は、経費41.50 USDに対してコンサルティング収入2000.00 USDを示し、純利益1958.50 USDとなる。適用を繰り返すと0 ready, 3 exact duplicatesを報告し、0エントリを書き込む。
レシピが繰り返しジョブになるとき
上記のプロンプトは手動で駆動される単発タスクに適している。毎週繰り返すジョブには、製品リポジトリ内のバージョン管理されたスキルが適している。以下の各リンクはスキルの現在のソースを開き、独自のセットアップとトリガー手順を持つ。このCMSはこれらのファイルのコピーを保持しない。
- beancount-initで空のディレクトリから新しい台帳を開始する。台帳ファイル、Favaランナー、Pythonプロジェクトを作成する。
- beancount-importで銀行エクスポートを分類済みエントリに変換する。各行をステージングし、台帳履歴からカテゴリを提案し、すでにインポートされた行をスキップし、確認後にのみ書き込む。上記のレシピ1はこのジョブの手動形式。
- beancount-reconcileで1つの勘定科目が明細と一致することを証明する。台帳と明細の差分を取り、確認後に期間末残高アサーションを記録する。
- beancount-askで帳簿から質問に回答する。読み取り専用クエリを実行し、各クエリをその数値の横に表示する。上記のレシピ2はこのジョブの手動形式。
- beancount-closeで月次締めを行う。すべてのアクティブな勘定科目を照合し、定期エントリとレビューフラグをチェックし、締めをコミットとして記録する。
完全なコレクションは正規スキルツリーにある。
シェル対応エージェントにbeaを与えるか、クライアントにスキルをロードする
これらは2つの別々のステップです。beaのインストールはスキルをインストールしたり設定したりすることはありません。
シェル対応エージェントはパス上にコマンドが必要です。CLIクイックスタートでインストールし、その後エージェントはレシピが示す同じbeaコマンドを実行します。エージェントが提案し、あなたがレビューし、beaが検証します。
スキルは、そのクライアント自身のスキルメカニズムを通じて、エージェントクライアント自体にロードされます。製品リポジトリは、両方のサポートされるクライアントに対して1つの正規ツリーを公開します:Claude Codeは.claude/skillsの下でそれを読み、Codexは.agents/skillsの下で、同じソースへのリンクディレクトリとして。クライアントのスキル場所を必要なスキルフォルダに指定し、トリガーフレーズと更新について現在のソースを読み続けてください。
bea askは独自のスキルを別途ロードします。台帳の隣のSKILL.mdから — bea askをスキルで拡張するを参照。
bea askなしのask風質問
レシピ2は外部エージェントと読み取り専用のbea queryおよびbea reportコマンドで台帳の質問に回答します。そのパスはローカルです。アカウントも追加インストールも不要。
bea askは別の組み込みヘルパーです。上記のレシピでもbeancount-askスキルでもありません。ホスト型AIサービスを通じて質問をルーティングするため、CLIリファレンスに文書化されているように、askエクストラとホスト型認証情報が必要です。まず基本CLIをインストールし、ホスト型回答が必要な場合にのみエクストラを追加してください。
引用出力とCLI検証
上記のすべてのコマンドは、公開されたbea 0.1.0パッケージに対して新しいディレクトリで実行されました。引用されたカウント、残高、メッセージはCLI検証です。
1つのクライアントが、事前にルールを提供せずにダウンロードの新しいコピーで最初のチャレンジを完了しました。Muse Code 1.1.1(モデルmuse-spark-1.3-contributor)が独自の分類を導出し、3件の準備完了をプレビューして何も書き込まず、3エントリを適用し、2958.50 USDの当座預金と1958.50 USDの9月利益を報告しました — 上記の期待値と一致。適用失敗が1回(サンドボックスキャッシュロック、XDG_CACHE_HOMEで回復)は記録に保持されています。完全なプロンプト、ツールシーケンス、検証は実行トランスクリプトで読むか、デモスクリプトとそのキャプチャ出力で動作パスを再生できます。
その実行は単一実行のCLI出力検証であり、モデルベンチマークではありません。他のクライアント、一般的な会計精度、または無人本番使用について何も主張するものではありません。
完全な証明ストーリー — 入力、方法論、観察結果、失敗、制限、ダウンロード — はあなたのエージェントはこれらの帳簿の残高を合わせられますか?として公開されています。
これらのワークフローの背後にある広範な研究は、Beancount.ioの会計自動化研究ハブであるBean Labsで探索してください。