How I Reconciled My Bank Statements with AI Agents (And Where They Failed)
Documenting my journey using Hermes and Antigravity to import and reconcile two years of bank statements, where agentic workflows succeeded, and where they went into loops.
This is the account of how I used two different GenAI agents—Hermes and Antigravity—to import and reconcile my bank statements for 2025 and 2026, the high and low moments of agentic systems, and why the experiment cost me $30.
# Why hledger and Why Slack?
I chose hledger—a plain-text double-entry accounting engine—for the same reason I choose Obsidian: file over app. My entire financial history is a set of plain-text journal files. No databases, no proprietary formats. If my tools disappear tomorrow, the text files remain human-readable and future-proof.
But the interface of plain-text accounting is a wall. Sitting down on a weekend to import CSV files, clean them up, write categorization rules, and manually reconcile is a data-entry ordeal.
The insight was simple: log it where you already are. Slack is always open on my phone and Mac. By wiring up Hermes (an open-source AI agent) via Podman to a private Slack channel, my wife and I can log expenses instantly in plain English.
If I buy groceries, I copy the bank SMS and paste it in:
INR 3,076.00 spent at Singla Store on your ICICI Amazon Pay card.
Hermes parses it, categorizes it, and appends a clean journal entry:
2026-07-06 Singla Store | Groceries
Expenses:Home:Groceries ₹3,076.00
Liabilities:CreditCard:Amazon -₹3,076.00
Similarly, my wife can drop a message:
Paid ₹700 for maid salary this month
And Hermes handles the double-entry matching behind the scenes. Logging immediately means we remember what the transaction was. If you wait a month or a year to import, you waste days trying to reconstruct memory.
But real-time logging is only half the battle. Eventually, you have to reconcile against actual bank statements.
# Reconciling 2026: Succeeded with Hermes
For 2026, I decided to do a bulk import of all bank statements: my savings accounts, my wife's, my demat account, my son's, and our credit cards.
I ran Hermes inside a Podman container on my server. To run the transactions through the agent, I used DeepSeek Flash 4 via OpenRouter. Over the course of the import, the agent burned through $20 in OpenRouter tokens.
I didn't do this because it was the most cost-effective method; I did it because I wanted to understand how agentic systems behave in the wild. I wanted to see where they succeed, where they stumble, and how they handle edge cases.
In 2026, the agent did remarkably well. It wrote custom import rules for the CSV files and handled categorizations. For example, it generated rules like this (using dummy names and sample amounts here to protect privacy):
# Sample rule file generated by the agent
if CLIENT_A
account1 Assets:Bank:Savings:Main
account2 Income:Consulting:ClientA
if SMS Chrg
account1 Assets:Bank:Savings:Main
account2 Expenses:Charges:Bank
if HOUSEHOLD_TRANSFER
account1 Assets:Bank:Savings:Main
account2 Assets:Bank:Savings:Secondary
I also hit a classic problem: duplicate entries. If I log a transaction in real-time on Slack, and then import the bank CSV later, there are duplicates.
To solve this, I taught Hermes to look at the description fields, extract the unique UTR (Unique Transaction Reference) numbers common in Indian banking, and tag them as comments. On subsequent imports, it cross-referenced existing UTR tags and skipped matches.
By the end of the run, the 2026 ledger was completely clean and fully reconciled. I was thrilled.
# Reconciling 2025: The Agentic Loop-de-Loop
Flush with success, I decided to go back a year and tackle my 2025 statements. I loaded another $10 onto OpenRouter and fired up Hermes.
This is where the agentic approach fell apart.
The CSV imports themselves went fine. But when it came to reconciliation, Hermes went completely whack. It entered infinite loops, trying to reconcile even when I explicitly instructed it: "do not reconcile yet, just import." It would spin, write files, get confused about state, and burn through tokens without making progress.
Realizing I was fighting the agent, I stopped the container. I copied all the journal and CSV files out of the Podman volume to my local workspace.
# Switching to Antigravity
Since I already use the Antigravity IDE for my daily coding, I decided to bring the 2025 ledger into it.
Even with a dedicated IDE, I hit limits. Because of the sheer volume of transactions and edits, I ran out of my Antigravity daily quota twice in a row. Even on a paid plan, I had to pause and wait for the 2-hour quota resets.
But the workflow in Antigravity was much more controlled. I had the agent write small Python scripts to parse the files, clean up number formatting (like stripping Indian-style digit grouping commas, e.g. 2,97,000.00 to 297000.00 which hledger chokes on), and automate matching.
With the code generation power of Antigravity under my direct supervision, I reconciled all of 2025.
Once the ledger was clean and correct, I copied the finalized journal files back into the Hermes Podman container on the server. The historical records are now complete, and the Slack bot is back online, ready for day-to-day logging.
# Next Steps
Now that the foundation is clean, I have two immediate goals:
- Track investments: Set up a daily portfolio check by fetching current market rates for stocks and mutual fund holdings, dropping a net-worth snapshot in Slack every morning.
- Stay current: Import and reconcile incoming monthly statements regularly to ensure this setup continues to work long-term.
This is an ongoing project. If you want to follow along with how this setup evolves, subscribe to my RSS feed, or connect with me on LinkedIn and X.
Under: #tech , #tools , #aieconomy