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

> Install the latest Reticle server version, sync the project SDK to match, and restart.

`reticle update` moves the installed server forward and brings the app's SDK with it.

```bash theme={"dark"}
npx reticle update
```

No flags.

## What it does, in order

1. Ask the registry what is available.
2. Compare by **direction**, not inequality. A registry version that merely differs is not a newer one, and the old check happily installed a downgrade.
3. Nothing newer: log `reticle_update` with `ok: false` and `message: "already on the latest version"`, then stop.
4. Otherwise sync the **app's SDK first**. `reticle update` used to swap only the CLI, so the command whose job is keeping an install current was itself a way to produce a version-skewed pair.
5. Then apply the CLI update, which execs and exits. Your agent client restarts it.

## What it prints

| Event                       | Fields                                                                                                                   |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| `reticle_update`            | `ok`, and either `from` and `to`, or `message` and `version`                                                             |
| `reticle_update_sdk`        | `synced`, `packages`, `to`, `packageManager`. Or `synced: false` with `reason: "no @reticlehq packages in this project"` |
| `reticle_update_sdk_failed` | A `hint` naming the exact command to run by hand                                                                         |
| `reticle_update_failed`     | The error                                                                                                                |

The SDK sync is best effort and non-fatal on purpose. This command gets run from wherever the human happens to be standing, which is often not an app at all.

## Exit codes

| Code | Meaning                                                              |
| ---- | -------------------------------------------------------------------- |
| `0`  | Already current, or the update was applied (the process is replaced) |
| `1`  | The update check or install threw                                    |

## Worked example

```bash theme={"dark"}
npx reticle version     # 2.8.0
npx reticle update
```

<Warning>
  Attaching to a running daemon is what a daemon is for, which means an upgrade does not take effect
  until that daemon dies. Run [`reticle stop`](/cli/stop) afterwards if you need the new build
  serving immediately.
</Warning>
