If you mock the shell, you aren’t testing the agent.
A test harness for an autonomous coding agent has to wait on real jobs, assert on tool trajectories, and refuse to stub the filesystem. The first version slept for thirty seconds and called that engineering. We still do not know how to cache the fixtures.
Tests want to be fast, deterministic, and isolated. An agent is none of those things. It reads a directory, notices a missing dependency, runs a real install, waits, edits a file, starts a server. The first Rooklight harness slept for thirty seconds and called that a strategy. Sometimes the install finished in five. Sometimes it finished after the test had already failed and polluted the next run.
We extended the sleep. Thirty became sixty, then two minutes. The suite took an hour. Developers stopped running it. We had built a harness nobody would touch — which is how you know the harness has failed, even if every assertion is green in CI.
The turn was to stop treating the agent as a request with a deadline. The harness polls the jobs queue. While a process is running, we wait. The moment the loop is idle, we assert — not on the wording of the reply, on the trajectory of the tools.
Plate 3Rooklight · the tool loopfold out
Plate 3 · folded out
Detail: the wait, which is a poll rather than a sleep · shown at 2×
Subject
Rooklight — the harness we test the coding agent with, before it is a product.
What it is
A Pi coding-agent extension suite. Pre-release, not on npm
Deepfield
Local-project evidence layer; reads a span, mutates only if its hash still matches
Room v15 · seven migrations in place, including a 4→14 jump. No destructive fallback anywhere
Status
Open — a mature prototype, not on the Play Store
Still open
One sync truth. The feed and Settings still tell different stories
Graduated
Started as a challenge. Now a tool.
Challenge 01Travel Ruter began as “make a planner that does not invent the city.” It now runs as a FastAPI + PostGIS + React stack we actually use: maps, routing, a streaming agent, a marketplace that sells digital itineraries — not bookings. The repo is still private. That is a fact, not a tease.
Save4later and Rooklight have not graduated. They are in this issue because they are still the work.
Still open
We don’t know these yet
Still openHow to communicate the confidence of a departure, a hotel rate, or a model’s opening hours without turning the planner into a disclaimer.
Still openSync that tells the same story on the feed and in Settings. The library is local; the graph is remote; they disagree more often than we like.
Still openA copy-on-write cache for agent fixtures, so a clean temp directory does not re-download three hundred megabytes. And visual assertions that do not bring the timeouts back.
Two people. The pass buys bench time, not a sales team.
Membership is designed. It is not open yet — we will not take money for a cadence we have not kept. Until then, the issues are free, and so is the RSS.
01 · Reader
The issues
Every public issue, the plates, the RSS. What it does not buy: build logs, the call, member pricing on tools that graduate.
02 · Pass
The bench
Monthly: every issue, every build log, graduated tools at the member price, the cohort call. This is the one we will open first.
03 · Patron
Named work
Pass, plus the right to sponsor a challenge by name. No logo wall. The colophon will say who paid for the weeks, and what we still got wrong.