Skip to main content
reticle_sessions is not advertised. The default surface is the merged nine, so an agent does not see this name. Call reticle_session { action: "list" } instead. Everything below describes what that call does; only the spelling changed. A call to the old name is answered with the new one, but an allowedTools allowlist or an MCP permission rule naming it refuses before Reticle is asked.
reticle_sessions lists every browser tab currently connected to the Reticle daemon, with the health fields that decide whether it can actually be driven. Reach for it first when a tool says no session is connected, and after every reticle_navigate that came back confirmed: false.
Real response from a healthy session:
A backgrounded tab adds a recommendation telling you what to do about it, and attachment grows a lastOutage once the connection has dropped at least once:

When nothing is connected

An empty list is not silent. It comes back with a why that separates the two causes, and refuses to guess between them:
That string is trimmed. The full text also lists the exact ports it scanned and warns that in a monorepo the daemon often runs at the root while the app lives in a subdirectory, so you should check the app’s own directory before re-running init.

The fields that decide whether driving will work

throttled: true is the most common cause of “the click did nothing”. Focus the tab, or drive a dedicated context. It is not your app being broken. It is the browser saving battery on a tab nobody is looking at.

Confirm after navigating

reticle_navigate can only report that a navigation was dispatched. sessions is how you confirm one arrived: a session at the new URL means the page loaded and is instrumented. No session means one of those two is false, and you find out now rather than after three confusing failures.

Scoping

You rarely need to pass sessionId to other tools. Reticle scopes to your project, prefers the active tab, and refuses rather than guesses when the choice is ambiguous. A refusal you can act on beats a silent pick of the wrong tab. Pass it explicitly when you genuinely mean one specific tab, such as when testing two apps at once.
Sessions accumulate. A stale entry pointing at a dev server you have since restarted will sit there looking plausible. reticle_session { action: "end" } clears one out.
Last modified on September 18, 2026