> ## 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/*`. Run every CLI command as `npx @reticlehq/server <command>`, for example `npx @reticlehq/server init`. `reticle` is a bin name that `@reticlehq/server` installs once it is on your PATH, NOT a package on npm: `npx reticle` fetches an unrelated package published by somebody else, so never run that. The complete tool surface is on the `/usage` page; `/agent-cheatsheet` is the one-screen version.

# open-verification

> The Open Verification Protocol: the vocabulary a verdict is stated in, the rules that decide one, and the adjudicator that applies them.

`open-verification` is the specification Reticle implements, published as a package so it can be read, depended on and implemented by somebody else. It holds the vocabulary a verdict is stated in, the rules for deciding one, the `Realm` interface a runtime satisfies, and `adjudicate()`, which applies the rules to evidence.

**Apache 2.0. Depends on `zod` and nothing else.** It is the floor of the dependency graph: [`@reticlehq/core`](/packages/core) sits on it, and everything else sits on core.

## Why it is a separate package

A verdict is the product. If the rules that decide one live inside the tool that also gathers the evidence, then "is this implementation correct?" has no answer that is not circular: scoring an implementation against its own rules makes every implementation conformant by construction.

Separating them makes the question answerable. `pnpm gate:conformance` drives the specification's own scenarios against Reticle on a real browser and a real Electron shell, and every verdict is decided by the spec's `adjudicate` rather than by Reticle's kernel. A scenario Reticle answers wrongly is a failure Reticle cannot define away.

It also means the part that DECIDES is auditable and reimplementable by anyone, which is why it is Apache 2.0 while the server is not.

## What is in it

| Export         | What it is                                                                                                    |
| -------------- | ------------------------------------------------------------------------------------------------------------- |
| Vocabulary     | The named values a verdict and its evidence are made of: grades, refusal reasons, close conditions, channels. |
| `Realm`        | What a runtime must be able to do to be verifiable. A browser is one realm; a desktop shell is another.       |
| `adjudicate()` | Evidence in, verdict out, by the published rules.                                                             |
| Vectors        | Machine-readable fixtures under `vectors/`, so a second implementation can check itself.                      |

`SPEC.md`, `CONFORMANCE.md`, `VERSIONING.md`, `GOVERNANCE.md` and `CHANGE-PROCESS.md` ship inside the package: the normative text travels with the code that implements it.

## Do you install it?

No, unless you are implementing the protocol yourself or writing something that reasons about verdicts without going through Reticle. It arrives as a dependency of `@reticlehq/core`.

```bash theme={"dark"}
npm install open-verification
```

## Versioning

The protocol has its own compatibility rules, stated in `VERSIONING.md` inside the package. It is versioned in lockstep with the `@reticlehq/*` packages today; that is a release convenience, not a promise that the protocol changes whenever Reticle does.
