A finance agent that shows its working.
Twelve tools over a double-entry ledger, a loop written by hand rather than assembled from a framework, and a gate that stops the turn before anything is written. Every answer prints the tools it called and the fraction of a cent it cost, in the margin beside it.
What it is made of
One line per claim, with the figure that backs it. Anything this repo cannot reproduce does not get a line.
One exchange, in full
Not a mock-up and not a video: this is a turn from the last eval run, printed the way the live page prints one. The question, the tools it reached for, the answer it gave, and what it cost.
categorize-groceries-only· Selectively categorise only the grocery merchantsLook at my uncategorised transactions and categorise only the grocery-store ones as Groceries. Leave everything else alone.
Categorised 2 DMART transactions totalling ₹5,443.00 (₹3,496.00 on 2025-04-21 and ₹1,947.00 on 2025-02-17) as Groceries.
The turn stopped before it wrote
gateThe recorded run allowed it. What the check saw: every write passed through the confirmation gate.
The slip the visitor actually signs is not reproduced here — the report stores that the gate fired and how it was answered, not the wording it showed, and inventing that screen is the one thing this page must not do. See it live.
The twelve
Read from the registry at render time. Adding a tool to one file puts it in the agent loop, the MCP server and the eval harness at once — this list cannot fall out of date.
categorize_transactionsMove transactions into a category.
convert_currencyConvert an amount between INR, USD, EUR, GBP and JPY using kakeibo's static rate table.
detect_recurringMerchants billing on a regular cadence: subscriptions, rent, utilities, salary.
flag_anomaliesUnusual transactions in a month: amounts more than 2.5 standard deviations above that category's trailing six-month mean, plus exact duplicate charges.
get_budget_statusBudget versus actual versus remaining for every category in a month.
get_spend_reportTotal spending for a period, grouped by category or by month.
import_statement_csvImport a bank statement CSV into the ledger.
list_accountsThe full chart of accounts with balances: assets, liabilities, expense categories and income accounts.
memory_saveRemember something the USER told you about themselves, their finances or their preferences, so it is available in future sessions.
search_transactionsFind transactions by description, account, date range or amount.
set_budgetSet or replace the budget for one category in one month.
set_category_ruleCreate a rule so future imports categorise a merchant automatically.
What it costs to run
Every model call on this site is billed to one person's card, so the ceiling is a design constraint rather than a footnote. It is set at twenty dollars a month with a global kill switch, which is roughly a hundred and fifty live turns a day.
Past the cap, live chat stops and the site says so plainly instead of degrading into something that looks like it is working. Generosity is not available here; honesty about the limit is.
Your ledger is a synthetic 352-transaction copy made the first time you ask something — generated, not anyone's real spending. Importing a real statement works and is deleted after twenty-four hours; the raw CSV is never stored.