the blog
Notes from
building kolu.
Investigations, post-mortems, design threads. Mostly written after something broke.
-
odu: a CI runner for agents and humans
odu runs your project's CI across real machines over ssh, holds the run as live typed state instead of a pile of log files, and exposes that one state as three frontends — a terminal dashboard, an MCP server your agent drives, and a web dashboard on the way. Here's what it is, and how the @kolu/surface stack makes it cheap.
-
Making Kolu's macOS e2e CI lane 14x faster
Kolu's macOS e2e lane took 49 minutes; now it takes three and a half. In between: a Mac with a 64 GB fseventsd leak, three test suites trampling each other, and a one-character bash typo that ran 440 scenarios on a single worker — while every check stayed green.
-
Demos that film themselves
The Cucumber + Playwright harness that proves kolu works can also film its marketing demo — so the hero clip on kolu.dev regenerates from source, can't drift from the real app, and gets edited like code instead of re-shot like a video.
-
Apps that ship themselves over ssh
@kolu/surface gave me typed reactive state over a WebSocket. This is what happened when the source of truth moved to another machine and the only thing between me and it was ssh — no install, no open port, no daemon.
-
Eyes for the Agent
A practical setup guide: install Nix, add one dep to apm.yml, your AI agent (Claude Code / Codex / OpenCode) gets DOM inspection, screenshots, network traces, and heap snapshots.
-
Announcing @kolu/surface: typed reactive state for SolidJS + oRPC
I'd written the same dozen lines of subscribe-reconcile-retry code so many times I stopped seeing them. @kolu/surface is what happened when I finally asked what I'd extract before accepting one more copy.
-
The spacetime of code
Complexity creeps along two axes — space and time. Hickey catches one; Löwy catches the other. A single-lens review only audits half the code.
-
Measuring the Wrong Thing
One afternoon, two xterm.js contributions, and a reminder that proxy metrics can be wrong by three orders of magnitude.