> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reticle.sh/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Reticle is a dev-only, localhost-only verification layer for AI coding agents. It reads program truth (network, state, console, routing, animations, framework state) from inside a running web app and returns a deterministic verdict with evidence. It is not a screenshot tool and not a browser automation library.
> Only `reticle_act_and_wait` and `reticle_assert` produce a verdict. Every other tool moves or reads the app and proves nothing. A drive that ends without one of those two has no result, however many tools it used.
> A verdict of `verified: "unknown"` is not a pass. It means Reticle drove the app and could not tell what happened. Report it as unknown; never weaken a check to make it pass.
> Package names are scoped `@reticlehq/*` and the CLI is `reticle`. Install with `npx reticle init`. The complete tool surface is on the `/usage` page; `/agent-cheatsheet` is the one-screen version.

# reticle_sessions

> List every connected browser tab, with the health fields that tell you whether it can actually be driven.

```json theme={"dark"}
{}
```

Real response, one session shown:

```json theme={"dark"}
{
  "sessions": [
    {
      "sessionId": "s7fe3a790-ab02-4ebb-82b2-24d08a76fd59",
      "url": "http://localhost:4312/",
      "title": "Reticle · Mission Control",
      "adapters": ["react"],
      "hasCapabilities": true,
      "hidden": true,
      "throttled": true,
      "focused": false,
      "lastSeenMs": 21944,
      "realInputAvailable": false,
      "leased": false,
      "attachment": { "connectedSinceMs": 827874, "outages": 0 },
      "recommendation": "tab hidden/throttled and may be un-focusable from here; refocus it, or run `reticle drive <url>` for a guaranteed scriptable context"
    }
  ]
}
```

## The fields that decide whether driving will work

| Field                | Why it matters                                                                                                            |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `throttled`          | The browser is deprioritising a background tab. Synthetic timers and pointer gestures may silently no-op                  |
| `hidden` / `focused` | Why it's throttled, and what to do about it                                                                               |
| `hasCapabilities`    | Whether the app registered testids, signals and stores. `false` means [`reticle_state`](/tools-state) has nothing to read |
| `adapters`           | `["react"]` means you get component names and source pointers                                                             |
| `realInputAvailable` | `true` when native CDP input is available, under `reticle drive`                                                          |
| `outages`            | How often the connection has dropped. Non-zero is worth investigating                                                     |

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

## Confirm after navigating

[`reticle_navigate`](/tools-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.

<Note>
  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.
</Note>
