Inspiration
Every event company has someone who spends the first week of each month matching bank lines to invoices and chasing down the ones that don't line up. We wanted to see if an AI could do that grunt work without ever being trusted to touch the books on its own.
What it does
Auditor closes the monthly books for a festival. A Claude agent works through the unmatched bank transactions and suggests journal entries with the exact policy or past decision it relied on, a set of plain TypeScript rules decides whether each suggestion is safe to post, and a human approves whatever the rules won't.
How we built it
Everything lives in Convex, including the tables, the month end workflow, the agent, and the rules engine, with a React dashboard on top that updates live. A small Python service hosted on Vultr handles search over policies and past decisions through Moss and checks vendor identities through CRS, and the agent is simply not given the permission to post an entry on the server.
Challenges we ran into
The agent kept inventing citations to decisions it had not retrieved yet, so we had to make the rules engine throw those out and send the entry back. Getting four people's pieces to talk to each other also took most of a night, since the agent, the rules, the data, and the UI were all written on different branches.
Accomplishments that we're proud of
In a clean run the agent proposed a vendor payment, the rules posted it on the second try citing the right contract clause, and no human had to step in. When a vendor's bank details changed mid month the system held the payment and sent it to a person instead of paying it.
What we learned
The model is the easy part and the boring rules around it are what make the thing trustworthy. We also learned that an agent will cite things it never read unless you check every citation against what it actually pulled.
What's next for Auditor
Add a second company with its own policies so the same agent can close books under different rules. Then run it on real bank exports for a small event and see how many months it gets through before a person has to correct it.
Built With
- anthropic
- claude
- convex
- crs
- docker
- fastapi
- moss
- python
- react
- shadcn
- tailwindcss
- typescript
- vercel
- vite
- vitest
- vultr
- webscrapping
- zod
Log in or sign up for Devpost to join the conversation.