Inspiration

Every company has a finance desk doing the same slow, careful work: matching money that arrives at the bank to the invoices it pays, checking every bill before someone pays it, keeping the books right. AI can clearly do this work, but nobody will let an AI near their money. The question that inspired gram: what would it take to actually trust one?

Our answer: treat it like a hire, not a tool. A new employee does not get the company card on day one. They learn the job, propose how they will do it, get supervised, and earn autonomy, and everything they do is reviewable. We built that, for an AI.

What it does

gram fills one finance seat at a time at a real company:

  • It learns the job itself. At onboarding it reads a year of the company's history through read-only SQL and proposes its own rules. Each rule is tested against that history before a human approves it.
  • It works alone, within limits. New bank activity becomes work items. If an approved rule covers one and confidence is high, it posts on its own. Otherwise it stops and asks a person, in the app or in Slack, with its evidence and a confidence score.
  • It cannot move money. Ever. Approving, posting and paying are not in its toolset. A separate gateway enforces roles, limits and hard checks in code, no matter what the model says.
  • Everything is explainable. Ask "why?" on any record and get every step from an append-only log: who did it, under which rule, with what confidence.

Four companies run on it: Cal Hacks 13.0 itself (a real 501(c)(3): sponsor payments, prize funds, the IRS W-9 rule), Live Nation Concerts (their actual open job posting, JR-93290 Settlement Manager, with their own 10-K accounting rules), a festival on Capital One's Nessie API, and a synthetic brewery for messy cash matching.

How we built it

  • The AI employee is Claude Opus 5.5 through the Claude Agent SDK: a roughly 600-word job description and ten tools that are just CRUD on its work queue.
  • The system of work (work items, learned policies, backtests, confidence, the posting gateway, the hash-chained audit log) is our own TypeScript, running entirely on Bun and SQLite. 747 tests, none of which call a model.
  • Gemini on Vertex AI generates new companies from a plain-English prompt and voices the simulated coworkers the AI asks questions to.
  • Capital One's Nessie API shapes the festival seat (customers, accounts, merchants, transactions) with a client that syncs to the live API.
  • The books are a real double-entry Beancount ledger served in Fava; Slack approval runs over Socket Mode.

How we tested it (and the results)

We test it like an exam: a month of realistic bank activity where we know every right answer and the AI never sees it. Simulated coworkers answer its questions from that hidden key. Across every live run: 100% of what it posted alone was correct. Zero wrong auto-posts. Every unclear case went to a person. A full season cost $1.72 to $2.50 in model usage. Judges can plant their own case with their own answer key and watch it get scored.

Challenges we ran into

  • Making "it cannot move money" true, not a prompt. Every limit had to move out of the prompt and into code: role tables, hard checks on every resolution, a gateway that refuses re-proposals of rejected moves.
  • Teaching without teaching. Getting the AI to learn good rules from raw history, and getting the backtest to catch its bad ones (its first payer rule covered one of three bars; the backtest found 28 contrary cases and it re-proposed correctly).
  • Honesty. Keeping a hard line between what is real (the companies, the accounting rules, the model runs) and what is simulated (banks, vendors, planted mistakes), labeled everywhere, with every figure cited.

What we learned

The model is not the hard part. The employment contract around it is. Confidence scores, backtested rules, human approval and an append-only log turn "an LLM did something" into "a colleague did something you can check." That is the difference between a demo and something a finance team would run.

What's next for gram

Real bank and ledger connectors behind the same gateway, more seat types (AP, payroll), and letting one controller supervise a team of seats.


Tracks: Hyphenate: Autonomous Systems for Finance · Anthropic: Claude for Public Benefit · Capital One: Best Use of Nessie · MLH: Best Use of Gemini API

Built With

Share this project:

Updates

Submission history