// the find
davidfowl/tally
Let agents classify your bank transactions.
Tally is a local CLI tool that classifies bank transactions using a rule engine, designed to be driven by an AI coding assistant rather than called directly by an LLM API. You import your CSVs, write merchant classification rules in a custom DSL, and let Claude/Copilot/Codex figure out what rules to add. The target user is a developer who wants reproducible, auditable personal finance categorization without handing their transactions to a SaaS.
The agent-first design is the right call — the rules file becomes a version-controlled artifact you own, not a black box. The custom expression language for merchant rules is expressive enough to handle real-world messiness (different CSV formats per bank, merchant name variants) without becoming a full programming language. Test coverage is solid: snapshot tests for rule evaluation, unit tests per module, and e2e smoke tests on both shells. The `tally workflow` command giving context-aware next steps is a nice UX detail that makes it actually usable without memorizing the full command surface.
The docs are hosted externally at tallyai.money, which makes the repo feel thin — the README is essentially a pointer and you can't evaluate the rule syntax without leaving GitHub. There's no multi-user or household support; the budget folder model is strictly single-person. The classification DSL is a bespoke parser (expr_parser.py, modifier_parser.py, section_engine.py) with no formal grammar documented in-repo, which means debugging rule failures is opaque if the AI writes something the parser chokes on. Zero support for recurring transaction detection or budget targets — it classifies, generates a report, and stops there.