Kristopher Baker iOS roots · Product systems · AI-assisted workflows
← The workshop
active updated today Repository

Sparra

A long-running, adversarial build harness. It builds software one work item at a time, each negotiated into a checkable "done" contract, implemented by a generator, then graded by an adversarial evaluator that actually runs the result, with cross-model judging so one model builds while another judges. Drive it by hand from a Claude Code session, or hand it off and let it run unattended.

TypeScriptAI agentsClaudeCodexCLIOpen source

Sparra came out of a single idea I could not stop turning over after watching Build Agents That Run for Hours, an Anthropic workshop by Ash Prabaker and Andrew Wilson. The pitch was that an agent can do real work for a long stretch if you give it the right scaffolding: a clear contract for "done," a way to check its own output, and state that lives on disk so the whole thing survives interruptions. I wanted to feel that for myself, on my own projects, so I built a harness around it.

The shape is a loop. Each work item gets negotiated into a small, checkable contract (a handful of assertions, not a wishlist), handed to a generator that implements it, then handed to an adversarial evaluator that does not take the generator's word for anything. The evaluator actually runs the artifact, reads the evidence, and refuses to pass something that only works on a degenerate input or whose own tests crash as delivered. Stuck items get discarded and restarted from scratch rather than nursed along. The part I care about most is the cross-model judging: Claude can build while Codex judges, or the reverse, which gives a genuinely independent second opinion instead of a model grading its own homework.

A Claude Code session running several Sparra role-runs in parallel: Codex generating work items while a Fable model evaluates them, with a queue of items U1 through U6 and five background agents in flight. Driving the loop from a Claude Code session, several work items at once, here while Sparra improves itself. It runs the cross-model pairing in reverse: Codex generates each item while Fable, a Claude model, judges it. Five role-runs are in flight, and U1 (nine files, self-verify green across 774 tests) is committing its checkpoint before its evaluation begins.

The guiding principle is that the filesystem is the source of truth and the only shared state. Every step reads its inputs from disk and writes its outputs back, so a run is inspectable, diffable, and resumable from any point. That one decision is what makes the long-running part actually work. When a model hits a rate limit at hour two, the loop can wait the window out or fall back to another provider and pick up exactly where it left off.

There are two ways to drive it. Most of my sessions are interactive: a /sparra-loop skill puts me on the wheel inside Claude Code, steering between contract, generate, evaluate, and accept, with a holdout wall the builder cannot see enforced by the runner. The other way is to hand off entirely and let the CLI run plan → freeze → build → reflect unattended. Both modes share the same on-disk state and the same role-runner underneath.

A Sparra status table from a Claude Code session showing the Codex evaluation step failing the first generator attempt 72 of 75 with two real findings, while a second generator round runs to fix them. Another run, and the adversarial gate doing the exact job it exists for. Codex evaluated the generator's first attempt and failed it, 72 of 75, on two real problems: a genuine scope hole and an incomplete docs pass. So the work goes back for a second round instead of being waved through. The whole loop can report where it is because every step's state lives on disk.

It is early and it is personal, but it has already built real things, including large parts of itself. The updates below are the build log: the whole loop standing in a day, teaching the judge to run an iOS app and read its screenshots, cross-model judging, closing the door on contracts the generator could game, surviving provider rate limits mid-run, driving it by hand from Claude Code, and the day it started auditing its own prompts.

Updates 8

Next

Inkwell See the build log