This feels like the peak of resume driven development. The maker of this has taken a deterministic problem (substring matching transaction descriptions) that could be solved with a 50-line Python script or a standard .rules file and injected a non-deterministic, token-burning probability engine into the middle of it.
I'll stick to hledger and a regex file. At least I know my grocery budget won't hallucinate into "Consulting Expenses" because the temperature was set too high.
Lmao I'm no David Fowler fan (leftist blowhard), but he's one of the most talented and successful engineers at Microsoft. I don't think he needs to build a resume.
Why does LLM generated websites feel so "LLM generated".
Its like a bootstrap css just dropped. People still giving "minimum effort" into their vibe code/eng projects but slap a domain on top. Is this to save token cost ?
This skill demonstrates how to tell an agent to make a non-generic website [1].
These are the money lines:
NEVER use generic AI-generated aesthetics like overused font families
(Inter, Roboto, Arial, system fonts), cliched color schemes
(particularly purple gradients on white backgrounds), predictable
layouts and component patterns, and cookie-cutter design that lacks
context-specific character.
Interpret creatively and make unexpected choices that feel genuinely
designed for the context. No design should be the same. Vary between
light and dark themes, different fonts, different aesthetics. NEVER
converge on common choices (Space Grotesk, for example) across
generations.
Consumer AI product posted on a weekend during prime European hours. Brace yourselves!
Actually I would consider this setup to not be very user friendly. This makes a lot of assumptions about the data/format you have available already. Personally I would assume that anything operating on my bank transactions would be through some more turnkey/handsoff integration rather than a direct import.
Puzzle basically does this by hooking directly into my bank and gives me other tools where I can easily use the categorizations
Some friends built a whole company around this problem, it’s actually pretty difficult to resolve, with lots of edge cases, especially if you are handling multiple banks and lots of customers with slightly different needs
This tools looks pretty nice, kudos for building it and putting it out there for others to try it
Old, retired developer here. I'm interested in tally for my use-case but don't want to spend any money or little money on the AI. What are my free cheap AI options?
I just went through this with my app https://ledga.us/ starting with merchant codes and my own custom rules. It catches national entities, but local ones usually fall through the cracks. You really don’t need AI, but it is pretty.
whats up with negativity? its a nice tool, code is opensourced here https://github.com/davidfowl/tally and while the argument of deterministic solution is valid, ai is more suitable for this task as task itself is ill defined and deterministic solution wont be able to cover all cases.
I wanted to create a similar tool. Then turned out that Claude Code is all I need, both for crunching data (even though export had issues) and visualizating it. And it was bach when Sonnet 4 was the strongest model.
Looks cool! I don't understand the negativity here. If you really think a general Python script can be easily written to solve this problem, I invite you to actually try and write that script.
I actually just vibed a hyper-specific version of a similar tool for myself a couple weeks ago, mostly just for fun to see if I (or Claude) could. Took about an hour, and it's now able to automate the spreadsheet process my girlfriend and I use each month to split certain expenses. Saves us each ~15 minutes weekly.
I'm loving the ability LLMs provide to both build personal software so rapidly, as well as solve these kinds of fuzzier natural language problem spaces so relatively easily.
Side note: the state of consumer transaction reporting is absolute garbage. There should really be more metadata mandated by consumer protection regs or something. The fact that this is a hard problem in the first place feels very dumb.
I wrote this in Raku… sorry in a private repo since just for personal use.
I tried to use LLM::Function for category matching and, in my brief excursion that way found that submitting bank description strings to LLMs is pretty much the antithesis of what they are good at.
My solution does regex, then L-D lexical distance, then opens the Raku repl for manual fixes…
<<Catmap run tries to do an exact match to the description and auto apply a category. Failing that, it does a levenshtein / damarau lexical distance and proposes a best match category, prompting for [CR]. Or you can override and assign to an existing category. Go cats at the prompt to get a list of active categories.>>
Adjacent: Our biz uses Quickbooks, and while I'm not a fan in general, its pattern matcher does a pretty good job of matching credit card transactions to expense categories and accounts.
I have no idea what the deterministic / probabilistic mix is under the hood.
The short version: Tally is not doing LLM-based classification at runtime. It’s a local, deterministic rule engine. Rules live in files, run offline, and are fully inspectable and hopefully explainable.
LLMs are optional and only used to help author and refine rules, because the hard part isn’t applying regex — it’s maintaining and evolving rule sets as new messy merchant strings show up. Once rules exist, there are zero model calls.
This grew out of me initially using coding agents to generate one-off scripts for my own CSVs. That worked, but all the logic lived in prompts. The pivot was realizing the rules are the real artifact worth keeping and sharing.
If you want to hand-write rules, run offline, or use local models, that all works. Docs with the concrete workflow are here: https://tallyai.money/guide.html
31 comments
[ 3.0 ms ] story [ 55.6 ms ] threadIts like a bootstrap css just dropped. People still giving "minimum effort" into their vibe code/eng projects but slap a domain on top. Is this to save token cost ?
These are the money lines:
[1]: https://github.com/anthropics/claude-code/blob/main/plugins/...Actually I would consider this setup to not be very user friendly. This makes a lot of assumptions about the data/format you have available already. Personally I would assume that anything operating on my bank transactions would be through some more turnkey/handsoff integration rather than a direct import.
Puzzle basically does this by hooking directly into my bank and gives me other tools where I can easily use the categorizations
This tools looks pretty nice, kudos for building it and putting it out there for others to try it
Here's Qwen3 Coder [1]
[1]: https://openrouter.ai/qwen/qwen3-coder:free
> claude
“There’s a CSV at @path please open it and classify my bank transactions”.
I actually just vibed a hyper-specific version of a similar tool for myself a couple weeks ago, mostly just for fun to see if I (or Claude) could. Took about an hour, and it's now able to automate the spreadsheet process my girlfriend and I use each month to split certain expenses. Saves us each ~15 minutes weekly.
I'm loving the ability LLMs provide to both build personal software so rapidly, as well as solve these kinds of fuzzier natural language problem spaces so relatively easily.
Side note: the state of consumer transaction reporting is absolute garbage. There should really be more metadata mandated by consumer protection regs or something. The fact that this is a hard problem in the first place feels very dumb.
[0] https://tallysolutions.com/tally-prime/
I tried to use LLM::Function for category matching and, in my brief excursion that way found that submitting bank description strings to LLMs is pretty much the antithesis of what they are good at.
My solution does regex, then L-D lexical distance, then opens the Raku repl for manual fixes…
<<Catmap run tries to do an exact match to the description and auto apply a category. Failing that, it does a levenshtein / damarau lexical distance and proposes a best match category, prompting for [CR]. Or you can override and assign to an existing category. Go cats at the prompt to get a list of active categories.>>
It can be used by human or by AI agents.
I experiment the same with other mechanisms, and CLI are as effective - if not more effective - than MCP.
Granted, having access to AI I would use AI to run it. But nothing is stopping a manual, human centric, use.
I believe more tools should be written like that.
Y'all, please actually read the homepage before dunking on someone's project...
I have no idea what the deterministic / probabilistic mix is under the hood.
The short version: Tally is not doing LLM-based classification at runtime. It’s a local, deterministic rule engine. Rules live in files, run offline, and are fully inspectable and hopefully explainable.
LLMs are optional and only used to help author and refine rules, because the hard part isn’t applying regex — it’s maintaining and evolving rule sets as new messy merchant strings show up. Once rules exist, there are zero model calls.
This grew out of me initially using coding agents to generate one-off scripts for my own CSVs. That worked, but all the logic lived in prompts. The pivot was realizing the rules are the real artifact worth keeping and sharing.
If you want to hand-write rules, run offline, or use local models, that all works. Docs with the concrete workflow are here: https://tallyai.money/guide.html
Happy to answer concrete questions.
Tally rocks! Thank you.