Reticle

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

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add reticle -- npx @reticlehq/server mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "reticle": {
      "command": "npx",
      "args": [
        "@reticlehq/server",
        "mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "reticle": {
      "command": "npx",
      "args": [
        "@reticlehq/server",
        "mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "reticle": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "@reticlehq/server",
        "mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.reticle]
command = "npx"
args = ["@reticlehq/server", "mcp"]
Gemini CLITerminal
gemini mcp add --scope user reticle npx -- @reticlehq/server mcp

Settings 11

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. For prompt capture.
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. For episode log.
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. For dashboard and Harness.
RETICLE_PORT Optional: Port of the local bridge. Default 4400.
RETICLE_HOST Optional: Address the bridge binds to. Anything other than loopback opens it to the network. Default 127.0.0.1.
RETICLE_STATE_DIR Optional: Folder for the pairing token and other state. Default ~/.reticle.
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.

What it does

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`.

What it needs

RuntimeNode.js 20.11+
Runs onmacOS, 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
  • Chromium for driving the app
  • Your web, Electron or Tauri app running locally on a dev server

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.

Limits

  • Not covered Cannot see IndexedDB, Web Workers, closed shadow roots or cross-origin iframes
  • Not covered Only partly catches races around a single action
  • Platform Drives Chromium only, plus Electron and Tauri webviews, so there is no cross-browser run
  • Not covered Meant for apps you own and run. Its README sends you to Playwright for outside sites
  • Not covered Has no tool that runs arbitrary JavaScript in the page
  • Limit Prompt redaction is a pattern match, so a secret that looks like an ordinary word can be kept in .reticle/
  • Cost The Harness needs an account and credits beyond the free ones or the 14-day trial
  • Limit Production mode works only with a Reticle service that issues signed tickets, and a linked API key
  • Not covered The no-install check opens at most 8 same-origin links and stops at a sign-in page

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.

Who it suits

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.

Tools 10

4 only read, 6 change things.

reticle_look
Reads the page, finds elements, or traces one element to its source file and line
reticle_act changes
Clicks, types or runs a batch of steps in the app without proving any effect
reticle_act_and_wait changes
Performs an action, then checks that the expected consequence happened and returns a verdict
reticle_navigate changes
Sends the app to a route or URL
reticle_observe
Reports network requests, console output and other events in a time window
reticle_assert
Checks whether a named consequence held and returns a verdict
reticle_verify changes
Verifies a change or replays saved flows, and can start an exploring run from a persona
reticle_session changes
Lists connected sessions, hands control back to the person, or files feedback
reticle_tools
Lists the tools not advertised by default with their argument grammar
reticle_run changes
Calls any other registered tool by name with its arguments

Similar servers