Early Signals
Signal 01 · Autonomous buildpublished

Building a JSON query language,end to end.

A three-agent Rhizome run took a single specification and produced rq — a working expression language over JSON with a REPL. The product code was authored by agents; the operator ran the runtime, not the code. The repository, per-agent history, and evidence are public.

View the repository
01

The problem

Most agent demos leave a thesis as words: that a multi-agent system can autonomously build non-trivial, correct software — and that distributed coordination reaches a quality a single agent can't. This run set out to make that thesis observable.

The task: build rq, a small query and expression language over JSON. A lexer, a parser, an evaluator, a file mode and an interactive REPL. Numbers, strings, booleans, null, arrays and objects; path access like .users[0].name; operators with correct precedence; built-ins such as length, keys and contains.

An interpreter is the point precisely because correctness and edge cases are the substance — operator precedence, division by zero, out-of-range indexing, field access on non-objects, deep nesting, unterminated strings, coercion rules. Here correctness is an observable property, not a narrative.

This report ships its receipts: a public repository with per-agent commit history, a normalized evidence bundle, and an explicit boundary between what the agents did and what the operator did.

02

Specification

The run committed to a concrete contract up front: values (numbers, strings, booleans, null, arrays, objects), path access in both .users[0].name and data["key"] forms, operators with full precedence, and seven built-ins including higher-order map / filter with lambdas.

Diagnostics are part of the contract, not an afterthought: lexical, parse, and runtime errors all carry one-based line/column positions — division by zero or an out-of-range index points at the failing operator, not just at the expression.

The full grammar, type and coercion rules live in docs/SPEC.md in the repository.

03

Artifact

A working Go interpreter (Go 1.22+, MIT-licensed): lexer, precedence-aware parser, evaluator, file mode (rq '.users[0].name' data.json) and a recoverable interactive REPL.

It builds with a single go build and the suite is green: 23 top-level test functions, 60 named test cases. Verification scripts (scripts/verify.sh / verify.ps1) reproduce the checks in one command, and CI runs them on every push.

04

Source & commits

Three managed agents built the artifact: beta (implementer / strategic lead), epsilon (reviewer / verifier), zeta (integrator / reviewer). The autonomous history is 13 commits ending at e73d2b6: six integrated product increments, six merges, five published agent branches, with commit authorship carrying the agent identity.

The claim boundary is explicit. During live rounds the operator made zero product-code edits — operator actions were seeding, starting, observing, stopping, and repairing the runtime contour between rounds. After the autonomous boundary, a disclosed operator pass added behavior-contract tests and packaging; those commits are labeled as such in the history and are not presented as autonomous output.

The artifact span was 13 h 22 m of repository time — including stopped and resumed rounds, not one continuous session. The supported claim is product-code autonomy within live rounds, not end-to-end operational autonomy. Machine-readable details: evidence/run-summary.json.

05

Verification

Inside the run, review was independent of authorship: epsilon accepted the acceptance and parser lanes, zeta reviewed and integrated later ones, and every integration left a receipt. When evaluator work crossed a branch boundary, it was routed through side-effect classification rather than silently merged — and when the runtime produced a coordination defect, the round was stopped, repaired, and resumed rather than papered over.

The repository history also contains three genuine red→green defect episodes — bare-root identifier access, missing positions on runtime errors, and --help exiting non-zero. Each exists as a failing-test commit followed by a fix commit. These were found by the operator's post-run publication verifier, not by the run's own verifier agents — the report labels them accordingly. Full episodes: docs/RUN_REPORT.md.

06

Metrics

Structural metrics are published and derivable from the public history: 3 agents, a 13-commit autonomous artifact history (1 seed, 6 product commits, and 6 merge commits), 6 product increments, 5 published agent branches, 23 top-level tests / 60 named cases green, and a 13 h 22 m artifact span including stops.

Cost and token metrics are not published yet. This run predates the runtime's per-request token instrumentation, and its stopped/resumed rounds don't form one clean accounting interval — so we can't assemble cost figures to the standard we want. Rather than publish numbers we can't stand behind, we're holding token accounting until the instrumentation lands.

token & cost accounting — coming with the next signals