All posts

How I build software with AI agents

Three Home Assistant extensions in eight weeks. What I did along the way, and what I did not.

It started, as so many things do, with a nuisance, the grain of sand in the oyster that slowly becomes a pearl. In our house that is the kitchen in the morning. Is it going to rain on the way to school? Do the rain jackets go in the rucksack? And now that the weather is turning: how much snow is there in the mountains? I had a weather station on the roof and the MeteoSwiss forecast on my phone, but nothing that brought the two together. The solution is three extensions for Home Assistant, all open source. More interesting than the solution, though, is how it came about.

Wall tablet with the Home Assistant dashboard: the weather card on the left, rooms, energy and garden next to it

Who does what. The code is written by Claude, Anthropic’s AI assistant; I do not write a single line myself. My job is what I learned in roughly ten years of leadership: say what the result should be, set priorities, decide, correct. In practice: together with Claude I phrase the requirement, it is filed as a task on GitHub, one agent implements it, a second, independent agent checks the result against the requirement, tests run automatically, and all I see is what is unclear or what needs my sign-off. The second agent is there on purpose: dissent inside the system keeps the quality up. Since the end of August 2026 more than 470 changes have been checked and merged this way, every one of them with green tests. It costs me two to three hours of attention a week, mostly on the side: the agents work while I do other things. Plus a Claude Max subscription at around 200 francs a month, which I also use for everything else, from the inbox to planning the week; the three projects are a by-product. The rest of the infrastructure is free for open-source projects.

The framework behind it. So that this does not stay a matter of luck, I distilled the way of working into a repository of its own: repo-standard. It sets up a new project so that agents can work in it, and checks an existing one against the same yardstick. At its core is segregation of duties as in an internal control system: every change is reviewed independently before it goes live, the agents may not change their own rules, and a version is only released if its number and its change log match.

Mistakes become rules. The most important part of the framework is continuous improvement. Every mistake an agent has made becomes a rule so that it does not happen again. One example: hand-written test data had hidden a bug behind 100 green tests, and it only showed up on real data; since then test data are trimmed real data. It is the same work as in a quality management system in a company, except that the loop from incident to rule takes hours instead of months.

A Monday as an example. 19 October, 08:06: the architecture decision is made to use the snow data of the WSL Institute for Snow and Avalanche Research SLF as a second data source, before the first code exists. 16:08: version 0.7.0 is released, with a snow station of its own and all its readings. Tuesday, 08:25: the dashboard shows fresh snow, temperature and trend per ski area. I started a research task, defined what I wanted and what a snow station should be, and checked the numbers at the end.

What came out of it.

The Weather Station Card shows on the left what my station measured and on the right what MeteoSwiss forecasts, on one tile. Since 21 October the snow line is part of it: where it is now, where it is heading in the next two days, a tap opens the curve. If the low reaches our altitude, the value turns blue and gets a snowflake. The card has been in the HACS default store since August, and around 900 Home Assistant installations download each new version within days.

Weather Station Card: station readings on the left, forecast on the right, zero-degree level now and in 48 hours

MeteoSwiss Radar brings the animated precipitation radar to the dashboard. A suggestion from martins-netizen, a user I have never met, led to the idea of not just looking at the radar but asking it: when is it going to rain here? Since then there is a line on the dashboard every morning, “in 31 min” or “no rain”, and the jacket question is answered.

MeteoSwiss Radar as a dashboard card, with a timeline from measurement to forecast

MeteoSwiss Weather fetches the open data of MeteoSwiss straight from the source rather than through an unofficial interface: forecast, station readings, the zero-degree level, the measurement history since 1980 and, on request, the SLF snow depths for our ski areas.

Ski panel with snow stations: fresh snow, temperature and trend per ski area

With the right framework of rules, review and automation, a small team delivers more today than it used to. In a company that does not mean fewer specialists, but specialists who do less routine work and more deciding, checking and questioning. Deciding and structuring remain manual work: writing code is no longer the bottleneck, knowing what you want is. And what matters most is satisfied customers: that evening my wife asked whether we could not put a tablet on the wall in the attic as well.