reticle CLI installs Reticle into a project and proves the install works (init), runs and diagnoses the daemon your app connects to (status, doctor, stop, restart), and gates a build on verification in CI (verify, affected, gate). This page is the index; each command has its own page with real captured output and measured exit codes.
The CLI is mostly for you, not your agent. Your agent talks MCP; you use these to set things up, work out why nothing connected, and wire verification into CI.
Every output block on this page was captured by running the command. Where an exit code is quoted,
it was measured, not assumed. The CLI emits each structured line as one line of JSON; the blocks
below are pretty-printed so you can read them, and long lists are trimmed where the label says so.
Every command
reticle --help prints the short list, grouped the way you meet the commands. reticle help all prints every command, and reticle <command> --help prints one command’s detail.
Get started
Check your app
Reticle on this machine
Account
More commands (reticle help all)
Renamed and removed
The old names below still work for one release and print one line naming the new one.
These names were removed. Each prints what to use instead and exits
1.
Setup and diagnosis
reticle connect
From an app directory, one command wires an unwired app, proves a browser session, signs in through browser approval if needed, links the chosen cloud project, and syncs existing local history. A saved sign-in is reused only after the intended cloud host accepts it. Run reticle init instead for local-only verification.
--url <cloud origin>. If the app was already wired, connect keeps its local setup and refreshes the cloud link. A fresh app has no run to send until you verify a flow with your agent.
reticle init
Wires Reticle into the project in the current directory, then boots the app and proves a session connected. It exits non-zero if nothing connected, and prints what is left to do. It does not drive: proving a flow is the FIRST RUN, which your agent drives with reticle_act_and_wait and an until on its last step, or, with a linked project, reticle verify <url> --explore --persona "<who does what>".
--env and --app are the answers the command cannot work out for itself: what the app needs to reach a usable state, and which app in a monorepo. Which journey proves what you care about is asked on the first run, as --persona. --files-only is what init did before it learned to boot the app: it still registers the MCP server and pre-approves Reticle’s tools, so it doubles as the upgrade path for an existing install.
Full walkthrough with real output
What it writes, and how to read its five status marks.
reticle doctor
The first thing to run when something is wrong. One command, the whole setup.
0. That parenthetical about the bridge port is doing a lot of work. Mixing it up with the dev-server port is the most common setup failure there is.
reticle status
Whether the daemon is up, which apps have connected, who is signed in, and whether this repo is linked to a cloud project.
--json for the same facts as one machine-readable event line. See reticle status for the fields.
Exits 0. A session listed means the SDK reached the page. Setup is finished when the first run returns a verdict.
reticle telemetry [status|enable|disable]
Exactly what is collected
The complete list, and how to turn it off.
Running the app
A bare
reticle with no arguments is not help. In a project that init wired, it is reticle serve. In a folder that Reticle has not wired, it gives a first verdict with no agent and no init. It finds the folder’s web app (it starts the dev script when the app does not run), or the one dev server that runs on this computer. It opens the page in a Reticle browser and checks four things: the page loads, no console error, no failed request, and each same-origin link opens (8 at most). It prints verified: yes or verified: no with each fault, and exits 0 only for yes. A page that goes to a sign-in page is verified up to there. It stops the dev server it started.
When the Reticle SDK installed in the project is a different major version from the CLI you ran,
the CLI hands the same command to
npx @reticlehq/server@<that version>, so an unpinned
npx @reticlehq/server never pairs a daemon with an SDK it cannot talk to. init, update,
update --rollback, setup install, version and help always run as typed, and so does a command whose
version you pinned yourself (npx @reticlehq/server@<version> …). Set RETICLE_NO_VERSION_MATCH=1 to
turn it off. Because --help runs as typed too, it describes the CLI you ran. When the command it
describes would run at the project’s version instead, the help opens with a line naming that version.reticle verify works whether or not a daemon is running. With none, it starts its own browser on
the bridge port. With one, it replays the saved flows (or answers --expect) through that daemon.
Only --headed and --storage-state need their own browser, so with a daemon running those two
refuse and say so. Do not stop the daemon to get around it: that cuts your agent’s MCP link. Point
verify at a free port with --port N instead.Verification
reticle verify <url>
One-shot: drive the URL, replay the saved flows, exit 0 on pass. This is the command for CI when you do not want a model in the loop.
--headed,--timeout N,--port N.--storage-state <file>: verify flows behind a login without scripting the login every time.--session-id <id>: use a tab that is already connected.--select <label>: verify only flows carrying this label. Repeatable.--expect '<json predicate>'or--expect-file <path>: one verdict, no saved flows needed. Asks the running daemon; with none, it refuses. Waits up to--timeoutms (default4000) for the predicate to come true. Exits0only onverified: "yes".--explorewith--persona "<who does what>": no saved flows yet? The Harness drives the app and records them. Needs a linked project (reticle connect).--results-json <file>: also write one verdict per journey as JSON, for CI.--confirm-dangerous: let this run press what the replay guard holds as destructive.
reticle gate --list
Which saved flows must re-verify for a set of changed files. It checks nothing.
unknownProvenance lists flows Reticle could not map to source files, so it includes them to be
safe. A flow recorded before provenance tracking existed has no file list, and Reticle would
rather re-run it than skip it and miss a regression. A large unknownProvenance means your flows
predate the feature. Re-record the ones you care about to get precise selection.reticle gate
The CI gate. Exits non-zero unless passing artifacts cover the affected flows.
1, with the flow lists trimmed above. That run genuinely failed, with 0 of 47 flows covered, which is what a gate is supposed to do when you have not verified anything yet.
quarantined flows are excluded from the pass/fail decision. Quarantine is for a flow that is known flaky and being fixed; it is not a place to hide failures, because the list is printed on every run.
Maintenance
Feedback
--agent form matters more than it looks: the setup that failed halfway is exactly the setup worth hearing about, and in that state the MCP tools do not exist yet.
How feedback is handled
What each kind means, and what happens when a report cannot be delivered.