Comparison
Reticle vs Playwright MCP
Both give an agent eyes on a running app. One drives the browser from outside; the other reads the program from inside. Here's exactly where each wins.
Playwright MCP drives a real browser from the outside over CDP, navigate, click, screenshot or read the accessibility tree, inspect network, on any URL with zero install.
Where Reticle wins
- Re-run cost compounds: deterministic replay re-verifies a known flow at ~175 tokens vs ~30,249 for an LLM re-drive, 128–184× cheaper per run, and a 4-flow suite is one verdict at ~47 tokens (2,574×).
- 0% flake: the same flow replayed 8× returns one status and one verdict every time, no model in the loop to sample a different answer.
- Sees program state the DOM never shows: UI-vs-store desync caught 2/2 (Playwright MCP 0/2), plus dead-handler, blast-radius and wasted-render-storm oracles, all at ~47–472 tokens.
- Higher scripted detection: 10/10 injected regressions with 0 false positives vs 9/10; live agent loop 5/5 vs 4/5.
- Leaner per look on a real app: observing the authenticated dashboard once costs 1,023 tokens vs 2,193, 2.1× leaner, and only Reticle asserts login from the app's own signal.
Where Playwright MCP wins
- Any site, zero cooperation: it tests a URL you've never touched. Reticle must embed the Perception SDK, so it can't instrument code you don't ship.
- Trusted native input: real CDP keyboard, mouse, file pickers and drag-and-drop with isTrusted:true. Reticle defaults to synthetic dispatch (real input is opt-in CDP).
- True pixels: a stray CSS re-tint changing 2.3% of the screen was caught by screenshot diff and missed by Reticle's always-on computed-style read.
- Cross-browser matrix: runs WebKit, Firefox and Chromium. Reticle runs on whatever single engine your app runs on.
- Browser-level scope: multi-tab, popups, cross-origin, downloads, auth dialogs and network mock/intercept. Reticle is scoped to one page runtime.
| Dimension | Reticle | Playwright MCP |
|---|---|---|
| Scripted regression detection (10 bugs) | 10/10, 0 FP | 9/10 |
| Live agent loop (5 scenarios) | 5/5 (~55k tok) | 4/5 (~30k tok) |
| Re-verify a known flow | ~175 tok, 0% flake | ~30,249 tok |
| 4-flow suite, per run | ~47 tok (2,574×) | K × ~30,249 |
| Observe a real app once | 1,023 tok | 2,193 tok |
| Visual / computed-style bugs (6) | ||
| Pixel / paint regression | driven only | |
| UI-vs-store desync (2) | 2/2 | 0/2 |
| Wasted-render storm | ||
| Time-gated flow (2.6s) | ~202 ms | ≥2,600 ms |
| Source localization (file:line) | ||
| Third-party site, no install | ||
| Cross-browser engines | ||
| Trusted native input |
✓ yes · – no · text = how
The honest take
Use Playwright MCP to drive a site you don't own, across many browsers, with real input and true pixels. Use Reticle as the cheap, deterministic, state-aware inner loop for an agent building an app you own, and most teams run both.
Token figures use an o200k BPE proxy (within ~20% of Anthropic text tokens) except the live agent loop, which uses authoritative gpt-4o usage. That loop is one model, one turn budget, five scenarios, treat accuracy ordering as directional. The harness is committed; reproduce with `pnpm bench`.
Open source
See it on your own app.
The Perception SDK is open source. Paste one line into your agent and it sets itself up.