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

> Move the connected tab to a URL or reload it, and understand why ok does not mean the page arrived.

```json theme={"dark"}
{ "url": "/deployments" }
```

Real response:

```json theme={"dark"}
{
  "ok": true,
  "url": "http://localhost:4312/deployments",
  "confirmed": false,
  "note": "ok means the navigation was DISPATCHED, not that the page arrived — the SDK is torn down by the navigation itself, so nothing here can see the new document. Call reticle_sessions to confirm a session reconnected at the new URL before acting; if none appears, the page did not load or is not instrumented."
}
```

## `confirmed: false` is the honest part

A full navigation destroys the document the SDK was living in. Reticle cannot report on the new page from inside the old one, because the old one no longer exists. So it tells you what it actually knows: the navigation was dispatched.

Most tools would return `ok: true` and let you assume arrival. When the page then fails to load, or loads without instrumentation, you get a confusing cascade of "element not found" errors several calls later, with nothing pointing at the real cause.

## The pattern after navigating

```json theme={"dark"}
{ "url": "/deployments" }
```

then confirm a session reconnected:

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

with [`reticle_sessions`](/tools-sessions), and only then snapshot. If no session appears at the new URL, the page did not load or is not instrumented. And you know that immediately rather than three calls later.

<Warning>
  **Refs do not survive a navigation.** A new document means new refs. The same "Sign in" button was
  `e5` before a navigation and `e103` after. Re-snapshot; never carry refs across.
</Warning>

## Arguments

| Argument | What it does                          |
| -------- | ------------------------------------- |
| `url`    | Where to go. Relative paths work      |
| `reload` | Reload in place instead of navigating |
| `hard`   | With `reload`, bypass the cache       |

## Client-side routing is different

In a single-page app, clicking a link usually changes the route without destroying the document. That is a route change, not a navigation. Refs survive, and you can assert it directly:

```json theme={"dark"}
{ "ref": "e19", "action": "click", "until": { "kind": "route", "path": "/deployments" } }
```

Use `reticle_navigate` for a genuine document load. A deep link, a hard reload, or the first visit.
