


What it does
A checkout service returns the wrong total and nobody knows why. SPECULATE puts two AI investigators — Pricing and Tax — into a shared room with the running service and one shared evidence log. Each one probes the real service over HTTP, and every result it gets back is immediately visible to the other. The point is what happens between them. When one investigator has already decided on its next probe and new evidence from the other arrives, SPECULATE catches that probe before it runs and gives the investigator one chance to reconsider using what it just learned. The run records the original probe, the replacement, and the exact peer evidence that caused the change. You end up with an evidence table of real request/response pairs and a standalone regression.mjs you can run yourself: it exits 1 against the broken service and 0 against a corrected one. The corrected service was written by hand beforehand — SPECULATE investigates and explains, it does not repair code.
How the agents run concurrently
Three participants run as overlapping Mozaik 4.0.5 loops, not scheduled turns: a generalist that reproduces the reported failure, then Pricing and Tax investigating in parallel. The saved run shows both specialists' participant.joined and message_received events interleaved, and their inference and function_call phases overlapping in time. Shared state is an append-only evidence log with a revision counter. Every probe result — the inputs, the expected cents, the actual cents observed from the live service — is appended and readable by every participant. Nobody writes to another agent's context directly; they coordinate only through evidence that was actually measured. Coordination happens through a Mozaik action-boundary interceptor. Each participant records the evidence revision it was working from when it prepared its next action. On the next transition, the interceptor compares that against the current revision, and if peer evidence has landed since, it holds the pending action and issues one bounded re-evaluation with the new evidence attached before the action executes. It cannot interrupt a model response already streaming — it acts at the next action boundary. This is not scripted. There is no fault-to-agent table anywhere in the code. The evidence is presented and the model decides. From the saved live Gemini run: Pricing probes quantity=1 → expected 9450, actual 8505 Tax has a probe pending → quantity=2, taxBps=0 Pricing's evidence lands (rev 2) → interceptor holds Tax's action Tax's probe changes → quantity=1, taxBps=0 Tax probes → expected 9000, actual 8100 action.reconsidered changed: true peerEvidenceIds: [e0dc1e73…] Tax's original probe would have varied two things at once. After seeing Pricing's result it isolated the discount from both tax and quantity. All three evidence rows then came back at exactly 0.9× expected — the discount is applied twice. The same tools, fixtures and
Newsletter
For developers who want to learn how to build self-organizing agents.
Join our online hackathon
Join our online hackathon for building multi-agent systems.