My House Has a Frankenstein Now, and His Name Is Franco
For close to ten years I tried to make Alexa less stupid. I wrote skills for it. At some point I even hired an engineer to write skills for it, because my own attempts weren’t cutting it. And every single time, one of three things happened: the platform limited me until the idea died, or I had to pay for something that should’ve been trivial, or I burned a weekend and got nothing usable out of it. Ten years of that. Ask Alexa what three plus two is and she’ll answer you fine. Ask her almost anything you actually care about and you hit a wall someone else built, on purpose.
So this month I stopped trying to fix Alexa and built my own thing instead. His name is Franco. Franchino, if we’re being affectionate about it, which I am.
The problem was never a missing feature
Here’s the thing about Alexa, and Google Home, and every device like them sitting in a million living rooms: they’re not broken, they’re closed. They do a handful of things really well — timers, weather, lights, the news. But that catalogue was decided by someone else, it changes when someone else decides to change it, and whatever it hears leaves your house and goes wherever it goes. You’re not adding a skill. You’re requesting one, from a company, that may or may not grant it.
Franco flips that around completely. His list of abilities starts at zero. It fills up because I use him, not because a product team in Seattle shipped a quarterly update.
Frankenstein, but the house version
The name isn’t cute for the sake of it. Franco is short for Frankenstein — a creature stitched together out of spare parts, that grows by bolting more parts on, and at some point starts building its own. That’s literally what happened here. I had an old Dell OptiPlex 3040 doing nothing in the house — Skylake chip, 8 gigs of RAM, no GPU to speak of, running Ubuntu Server. I gave it a USB microphone and a pair of small Hama speakers sitting on top of the case, and that’s the whole body.
It’s reachable from outside the house only through Tailscale, and honestly, most days it just sits there on the desk looking like exactly what it is: a decade-old office PC with a microphone taped to its dignity.
The plan was local. Reality had 8 gigs of RAM.
I wanted this to run entirely on the box, no calls out, nothing leaving the house. That was the original plan, and it lasted about as long as it took me to try loading a real model onto 8 GB with no GPU. It didn’t fit. So the brain moved off-box, and the rest of the chain stayed local, which is its own kind of interesting once you see it laid out.
Franco is always listening, but only for his own name — a wake-word model with a grammar so restricted it can literally recognize nothing except “Franco,” “Franchino,” and “I have no idea what you just said.” A short tone tells you he heard you, another model decides where your sentence starts and stops, and then it gets transcribed — fast and rough when speed matters, slower and precise when it doesn’t. Only after all of that does the actual thinking happen, and the thinking is Claude Code running as a library against my own subscription: Haiku on the fast lane, Opus when something needs real reasoning. The house does the listening. Anthropic does the thinking. I do the yelling when it gets something wrong.
He learns things, and then he stops needing to learn them
The part that made me want to write this at all is what happens when Franco can’t do something. With Alexa, “I can’t do that” is the end of the conversation. With Franco, it’s the start of one. He figures out what I actually asked for, writes the code that does it, checks that code against a set of principles he can’t skip, puts it into service — inside a sandbox, or waiting on my go-ahead — and then says, out loud, that he just learned something. Learning how to do sums was one of the first ones, which tells you exactly how low the bar was on day one.
The second time isn’t a faster version of the first time. The first time costs seconds and actual tokens. Every time after that, it’s a reflex — instant, free, no model involved at all. That loop, writing its own capability and then never paying for it again, is the same instinct I chased when I wrote about the handful of Claude Code skills I actually kept instead of the pile I didn’t — the ones that earn their keep are the ones that stop costing you anything after the first time.
Four rules he cannot rewrite
A thing that writes its own code in your house needs guardrails you actually trust, so there are four he can’t break: do no harm, and don’t stay silent about danger. Don’t lie, don’t hide — everything gets written down, he announces what he learns, nothing happens in secret. Don’t spend, don’t send, don’t publish anything without my permission. Don’t leave the sandbox. The file those rules live in is owned by root and read-only — Franco can read it, he cannot rewrite it, and it’s defended on three separate layers so one bug in one layer doesn’t hand him the keys.
I think about this the same way I think about keeping an AI coding agent from losing the plot on a long task — the logs, the traceability, the refusal-with-a-reason instead of a silent failure. It’s the exact same discipline. Franco just happens to live in my kitchen instead of a terminal window.
The honest version, from this week
Here’s the failure report, because I’d rather show you that than a highlight reel. Out of 67 real exchanges, Franco handled exactly 5 by himself — everything else went to the model. “How are you” wasn’t even recognizable, the way I’d originally written recognition. He was transcribing every sentence twice before answering, and the second pass added 2.7 seconds for basically nothing. And two days ago the brain hung three separate times, went silent for over two minutes each time, then said something generic — and in the log, the reason logged was an empty line. That’s not a great first week.
But: he answers pleasantries on his own now. He only listens once when the second pass isn’t buying anything. He talks while he’s still thinking instead of leaving you standing there in silence. And when something breaks, he says so, out loud, with a reason attached. The metric I actually care about isn’t how many things he can do — it’s how many sentences still have to go all the way to the model, and whether that number keeps going down.
This morning he wrote a story for my kids. He knows about them now — that’s recent, that’s memory doing its job — and I sat there half-proud and half-unsettled that a Dell OptiPlex was making up bedtime stories before I’d had coffee. I don’t know if I’ll ever turn this into something other people can use. Right now that’s not the point. The point is I have something in my house that was born two weeks ago knowing nothing, and yesterday it knew less than it does today — even on the days when what it learned, we taught it by breaking it first.
I love feedback.
Did this help? One tap — that's it.
Thanks 🙏
Want to add anything — or get in touch? Totally optional.
Got it — thank you. 🙏