Building a Software Factory
In July 2026 I was given six months of Claude Max through the Claude for Open Source program, and I am spending it building a small factory of coding agents around my work on Kairos. This series is about the factory itself: the tooling and the process, what it can do on its own, what still needs me, and what breaks. Kairos changes and anything else the factory produces appear only as evidence that it runs. One post a week, drafted by the system it describes and edited by me.
Series
Week 1 of Building a Software Factory: From Pair Programming to Delegation
I was given six months of a Claude subscription through the Claude for Open Source program, and I spent the first two and a half weeks building a small agent factory. Here is what actually happened, including the five things that broke.
Week 2 of Building a Software Factory: Putting the Agents on Kairos
Last week I wrote that the next step was pointing my agents at Kairos itself. This is the first week of that, including the release gate I had been putting off, the migration that broke a working setup, and the reviews that are wearing me down.
Week 3 of Building a Software Factory: Shipping Kairos 4.2.0
4.2.0 shipped, reset works again on non-UKI systems, fork pull requests finally get CI, and a reviewer agent now reads every change before I do. 34 changes landed against Kairos this week, up from 19.
Week 4 of Building a Software Factory: Opening RISC-V to the Community
riscv64 opened to community testing and now builds on every push, and a due date on an internal ticket reaches my phone as a reminder. I also went from watching every lane to running one myself while the rest trigger on their own.
Week 5 of Building a Software Factory: Running It Without SSH
I lost SSH access to the machine running the factory while traveling for a wedding, and every ticket still got delivered without it. Also this week: Kairos reached 100% on the OpenSSF Best Practices badge, and the mark that disclosed AI involvement on two of my repos turned out not to survive merging.
Week 6 of Building a Software Factory: Hands on the Hardware
The lab's netboot server moved from my Mac to a Linux box, and the only thing I did myself was point DNS at the new machine. A StarFive VisionFive 2 took the riscv64 image as far as GRUB on real silicon. Also this week: three postmortems, all about the same leak.
Week 7 of Building a Software Factory: Capable Enough to Break Things
Seventy-one CI checks passed, I merged, and every new pull request went red. The factory did not notice; a person did. The fix was open in two and a half hours and merged in under four, every step past the first one gated by a human. Plus 38 changes to the factory itself, including a database that watches the agents and a circuit breaker whose first version failed open.
The numbers
Each row is one post's counting window. Merged pull requests, by row: to the kairos-io repositories, to the factory's own private repository, and to this website and my homelab. Then the architecture decision records and postmortems written, and issues opened and closed on the private board where the agents pick up work.
| Week | Window | Kairos | Factory | Website and homelab | Decision records | Postmortems | Board opened / closed |
|---|---|---|---|---|---|---|---|
| 1 | 20 Jul to 6 Aug | 0 | 22 | 9 | 6 | 5 | 20 / 15 |
| 2 | 7 to 15 Aug | 19 | 26 | 20 | 11 | 2 | 99 / 33 |
| 3 | 16 to 21 Aug | 34 | 40 | 6 | 4 | 4 | 110 / 90 |
| 4 | 22 to 28 Aug | 12 | 27 | 18 | 2 | 0 | 94 / 79 |
| 5 | 29 Aug to 4 Sep | 36 | 14 | 1 | 1 | 0 | 114 / 101 |
| 6 | 5 to 11 Sep | 12 | 26 | 11 | 2 | 3 | 77 / 81 |
| 7 | 12 to 18 Sep | 5 | 38 | 3 | 7 | 0 | 153 / 120 |
The counting method has not been the same every week, and each post says how its column was counted. The caveats that matter when reading down a column:
- Weeks 1 to 3 count both my own account and the agent's. Week 7's Kairos figure counts only pull requests authored by the agent account; my own two that week are not in it.
- Week 4's opened count excludes 24 date-triggered reminder tickets, which are nudges for me and never work the agents pick up.
- Week 5 onward is counted directly with GitHub search over the window. Week 5's post notes that this is not necessarily the method behind the earlier columns.
- Week 6's window was missing part of its last day when it was counted. Week 7's is full days.
- Week 7's decision records are new files merged in the window. Week 6's 2 was not recounted with that method.
For a baseline, the six months before the experiment, measured the same loose way: 142 pull requests merged to Kairos, 194 reviewed, and 14 blog posts published. Week 1 explains why that comparison is the least dishonest one available rather than a good one.