@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.
Files changed (357) hide show
  1. package/README.md +14 -5
  2. package/SKILL.md +130 -778
  3. package/dist/bridge/bridge.d.ts +23 -0
  4. package/dist/bridge/bridge.js +80 -2
  5. package/dist/bridge/bridge.test-harness.d.ts +5 -0
  6. package/dist/bridge/bridge.test-harness.js +6 -4
  7. package/dist/capsule/causal-summary.d.ts +36 -1
  8. package/dist/capsule/causal-summary.js +33 -7
  9. package/dist/capsule/divergence.js +7 -1
  10. package/dist/cli/chromium-hint.d.ts +33 -5
  11. package/dist/cli/chromium-hint.js +82 -12
  12. package/dist/cli/cli-doctor.js +65 -34
  13. package/dist/cli/cli-flow-commands.js +8 -8
  14. package/dist/cli/cli-kill.d.ts +58 -0
  15. package/dist/cli/cli-kill.js +162 -0
  16. package/dist/cli/cli-parse.d.ts +16 -1
  17. package/dist/cli/cli-parse.js +32 -9
  18. package/dist/cli/cli-port.d.ts +32 -0
  19. package/dist/cli/cli-port.js +82 -35
  20. package/dist/cli/cli-verify.d.ts +21 -0
  21. package/dist/cli/cli-verify.js +47 -3
  22. package/dist/cli/config-discovery.d.ts +35 -0
  23. package/dist/cli/config-discovery.js +163 -0
  24. package/dist/cli/doctor-daemon-line.js +4 -1
  25. package/dist/cli/doctor-project-line.d.ts +37 -0
  26. package/dist/cli/doctor-project-line.js +35 -0
  27. package/dist/cli/doctor-rows.d.ts +51 -0
  28. package/dist/cli/doctor-rows.js +54 -0
  29. package/dist/cli/doctor-sessions-line.d.ts +12 -0
  30. package/dist/cli/doctor-sessions-line.js +69 -0
  31. package/dist/cli/drive-attach.d.ts +99 -0
  32. package/dist/cli/drive-attach.js +203 -0
  33. package/dist/cli/drive-command.d.ts +13 -0
  34. package/dist/cli/drive-command.js +103 -0
  35. package/dist/cli/open-note.d.ts +20 -0
  36. package/dist/cli/open-note.js +37 -0
  37. package/dist/cli/port-holder.d.ts +10 -0
  38. package/dist/cli/port-holder.js +26 -2
  39. package/dist/cli/status-next-action.d.ts +37 -0
  40. package/dist/cli/status-next-action.js +61 -0
  41. package/dist/cli.js +119 -39
  42. package/dist/crawl/crawl-tools.js +12 -2
  43. package/dist/crawl/crawl.d.ts +13 -0
  44. package/dist/crawl/crawl.js +50 -2
  45. package/dist/events/contradictions.d.ts +46 -0
  46. package/dist/events/contradictions.js +35 -22
  47. package/dist/events/declared.d.ts +45 -0
  48. package/dist/events/declared.js +73 -0
  49. package/dist/events/echo-mismatch.d.ts +8 -2
  50. package/dist/events/echo-mismatch.js +33 -5
  51. package/dist/events/event-filters.d.ts +1 -1
  52. package/dist/events/event-filters.js +7 -4
  53. package/dist/events/predicate-eval.d.ts +17 -72
  54. package/dist/events/predicate-eval.js +117 -236
  55. package/dist/events/predicate-parse.js +31 -3
  56. package/dist/events/predicate-route.d.ts +32 -0
  57. package/dist/events/predicate-route.js +102 -0
  58. package/dist/events/predicate-schema.d.ts +99 -0
  59. package/dist/events/predicate-schema.js +309 -0
  60. package/dist/events/predicate.d.ts +8 -0
  61. package/dist/events/predicate.js +296 -22
  62. package/dist/flows/annotate-tools.js +3 -0
  63. package/dist/flows/annotate.js +18 -4
  64. package/dist/flows/coverage.d.ts +38 -5
  65. package/dist/flows/coverage.js +30 -4
  66. package/dist/flows/decision.d.ts +15 -0
  67. package/dist/flows/decision.js +1 -1
  68. package/dist/flows/flow-classify.js +1 -1
  69. package/dist/flows/flow-replay-run.js +8 -1
  70. package/dist/flows/flow-tools.js +21 -5
  71. package/dist/flows/heal-run.js +1 -1
  72. package/dist/flows/replay.js +3 -0
  73. package/dist/honesty/accepted-write.d.ts +3 -0
  74. package/dist/honesty/accepted-write.js +8 -3
  75. package/dist/honesty/already-true.js +15 -0
  76. package/dist/honesty/blind-spots.js +10 -2
  77. package/dist/honesty/honesty.d.ts +11 -0
  78. package/dist/honesty/honesty.js +1 -0
  79. package/dist/honesty/uncaptured-bodies.d.ts +4 -2
  80. package/dist/honesty/uncaptured-bodies.js +9 -2
  81. package/dist/honesty/unread-outcome.d.ts +8 -0
  82. package/dist/honesty/unread-outcome.js +36 -9
  83. package/dist/honesty/unsettled.d.ts +49 -0
  84. package/dist/honesty/unsettled.js +82 -0
  85. package/dist/honesty/verified.d.ts +36 -3
  86. package/dist/honesty/verified.js +54 -11
  87. package/dist/http-server.d.ts +19 -0
  88. package/dist/http-server.js +202 -4
  89. package/dist/impact/impact-recorder.d.ts +23 -0
  90. package/dist/impact/impact-recorder.js +76 -0
  91. package/dist/impact/impact-store.d.ts +47 -0
  92. package/dist/impact/impact-store.js +171 -0
  93. package/dist/index.d.ts +7 -0
  94. package/dist/index.js +47 -10
  95. package/dist/init/agent-rules.d.ts +36 -0
  96. package/dist/init/agent-rules.js +132 -22
  97. package/dist/init/astro-patch.d.ts +2 -1
  98. package/dist/init/astro-patch.js +38 -6
  99. package/dist/init/capabilities.d.ts +22 -0
  100. package/dist/init/capabilities.js +76 -0
  101. package/dist/init/confirm.d.ts +114 -0
  102. package/dist/init/confirm.js +165 -0
  103. package/dist/init/connect-steps.d.ts +2 -0
  104. package/dist/init/connect-steps.js +50 -0
  105. package/dist/init/cra.js +3 -2
  106. package/dist/init/csp-check.d.ts +38 -0
  107. package/dist/init/csp-check.js +92 -0
  108. package/dist/init/csp-doctor.d.ts +25 -0
  109. package/dist/init/csp-doctor.js +49 -0
  110. package/dist/init/cursor.js +6 -9
  111. package/dist/init/detect.d.ts +8 -0
  112. package/dist/init/detect.js +33 -3
  113. package/dist/init/mcp-clients.d.ts +1 -0
  114. package/dist/init/mcp-clients.js +51 -7
  115. package/dist/init/mcp.d.ts +15 -0
  116. package/dist/init/mcp.js +19 -0
  117. package/dist/init/non-js-project.js +29 -5
  118. package/dist/init/plan-framework.d.ts +10 -0
  119. package/dist/init/plan-framework.js +78 -16
  120. package/dist/init/plan.d.ts +47 -6
  121. package/dist/init/plan.js +228 -69
  122. package/dist/init/run.d.ts +24 -2
  123. package/dist/init/run.js +157 -45
  124. package/dist/init/slash-command.d.ts +1 -1
  125. package/dist/init/slash-command.js +54 -6
  126. package/dist/init/snippets.d.ts +45 -5
  127. package/dist/init/snippets.js +194 -42
  128. package/dist/init/vite-config.js +53 -5
  129. package/dist/input/network-mock-tools.d.ts +19 -0
  130. package/dist/input/network-mock-tools.js +37 -5
  131. package/dist/input/scroll-find.d.ts +6 -0
  132. package/dist/input/scroll-find.js +17 -2
  133. package/dist/input/scroll-tools.js +4 -0
  134. package/dist/journal/attach-journal.d.ts +9 -1
  135. package/dist/journal/attach-journal.js +13 -2
  136. package/dist/journal/journal-query.d.ts +13 -0
  137. package/dist/journal/journal-query.js +28 -3
  138. package/dist/journal/workspace-gitignore.d.ts +10 -0
  139. package/dist/journal/workspace-gitignore.js +59 -0
  140. package/dist/license/license.js +1 -1
  141. package/dist/mcp/mcp-proxy.d.ts +35 -30
  142. package/dist/mcp/mcp-proxy.js +306 -104
  143. package/dist/mcp/mcp.d.ts +10 -1
  144. package/dist/mcp/mcp.js +70 -34
  145. package/dist/mcp/proxy-handshake.d.ts +82 -1
  146. package/dist/mcp/proxy-handshake.js +109 -2
  147. package/dist/mcp/proxy-lifecycle.d.ts +11 -2
  148. package/dist/mcp/proxy-lifecycle.js +12 -3
  149. package/dist/mcp/proxy-log.d.ts +63 -0
  150. package/dist/mcp/proxy-log.js +132 -0
  151. package/dist/mcp/server-instructions.d.ts +17 -0
  152. package/dist/mcp/server-instructions.js +56 -0
  153. package/dist/mcp/shared-params.d.ts +27 -0
  154. package/dist/mcp/shared-params.js +36 -0
  155. package/dist/pool/browser-pool.d.ts +22 -2
  156. package/dist/pool/browser-pool.js +44 -4
  157. package/dist/project/learned-routes.d.ts +24 -0
  158. package/dist/project/learned-routes.js +63 -0
  159. package/dist/project/project-store.d.ts +6 -0
  160. package/dist/project/project-store.js +25 -1
  161. package/dist/project/reticle-dir.d.ts +2 -0
  162. package/dist/project/reticle-dir.js +1 -0
  163. package/dist/session/connection-memory.d.ts +59 -0
  164. package/dist/session/connection-memory.js +108 -0
  165. package/dist/session/dev-command.d.ts +26 -0
  166. package/dist/session/dev-command.js +89 -0
  167. package/dist/session/dev-server-probe.d.ts +68 -0
  168. package/dist/session/dev-server-probe.js +102 -7
  169. package/dist/session/last-act.d.ts +26 -0
  170. package/dist/session/last-act.js +35 -1
  171. package/dist/session/live-control-tools.js +42 -5
  172. package/dist/session/no-session-diagnosis.d.ts +67 -2
  173. package/dist/session/no-session-diagnosis.js +236 -27
  174. package/dist/session/no-session-next-action.d.ts +46 -0
  175. package/dist/session/no-session-next-action.js +85 -0
  176. package/dist/session/no-session-watch.d.ts +40 -1
  177. package/dist/session/no-session-watch.js +174 -8
  178. package/dist/session/pending-commands.d.ts +12 -0
  179. package/dist/session/pending-commands.js +13 -1
  180. package/dist/session/ref-provenance.d.ts +54 -0
  181. package/dist/session/ref-provenance.js +61 -0
  182. package/dist/session/session-lease.js +1 -1
  183. package/dist/session/session-manager.d.ts +4 -0
  184. package/dist/session/session-manager.js +35 -5
  185. package/dist/session/session.d.ts +10 -1
  186. package/dist/session/session.js +146 -5
  187. package/dist/telemetry/app-instrumented.d.ts +8 -0
  188. package/dist/telemetry/app-instrumented.js +10 -0
  189. package/dist/telemetry/automation-hint.d.ts +17 -0
  190. package/dist/telemetry/automation-hint.js +71 -0
  191. package/dist/telemetry/bug-found.d.ts +15 -17
  192. package/dist/telemetry/bug-found.js +52 -21
  193. package/dist/telemetry/cli-telemetry.js +7 -1
  194. package/dist/telemetry/daemon-telemetry.js +24 -0
  195. package/dist/telemetry/feedback.js +1 -1
  196. package/dist/telemetry/init-telemetry.js +9 -1
  197. package/dist/telemetry/install-source.d.ts +56 -0
  198. package/dist/telemetry/install-source.js +74 -0
  199. package/dist/telemetry/instrumentation-stall.d.ts +50 -0
  200. package/dist/telemetry/instrumentation-stall.js +90 -0
  201. package/dist/telemetry/run-telemetry.js +4 -1
  202. package/dist/telemetry/session-metrics.d.ts +8 -0
  203. package/dist/telemetry/session-metrics.js +15 -0
  204. package/dist/telemetry/telemetry.d.ts +7 -1
  205. package/dist/telemetry/telemetry.js +26 -2
  206. package/dist/telemetry/tool-refused.d.ts +19 -0
  207. package/dist/telemetry/tool-refused.js +55 -0
  208. package/dist/telemetry/verification-of.js +46 -7
  209. package/dist/temp-dir.d.ts +27 -0
  210. package/dist/temp-dir.js +46 -0
  211. package/dist/tools/act-tools.js +209 -28
  212. package/dist/tools/assert-grade.d.ts +1 -1
  213. package/dist/tools/assert-grade.js +27 -5
  214. package/dist/tools/assert-verdict.js +49 -7
  215. package/dist/tools/browser-tools.js +10 -0
  216. package/dist/tools/contract-tools.js +4 -0
  217. package/dist/tools/dynamic-tools.js +16 -7
  218. package/dist/tools/error-recovery.d.ts +10 -0
  219. package/dist/tools/error-recovery.js +73 -9
  220. package/dist/tools/feedback-invite.js +1 -1
  221. package/dist/tools/invoke-tool.js +159 -26
  222. package/dist/tools/lease-hint.d.ts +30 -8
  223. package/dist/tools/lease-hint.js +65 -14
  224. package/dist/tools/lease-tools.d.ts +40 -1
  225. package/dist/tools/lease-tools.js +181 -83
  226. package/dist/tools/navigate-result.js +1 -1
  227. package/dist/tools/observe-tools.js +10 -4
  228. package/dist/tools/observed-nothing.js +1 -1
  229. package/dist/tools/react-grace.d.ts +52 -0
  230. package/dist/tools/react-grace.js +90 -0
  231. package/dist/tools/read-tools.js +67 -5
  232. package/dist/tools/resolve-target.d.ts +33 -0
  233. package/dist/tools/resolve-target.js +53 -0
  234. package/dist/tools/settle-in-flight.d.ts +94 -0
  235. package/dist/tools/settle-in-flight.js +146 -0
  236. package/dist/tools/snapshot-delta.d.ts +10 -0
  237. package/dist/tools/snapshot-delta.js +194 -9
  238. package/dist/tools/tool-kit.d.ts +8 -0
  239. package/dist/tools/tool-surface.d.ts +60 -0
  240. package/dist/tools/tool-surface.js +86 -1
  241. package/dist/tools/tools.js +61 -8
  242. package/dist/tools/unadvertised-help.js +9 -6
  243. package/docs/README.md +55 -11
  244. package/docs/actions.mdx +120 -0
  245. package/docs/agent-cheatsheet.md +95 -29
  246. package/docs/architecture.md +52 -35
  247. package/docs/benchmarks.md +127 -75
  248. package/docs/best-practices.mdx +216 -0
  249. package/docs/capabilities.mdx +534 -0
  250. package/docs/cli/affected.mdx +53 -0
  251. package/docs/cli/capsules.mdx +70 -0
  252. package/docs/cli/cloud.mdx +153 -0
  253. package/docs/cli/doctor.mdx +109 -0
  254. package/docs/cli/drive.mdx +74 -0
  255. package/docs/cli/feedback.mdx +67 -0
  256. package/docs/cli/gate.mdx +64 -0
  257. package/docs/cli/help.mdx +94 -0
  258. package/docs/cli/hunt.mdx +73 -0
  259. package/docs/cli/identify.mdx +76 -0
  260. package/docs/cli/init.mdx +121 -0
  261. package/docs/cli/kill.mdx +91 -0
  262. package/docs/cli/license.mdx +48 -0
  263. package/docs/cli/mcp.mdx +61 -0
  264. package/docs/cli/open.mdx +74 -0
  265. package/docs/cli/restart.mdx +60 -0
  266. package/docs/cli/rollback.mdx +35 -0
  267. package/docs/cli/serve.mdx +69 -0
  268. package/docs/cli/status.mdx +88 -0
  269. package/docs/cli/stop.mdx +64 -0
  270. package/docs/cli/telemetry.mdx +57 -0
  271. package/docs/cli/update.mdx +52 -0
  272. package/docs/cli/verify.mdx +76 -0
  273. package/docs/cli/version.mdx +39 -0
  274. package/docs/cli/watch.mdx +62 -0
  275. package/docs/cli.mdx +241 -0
  276. package/docs/debugging.md +16 -10
  277. package/docs/deploy-checks.md +45 -12
  278. package/docs/desktop.mdx +384 -0
  279. package/docs/docs.json +364 -0
  280. package/docs/enterprise.md +22 -16
  281. package/docs/faq.mdx +102 -0
  282. package/docs/fixtures.md +13 -7
  283. package/docs/flows.md +29 -23
  284. package/docs/for-agents.md +71 -0
  285. package/docs/frameworks.mdx +238 -0
  286. package/docs/gate-plan.md +48 -42
  287. package/docs/gates.md +28 -22
  288. package/docs/getting-started.md +129 -77
  289. package/docs/human-control.md +24 -18
  290. package/docs/index.mdx +143 -0
  291. package/docs/install-agentic.mdx +224 -0
  292. package/docs/install-manual.mdx +196 -0
  293. package/docs/instrumentation.mdx +238 -0
  294. package/docs/integration-patterns.md +41 -35
  295. package/docs/local-registry.md +19 -13
  296. package/docs/multi-agent-testing.md +19 -13
  297. package/docs/packages/babel-plugin.mdx +79 -0
  298. package/docs/packages/browser.mdx +111 -0
  299. package/docs/packages/core.mdx +116 -0
  300. package/docs/packages/electron.mdx +85 -0
  301. package/docs/packages/eslint-plugin.mdx +86 -0
  302. package/docs/packages/next.mdx +89 -0
  303. package/docs/packages/react.mdx +91 -0
  304. package/docs/packages/server.mdx +98 -0
  305. package/docs/packages/tauri.mdx +63 -0
  306. package/docs/packages/test.mdx +119 -0
  307. package/docs/packages/vite-plugin.mdx +94 -0
  308. package/docs/packages.mdx +218 -0
  309. package/docs/platform-integration.md +35 -26
  310. package/docs/predicates.mdx +248 -0
  311. package/docs/quickstart.mdx +257 -0
  312. package/docs/recipes.mdx +282 -0
  313. package/docs/skill-file.mdx +107 -0
  314. package/docs/state-management.mdx +199 -0
  315. package/docs/style.css +14 -0
  316. package/docs/system-map.md +50 -33
  317. package/docs/telemetry-contract.md +106 -52
  318. package/docs/telemetry-events.mdx +475 -0
  319. package/docs/telemetry.md +63 -55
  320. package/docs/testing.md +44 -6
  321. package/docs/token-efficiency.md +37 -27
  322. package/docs/tools-act-and-wait.mdx +173 -0
  323. package/docs/tools-act-sequence.mdx +137 -0
  324. package/docs/tools-act.mdx +95 -0
  325. package/docs/tools-assert.mdx +129 -0
  326. package/docs/tools-console.mdx +63 -0
  327. package/docs/tools-inspect.mdx +88 -0
  328. package/docs/tools-navigate.mdx +99 -0
  329. package/docs/tools-network.mdx +119 -0
  330. package/docs/tools-observe.mdx +145 -0
  331. package/docs/tools-overview.mdx +160 -0
  332. package/docs/tools-query.mdx +126 -0
  333. package/docs/tools-session-and-feedback.mdx +112 -0
  334. package/docs/tools-sessions.mdx +94 -0
  335. package/docs/tools-snapshot.mdx +129 -0
  336. package/docs/tools-state.mdx +104 -0
  337. package/docs/tools-tools-and-run.mdx +156 -0
  338. package/docs/tools-wait-for.mdx +85 -0
  339. package/docs/troubleshooting.mdx +263 -0
  340. package/docs/usage.md +209 -165
  341. package/docs/vs-chrome-devtools-mcp.mdx +123 -0
  342. package/docs/vs-playwright-mcp.mdx +125 -0
  343. package/docs/vs-screenshots.mdx +137 -0
  344. package/docs/what-is-reticle.mdx +63 -0
  345. package/docs/why-reticle.mdx +109 -0
  346. package/package.json +5 -5
  347. package/docs/desktop-apps.md +0 -256
  348. package/docs/matrix/2.5.0/claude-code-machine.json +0 -19
  349. package/docs/matrix/2.5.0/codex-machine.json +0 -20
  350. package/docs/matrix/2.5.0/cursor-machine.json +0 -22
  351. package/docs/matrix/2.5.0/gemini-machine.json +0 -22
  352. package/docs/matrix/2.5.0/opencode-machine.json +0 -22
  353. package/docs/matrix/2.5.0/vscode-machine.json +0 -22
  354. package/docs/matrix/2.5.0/windsurf-machine.json +0 -22
  355. package/docs/matrix/MATRIX.md +0 -26
  356. package/docs/matrix/README.md +0 -59
  357. 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.