@reticlehq/server 2.7.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -5
- package/SKILL.md +130 -778
- package/dist/bridge/bridge.d.ts +23 -0
- package/dist/bridge/bridge.js +80 -2
- package/dist/bridge/bridge.test-harness.d.ts +5 -0
- package/dist/bridge/bridge.test-harness.js +6 -4
- package/dist/capsule/causal-summary.d.ts +36 -1
- package/dist/capsule/causal-summary.js +33 -7
- package/dist/capsule/divergence.js +7 -1
- package/dist/cli/chromium-hint.d.ts +33 -5
- package/dist/cli/chromium-hint.js +82 -12
- package/dist/cli/cli-doctor.js +65 -34
- package/dist/cli/cli-flow-commands.js +8 -8
- package/dist/cli/cli-kill.d.ts +58 -0
- package/dist/cli/cli-kill.js +162 -0
- package/dist/cli/cli-parse.d.ts +16 -1
- package/dist/cli/cli-parse.js +32 -9
- package/dist/cli/cli-port.d.ts +32 -0
- package/dist/cli/cli-port.js +82 -35
- package/dist/cli/cli-verify.d.ts +21 -0
- package/dist/cli/cli-verify.js +47 -3
- package/dist/cli/config-discovery.d.ts +35 -0
- package/dist/cli/config-discovery.js +163 -0
- package/dist/cli/doctor-daemon-line.js +4 -1
- package/dist/cli/doctor-project-line.d.ts +37 -0
- package/dist/cli/doctor-project-line.js +35 -0
- package/dist/cli/doctor-rows.d.ts +51 -0
- package/dist/cli/doctor-rows.js +54 -0
- package/dist/cli/doctor-sessions-line.d.ts +12 -0
- package/dist/cli/doctor-sessions-line.js +69 -0
- package/dist/cli/drive-attach.d.ts +99 -0
- package/dist/cli/drive-attach.js +203 -0
- package/dist/cli/drive-command.d.ts +13 -0
- package/dist/cli/drive-command.js +103 -0
- package/dist/cli/open-note.d.ts +20 -0
- package/dist/cli/open-note.js +37 -0
- package/dist/cli/port-holder.d.ts +10 -0
- package/dist/cli/port-holder.js +26 -2
- package/dist/cli/status-next-action.d.ts +37 -0
- package/dist/cli/status-next-action.js +61 -0
- package/dist/cli.js +119 -39
- package/dist/crawl/crawl-tools.js +12 -2
- package/dist/crawl/crawl.d.ts +13 -0
- package/dist/crawl/crawl.js +50 -2
- package/dist/events/contradictions.d.ts +46 -0
- package/dist/events/contradictions.js +35 -22
- package/dist/events/declared.d.ts +45 -0
- package/dist/events/declared.js +73 -0
- package/dist/events/echo-mismatch.d.ts +8 -2
- package/dist/events/echo-mismatch.js +33 -5
- package/dist/events/event-filters.d.ts +1 -1
- package/dist/events/event-filters.js +7 -4
- package/dist/events/predicate-eval.d.ts +17 -72
- package/dist/events/predicate-eval.js +117 -236
- package/dist/events/predicate-parse.js +31 -3
- package/dist/events/predicate-route.d.ts +32 -0
- package/dist/events/predicate-route.js +102 -0
- package/dist/events/predicate-schema.d.ts +99 -0
- package/dist/events/predicate-schema.js +309 -0
- package/dist/events/predicate.d.ts +8 -0
- package/dist/events/predicate.js +296 -22
- package/dist/flows/annotate-tools.js +3 -0
- package/dist/flows/annotate.js +18 -4
- package/dist/flows/coverage.d.ts +38 -5
- package/dist/flows/coverage.js +30 -4
- package/dist/flows/decision.d.ts +15 -0
- package/dist/flows/decision.js +1 -1
- package/dist/flows/flow-classify.js +1 -1
- package/dist/flows/flow-replay-run.js +8 -1
- package/dist/flows/flow-tools.js +21 -5
- package/dist/flows/heal-run.js +1 -1
- package/dist/flows/replay.js +3 -0
- package/dist/honesty/accepted-write.d.ts +3 -0
- package/dist/honesty/accepted-write.js +8 -3
- package/dist/honesty/already-true.js +15 -0
- package/dist/honesty/blind-spots.js +10 -2
- package/dist/honesty/honesty.d.ts +11 -0
- package/dist/honesty/honesty.js +1 -0
- package/dist/honesty/uncaptured-bodies.d.ts +4 -2
- package/dist/honesty/uncaptured-bodies.js +9 -2
- package/dist/honesty/unread-outcome.d.ts +8 -0
- package/dist/honesty/unread-outcome.js +36 -9
- package/dist/honesty/unsettled.d.ts +49 -0
- package/dist/honesty/unsettled.js +82 -0
- package/dist/honesty/verified.d.ts +36 -3
- package/dist/honesty/verified.js +54 -11
- package/dist/http-server.d.ts +19 -0
- package/dist/http-server.js +202 -4
- package/dist/impact/impact-recorder.d.ts +23 -0
- package/dist/impact/impact-recorder.js +76 -0
- package/dist/impact/impact-store.d.ts +47 -0
- package/dist/impact/impact-store.js +171 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +47 -10
- package/dist/init/agent-rules.d.ts +36 -0
- package/dist/init/agent-rules.js +132 -22
- package/dist/init/astro-patch.d.ts +2 -1
- package/dist/init/astro-patch.js +38 -6
- package/dist/init/capabilities.d.ts +22 -0
- package/dist/init/capabilities.js +76 -0
- package/dist/init/confirm.d.ts +114 -0
- package/dist/init/confirm.js +165 -0
- package/dist/init/connect-steps.d.ts +2 -0
- package/dist/init/connect-steps.js +50 -0
- package/dist/init/cra.js +3 -2
- package/dist/init/csp-check.d.ts +38 -0
- package/dist/init/csp-check.js +92 -0
- package/dist/init/csp-doctor.d.ts +25 -0
- package/dist/init/csp-doctor.js +49 -0
- package/dist/init/cursor.js +6 -9
- package/dist/init/detect.d.ts +8 -0
- package/dist/init/detect.js +33 -3
- package/dist/init/mcp-clients.d.ts +1 -0
- package/dist/init/mcp-clients.js +51 -7
- package/dist/init/mcp.d.ts +15 -0
- package/dist/init/mcp.js +19 -0
- package/dist/init/non-js-project.js +29 -5
- package/dist/init/plan-framework.d.ts +10 -0
- package/dist/init/plan-framework.js +78 -16
- package/dist/init/plan.d.ts +47 -6
- package/dist/init/plan.js +228 -69
- package/dist/init/run.d.ts +24 -2
- package/dist/init/run.js +157 -45
- package/dist/init/slash-command.d.ts +1 -1
- package/dist/init/slash-command.js +54 -6
- package/dist/init/snippets.d.ts +45 -5
- package/dist/init/snippets.js +194 -42
- package/dist/init/vite-config.js +53 -5
- package/dist/input/network-mock-tools.d.ts +19 -0
- package/dist/input/network-mock-tools.js +37 -5
- package/dist/input/scroll-find.d.ts +6 -0
- package/dist/input/scroll-find.js +17 -2
- package/dist/input/scroll-tools.js +4 -0
- package/dist/journal/attach-journal.d.ts +9 -1
- package/dist/journal/attach-journal.js +13 -2
- package/dist/journal/journal-query.d.ts +13 -0
- package/dist/journal/journal-query.js +28 -3
- package/dist/journal/workspace-gitignore.d.ts +10 -0
- package/dist/journal/workspace-gitignore.js +59 -0
- package/dist/license/license.js +1 -1
- package/dist/mcp/mcp-proxy.d.ts +35 -30
- package/dist/mcp/mcp-proxy.js +306 -104
- package/dist/mcp/mcp.d.ts +10 -1
- package/dist/mcp/mcp.js +70 -34
- package/dist/mcp/proxy-handshake.d.ts +82 -1
- package/dist/mcp/proxy-handshake.js +109 -2
- package/dist/mcp/proxy-lifecycle.d.ts +11 -2
- package/dist/mcp/proxy-lifecycle.js +12 -3
- package/dist/mcp/proxy-log.d.ts +63 -0
- package/dist/mcp/proxy-log.js +132 -0
- package/dist/mcp/server-instructions.d.ts +17 -0
- package/dist/mcp/server-instructions.js +56 -0
- package/dist/mcp/shared-params.d.ts +27 -0
- package/dist/mcp/shared-params.js +36 -0
- package/dist/pool/browser-pool.d.ts +22 -2
- package/dist/pool/browser-pool.js +44 -4
- package/dist/project/learned-routes.d.ts +24 -0
- package/dist/project/learned-routes.js +63 -0
- package/dist/project/project-store.d.ts +6 -0
- package/dist/project/project-store.js +25 -1
- package/dist/project/reticle-dir.d.ts +2 -0
- package/dist/project/reticle-dir.js +1 -0
- package/dist/session/connection-memory.d.ts +59 -0
- package/dist/session/connection-memory.js +108 -0
- package/dist/session/dev-command.d.ts +26 -0
- package/dist/session/dev-command.js +89 -0
- package/dist/session/dev-server-probe.d.ts +68 -0
- package/dist/session/dev-server-probe.js +102 -7
- package/dist/session/last-act.d.ts +26 -0
- package/dist/session/last-act.js +35 -1
- package/dist/session/live-control-tools.js +42 -5
- package/dist/session/no-session-diagnosis.d.ts +67 -2
- package/dist/session/no-session-diagnosis.js +236 -27
- package/dist/session/no-session-next-action.d.ts +46 -0
- package/dist/session/no-session-next-action.js +85 -0
- package/dist/session/no-session-watch.d.ts +40 -1
- package/dist/session/no-session-watch.js +174 -8
- package/dist/session/pending-commands.d.ts +12 -0
- package/dist/session/pending-commands.js +13 -1
- package/dist/session/ref-provenance.d.ts +54 -0
- package/dist/session/ref-provenance.js +61 -0
- package/dist/session/session-lease.js +1 -1
- package/dist/session/session-manager.d.ts +4 -0
- package/dist/session/session-manager.js +35 -5
- package/dist/session/session.d.ts +10 -1
- package/dist/session/session.js +146 -5
- package/dist/telemetry/app-instrumented.d.ts +8 -0
- package/dist/telemetry/app-instrumented.js +10 -0
- package/dist/telemetry/automation-hint.d.ts +17 -0
- package/dist/telemetry/automation-hint.js +71 -0
- package/dist/telemetry/bug-found.d.ts +15 -17
- package/dist/telemetry/bug-found.js +52 -21
- package/dist/telemetry/cli-telemetry.js +7 -1
- package/dist/telemetry/daemon-telemetry.js +24 -0
- package/dist/telemetry/feedback.js +1 -1
- package/dist/telemetry/init-telemetry.js +9 -1
- package/dist/telemetry/install-source.d.ts +56 -0
- package/dist/telemetry/install-source.js +74 -0
- package/dist/telemetry/instrumentation-stall.d.ts +50 -0
- package/dist/telemetry/instrumentation-stall.js +90 -0
- package/dist/telemetry/run-telemetry.js +4 -1
- package/dist/telemetry/session-metrics.d.ts +8 -0
- package/dist/telemetry/session-metrics.js +15 -0
- package/dist/telemetry/telemetry.d.ts +7 -1
- package/dist/telemetry/telemetry.js +26 -2
- package/dist/telemetry/tool-refused.d.ts +19 -0
- package/dist/telemetry/tool-refused.js +55 -0
- package/dist/telemetry/verification-of.js +46 -7
- package/dist/temp-dir.d.ts +27 -0
- package/dist/temp-dir.js +46 -0
- package/dist/tools/act-tools.js +209 -28
- package/dist/tools/assert-grade.d.ts +1 -1
- package/dist/tools/assert-grade.js +27 -5
- package/dist/tools/assert-verdict.js +49 -7
- package/dist/tools/browser-tools.js +10 -0
- package/dist/tools/contract-tools.js +4 -0
- package/dist/tools/dynamic-tools.js +16 -7
- package/dist/tools/error-recovery.d.ts +10 -0
- package/dist/tools/error-recovery.js +73 -9
- package/dist/tools/feedback-invite.js +1 -1
- package/dist/tools/invoke-tool.js +159 -26
- package/dist/tools/lease-hint.d.ts +30 -8
- package/dist/tools/lease-hint.js +65 -14
- package/dist/tools/lease-tools.d.ts +40 -1
- package/dist/tools/lease-tools.js +181 -83
- package/dist/tools/navigate-result.js +1 -1
- package/dist/tools/observe-tools.js +10 -4
- package/dist/tools/observed-nothing.js +1 -1
- package/dist/tools/react-grace.d.ts +52 -0
- package/dist/tools/react-grace.js +90 -0
- package/dist/tools/read-tools.js +67 -5
- package/dist/tools/resolve-target.d.ts +33 -0
- package/dist/tools/resolve-target.js +53 -0
- package/dist/tools/settle-in-flight.d.ts +94 -0
- package/dist/tools/settle-in-flight.js +146 -0
- package/dist/tools/snapshot-delta.d.ts +10 -0
- package/dist/tools/snapshot-delta.js +194 -9
- package/dist/tools/tool-kit.d.ts +8 -0
- package/dist/tools/tool-surface.d.ts +60 -0
- package/dist/tools/tool-surface.js +86 -1
- package/dist/tools/tools.js +61 -8
- package/dist/tools/unadvertised-help.js +9 -6
- package/docs/README.md +55 -11
- package/docs/actions.mdx +120 -0
- package/docs/agent-cheatsheet.md +95 -29
- package/docs/architecture.md +52 -35
- package/docs/benchmarks.md +127 -75
- package/docs/best-practices.mdx +216 -0
- package/docs/capabilities.mdx +534 -0
- package/docs/cli/affected.mdx +53 -0
- package/docs/cli/capsules.mdx +70 -0
- package/docs/cli/cloud.mdx +153 -0
- package/docs/cli/doctor.mdx +109 -0
- package/docs/cli/drive.mdx +74 -0
- package/docs/cli/feedback.mdx +67 -0
- package/docs/cli/gate.mdx +64 -0
- package/docs/cli/help.mdx +94 -0
- package/docs/cli/hunt.mdx +73 -0
- package/docs/cli/identify.mdx +76 -0
- package/docs/cli/init.mdx +121 -0
- package/docs/cli/kill.mdx +91 -0
- package/docs/cli/license.mdx +48 -0
- package/docs/cli/mcp.mdx +61 -0
- package/docs/cli/open.mdx +74 -0
- package/docs/cli/restart.mdx +60 -0
- package/docs/cli/rollback.mdx +35 -0
- package/docs/cli/serve.mdx +69 -0
- package/docs/cli/status.mdx +88 -0
- package/docs/cli/stop.mdx +64 -0
- package/docs/cli/telemetry.mdx +57 -0
- package/docs/cli/update.mdx +52 -0
- package/docs/cli/verify.mdx +76 -0
- package/docs/cli/version.mdx +39 -0
- package/docs/cli/watch.mdx +62 -0
- package/docs/cli.mdx +241 -0
- package/docs/debugging.md +16 -10
- package/docs/deploy-checks.md +45 -12
- package/docs/desktop.mdx +384 -0
- package/docs/docs.json +364 -0
- package/docs/enterprise.md +22 -16
- package/docs/faq.mdx +102 -0
- package/docs/fixtures.md +13 -7
- package/docs/flows.md +29 -23
- package/docs/for-agents.md +71 -0
- package/docs/frameworks.mdx +238 -0
- package/docs/gate-plan.md +48 -42
- package/docs/gates.md +28 -22
- package/docs/getting-started.md +129 -77
- package/docs/human-control.md +24 -18
- package/docs/index.mdx +143 -0
- package/docs/install-agentic.mdx +224 -0
- package/docs/install-manual.mdx +196 -0
- package/docs/instrumentation.mdx +238 -0
- package/docs/integration-patterns.md +41 -35
- package/docs/local-registry.md +19 -13
- package/docs/multi-agent-testing.md +19 -13
- package/docs/packages/babel-plugin.mdx +79 -0
- package/docs/packages/browser.mdx +111 -0
- package/docs/packages/core.mdx +116 -0
- package/docs/packages/electron.mdx +85 -0
- package/docs/packages/eslint-plugin.mdx +86 -0
- package/docs/packages/next.mdx +89 -0
- package/docs/packages/react.mdx +91 -0
- package/docs/packages/server.mdx +98 -0
- package/docs/packages/tauri.mdx +63 -0
- package/docs/packages/test.mdx +119 -0
- package/docs/packages/vite-plugin.mdx +94 -0
- package/docs/packages.mdx +218 -0
- package/docs/platform-integration.md +35 -26
- package/docs/predicates.mdx +248 -0
- package/docs/quickstart.mdx +257 -0
- package/docs/recipes.mdx +282 -0
- package/docs/skill-file.mdx +107 -0
- package/docs/state-management.mdx +199 -0
- package/docs/style.css +14 -0
- package/docs/system-map.md +50 -33
- package/docs/telemetry-contract.md +106 -52
- package/docs/telemetry-events.mdx +475 -0
- package/docs/telemetry.md +63 -55
- package/docs/testing.md +44 -6
- package/docs/token-efficiency.md +37 -27
- package/docs/tools-act-and-wait.mdx +173 -0
- package/docs/tools-act-sequence.mdx +137 -0
- package/docs/tools-act.mdx +95 -0
- package/docs/tools-assert.mdx +129 -0
- package/docs/tools-console.mdx +63 -0
- package/docs/tools-inspect.mdx +88 -0
- package/docs/tools-navigate.mdx +99 -0
- package/docs/tools-network.mdx +119 -0
- package/docs/tools-observe.mdx +145 -0
- package/docs/tools-overview.mdx +160 -0
- package/docs/tools-query.mdx +126 -0
- package/docs/tools-session-and-feedback.mdx +112 -0
- package/docs/tools-sessions.mdx +94 -0
- package/docs/tools-snapshot.mdx +129 -0
- package/docs/tools-state.mdx +104 -0
- package/docs/tools-tools-and-run.mdx +156 -0
- package/docs/tools-wait-for.mdx +85 -0
- package/docs/troubleshooting.mdx +263 -0
- package/docs/usage.md +209 -165
- package/docs/vs-chrome-devtools-mcp.mdx +123 -0
- package/docs/vs-playwright-mcp.mdx +125 -0
- package/docs/vs-screenshots.mdx +137 -0
- package/docs/what-is-reticle.mdx +63 -0
- package/docs/why-reticle.mdx +109 -0
- package/package.json +5 -5
- package/docs/desktop-apps.md +0 -256
- package/docs/matrix/2.5.0/claude-code-machine.json +0 -19
- package/docs/matrix/2.5.0/codex-machine.json +0 -20
- package/docs/matrix/2.5.0/cursor-machine.json +0 -22
- package/docs/matrix/2.5.0/gemini-machine.json +0 -22
- package/docs/matrix/2.5.0/opencode-machine.json +0 -22
- package/docs/matrix/2.5.0/vscode-machine.json +0 -22
- package/docs/matrix/2.5.0/windsurf-machine.json +0 -22
- package/docs/matrix/MATRIX.md +0 -26
- package/docs/matrix/README.md +0 -59
- package/docs/mint.json +0 -61
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: reticle status
|
|
3
|
+
description: Ask whether the Reticle daemon is up and which app sessions have connected to it.
|
|
4
|
+
icon: heart-pulse
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
`reticle status` is the command that tells you whether the install actually finished. Not a tick in a checklist: a connected app.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @reticlehq/server status [--port N]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Flags
|
|
14
|
+
|
|
15
|
+
| Flag | Type | Default | What it does |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| `--port N` | number | `4400` (or `RETICLE_PORT`, or the port in `.reticle.json`) | Which daemon to ask |
|
|
18
|
+
|
|
19
|
+
## What it prints
|
|
20
|
+
|
|
21
|
+
One JSON line on stdout. Real capture, daemon up and no app connected:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"t": "2026-08-15T18:43:33.724Z",
|
|
26
|
+
"event": "reticle_status",
|
|
27
|
+
"port": 4499,
|
|
28
|
+
"running": true,
|
|
29
|
+
"pid": 78137,
|
|
30
|
+
"sessionCount": 0,
|
|
31
|
+
"sessions": [],
|
|
32
|
+
"why": "no browser session connected. Two things to weigh, and neither of them is proof. (1) Nothing is listening on the ports Reticle scans (3000, 3001, 4200, 4321, 5000, 5173, 5174, 8000, 8080, 8100, 9000, 1420, 3100, 4173, 5175, 7860, 8501), so the dev server may not be running ... (2) There is no `.reticle.json` in the directory this daemon is running in ..."
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
With an app connected, `why` is absent and each session carries its own fields:
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"t": "2026-08-15T18:45:58.190Z",
|
|
41
|
+
"event": "reticle_status",
|
|
42
|
+
"port": 4400,
|
|
43
|
+
"running": true,
|
|
44
|
+
"pid": 72698,
|
|
45
|
+
"sessionCount": 1,
|
|
46
|
+
"sessions": [
|
|
47
|
+
{
|
|
48
|
+
"sessionId": "s223e0fad-e012-43f9-a23d-6d585470c90d",
|
|
49
|
+
"url": "http://localhost:4310/",
|
|
50
|
+
"throttled": false,
|
|
51
|
+
"stale": false,
|
|
52
|
+
"pendingMarks": 0
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Both are one line of JSON in the terminal, pretty-printed here, with `why` trimmed at the ellipses.
|
|
59
|
+
|
|
60
|
+
| Field | Meaning |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `running` | Whether a usable daemon owns the port |
|
|
63
|
+
| `presence` | Present when the pid file is dead: `daemon`, `foreign`, or `absent`. The port is asked, not just the pid file |
|
|
64
|
+
| `pid` | The daemon process |
|
|
65
|
+
| `sessionCount` / `sessions` | Connected app sessions, each with `sessionId`, `url`, `throttled`, `stale`, `pendingMarks` |
|
|
66
|
+
| `why` | Present when zero sessions connected. Names the two likely causes and refuses to assert either |
|
|
67
|
+
| `updateAvailable` | Present when a newer server version is on the registry |
|
|
68
|
+
|
|
69
|
+
<Note>
|
|
70
|
+
`status` asks the **port**, not only the pid file. `running: false` used to be printed about a
|
|
71
|
+
port that was demonstrably occupied, which sent the reader off to start a daemon that could never
|
|
72
|
+
bind.
|
|
73
|
+
</Note>
|
|
74
|
+
|
|
75
|
+
## Exit codes
|
|
76
|
+
|
|
77
|
+
Always `0`. This command answers a question; it does not judge the answer.
|
|
78
|
+
|
|
79
|
+
## Worked example
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npx @reticlehq/server init
|
|
83
|
+
npx @reticlehq/server status # a session in the list means the app is genuinely wired
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
<Card title="Nothing connected?" icon="triangle-exclamation" href="/troubleshooting">
|
|
87
|
+
The bridge port is not your dev server port, and that is the most common cause.
|
|
88
|
+
</Card>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: reticle stop
|
|
3
|
+
description: Stop the Reticle daemon on a port, escalating from SIGTERM to SIGKILL if it will not go.
|
|
4
|
+
icon: circle-stop
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
`reticle stop` reads the pid recorded for the port and stops that process.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @reticlehq/server stop [--port N] [--quiet]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Flags
|
|
14
|
+
|
|
15
|
+
| Flag | Type | Default | What it does |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| `--port N` | number | `4400` (or `RETICLE_PORT`, or the port in `.reticle.json`) | Which daemon to stop |
|
|
18
|
+
| `--quiet` | boolean | `false` | Print nothing. For scripts that stop a daemon that may not be running |
|
|
19
|
+
|
|
20
|
+
## How it stops
|
|
21
|
+
|
|
22
|
+
1. `SIGTERM` first, then poll every 100ms.
|
|
23
|
+
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`.
|
|
24
|
+
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.
|
|
25
|
+
|
|
26
|
+
## What it prints
|
|
27
|
+
|
|
28
|
+
| Event | When |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| `reticle_daemon_stopped` | It stopped. Carries `port`, `pid`, and `escalated: true` if it took a `SIGKILL` |
|
|
31
|
+
| `reticle_daemon_not_running` | No live pid for that port. The stale pid file is removed |
|
|
32
|
+
| `reticle_daemon_stop_timeout` | It survived everything. Exits `1` |
|
|
33
|
+
|
|
34
|
+
Real capture, stopping a port with no live pid recorded for it. It exits `0`, because "already not running" is the state you asked for:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
{"t":"2026-08-15T18:43:43.943Z","event":"reticle_daemon_not_running","port":4499}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
With `--quiet` that same run prints nothing at all and still exits `0`.
|
|
41
|
+
|
|
42
|
+
## Exit codes
|
|
43
|
+
|
|
44
|
+
| Code | Meaning |
|
|
45
|
+
| ---- | ------------------------------ |
|
|
46
|
+
| `0` | Stopped, or was not running |
|
|
47
|
+
| `1` | The process survived `SIGKILL` |
|
|
48
|
+
|
|
49
|
+
<Warning>
|
|
50
|
+
Do not stop a daemon with `lsof -ti tcp:4400 | xargs kill -9`. That pattern matches the agent's
|
|
51
|
+
own `reticle mcp` proxy as well as the daemon and takes both down. Use this command, or [`reticle
|
|
52
|
+
kill`](/cli/kill).
|
|
53
|
+
</Warning>
|
|
54
|
+
|
|
55
|
+
## When this is not enough
|
|
56
|
+
|
|
57
|
+
`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.
|
|
58
|
+
|
|
59
|
+
## Worked example
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx @reticlehq/server stop --port 4400 --quiet && npx @reticlehq/server serve --port 4400
|
|
63
|
+
npx @reticlehq/server restart --port 4400 # the same thing, honest about each half
|
|
64
|
+
```
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: reticle telemetry
|
|
3
|
+
description: Show, enable, or disable Reticle's anonymous usage metrics on this machine.
|
|
4
|
+
icon: chart-line
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
`reticle telemetry` is the user-facing control for anonymous usage metrics.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @reticlehq/server telemetry [status|enable|disable]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Sub-actions
|
|
14
|
+
|
|
15
|
+
| Action | Default | What it does |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| `status` | yes, when nothing is given | Report the current state, why it is that state, and where the policy lives |
|
|
18
|
+
| `enable` | | Turn metrics on for this machine |
|
|
19
|
+
| `disable` | | Persist a machine-wide opt-out. Unlike `RETICLE_TELEMETRY=0`, this survives shells |
|
|
20
|
+
|
|
21
|
+
Any other word is a usage error: `unknown telemetry action: <word>`, exit `1`.
|
|
22
|
+
|
|
23
|
+
## What it prints
|
|
24
|
+
|
|
25
|
+
Human-readable lines on stdout, like [`doctor`](/cli/doctor). Real capture inside a Reticle source checkout:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
telemetry disabled (this is a Reticle source checkout; developing it is not using it)
|
|
29
|
+
policy https://github.com/reticlehq/reticle/blob/main/docs/telemetry.md
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
When it is enabled, a third line names every way to turn it off:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
opt out reticle telemetry disable (or RETICLE_TELEMETRY=0 / DO_NOT_TRACK=1)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Exit codes
|
|
39
|
+
|
|
40
|
+
| Code | Meaning |
|
|
41
|
+
| ---- | ------------------------------------ |
|
|
42
|
+
| `0` | Status shown, or the setting changed |
|
|
43
|
+
| `1` | Unknown sub-action |
|
|
44
|
+
|
|
45
|
+
## Worked example
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx @reticlehq/server telemetry status
|
|
49
|
+
npx @reticlehq/server telemetry disable
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
<Card title="Exactly what is collected" icon="shield-check" href="/telemetry">
|
|
53
|
+
The complete list, in plain language, and every way to switch it off.
|
|
54
|
+
</Card>
|
|
55
|
+
<Card title="Every event, in schema detail" icon="database" href="/telemetry-events">
|
|
56
|
+
The contributor reference: payload blocks, field types, and what each event exists to answer.
|
|
57
|
+
</Card>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: reticle update
|
|
3
|
+
description: Install the latest Reticle server version, sync the project SDK to match, and restart.
|
|
4
|
+
icon: arrow-up
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
`reticle update` moves the installed server forward and brings the app's SDK with it.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @reticlehq/server update
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
No flags.
|
|
14
|
+
|
|
15
|
+
## What it does, in order
|
|
16
|
+
|
|
17
|
+
1. Ask the registry what is available.
|
|
18
|
+
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.
|
|
19
|
+
3. Nothing newer: log `reticle_update` with `ok: false` and `message: "already on the latest version"`, then stop.
|
|
20
|
+
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.
|
|
21
|
+
5. Then apply the CLI update, which execs and exits. Your agent client restarts it.
|
|
22
|
+
|
|
23
|
+
## What it prints
|
|
24
|
+
|
|
25
|
+
| Event | Fields |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| `reticle_update` | `ok`, and either `from` and `to`, or `message` and `version` |
|
|
28
|
+
| `reticle_update_sdk` | `synced`, `packages`, `to`, `packageManager`. Or `synced: false` with `reason: "no @reticlehq packages in this project"` |
|
|
29
|
+
| `reticle_update_sdk_failed` | A `hint` naming the exact command to run by hand |
|
|
30
|
+
| `reticle_update_failed` | The error |
|
|
31
|
+
|
|
32
|
+
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.
|
|
33
|
+
|
|
34
|
+
## Exit codes
|
|
35
|
+
|
|
36
|
+
| Code | Meaning |
|
|
37
|
+
| ---- | -------------------------------------------------------------------- |
|
|
38
|
+
| `0` | Already current, or the update was applied (the process is replaced) |
|
|
39
|
+
| `1` | The update check or install threw |
|
|
40
|
+
|
|
41
|
+
## Worked example
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx @reticlehq/server version # 2.8.0
|
|
45
|
+
npx @reticlehq/server update
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
<Warning>
|
|
49
|
+
Attaching to a running daemon is what a daemon is for, which means an upgrade does not take effect
|
|
50
|
+
until that daemon dies. Run [`reticle stop`](/cli/stop) afterwards if you need the new build
|
|
51
|
+
serving immediately.
|
|
52
|
+
</Warning>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: reticle verify
|
|
3
|
+
description: Drive a URL once, replay every saved flow, and exit zero only on a real pass.
|
|
4
|
+
icon: circle-check
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
`reticle verify` is the CI command: no model in the loop, no MCP. It boots the engine in drive mode, waits for the in-page SDK to dial back, replays every saved flow, renders the verdict, and exits.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @reticlehq/server verify <url> [--headed] [--timeout N] [--storage-state <file>]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
It uses the same runner and the same verdict as the MCP and HTTP paths, so a platform agent that can only run a shell command gets a byte-identical artifact.
|
|
14
|
+
|
|
15
|
+
## Arguments and flags
|
|
16
|
+
|
|
17
|
+
| Argument | Type | Default | What it does |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| `url` | string, positional, **required** | none | The preview URL to drive |
|
|
20
|
+
| `--headed` | boolean | `false` (headless) | Show the browser |
|
|
21
|
+
| `--timeout N` | number, ms | `15000` | How long to wait for a browser session to dial back |
|
|
22
|
+
| `--storage-state <file>` | string | unset | A Playwright storage state file. This is how you verify flows behind a login without scripting the login every time |
|
|
23
|
+
|
|
24
|
+
## What it prints
|
|
25
|
+
|
|
26
|
+
The rendered run report on stdout. On failure it names the cause on stderr instead, and there are two refusals worth knowing:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
No app connected: Reticle drove the URL but no @reticlehq/browser session dialed back.
|
|
30
|
+
Make sure the SDK is in the build and reticle.connect() runs on the preview page (for a non-localhost preview: allowNonLocalhost + a pairing token).
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
No saved flows to verify (.reticle/flows is empty), so refusing to report a pass for verifying nothing.
|
|
35
|
+
Flows are recorded interactively by an agent (reticle_record{action:"start"} → act → reticle_flow_save via the
|
|
36
|
+
MCP tools), then committed to .reticle/flows/. In CI, check those files in and re-run `reticle verify`.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
<Warning>
|
|
40
|
+
Both of those are honesty guards, and both exit `1`. Verifying nothing is never a pass.
|
|
41
|
+
</Warning>
|
|
42
|
+
|
|
43
|
+
A URL that does not answer is not one of those two. It surfaces as the underlying Playwright error, prefixed with `verify failed:`, and also exits `1`. Real capture:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
verify failed: page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:59999/
|
|
47
|
+
Call log:
|
|
48
|
+
- navigating to "http://localhost:59999/", waiting until "domcontentloaded"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
<Warning>
|
|
52
|
+
`verify` binds the bridge port itself and has **no `--port` flag**: passing one is rejected as
|
|
53
|
+
`unknown argument '--port'`. If a daemon is already on the port, `verify` dies with a raw `Error:
|
|
54
|
+
listen EADDRINUSE: address already in use 127.0.0.1:4400` stack trace before it drives anything.
|
|
55
|
+
Stop the daemon first, or move `verify` with the `RETICLE_PORT` environment variable. This bites
|
|
56
|
+
most often on a developer machine, where an agent has usually left a daemon running; in CI the
|
|
57
|
+
port is normally free.
|
|
58
|
+
</Warning>
|
|
59
|
+
|
|
60
|
+
## Exit codes
|
|
61
|
+
|
|
62
|
+
| Code | Meaning |
|
|
63
|
+
| ---- | ----------------------------------------------------------------- |
|
|
64
|
+
| `0` | The verdict was a pass |
|
|
65
|
+
| `1` | Failed, or no session, or no flows, or the engine could not start |
|
|
66
|
+
|
|
67
|
+
## Worked example
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npm run build && npm run preview &
|
|
71
|
+
npx @reticlehq/server verify http://localhost:4173 --timeout 60000
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
<Card title="Recording the flows this replays" icon="vial" href="/testing">
|
|
75
|
+
Flows are recorded interactively, then committed to `.reticle/flows/`.
|
|
76
|
+
</Card>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: reticle version
|
|
3
|
+
description: Print the version of the Reticle server that is actually executing.
|
|
4
|
+
icon: tag
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
`reticle version` prints the running package version. It is the diagnostic to reach for when you need to know which build `npx` actually resolved, which is not always the one you expected.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @reticlehq/server version
|
|
11
|
+
npx @reticlehq/server --version
|
|
12
|
+
npx @reticlehq/server -v
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
All three are the same command. No flags.
|
|
16
|
+
|
|
17
|
+
## What it prints
|
|
18
|
+
|
|
19
|
+
One `reticle_version` line. Real capture:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{ "t": "2026-08-15T18:42:26.275Z", "event": "reticle_version", "version": "2.8.0" }
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Exit codes
|
|
26
|
+
|
|
27
|
+
Always `0`.
|
|
28
|
+
|
|
29
|
+
## Worked example
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx @reticlehq/server version | jq -r .version
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
<Note>
|
|
36
|
+
The version here is the CLI's. A daemon that was already running keeps serving its own build until
|
|
37
|
+
it exits, so [`reticle doctor`](/cli/doctor) is the command that compares the two and names a
|
|
38
|
+
skew.
|
|
39
|
+
</Note>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: reticle watch
|
|
3
|
+
description: Watch the working tree and report which saved flows must re-verify on every save.
|
|
4
|
+
icon: eye
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
`reticle watch` is the buddy loop. It watches the current directory and, on every save of a source file, reports which saved flows the change puts at risk. It runs in the environment, so it costs your agent nothing per turn.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @reticlehq/server watch [url]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Long-running. Stop it with `Ctrl+C`.
|
|
14
|
+
|
|
15
|
+
## Arguments
|
|
16
|
+
|
|
17
|
+
| Argument | Type | Default | What it does |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| `url` | string, positional, optional | unset | Accepted by the parser and reserved for the increment that replays the affected flows against a live app. The current version detects and reports only |
|
|
20
|
+
|
|
21
|
+
## What it watches
|
|
22
|
+
|
|
23
|
+
The working directory, recursively, filtered to `.ts`, `.tsx`, `.js`, `.jsx`, `.mjs`, `.cjs`, `.vue` and `.svelte`. Changes are batched with a 200ms debounce.
|
|
24
|
+
|
|
25
|
+
## What it prints
|
|
26
|
+
|
|
27
|
+
Real capture, the first two lines of a run in this repository:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{"t":"2026-08-15T18:44:08.930Z","event":"reticle_watch_started","cwd":"/Users/you/reticle"}
|
|
31
|
+
{"t":"2026-08-15T18:44:09.104Z","event":"reticle_buddy","status":"✓ 0/47 flows nominal · 9 flaky quarantined"}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
A save then produces a `reticle_watch_affected` line naming the changed files and the flows they put at risk, followed by a refreshed buddy line. Real capture, with both lists trimmed:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{"t":"2026-08-15T18:44:09.317Z","event":"reticle_watch_affected","changed":["packages/server/src/init/cursor.ts"],"affected":["WEB-flow","deploy-journey","verify-route"]}
|
|
38
|
+
{"t":"2026-08-15T18:44:09.355Z","event":"reticle_buddy","status":"✗ 39 deviations: ELECTRON-1LINE-flow, ELECTRON-COLD-flow +37 more · 0 nominal · 9 flaky quarantined"}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
| Event | When |
|
|
42
|
+
| --- | --- |
|
|
43
|
+
| `reticle_watch_started` | Once, at startup, with the directory being watched |
|
|
44
|
+
| `reticle_buddy` | Once at startup and after every batch. One ambient line, designed to be parked in a status line |
|
|
45
|
+
| `reticle_watch_affected` | After a batch, when at least one flow is affected. Carries `changed` and `affected` |
|
|
46
|
+
| `reticle_watch_failed` | A flow load error. Never fatal |
|
|
47
|
+
|
|
48
|
+
<Note>
|
|
49
|
+
The buddy line is deliberately best-effort and silent on failure. A status line that throws is
|
|
50
|
+
worse than no status line, and it must never interfere with the watch loop it rides on.
|
|
51
|
+
</Note>
|
|
52
|
+
|
|
53
|
+
## Exit codes
|
|
54
|
+
|
|
55
|
+
Runs until interrupted.
|
|
56
|
+
|
|
57
|
+
## Worked example
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npx @reticlehq/server watch &
|
|
61
|
+
# edit src/components/Login.tsx, and the affected flows are named on save
|
|
62
|
+
```
|
package/docs/cli.mdx
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: CLI reference
|
|
3
|
+
description: Every reticle command. What it does, what it prints, and what it exits with. Captured from real runs.
|
|
4
|
+
icon: terminal
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
The `reticle` CLI wires Reticle into a project (`init`), runs and diagnoses the daemon your app connects to (`serve`, `status`, `doctor`, `kill`, `restart`), and gates a build on verification in CI (`verify`, `affected`, `gate`). This page is the index; each command has its own page with real captured output and measured exit codes.
|
|
8
|
+
|
|
9
|
+
The CLI is mostly for you, not your agent. Your agent talks MCP; you use these to set things up, work out why nothing connected, and wire verification into CI.
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx @reticlehq/server <command>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
<Warning>
|
|
16
|
+
**Always invoke it as `npx @reticlehq/server <command>`.** The tables below name the commands as
|
|
17
|
+
`reticle <command>`, because `reticle` is the bin this package installs and that is what the CLI
|
|
18
|
+
prints about itself. It is **not** a package on npm: the bare name `reticle` belongs to an
|
|
19
|
+
unrelated author, so putting `npx` in front of it downloads and runs their code instead of ours.
|
|
20
|
+
Once
|
|
21
|
+
`@reticlehq/server` is a dependency of your project, `reticle <command>` works from an npm script
|
|
22
|
+
or with the bin on your PATH.
|
|
23
|
+
</Warning>
|
|
24
|
+
|
|
25
|
+
<Note>
|
|
26
|
+
Every output block on this page was captured by running the command. Where an exit code is quoted,
|
|
27
|
+
it was measured, not assumed. The CLI emits each structured line as one line of JSON; the blocks
|
|
28
|
+
below are pretty-printed so you can read them, and long lists are trimmed where the label says so.
|
|
29
|
+
</Note>
|
|
30
|
+
|
|
31
|
+
## Setup and diagnosis
|
|
32
|
+
|
|
33
|
+
### `reticle init`
|
|
34
|
+
|
|
35
|
+
Wires Reticle into the project in the current directory.
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
reticle init [--dry-run] [--port N] [--no-mcp] [--no-install] [--app <dir>]
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
<Card title="Full walkthrough with real output" icon="wand-magic-sparkles" href="/install-agentic">
|
|
42
|
+
What it writes, and how to read its four status marks.
|
|
43
|
+
</Card>
|
|
44
|
+
|
|
45
|
+
### `reticle doctor`
|
|
46
|
+
|
|
47
|
+
The first thing to run when something is wrong. One command, the whole setup.
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx @reticlehq/server doctor
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
reticle doctor
|
|
55
|
+
node v22.14.0
|
|
56
|
+
chromium ✓ installed (chromium-1234)
|
|
57
|
+
daemon ✓ running on :4400 (pid 72698, v2.8.0)
|
|
58
|
+
sessions ✓ 1 page connected
|
|
59
|
+
bridge port 4400 (your app must dial THIS port, not your dev-server port)
|
|
60
|
+
daemon log /Users/you/.reticle/daemon-4400.log
|
|
61
|
+
tracing RETICLE_TRACE=1 on the daemon for per-stage timings in that log
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Exits `0`. That parenthetical about the bridge port is doing a lot of work. Mixing it up with the dev-server port is the most common setup failure there is.
|
|
65
|
+
|
|
66
|
+
### `reticle status`
|
|
67
|
+
|
|
68
|
+
Whether the daemon is up and which apps have connected.
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"t": "2026-08-15T18:45:58.190Z",
|
|
73
|
+
"event": "reticle_status",
|
|
74
|
+
"port": 4400,
|
|
75
|
+
"running": true,
|
|
76
|
+
"pid": 72698,
|
|
77
|
+
"sessionCount": 1,
|
|
78
|
+
"sessions": [
|
|
79
|
+
{
|
|
80
|
+
"sessionId": "s223e0fad-e012-43f9-a23d-6d585470c90d",
|
|
81
|
+
"url": "http://localhost:4310/",
|
|
82
|
+
"throttled": false,
|
|
83
|
+
"stale": false,
|
|
84
|
+
"pendingMarks": 0
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Exits `0`. A session in the list is the install genuinely finished. Not a tick in a checklist, a connected app.
|
|
91
|
+
|
|
92
|
+
### `reticle telemetry [status|enable|disable]`
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npx @reticlehq/server telemetry status
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
telemetry disabled (this is a Reticle source checkout; developing it is not using it)
|
|
100
|
+
policy https://github.com/reticlehq/reticle/blob/main/docs/telemetry.md
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
<Card title="Exactly what is collected" icon="chart-line" href="/telemetry">
|
|
104
|
+
The complete list, and how to turn it off.
|
|
105
|
+
</Card>
|
|
106
|
+
|
|
107
|
+
## Running the app
|
|
108
|
+
|
|
109
|
+
| Command | What it does |
|
|
110
|
+
| --- | --- |
|
|
111
|
+
| `reticle serve` | Start the daemon and wait for it to bind. `--drive <url>`, `--headless`, `--headed`, `--http`, `--http-port N`, `--http-token T` |
|
|
112
|
+
| `reticle stop` | Stop the daemon we started, by its recorded pid. `--quiet` |
|
|
113
|
+
| `reticle kill` | Free the port by asking who is **listening** on it. `--force` |
|
|
114
|
+
| `reticle restart` | Kill, then start a daemon and wait for a real bind. `--force` |
|
|
115
|
+
| `reticle open [url]` | Show the app. Reuse the connected tab, or open one |
|
|
116
|
+
| `reticle drive <url>` | Foreground mode, for debugging |
|
|
117
|
+
| `reticle mcp` | The MCP stdio proxy. Auto-starts the daemon if needed. This is what your agent runs |
|
|
118
|
+
|
|
119
|
+
A bare `reticle` with no arguments is not help. It is `reticle serve`.
|
|
120
|
+
|
|
121
|
+
<Warning>
|
|
122
|
+
`reticle verify` binds the bridge port itself, so it fails if a daemon is already listening, which
|
|
123
|
+
is the normal state once your agent has started one. Stop the daemon first, or point it elsewhere
|
|
124
|
+
with `RETICLE_PORT`. `reticle mcp` reuses a running daemon, and `reticle drive` attaches to one
|
|
125
|
+
(see [drive](/cli/drive)) rather than competing for the port.
|
|
126
|
+
</Warning>
|
|
127
|
+
|
|
128
|
+
## Verification
|
|
129
|
+
|
|
130
|
+
### `reticle verify <url>`
|
|
131
|
+
|
|
132
|
+
One-shot: drive the URL, replay the saved flows, exit `0` on pass. This is the command for CI when you do not want a model in the loop.
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
npx @reticlehq/server verify http://localhost:5173 --timeout 60000
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Options: `--headed`, `--timeout N`, `--storage-state <file>`. That last one is how you verify flows behind a login without scripting the login every time.
|
|
139
|
+
|
|
140
|
+
### `reticle affected`
|
|
141
|
+
|
|
142
|
+
Which saved flows must re-verify for a set of changed files.
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
npx @reticlehq/server affected --since HEAD~1
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"t": "2026-08-15T18:42:57.431Z",
|
|
151
|
+
"event": "reticle_affected",
|
|
152
|
+
"changedFiles": ["SKILL.md", "docs/cli/doctor.mdx", "packages/server/src/init/agent-rules.ts"],
|
|
153
|
+
"affected": ["WEB-flow", "deploy-journey", "verify-modal", "verify-route"],
|
|
154
|
+
"unknownProvenance": ["WEB-flow", "deploy-journey", "verify-modal", "verify-route"]
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Both lists are trimmed here; the real run named 47 flows.
|
|
159
|
+
|
|
160
|
+
<Note>
|
|
161
|
+
`unknownProvenance` lists flows Reticle could not map to source files, so it includes them to be
|
|
162
|
+
safe. A flow recorded before provenance tracking existed has no file list, and Reticle would
|
|
163
|
+
rather re-run it than skip it and miss a regression. A large `unknownProvenance` means your flows
|
|
164
|
+
predate the feature. Re-record the ones you care about to get precise selection.
|
|
165
|
+
</Note>
|
|
166
|
+
|
|
167
|
+
### `reticle gate`
|
|
168
|
+
|
|
169
|
+
The CI gate. Exits non-zero unless passing artifacts cover the affected flows.
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
npx @reticlehq/server gate --since HEAD~1
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```json
|
|
176
|
+
{
|
|
177
|
+
"t": "2026-08-15T18:42:58.434Z",
|
|
178
|
+
"event": "reticle_gate",
|
|
179
|
+
"pass": false,
|
|
180
|
+
"uncovered": ["WEB-flow", "deploy-journey", "verify-modal", "verify-route"],
|
|
181
|
+
"quarantined": ["asserted-demo", "blast-radius-compose", "drift-demo", "qa2-flow"],
|
|
182
|
+
"coverage": { "pct": 0, "covered": 0, "total": 47 }
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Measured exit code: **`1`**, with the flow lists trimmed above. That run genuinely failed, with 0 of 47 flows covered, which is what a gate is supposed to do when you have not verified anything yet.
|
|
187
|
+
|
|
188
|
+
`quarantined` flows are excluded from the pass/fail decision. Quarantine is for a flow that is known flaky and being fixed; it is not a place to hide failures, because the list is printed on every run.
|
|
189
|
+
|
|
190
|
+
### `reticle watch [url]`
|
|
191
|
+
|
|
192
|
+
On save, report which saved flows must re-verify. The interactive companion to `affected`. Long-running; stop it with `Ctrl+C`.
|
|
193
|
+
|
|
194
|
+
### `reticle capsules`
|
|
195
|
+
|
|
196
|
+
List the saved fail-to-pass bug capsules in `.reticle/capsules`. No flags. See [capsules](/cli/capsules).
|
|
197
|
+
|
|
198
|
+
### `reticle hunt <dir>`
|
|
199
|
+
|
|
200
|
+
Aggregate a directory of crawl reports into one false-green rate. See [hunt](/cli/hunt).
|
|
201
|
+
|
|
202
|
+
## Maintenance
|
|
203
|
+
|
|
204
|
+
| Command | What it does |
|
|
205
|
+
| ------------------ | --------------------------------------------------- |
|
|
206
|
+
| `reticle update` | Install the latest server version and restart |
|
|
207
|
+
| `reticle rollback` | Restore the previous version and restart |
|
|
208
|
+
| `reticle license` | Enterprise license status: active, eval, or missing |
|
|
209
|
+
| `reticle version` | Print the version |
|
|
210
|
+
| `reticle help` | Usage for everything |
|
|
211
|
+
|
|
212
|
+
<Tip>
|
|
213
|
+
`rollback` exists because an auto-updating dev tool that cannot go back is a dev tool that can
|
|
214
|
+
ruin your afternoon. It restores the previous version and restarts in one step.
|
|
215
|
+
</Tip>
|
|
216
|
+
|
|
217
|
+
## Feedback
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
# humans
|
|
221
|
+
npx @reticlehq/server feedback "what worked, what didn't"
|
|
222
|
+
|
|
223
|
+
# agents, including from a setup that never finished
|
|
224
|
+
npx @reticlehq/server feedback --agent --kind <bug|gap|ambiguity|feature_request|improvement> "what happened"
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
The `--agent` form matters more than it looks: the setup that failed halfway is exactly the setup worth hearing about, and in that state the MCP tools do not exist yet.
|
|
228
|
+
|
|
229
|
+
<Card title="How feedback is handled" icon="comments" href="/tools-session-and-feedback">
|
|
230
|
+
What each kind means, and what happens when a report cannot be delivered.
|
|
231
|
+
</Card>
|
|
232
|
+
|
|
233
|
+
## `reticle identify`
|
|
234
|
+
|
|
235
|
+
Opt-in, and off by default:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
npx @reticlehq/server identify --context company|side_project|open_source|learning [--company N] [--email E] [--forget]
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Only useful if you want support or an enterprise trial. `--forget` removes it.
|