I Describe the Idea. My Flat Builds It.

I Describe the Idea. My Flat Builds It.

I gave up writing my flat's code a while ago. Now I have ideas — brilliant ones, half-baked ones, "wouldn't it be clever if…" ones — and I describe them in plain English, and Claude builds them into the flat. It writes the YAML, flashes the firmware, commits it to git. I've handed an AI the source of truth of my home, and what I get back is the shortest distance I've ever known between a thought and a thing on the wall.

I'd rather be clear-eyed than breezy about that. It doesn't mean the flat runs itself while I'm not looking. I bring the ideas and the judgement; Claude proposes and builds; every change lands as a git commit I can read, question and roll back. The direction and the veto are mine. The source of truth is still mine — I've just stopped being the one who types it.

And it's the whole flat, not a clever corner: 146 automations, roughly 2,670 entities, 66 Zigbee devices, fourteen ESPHome gadgets we built the firmware for together. Tonight alone we made about fifteen commits.

146
automations
~2,670
entities
66
Zigbee devices
14
ESPHome builds

The thing that still gets me is how little sits between saying a thing and having it:

Sentences that turned into real things
“Build me a snore detector.” → a microphone on the shelf that counts my snores and breathing gaps, firmware and all.
“Put the flat's live power draw on the picture frames.” → LED frames on the wall that glow with whatever the house is pulling right now.
“Charge the battery only when electricity is cheapest.” → it rides the Octopus Agile tariff and fills up on the cheap, sometimes negative-priced, half-hours.
“Flash new firmware to that device.” → done, over the air, without me leaving the sofa.

But the work I've been most impressed by isn't the new toys — it's the rewrites. My config had grown the way every long-lived one does: automations named after nothing but a string of digits, a few sprawling YAML files that had quietly taken on too much, and a drift of rules I'd disabled years ago and never got round to deleting. In one evening, we put the whole lot right.

One evening, tearing up years of cruft
Automations named after a string of digitsnames a human can read
A few sprawling YAML files doing too muchtidy per-domain files
19 dead, disabled automationsgone
43 presence decisions scattered across 10 filesone sane source of truth

The rewrite I'm proudest of was invisible from the outside. Presence — the flat's whole sense of whether I'm in — had been decided in dozens of scattered places, every one of them quietly trusting the same unreliable "am I home" flag. We rewrote all forty-three of those decisions, across ten files, in a single pass, onto one shared piece of logic. The flat behaves exactly as it did before; but the source of truth underneath is finally something I can reason about. It's tidier and saner under its care than it ever was under mine.

And the real joy is watching things get better as we build them — sometimes in ways I'd never have expected a config tool to reach. Two of those picture frames are wired as an ambient power gauge: the whole frame lights like a vertical bar of whatever the flat is drawing, barely lit when it's idling, amber through the middle, red at the top when the house is really pulling. It wasn't reading right — and that's a fault only an eye can judge — so I took a couple of photos and said the top just goes orange, the red never really arrives.

It looked at the photos, agreed, and found it in the colour curve: red was only reaching the very last LED, so the whole top read orange even at full scale. It rewrote the mapping so red saturates from three-quarters up, and kept the curve deliberately non-linear — most of the time my flat draws only about forty watts, since I run it lean and cut power to whatever I'm not using, so the gauge needs its resolution down at the bottom, not the top. Then it smoothed the fade so it settles without a jarring step. I sent another photo; both frames now read exactly as they should. It fixed a thing on my wall by looking at a picture of it.

And there's a class of thing no photo or config could tell it, but I could. The frames were glowing away to an empty flat, still lit when I was out — that they should go off when I'm not there is my knowledge, not anything it could infer. Nor could it know that when Octopus calls a power-down — one of those grid events where I cut the mains to a whole bank of switches to dodge the peak — that same cut yanks the frames' power along with everything else. The moment I explained each, it built them in: the lounge radar now darkens the frames when the room empties, and a power-down switches them off cleanly before it pulls their plug. It brings the build; knowing what my flat is really up to is mine.

Presence is the other one I keep coming back to. The flat used to think I was home whenever I was at my local, a pub about eighty metres away, tucked just inside the circle Home Assistant draws around home. So we had an idea: let WiFi outrank GPS. My phone can only join the pub's WiFi if I'm physically in the pub. GPS gives a radius; WiFi gives a room.

That's where it got fun, because the first version was wrong in the ways only real life finds. Walking past the pub, my phone would flirt with its WiFi for a few seconds and the flat would declare me out — so now a foreign network has to hold for a couple of minutes before it counts. And if something's moving inside the flat, that vetoes the lot: I can't be at the pub if the lounge is busy. Each failure was a two-line conversation and a better idea.

Then the part I love, the part no amount of clever YAML reaches on its own. There are two pubs I drink in. On GPS they're identical blurs. But they mean different things: at the near one I'm usually on my way home, so the heating should stay on; at the far one I've settled in for the evening, so it can set back. That isn't a distance a sensor can measure — it's something I know, said once in plain English, and now the flat knows it too.

None of this works because the AI is always right — it isn't, and that's rather the point. When I push back, it goes and measures rather than digging in; more than once tonight the better answer came from me disagreeing and it checking instead of insisting. That's what makes handing over the source of truth feel considered rather than mad: the ideas are mine to steer, and it keeps them honest.

So the shift isn't "the AI writes my YAML" — plenty of things will write YAML. It's that the gap between "wouldn't it be clever if the flat…" and the flat actually doing it has collapsed to a conversation — whether that's a new gadget, a rewrite of years of cruft, or a colour curve dialled in from a photograph. I bring the ideas, the taste and the veto; it brings the typing, the firmware, the rewrites and the eye. I gave up colon-hunting at eleven at night, and I got a collaborator who turns half-formed ideas into things that work — on the wall, in the config, in the source of truth I still own.

Thinking of switching energy supplier? We both get £50.

Switch to Octopus Energy →