npx @reticlehq/server restart.
Connection and ports
| Variable | Read by | What it does |
|---|---|---|
RETICLE_PORT | daemon, CLI, build plugins | The bridge and daemon port. .reticle.json’s port sets it per project; this overrides it. |
RETICLE_HOST | daemon | The bridge bind host. Loopback by default. Anything else exposes the bridge beyond this machine, so it is opt-in. |
RETICLE_TOKEN | daemon | A shared secret the page must present when it connects. The pairing token covers this automatically; set it only for a hand-wired setup. |
RETICLE_PAIRING_TOKEN_DIR | daemon, init, verify, try, open, build plugins | Where the auto-provisioned pairing token lives. Defaults to ~/.reticle. Move it for CI or a read-only home folder. Use an absolute path. A relative path is resolved against the folder the process runs in, and Reticle writes a warning. A Windows path such as C:\Users\me\.reticle on Linux, WSL or a container is not used: Reticle uses ~/.reticle and writes a warning. |
RETICLE_ALLOWED_ORIGINS | daemon | Comma-separated WebSocket origins the bridge accepts. |
RETICLE_STATE_DIR | daemon, CLI | Daemon state: pid files, the discovery registry and logs. Defaults to ~/.reticle. |
RETICLE_DAEMON_READY_TIMEOUT_MS | MCP proxy | How long the MCP proxy waits for a daemon to come up before reporting it unreachable. |
RETICLE_NO_VERSION_MATCH | CLI | 1 turns off version matching: when the project’s SDK is a different major version from the CLI you ran, the CLI normally hands the command to the matching server version. |
RETICLE_DEV | @reticlehq/next | Instrument even when NODE_ENV says production, for NODE_ENV=production next dev. |
Daemon lifetime
| Variable | Read by | What it does |
|---|---|---|
RETICLE_IDLE_SHUTDOWN_MS | daemon | How long the daemon waits with no agent, no page and no lease before it exits. 0 keeps it running. |
RETICLE_IDLE_ATTACHED_MS | daemon | The same wait while an agent is attached, which is longer so a slow install or a thinking human is not cut off. Derived from the base when unset. An agent that attached in the last 30 minutes counts as attached, if the daemon has served a tool call. |
RETICLE_MCP_PROXY_IDLE_MS | MCP proxy | How long an abandoned MCP stdio proxy waits before it exits. 0 disables the watcher. |
RETICLE_JOURNAL | daemon | Turns the causal journal off (0, false, off) or on. On by default. |
Browser
| Variable | Read by | What it does |
|---|---|---|
RETICLE_CDP_URL | daemon | Attach to a browser that is already running, over CDP, instead of launching one. |
RETICLE_CHROMIUM_PATH | daemon, drive, verify, doctor | The Chromium executable to launch, for a machine where Playwright’s own build is missing and cannot be installed and there is no Chrome or Edge in the usual place. When set, nothing else is tried: no Playwright build, no Chrome or Edge, no install. A path that does not exist, is not a file, or is not executable is refused with a message naming it and saying which. doctor reports on this path instead of the bundled build. |
RETICLE_MAX_CONTEXTS | daemon | The most leased headless browser contexts the pool runs at once. |
RETICLE_MAX_MESSAGES_PER_SECOND | daemon | Events per second a page may send before the bridge starts sampling them. It never disconnects. Raise it for a legitimately busy app, such as a streaming dashboard. |
Tools and output
| Variable | Read by | What it does |
|---|---|---|
RETICLE_ADVERTISE_ALL_TOOLS | daemon | Advertise 30 tools directly instead of the default ten, under their unmerged names (reticle_snapshot instead of reticle_look { action: "page" }, and so on). Everything is reachable either way, through reticle_run. |
RETICLE_VERIFY_SURFACE | daemon | Advertise the smallest surface that can still produce a verdict. |
RETICLE_TOOL_PROFILE | daemon | Retired. Any value it used to accept still resolves to a sensible surface, and the daemon says which one it used instead. |
RETICLE_ENCODING | daemon | How tool results are written for the agent. Compact JSON by default; pretty indents it, and toon is a denser tabular form. The typed result is the same in every encoding. |
RETICLE_NO_UPSELL | daemon | Silences every upgrade hint. |
Gate and CI
| Variable | Read by | What it does |
|---|---|---|
RETICLE_SKIP_GATE | reticle gate --hook | Lets an agent’s stop hook proceed past a failing gate. The skip is printed and recorded, never silent. It does not affect reticle gate without --hook, which is what CI runs. |
RETICLE_NO_CI_HINT | reticle gate, reticle verify | 1 stops the one line these commands write to stderr at the end of a run in a CI runner or a container. The line names the pull request check and https://reticle.sh/ci. It never prints in an interactive terminal or for gate --hook, and it makes no network call. |
RETICLE_VERIFY_TOKEN | reticle serve --http | The bearer token the optional HTTP verify endpoint requires. |
RETICLE_SECRET_<FIELD> | replay, verify, crawl | The value typed into a password or secret field at replay. A recorded flow never stores it. See what is recorded. |
Cloud and the autonomous drive
| Variable | Read by | What it does |
|---|---|---|
RETICLE_API_KEY | CLI, daemon | The API key minted on the platform. |
RETICLE_CLOUD_KEY | CLI, daemon | The key’s earlier name. Still honoured. |
RETICLE_CLOUD_URL, RETICLE_URL | CLI, daemon | The platform host. RETICLE_CLOUD_URL wins when both are set. |
RETICLE_PROMPT_CAPTURE | prompt hook | 0, false, off or no stops the agent hooks on this machine from keeping anything: prompts, tool calls, the model and closing messages. "promptCapture": false in .reticle.json does the same for one project. See prompt capture. |
RETICLE_BACKGROUND_SYNC | daemon | 0, false, off or no stops the daemon’s background sync on this machine. "backgroundSync": false in .reticle.json does the same for one project. reticle sync still sends. |
RETICLE_SYNC_INTERVAL_MS | reticle sync --watch | How often the watching sync runs. Every 60 seconds by default. |
RETICLE_HARNESS_MAX_STEPS | autonomous drive | A hard ceiling on steps in one drive. It bounds cost. The drive itself runs on the platform and needs a linked project; each drive spends credits from the workspace’s allowance. |
RETICLE_DRIVE_ID | autonomous drive | The free drive the platform granted, sent with every Harness call. reticle try sets it; you do not need to. |
RETICLE_SECRET_<FIELD> | autonomous drive, replay | The value of a secret field, typed in on this machine. Only the field’s name goes to the platform. |
Licensing
| Variable | Read by | What it does |
|---|---|---|
RETICLE_LICENSE_KEY | daemon | The Enterprise licence key. See licence activation. |
Telemetry and feedback
| Variable | Read by | What it does |
|---|---|---|
RETICLE_TELEMETRY | CLI, daemon | 0, false or off turns anonymous usage telemetry off. DO_NOT_TRACK is honoured too. See telemetry. |
RETICLE_TELEMETRY_FILE | CLI, daemon | Write telemetry to a local JSONL file and send nothing, so you can read exactly what would be sent. |
RETICLE_TELEMETRY_URL, RETICLE_TELEMETRY_KEY | CLI, daemon | Send telemetry to a different host or project, such as an EU region or your own instance. |
RETICLE_FEEDBACK | daemon | Turns off the feedback channel only. Usage telemetry follows RETICLE_TELEMETRY. |
RETICLE_INSTALL_SOURCE | init, installer, plugin | Names the published route an install came through: skill_file, npx_skill, plugin, install_script, docs_site, readme, blog or cli_direct. Any other value is sent as unknown. Self-declared, carries nothing about you, and changes nothing about the install. |
RETICLE_TRACE | daemon, CLI | Verbose internal tracing for people working on Reticle itself. Off by default. |