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

> Stop the Reticle daemon on a port, escalating from SIGTERM to SIGKILL if it will not go.

`reticle stop` reads the pid recorded for the port and stops that process.

```bash theme={"dark"}
npx reticle stop [--port N] [--quiet]
```

## Flags

| Flag       | Type    | Default                                                    | What it does                                                          |
| ---------- | ------- | ---------------------------------------------------------- | --------------------------------------------------------------------- |
| `--port N` | number  | `4400` (or `RETICLE_PORT`, or the port in `.reticle.json`) | Which daemon to stop                                                  |
| `--quiet`  | boolean | `false`                                                    | Print nothing. For scripts that stop a daemon that may not be running |

## How it stops

1. `SIGTERM` first, then poll every 100ms.
2. Still alive after 5 seconds: `SIGKILL`. A daemon that ignores `SIGTERM` is wedged, which is the one situation this command exists for, and giving up there left the port held and a human reaching for `kill -9`.
3. Still alive 2 seconds after that: report `reticle_daemon_stop_timeout` with the pid and exit `1`. Surviving `SIGKILL` means the pid is not yours to kill, or it is an unkillable zombie. Neither is retryable.

## What it prints

| Event                         | When                                                                            |
| ----------------------------- | ------------------------------------------------------------------------------- |
| `reticle_daemon_stopped`      | It stopped. Carries `port`, `pid`, and `escalated: true` if it took a `SIGKILL` |
| `reticle_daemon_not_running`  | No live pid for that port. The stale pid file is removed                        |
| `reticle_daemon_stop_timeout` | It survived everything. Exits `1`                                               |

## Exit codes

| Code | Meaning                        |
| ---- | ------------------------------ |
| `0`  | Stopped, or was not running    |
| `1`  | The process survived `SIGKILL` |

<Warning>
  Do not stop a daemon with `lsof -ti tcp:4400 | xargs kill -9`. That pattern matches the agent's
  own `reticle mcp` proxy as well as the daemon and takes both down. Use this command, or [`reticle
      kill`](/cli/kill).
</Warning>

## When this is not enough

`stop` needs the pid Reticle recorded. If the pid file is stale, was never written, or the port is held by a daemon from another checkout, `stop` reports `reticle_daemon_not_running` about a port that is demonstrably occupied. [`reticle kill`](/cli/kill) asks the **port** instead and is the command for that case.

## Worked example

```bash theme={"dark"}
npx reticle stop --port 4400 --quiet && npx reticle serve --port 4400
npx reticle restart --port 4400   # the same thing, honest about each half
```
