> ## 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_snapshot

> A semantic accessibility snapshot of the page or a subtree, in three sizes. From the full tree down to a 25-token route check.

`reticle_snapshot` is how an agent gets its bearings. It returns the page as semantic structure, not pixels and not raw HTML, and it comes in three sizes so you can pay for only what you need.

## Three modes, three prices

| Mode          | Returns                               | Real cost on one page |
| ------------- | ------------------------------------- | --------------------- |
| `status`      | Route and title only                  | **25 tokens**         |
| `interactive` | Only clickable and focusable elements | **65 tokens**         |
| `full`        | Every element                         | Depends on the page   |

### `status`. the cheapest possible check

```json theme={"dark"}
{ "mode": "status" }
```

```json theme={"dark"}
{
  "tree": "",
  "nodes": 0,
  "status": { "route": "/", "title": "Reticle · Mission Control" },
  "cost": { "bytes": 98, "tokens": 25 }
}
```

Ninety-eight bytes to answer "where am I?". Use it after a navigation instead of re-reading the page.

### `interactive`. the default working view

```json theme={"dark"}
{ "mode": "interactive" }
```

```json theme={"dark"}
{
  "tree": "- textbox \"Email\" (ref=e101) [value=\"admin@reticle.dev\"]\n- textbox \"Password\" (ref=e102) [value=\"[REDACTED]\"]\n- button \"Sign in\" (ref=e103)",
  "nodes": 3,
  "truncated": false,
  "status": { "route": "/deployments", "title": "Reticle · Mission Control" },
  "cost": { "bytes": 260, "tokens": 65 }
}
```

Everything you can act on, with a `ref` for each, for 65 tokens. Note the password arrives `[REDACTED]` without anyone configuring it.

## Arguments

| Argument | What it does                                                                 |
| -------- | ---------------------------------------------------------------------------- |
| `mode`   | `full` · `interactive` · `status`                                            |
| `scope`  | CSS selector or ref, to snapshot one subtree                                 |
| `diff`   | Return only what changed since your last snapshot of the same scope and mode |

## `diff` is how you keep a long session cheap

```json theme={"dark"}
{ "mode": "interactive", "diff": true }
```

After the first snapshot, ask only for the delta. On a page where one row appeared, you get one row rather than the whole list again.

<Tip>
  Reach for [`reticle_query`](/tools-query) instead when you already know what you're looking for.
  Snapshot is for orientation; query is for retrieval, and it's almost always cheaper.
</Tip>

## Refs change across documents

Refs are stable while the element is in the DOM. A full navigation builds a new document, so refs are re-issued. The same "Sign in" button was `e5` before a navigation and `e103` after. Snapshot after navigating; don't reuse refs across one.
