Confiez deux travaux de tenue de livres à un agent IA externe tout en gardant chaque modification du registre sous votre contrôle : importez un CSV bancaire avec vérification préalable de l'aperçu, puis répondez à une question de solde à partir de la sortie des requêtes et des rapports.
Installez bea avec le guide de démarrage rapide CLI. Les commandes locales d'importation, de requête et de rapport ne nécessitent pas de compte Beancount.io. Votre agent de chat n'a besoin que de son propre abonnement ou de sa clé API. Seul l'assistant intégré bea ask nécessite des identifiants hébergés, et ces recettes ne l'utilisent pas.
Ce que fait l'agent et ce que fait bea
L'agent propose des catégories et rédige des requêtes. Bea valide la structure du registre et calcule les totaux. Vous exécutez toutes les commandes ci-dessous vous-même. L'agent n'écrit jamais directement dans votre registre.
Recette 1 : importer un relevé avec des catégories proposées par l'agent
Transformez un export bancaire en écritures validées. L'agent propose les règles de catégorisation. L'aperçu et la vérification des doublons décident de ce qui est écrit.
Conditions requises
Vous avez besoin en de bea et d'un nouveau répertoire de démonstration. Pas de compte ni d'importateur Python.
Préparez les entrées
Créez le répertoire et le registre. Des cibles explicites --file maintiennent toutes les commandes pointées vers les livres de démonstration.
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 USDEnregistrez cet exemple sous statement.csv :
Date,Payee,Narration,Amount
2026-08-02,Whole Foods,alimentation,-20.00
2026-08-03,Shell,essence,-40.00
2026-08-04,Boutique inconnue,inconnu,-9.99Enregistrez ces règles de catégorisation sous rules.toml :
[[rule]]
match = "whole foods|trader joe|corner market"
account = "Expenses:Groceries"
[[rule]]
match = "shell|chevron|exxon"
account = "Expenses:Transport:Fuel"Copiez le prompt de tâche
Collez ce prompt à votre agent externe avec le contenu du CSV :
Proposez des règles de catégorisation Beancount pour mes lignes de CSV bancaire.
Suggérez une règle TOML par marchand avec un motif de correspondance et un
compte de dépenses de destination. Ne modifiez jamais les dates, les payeurs ou les montants.
Laissez les lignes que vous ne pouvez pas catégoriser avec confiance non appariées : elles seront
affectées à Expenses:Uncategorized avec le drapeau ! pour mon contrôle. Je lance bea import
preview et apply localement. Vous n'écrivez pas dans mon registre.Exécutez les équivalents CLI
Prévisualisez d'abord, puis appliquez les écritures examinées et vérifiez le résultat :
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"Vérifiez la sortie attendue
L'aperçu rapporte 3 ready, 0 exact duplicateduplicates, 0 possible duplicates et sort avec 0. Il n'écrit rien. L'exécution apply rapporte Wrote 3 entries. La vérification ne rapporte aucune erreur. La file d'attente ! liste la ligne non appariée de Unknown Shop à -9.99 USD. La requête de solde rapporte 930.01 USD sur le compte de chèque consulté. La répétition de l'application rapporte 0 ready, 3 exact duplicates et écrit 0 élément.
Examen et correction
Recatégorisez délibérément la ligne ! dans votre registre après l'avoir lue. Une vérification qui passe ne prouve que l'équilibre du registre. Elle ne dit rien sur le fait que Expenses:Uncategorized est le bon compte. Pour la politique de doublons, la gestion des conflits et le chemin Python avancé, voir le parcours CSV bancaire.
Recette 2 : répondre à une question de solde sans écritures
Réponds à une question à partir des livres de démonstration : combien a été dépensé en alimentation et en carburant en août 2026. L'agent rédige la requête. Les commandes en lecture seule produisent la réponse.
Conditions requises
Vous avez besoin du livre de démonstration de la recette 1 ou de vos propres livres. Toutes les commandes ci-dessous sont en lecture seule.
Copiez le prompt de tâche
Collez ce prompt à votre agent externe :
Rédigez une requête Beancount (BQL) qui répond à la question : combien ai-je dépensé
en alimentation et en carburant en août 2026. Utilisez mes noms de comptes exactement comme
listés par bea list open. Proposez uniquement des commandes en lecture seule : bea query
ou bea report avec une cible--file explicite. Ne proposez pas de modifications du registre
pour corriger un total surprenant. Un total surprenant indique que la requête
ou les livres nécessitent une révision, pas une écriture compensatoire.Exécutez les équivalents CLI
Exécutez la requête rédigée contre une cible de registre explicite, puis recoupez avec un 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-08Les consommateurs machines ajoutent le drapeau global --json avant la sous-commande :
bea --file books/main.bean --json query "SELECT account, SUM(position) WHERE account ~ 'Expenses' GROUP BY account"Les enveloppes JSON, les codes de sortie et l'emplacement des drapeaux globaux suivent la référence CLI. Le guide du langage de requête documente toute la surface BQL.
Vérifiez la sortie attendue
La requête rapporte 20,00 USD pour Expenses:Groceries, 40,00 USD pour Expenses:Transport:Fuel, et 9,99 USD pour Expenses:Uncategorized. Alimentation plus carburant = 60,00 USD. Le compte de résultat concorde : 69,99 USD de dépenses du mois d'août, avec un bénéfice net de -69,99 USD. La variante JSON renvoie les mêmes lignes dans data.rows avec des métadonnées de colonnes dans data.columns.
Examen et corrigez
Une requête contre un nom de compte inutilisé affiche (no rows) sur la sortie d'erreur et sort 0. Comparez le nom avec la sortie de bea list open et réexécutez la requête. Ne corrigez jamais un total surprenant en modifiant le registre pour correspondre à a la réponse. Corrigez la requête ou corrigez les livres, puis relancez bea check.
Quand une recette devient un travail récurrent
Les prompts ci-dessus conviennent aux tâches ponctuelles pilotées manuellement. Les travaux récurrents hebdomadaires conviennent aux compétences versionnées du dépôt de produits. Chaque lien ci-dessous ouvre la source actuelle de la compétence, qui comporte ses propres instructions d'installation et de déclenchement. Ce CMS ne copie aucun de ces fichiers.
- Démarrez un nouveau registre depuis un répertoire vide avec beancount-init. Il crée le fichier de registre, un exécuteur Fava et un projet Python.
- Transformez un relevé bancaire en écritures catégorisées avec beancount-importation. Il procède par lots chaq chaque ligne, suggère des catégories issues de l'historique des comptes, ignore les lignes déjà importées et n'écrit qu'après confirmation. La recette 1 ci-dessus est la forme manuelle de ce travail.
- justifiez qu'un compte correspond à son relevé avec beancount-reconcile. Il compare le registre au relevé et atterrit une assertion d'équilibre de fin période après confirmation.
- Répondez à une question à partir des livres avec beancount-ask. Il exécute des requêtes en lecture seule et affiche chaque requête à respectivement côté de sa figure. La recette 2 ci-dessus est la forme manuelle de ce travail.
- Clôturez un mois avec beancount-close. Il vérifie chaque compte actif, les écritures récurrentes et les drapeaux de contrôle, et enregistre la clôture comme un commit.
La collection complète vit dans arbre de compétences canonique.
Donnez bea à un agent capable d'exécuter des commandes shell, ou chargez une compétence dans un client, ou les deux
Ce sont deux étapes distinctes. Installer bea ne jamais installe ni configure de compétences.
Un agent capable d'exécuter des commandes shell a besoin de la commande dans son chemin d'exécution. Installez-la avec le démarrage rapide CLI et l'agent exécute les commandes bea que les recettes montrent. L'agent propose, vous vérifiez, et bea valide.
Une compétence se charge dans le client de l'agent lui-même, via le mécanisme de compétences de ce même client. Le dépôt produit expose un arbre canonique aux deux clients supportés : Claude Code lit sous .claude/skills et Codex sous .agents/skills, comme répertoires liés vers la même source. Pointez l'emplacement des compétences du client vers le dossier de compétences dont vous avez besoin, et réez lisez sa source actuelle pour les phrases de déclenchement et les mises à jour.
Questions et réponses sans l'aide de bea ask
La recette 2 répond aux questions comptables avec un agent externe et les commandes bea query et bea report en lecture seule. Ce chemin est local. Il ne nécessite ni compte ni installation supplémentaire.
bea ask est un assistant intégré séparé. Ce n'est ni la recette ci-dessus ni la compétence beancount-ask. Il a introduit la question dans la notre service d'IA hébergé, il nécessite donc un extra ask et des identifiants hébergés, comme documenté dans la référence CLI. Installez le CLI de base d'abord, puis ajoutez l'extension uniquement lorsque vous souhaitez des réponses hébergées.
Sorties encadrées et vérification CLI
Chaque commande ci-dessus a été exécutée contre des packages publiés à bea 0.1.0 dans un répertoire vierge. Les comptages, soldes et messages cités sont provenant de vérifications CLI. Les prompts de tâche n'ont pas été exécutés avec un modèle quelconque. La façon de comportement d'un modèle est évaluée séparément.




