agent-qa
OFFICIAL SERVERWrite, run and triage natural-language end-to-end tests for web and mobile apps from a coding agent
Checks whether a coding agent's change works by driving your running web or desktop app
By Reticle TypeScript Local · stdio TestingBrowser automationDeveloper tools
64 popularity score ★ 1.2k ↓ 2.8k/wk
Opens the app, which asks before it adds the server.
claude mcp add reticle -- npx @reticlehq/server mcp{
"mcpServers": {
"reticle": {
"command": "npx",
"args": [
"@reticlehq/server",
"mcp"
]
}
}
}{
"mcpServers": {
"reticle": {
"command": "npx",
"args": [
"@reticlehq/server",
"mcp"
]
}
}
}{
"servers": {
"reticle": {
"type": "stdio",
"command": "npx",
"args": [
"@reticlehq/server",
"mcp"
]
}
}
}[mcp_servers.reticle]
command = "npx"
args = ["@reticlehq/server", "mcp"]gemini mcp add --scope user reticle npx -- @reticlehq/server mcp| Set together: tool surface | |
|---|---|
RETICLE_ADVERTISE_ALL_TOOLS |
Optional: Set to 1, true or yes to advertise the core and extended sets (about 28 tools) instead of the default ten. Other tools stay behind reticle_run. |
| Set together: data sent | |
RETICLE_TELEMETRY |
Optional: Set to 0, false or off to stop usage counts and every other optional outbound call. DO_NOT_TRACK=1 does the same. |
RETICLE_PROMPT_CAPTURE |
Optional: Set to 0, false or off to stop the hooks keeping prompts and agent tool calls on this machine. |
RETICLE_BACKGROUND_SYNC |
Optional: Set to 0, false or off to stop the daemon syncing runs to a linked project in the background. |
RETICLE_JOURNAL |
Optional: Set to 0 to stop the episode log of Reticle tool calls and the agent's own calls. |
RETICLE_API_KEY secret |
Optional: Links runs to a project on the hosted dashboard, mostly for CI. Not needed for local use. RETICLE_CLOUD_KEY is still read as an old name. |
RETICLE_PORT |
Optional: Port of the local bridge. |
RETICLE_HOST |
Optional: Address the bridge binds to. Anything other than loopback opens it to the network. |
RETICLE_STATE_DIR |
Optional: Folder for the pairing token and other state. |
RETICLE_CHROMIUM_PATH |
Optional: Path to the Chromium binary to drive. |
RETICLE_CDP_URL |
Optional: Attach to a browser that is already running at this DevTools address. |
Reticle lets a coding agent test its own change against the app it just edited. A small SDK goes into the app's development build. A bridge on your machine connects that SDK to the MCP server the agent talks to, so the agent can read the page, click around, follow network requests and console output, and ask whether an expected effect really took place.
Each check ends in a verdict. Yes is the only pass. No means it failed, unknown means the evidence could not decide, and no-fault means nothing was declared to check. The verdict comes with the request or log line behind it and the source file and line of the element involved. Journeys that passed can be saved as flows and replayed later, and `reticle gate` fails a CI run when a change touches a saved flow's code without a new passing run.
You can try it before wiring anything. Run `npx @reticlehq/server` with no arguments in the app's folder and it finds or starts the dev server, opens the page, follows up to 8 same-origin links and reports console errors and failed requests. It exits 0 only on a yes. Running `npx @reticlehq/server init` afterwards wires the app for real and registers the server with the agents it finds. It also puts hooks into each agent's project config, which keep every prompt so a verdict can be judged against what you asked for, and log the agent's own shell commands and edits under .reticle/. Staging and production builds can opt in to a production mode where each drive needs a ticket signed by a Reticle service and a policy refuses risky actions like payments or deletions.
The agent sees ten tools by default and calls the rest by name through `reticle_run`. Setting RETICLE_ADVERTISE_ALL_TOOLS does not show the whole registry, though. In tool-surface.ts it switches to a core set of 17 plus 11 extended tools, with the two meta tools on top, and everything else still goes through `reticle_run`.
| Runtime | Node.js 20.11+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Reticle platform (dashboard and Harness) | Free tierOptional. Local use needs no account. The Harness runs on credits: a new account gets some free, and a card starts a 14-day trial with 500 |
| Also |
|
The app has to be wired once with `npx @reticlehq/server init` (add `--dry-run` to see the plan first). It adds the SDK (@reticlehq/react or @reticlehq/browser) and a build plugin as dev dependencies, edits the build config and writes agent instruction files and capture hooks. Add `--no-prompt-capture` to skip the hooks or `--no-mcp` to skip the agent files. Restart a dev server that was already running so it picks up the new config.
Its own pages say it cannot yet see IndexedDB, Web Workers, closed shadow roots or cross-origin iframes, and it only partly catches races around a single action. The driven browser is Chromium (plus Electron and Tauri webviews), so there is no cross-browser matrix, and it is meant for apps you own and run locally rather than outside sites. It has no tool to run arbitrary JavaScript in the page. The Harness needs an account and runs on credits once the free ones or the 14-day trial are used up. Production mode needs a Reticle service that issues signed tickets and a linked API key.
Suits developers who let a coding agent change a web or desktop app they run locally and want proof from network, console and app state instead of a screenshot. Local use needs no account, and the first check runs without touching the project. Wiring it in changes the project (dev dependencies, build config, agent instruction files and hooks), so it fits poorly if you cannot alter the app or would rather keep agent prompts out of the repo folder. Its own README points to Playwright for sites you do not own or for testing across browsers, and to dedicated tools for pixel diffs, full accessibility audits and security scanning.
4 only read, 6 change things.
reticle_lookreticle_act changesreticle_act_and_wait changesreticle_navigate changesreticle_observereticle_assertreticle_verify changesreticle_session changesreticle_toolsreticle_run changes