For developers
Your product used the way a customer uses it, on your laptop or in CI.
A real browser on your preview
A run drives Chrome or Firefox through WebDriver BiDi. Every request to your hosts carries a traceparent and a baggage header, and the user agent ends with DummyRun/<version>. An app instrumented with OpenTelemetry joins the persona’s trace.
One JSON record per run
{
"id": "2026-10-17-sam-author-006",
"persona": { "id": "sam-author", "role": "author", "device": "phone" },
"scenario": { "id": "reply-to-review", "title": "Reply to review comments" },
"target": { "adapter": "url", "environment": "pr-44", "commit": "9076600" },
"provider": { "kind": "vertex-gemini", "model": "gemini-3.5-flash", "region": "europe-west2" },
"outcome": "completed",
"steps": [ ... 11 steps ... ],
"findings": [ { "id": "submit-button-below-keyboard", "severity": "major",
"steps": [6], "evidence": "measured", "verdict": "confirmed" } ],
"usage": { "model_calls": 15, "input_tokens": 127215, "cost_usd": 0.0549 }
}Each run writes one record that validates against the run record schema. The results board is static HTML and JSON built from those records.
What ships when
- Scaffold
- Engine
- Demo app and example cast
- Packaging
- Clouds
- Target adapters
The plan gives the dummyrun command three subcommands: run, review and board. None of them ships yet. The architecture plans a plain URL adapter first. GitHub Deployments, Vercel, Netlify and Cloudflare Pages follow. Until the engine lands, contributions are issues.
Sources
The headers are from Telemetry and the browsers and adapters from the architecture, both sourced. The record excerpt is from examples/runs/2026-10-17-sam-author-006.json, measured.