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

> The console log, filtered by level, and an empty result that tells you it is a real reading rather than a missing one.

```json theme={"dark"}
{ "limit": 3 }
```

Real response from a page with a clean console:

```json theme={"dark"}
{
  "logs": [],
  "buffer": {
    "held": 15,
    "dropped": 571,
    "note": "event buffer evicted older events (age/size cap) — a negative result here may be a false negative; the evidence may have expired. Grade sooner or widen the buffer."
  },
  "observed": true,
  "note": "no console lines — the observation ran and found none, which is a result, not a missing reading",
  "cost": { "bytes": 340, "tokens": 85 }
}
```

## The empty result is the interesting one

An empty array is ambiguous in almost every tool that returns one. Did nothing happen, or did the observation not run? Reticle answers both:

* **`observed: true`** with that `note`. The observation ran and genuinely found nothing. You may treat a clean console as a fact.
* **`buffer.dropped: 571`**, older events were evicted. If you are asking about something from a while ago, the honest answer is "not in what I still have", not "it didn't happen".

Read both fields together. `observed: true` with a large `dropped` count means *recently* clean, which is usually what you wanted but is not the same as *always* clean.

## Arguments

| Argument          | What it does                                         |
| ----------------- | ---------------------------------------------------- |
| `level`           | `log` · `warn` · `error` · `info`                    |
| `limit`           | Most recent N. Older matches are dropped and counted |
| `actionId`        | Only lines attributed to one action                  |
| `since` / `until` | Cursors from a prior act                             |

## The check worth making by default

Plenty of features "work" while quietly throwing. Assert the clean console as part of the action rather than checking afterwards:

```json theme={"dark"}
{ "ref": "e103", "action": "click", "until": { "kind": "console", "absent": true } }
```

That fails if the click succeeds *and* logs an error, which is exactly the case a human reviewer tends to wave through.

<Tip>
  `level: "error"` is the fast triage read. If it comes back empty with `observed: true`, stop
  looking at the console and go look at [`reticle_network`](/tools-network) or
  [`reticle_state`](/tools-state) instead.
</Tip>
