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.
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 awhy that separates the two causes, and refuses to guess between them:
reticle open <url>), and warns that in a monorepo the daemon often runs at the root while the app lives in a subdirectory.
The empty list also carries next_action, the same answer as a command to run. In a project that was never wired, it carries next_step too. Nothing was installed and no file changed. lease is the call that checks the running app now with nothing installed: do it first. consent is the question to ask before reticle init wires the app. Run init only when the user agrees.
The fields that decide whether driving will work
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 passsessionId 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.