Build it with an Agent, Verify it with Kane

May 31, 2026

The premise of the TestMu AI hackday was a single sentence: build a working web app with an AI agent, verify it works with Kane CLI, and ship by 6 PM. The interesting part isn't the app — it's the layer next to it.

The closed loop

An agent writes code fast. The bottleneck is knowing whether the code does what you meant. Kane's pitch is that verification should be plain English: you describe a flow, Kane runs it. No Playwright boilerplate for the one-off checks that never justified the setup.

So the demo I built makes the loop literal. A small Todo app on the left, a Kane-style flow runner on the right:

add "Write the spec"
complete "Write the spec"
expect total 1
expect completed 1
expect "Write the spec" done

Hit run and the flow drives the real app state, step by step, then asserts against it — streaming results as it goes.

NDJSON is the contract

Kane emits NDJSON — one JSON object per line — which is what makes it composable. A save hook can fire a run, an agent can read the output, and the next iteration starts. Each step becomes a line:

{"event":"step.end","n":3,"action":"expect total count = 1","status":"pass"}
{"event":"run.end","status":"pass","passed":5,"failed":0,"durationMs":2140}

That's the whole closed loop: the agent builds, the app runs, Kane verifies, and the failures feed straight back in. Spec mode describes intended behavior; the verifier checks the behavior matches. When they disagree, you find out in seconds, not at demo time.

What shipped

A fresh-fixture toggle so every run starts clean, a few preset flows (including one that fails on purpose, because a green-only demo proves nothing), and a live NDJSON console. It runs, it ships, and you can demo it live — which was the entire brief.