@reticlehq/server 3.5.0 → 3.7.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 (721) hide show
  1. package/README.md +1 -1
  2. package/SKILL.md +123 -116
  3. package/dist/chromium-launch-options.d.ts +3 -1
  4. package/dist/chromium-launch-options.js +2 -1
  5. package/dist/command/cli/adhoc-suite.d.ts +14 -0
  6. package/dist/command/cli/adhoc-suite.js +42 -7
  7. package/dist/command/cli/adhoc-verdict.d.ts +19 -2
  8. package/dist/command/cli/adhoc-verdict.js +76 -9
  9. package/dist/command/cli/answers/gate-exit.d.ts +23 -0
  10. package/dist/command/cli/answers/gate-exit.js +45 -0
  11. package/dist/command/cli/answers/gate-hook-message.d.ts +2 -0
  12. package/dist/command/cli/answers/gate-hook-message.js +3 -1
  13. package/dist/command/cli/answers/open-note.d.ts +2 -0
  14. package/dist/command/cli/answers/open-note.js +22 -0
  15. package/dist/command/cli/auth/device-flow.d.ts +13 -2
  16. package/dist/command/cli/auth/device-flow.js +17 -0
  17. package/dist/command/cli/cli-doctor.js +14 -0
  18. package/dist/command/cli/cli-flow-commands.d.ts +0 -11
  19. package/dist/command/cli/cli-flow-commands.js +31 -112
  20. package/dist/command/cli/cli-kill.js +3 -2
  21. package/dist/command/cli/cli-parse-grammar.d.ts +24 -0
  22. package/dist/command/cli/cli-parse-grammar.js +75 -0
  23. package/dist/command/cli/cli-parse-verify.d.ts +2 -0
  24. package/dist/command/cli/cli-parse-verify.js +18 -0
  25. package/dist/command/cli/cli-parse.d.ts +19 -28
  26. package/dist/command/cli/cli-parse.js +82 -182
  27. package/dist/command/cli/cli-update-commands.d.ts +1 -1
  28. package/dist/command/cli/cli-update-commands.js +61 -9
  29. package/dist/command/cli/cli-usage.d.ts +33 -0
  30. package/dist/command/cli/cli-usage.js +287 -0
  31. package/dist/command/cli/cli-verify.d.ts +35 -5
  32. package/dist/command/cli/cli-verify.js +114 -35
  33. package/dist/command/cli/cloud-cli.d.ts +13 -0
  34. package/dist/command/cli/cloud-cli.js +192 -341
  35. package/dist/command/cli/cloud-kit.d.ts +12 -0
  36. package/dist/command/cli/cloud-kit.js +41 -2
  37. package/dist/command/cli/cloud-link.d.ts +57 -0
  38. package/dist/command/cli/cloud-link.js +308 -0
  39. package/dist/command/cli/cloud-login.d.ts +22 -0
  40. package/dist/command/cli/cloud-login.js +96 -8
  41. package/dist/command/cli/context-command.d.ts +1 -0
  42. package/dist/command/cli/context-command.js +33 -0
  43. package/dist/command/cli/daemon-start-options.d.ts +3 -0
  44. package/dist/command/cli/daemon-start-options.js +24 -3
  45. package/dist/command/cli/doctor/browser/chromium-hint.d.ts +46 -0
  46. package/dist/command/cli/doctor/browser/chromium-hint.js +99 -1
  47. package/dist/command/cli/doctor/doctor-coverage-line.d.ts +2 -0
  48. package/dist/command/cli/doctor/doctor-coverage-line.js +47 -0
  49. package/dist/command/cli/doctor/doctor-project-line.d.ts +0 -12
  50. package/dist/command/cli/doctor/doctor-project-line.js +5 -4
  51. package/dist/command/cli/doctor/doctor-rows.d.ts +6 -0
  52. package/dist/command/cli/doctor/doctor-rows.js +6 -0
  53. package/dist/command/cli/doctor/doctor-signing-line.d.ts +38 -0
  54. package/dist/command/cli/doctor/doctor-signing-line.js +114 -0
  55. package/dist/command/cli/drive/drive-attach.d.ts +27 -2
  56. package/dist/command/cli/drive/drive-attach.js +71 -4
  57. package/dist/command/cli/drive/drive-command.d.ts +2 -1
  58. package/dist/command/cli/drive/drive-command.js +13 -7
  59. package/dist/command/cli/known-regression.d.ts +13 -0
  60. package/dist/command/cli/known-regression.js +34 -0
  61. package/dist/command/cli/launch/sdk-version-match.d.ts +12 -0
  62. package/dist/command/cli/launch/sdk-version-match.js +25 -0
  63. package/dist/command/cli/lifecycle/daemon-lifecycle.js +15 -3
  64. package/dist/command/cli/mcp-command.d.ts +6 -0
  65. package/dist/command/cli/mcp-command.js +13 -5
  66. package/dist/command/cli/ports/port-holder.d.ts +10 -0
  67. package/dist/command/cli/ports/port-holder.js +25 -1
  68. package/dist/command/cli/project-name.d.ts +29 -1
  69. package/dist/command/cli/project-name.js +107 -2
  70. package/dist/command/cli/setup-mcp-cli.d.ts +17 -1
  71. package/dist/command/cli/setup-mcp-cli.js +35 -12
  72. package/dist/command/cli/status/status-lines.d.ts +1 -0
  73. package/dist/command/cli/status/status-lines.js +47 -2
  74. package/dist/command/cli/status/workspace-links.d.ts +10 -0
  75. package/dist/command/cli/status/workspace-links.js +29 -0
  76. package/dist/command/cli/try-command.d.ts +96 -0
  77. package/dist/command/cli/try-command.js +362 -0
  78. package/dist/command/cli/tutorial.d.ts +0 -100
  79. package/dist/command/cli/tutorial.js +0 -181
  80. package/dist/command/cli/verify-results.d.ts +19 -0
  81. package/dist/command/cli/verify-results.js +29 -0
  82. package/dist/command/cli-onboarding.d.ts +0 -11
  83. package/dist/command/cli-onboarding.js +0 -15
  84. package/dist/command/cli.d.ts +20 -0
  85. package/dist/command/cli.js +130 -104
  86. package/dist/command/daemon/binding/daemon-status-probe.d.ts +2 -0
  87. package/dist/command/daemon/binding/daemon-status-probe.js +1 -0
  88. package/dist/command/daemon/daemon-resilience.js +4 -4
  89. package/dist/command/daemon/daemon-resolve.d.ts +23 -1
  90. package/dist/command/daemon/daemon-resolve.js +79 -9
  91. package/dist/command/setup/agent-writer.d.ts +1 -1
  92. package/dist/command/setup/agent-writer.js +3 -2
  93. package/dist/command/setup/bringup/bridge-port.d.ts +3 -1
  94. package/dist/command/setup/bringup/bridge-port.js +13 -3
  95. package/dist/command/setup/bringup/connect-lease.d.ts +1 -0
  96. package/dist/command/setup/bringup/connect-lease.js +1 -0
  97. package/dist/command/setup/bringup/dev-server-log-cap.js +2 -0
  98. package/dist/command/setup/bringup/dev-server-wait.d.ts +8 -0
  99. package/dist/command/setup/bringup/dev-server-wait.js +19 -0
  100. package/dist/command/setup/bringup/ensure-daemon.js +9 -2
  101. package/dist/command/setup/init/agent-restart.d.ts +23 -0
  102. package/dist/command/setup/init/agent-restart.js +28 -0
  103. package/dist/command/setup/init/init-port.d.ts +14 -1
  104. package/dist/command/setup/init/init-port.js +32 -2
  105. package/dist/command/setup/init/init-runtime.d.ts +22 -2
  106. package/dist/command/setup/init/init-runtime.js +114 -38
  107. package/dist/command/setup/node-effects.d.ts +2 -0
  108. package/dist/command/setup/node-effects.js +38 -9
  109. package/dist/command/setup/probe/existing-app.d.ts +12 -0
  110. package/dist/command/setup/probe/existing-app.js +14 -0
  111. package/dist/command/setup/remaining-steps.js +2 -1
  112. package/dist/command/setup/run-setup.d.ts +34 -9
  113. package/dist/command/setup/run-setup.js +65 -51
  114. package/dist/command/setup/setup-command.d.ts +25 -1
  115. package/dist/command/setup/setup-command.js +59 -4
  116. package/dist/command/setup/setup-mcp.js +25 -2
  117. package/dist/command/setup/tauri-signing.d.ts +19 -0
  118. package/dist/command/setup/tauri-signing.js +79 -0
  119. package/dist/command/setup/terminal/listeners.d.ts +10 -1
  120. package/dist/command/setup/terminal/listeners.js +37 -6
  121. package/dist/command/update/update-nudge.d.ts +9 -0
  122. package/dist/command/update/update-nudge.js +1 -1
  123. package/dist/command/update/updater.js +11 -15
  124. package/dist/command/version/version-nudge.js +3 -0
  125. package/dist/command/version/version-skew.d.ts +20 -1
  126. package/dist/command/version/version-skew.js +49 -4
  127. package/dist/features/crawl/crawl-tools.js +4 -0
  128. package/dist/features/crawl/crawl.d.ts +6 -0
  129. package/dist/features/crawl/crawl.js +23 -2
  130. package/dist/features/exhaust/ledger.d.ts +21 -14
  131. package/dist/features/exhaust/ledger.js +35 -9
  132. package/dist/features/harness/app-findings.d.ts +2 -0
  133. package/dist/features/harness/app-findings.js +52 -0
  134. package/dist/features/harness/drive-report.d.ts +61 -1
  135. package/dist/features/harness/drive-report.js +394 -26
  136. package/dist/features/harness/drive-runs.d.ts +120 -0
  137. package/dist/features/harness/drive-runs.js +289 -0
  138. package/dist/features/harness/drivers.d.ts +10 -14
  139. package/dist/features/harness/drivers.js +10 -14
  140. package/dist/features/harness/explore/console-pages.d.ts +15 -0
  141. package/dist/features/harness/explore/console-pages.js +146 -0
  142. package/dist/features/harness/explore/disparity.d.ts +19 -0
  143. package/dist/features/harness/explore/disparity.js +71 -0
  144. package/dist/features/harness/explore/fake-app.d.ts +16 -0
  145. package/dist/features/harness/explore/fake-app.js +49 -0
  146. package/dist/features/harness/explore/goal-search.d.ts +26 -0
  147. package/dist/features/harness/explore/goal-search.js +144 -0
  148. package/dist/features/harness/explore/page-tree.d.ts +49 -0
  149. package/dist/features/harness/explore/page-tree.js +148 -0
  150. package/dist/features/harness/explore/site-map.d.ts +34 -0
  151. package/dist/features/harness/explore/site-map.js +150 -0
  152. package/dist/features/harness/fill-values.d.ts +3 -73
  153. package/dist/features/harness/fill-values.js +3 -169
  154. package/dist/features/harness/goals.d.ts +82 -0
  155. package/dist/features/harness/goals.js +330 -0
  156. package/dist/features/harness/harness.d.ts +51 -1
  157. package/dist/features/harness/harness.js +207 -6
  158. package/dist/features/harness/platform/drive-target.d.ts +30 -0
  159. package/dist/features/harness/platform/drive-target.js +81 -0
  160. package/dist/features/harness/platform/local-apps.d.ts +127 -0
  161. package/dist/features/harness/platform/local-apps.js +280 -0
  162. package/dist/features/harness/platform/persona-credentials.d.ts +20 -0
  163. package/dist/features/harness/platform/persona-credentials.js +69 -0
  164. package/dist/features/harness/platform/platform-drives.d.ts +61 -0
  165. package/dist/features/harness/platform/platform-drives.js +114 -0
  166. package/dist/features/harness/platform/refusal.d.ts +52 -0
  167. package/dist/features/harness/platform/refusal.js +71 -0
  168. package/dist/features/harness/platform/remote-drive.d.ts +186 -0
  169. package/dist/features/harness/platform/remote-drive.js +378 -0
  170. package/dist/features/harness/platform/script.d.ts +94 -0
  171. package/dist/features/harness/platform/script.js +260 -0
  172. package/dist/features/harness/platform/server-driver.d.ts +54 -0
  173. package/dist/features/harness/platform/server-driver.js +182 -0
  174. package/dist/features/harness/platform-config.d.ts +41 -1
  175. package/dist/features/harness/platform-config.js +106 -9
  176. package/dist/features/harness/route-guess.d.ts +13 -0
  177. package/dist/features/harness/route-guess.js +49 -0
  178. package/dist/features/harness/script/app-controls.d.ts +5 -0
  179. package/dist/features/harness/script/app-controls.js +40 -0
  180. package/dist/features/harness/script/lane-ids.d.ts +14 -0
  181. package/dist/features/harness/script/lane-ids.js +16 -0
  182. package/dist/features/harness/script/script-run.d.ts +70 -0
  183. package/dist/features/harness/script/script-run.js +606 -0
  184. package/dist/features/license/license.d.ts +2 -2
  185. package/dist/features/visual/step-shots.d.ts +31 -0
  186. package/dist/features/visual/step-shots.js +231 -0
  187. package/dist/features/visual/visual-tools.d.ts +10 -1
  188. package/dist/features/visual/visual-tools.js +62 -17
  189. package/dist/hooks/client-directory.d.ts +18 -0
  190. package/dist/hooks/client-directory.js +57 -0
  191. package/dist/hooks/coding-agents.d.ts +34 -0
  192. package/dist/hooks/coding-agents.js +117 -0
  193. package/dist/hooks/driven-by.d.ts +23 -0
  194. package/dist/hooks/driven-by.js +56 -0
  195. package/dist/hooks/hook-bus.d.ts +4 -0
  196. package/dist/hooks/hook-bus.js +18 -0
  197. package/dist/hooks/hook-commands.js +15 -4
  198. package/dist/hooks/tool-log.d.ts +9 -0
  199. package/dist/hooks/tool-log.js +29 -0
  200. package/dist/index.d.ts +2 -0
  201. package/dist/index.js +80 -243
  202. package/dist/judgement/capsule/capsule-store.d.ts +2 -2
  203. package/dist/judgement/capsule/causal-summary.d.ts +15 -1
  204. package/dist/judgement/capsule/causal-summary.js +33 -0
  205. package/dist/judgement/runs/artifact/build-verification-run.d.ts +1 -1
  206. package/dist/judgement/runs/artifact/build-verification-run.js +25 -3
  207. package/dist/judgement/runs/artifact/gap-summary.d.ts +0 -18
  208. package/dist/judgement/runs/artifact/gap-summary.js +12 -3
  209. package/dist/judgement/runs/artifact/replay-mapping.d.ts +1 -1
  210. package/dist/judgement/runs/artifact/replay-mapping.js +37 -11
  211. package/dist/judgement/runs/artifact/run-store.d.ts +14 -2
  212. package/dist/judgement/runs/artifact/run-store.js +195 -3
  213. package/dist/judgement/runs/context-tools.js +59 -1
  214. package/dist/judgement/runs/default-run-id.d.ts +3 -0
  215. package/dist/judgement/runs/default-run-id.js +16 -0
  216. package/dist/judgement/runs/drive-run.d.ts +71 -1
  217. package/dist/judgement/runs/drive-run.js +317 -5
  218. package/dist/judgement/runs/repair-prompt.js +1 -1
  219. package/dist/judgement/runs/resume.d.ts +44 -0
  220. package/dist/judgement/runs/resume.js +137 -0
  221. package/dist/judgement/runs/reticle-runner.js +13 -3
  222. package/dist/judgement/runs/runner-port.d.ts +5 -1
  223. package/dist/judgement/runs/runner-port.js +8 -2
  224. package/dist/judgement/runs/verification-sync.d.ts +5 -2
  225. package/dist/judgement/runs/verification-sync.js +40 -18
  226. package/dist/language/flows/change/gate.d.ts +10 -0
  227. package/dist/language/flows/change/gate.js +22 -0
  228. package/dist/language/flows/decision.js +36 -1
  229. package/dist/language/flows/fields/flow-secret-field.d.ts +12 -0
  230. package/dist/language/flows/fields/flow-secret-field.js +25 -2
  231. package/dist/language/flows/flow-anchor.d.ts +61 -10
  232. package/dist/language/flows/flow-anchor.js +98 -6
  233. package/dist/language/flows/flow-cross-step.d.ts +15 -0
  234. package/dist/language/flows/flow-cross-step.js +21 -0
  235. package/dist/language/flows/flow-intent.d.ts +1 -0
  236. package/dist/language/flows/flow-journey.d.ts +6 -0
  237. package/dist/language/flows/flow-journey.js +20 -0
  238. package/dist/language/flows/flow-learning.d.ts +4 -0
  239. package/dist/language/flows/flow-learning.js +45 -14
  240. package/dist/language/flows/flow-mutate-tools.js +5 -3
  241. package/dist/language/flows/flow-replay-run.d.ts +23 -9
  242. package/dist/language/flows/flow-replay-run.js +115 -110
  243. package/dist/language/flows/flow-replay-types.d.ts +1 -1
  244. package/dist/language/flows/flow-replay.d.ts +40 -1
  245. package/dist/language/flows/flow-replay.js +110 -22
  246. package/dist/language/flows/flow-result.d.ts +22 -1
  247. package/dist/language/flows/flow-result.js +47 -2
  248. package/dist/language/flows/flow-scope.js +5 -1
  249. package/dist/language/flows/flow-step-runners.d.ts +22 -2
  250. package/dist/language/flows/flow-step-runners.js +247 -47
  251. package/dist/language/flows/flow-store-for-session.d.ts +2 -2
  252. package/dist/language/flows/flow-store-for-session.js +7 -3
  253. package/dist/language/flows/flow-tools.d.ts +10 -0
  254. package/dist/language/flows/flow-tools.js +112 -89
  255. package/dist/language/flows/flows.d.ts +16 -1
  256. package/dist/language/flows/flows.js +74 -12
  257. package/dist/language/flows/heal-run.js +6 -4
  258. package/dist/language/flows/narrow-write.d.ts +7 -0
  259. package/dist/language/flows/narrow-write.js +36 -1
  260. package/dist/language/flows/recording/flake.d.ts +2 -2
  261. package/dist/language/flows/recording/recording-backtrack.js +14 -1
  262. package/dist/language/flows/recording/tape/recordings.d.ts +58 -4
  263. package/dist/language/flows/recording/tape/recordings.js +95 -13
  264. package/dist/language/flows/replay-from-hud.d.ts +20 -0
  265. package/dist/language/flows/replay-from-hud.js +51 -0
  266. package/dist/language/flows/replay.d.ts +9 -5
  267. package/dist/language/flows/replay.js +56 -15
  268. package/dist/language/flows/single-replay.d.ts +7 -0
  269. package/dist/language/flows/single-replay.js +26 -0
  270. package/dist/language/flows/suite/suite-flakes.js +2 -0
  271. package/dist/language/flows/suite-selection.d.ts +2 -15
  272. package/dist/language/flows/suite-selection.js +4 -3
  273. package/dist/language/flows/verify-change-tools.d.ts +1 -0
  274. package/dist/language/flows/verify-change-tools.js +202 -191
  275. package/dist/launch-chromium.d.ts +27 -5
  276. package/dist/launch-chromium.js +38 -8
  277. package/dist/memory/cloud/cloud-config.d.ts +22 -1
  278. package/dist/memory/cloud/cloud-config.js +34 -5
  279. package/dist/memory/cloud/cloud-sync.d.ts +17 -14
  280. package/dist/memory/cloud/cloud-sync.js +15 -4
  281. package/dist/memory/cloud/harness-config.d.ts +75 -1
  282. package/dist/memory/cloud/harness-config.js +115 -24
  283. package/dist/memory/cloud/hud-notices-source.d.ts +21 -0
  284. package/dist/memory/cloud/hud-notices-source.js +128 -0
  285. package/dist/memory/cloud/memory-scope.d.ts +161 -0
  286. package/dist/memory/cloud/memory-scope.js +227 -0
  287. package/dist/memory/cloud/sync-cycle.d.ts +44 -7
  288. package/dist/memory/cloud/sync-cycle.js +129 -15
  289. package/dist/memory/cloud/sync-daemon.d.ts +11 -0
  290. package/dist/memory/cloud/sync-daemon.js +121 -9
  291. package/dist/memory/cloud/sync-disk.d.ts +1 -1
  292. package/dist/memory/cloud/sync-disk.js +31 -10
  293. package/dist/memory/cloud/sync-screenshots.d.ts +32 -0
  294. package/dist/memory/cloud/sync-screenshots.js +105 -0
  295. package/dist/memory/cloud/unsynced-roots.d.ts +47 -0
  296. package/dist/memory/cloud/unsynced-roots.js +166 -0
  297. package/dist/memory/impact/account-watch.d.ts +34 -0
  298. package/dist/memory/impact/account-watch.js +59 -0
  299. package/dist/memory/impact/impact-recorder.d.ts +8 -0
  300. package/dist/memory/impact/impact-recorder.js +12 -2
  301. package/dist/memory/impact/impact-store.d.ts +17 -4
  302. package/dist/memory/impact/impact-store.js +169 -63
  303. package/dist/memory/intent/inline-intent.d.ts +1 -0
  304. package/dist/memory/intent/intent-shard-store.js +16 -4
  305. package/dist/memory/intent/intent-shard.d.ts +14 -2
  306. package/dist/memory/intent/intent-store.d.ts +1 -0
  307. package/dist/memory/intent/intent-tools.js +122 -4
  308. package/dist/memory/intent/open-intents.d.ts +6 -0
  309. package/dist/memory/intent/open-intents.js +10 -1
  310. package/dist/memory/intent/settled-words.d.ts +24 -0
  311. package/dist/memory/intent/settled-words.js +130 -0
  312. package/dist/memory/journal/drive-flow.d.ts +16 -0
  313. package/dist/memory/journal/drive-flow.js +34 -2
  314. package/dist/memory/journal/drive-run-flush.d.ts +2 -0
  315. package/dist/memory/journal/drive-run-flush.js +20 -5
  316. package/dist/memory/journal/envelope.d.ts +8 -8
  317. package/dist/memory/journal/journal-recorder.js +52 -3
  318. package/dist/memory/journal/on-disk/retention.d.ts +8 -0
  319. package/dist/memory/journal/on-disk/retention.js +32 -2
  320. package/dist/memory/journal/on-disk/startup-maintenance.js +3 -1
  321. package/dist/memory/journal/on-disk/workspace-tiers.js +9 -4
  322. package/dist/memory/journal/session-end.d.ts +15 -1
  323. package/dist/memory/journal/session-end.js +42 -9
  324. package/dist/memory/project/artifact-root-resolver.d.ts +26 -1
  325. package/dist/memory/project/artifact-root-resolver.js +125 -16
  326. package/dist/memory/project/artifact-root.d.ts +46 -8
  327. package/dist/memory/project/artifact-root.js +89 -10
  328. package/dist/memory/project/dir/reticle-dir.d.ts +18 -2
  329. package/dist/memory/project/dir/reticle-dir.js +26 -3
  330. package/dist/memory/project/link-directory.d.ts +15 -0
  331. package/dist/memory/project/link-directory.js +44 -0
  332. package/dist/memory/project/project-tools.js +22 -3
  333. package/dist/memory/project/root-claims.d.ts +6 -0
  334. package/dist/memory/project/root-claims.js +39 -0
  335. package/dist/memory/project/session-root.d.ts +26 -1
  336. package/dist/memory/project/session-root.js +49 -5
  337. package/dist/memory/project/sync-status.d.ts +85 -0
  338. package/dist/memory/project/sync-status.js +224 -0
  339. package/dist/memory/recall/memory-tools.js +47 -2
  340. package/dist/memory/recall/platform-memory.d.ts +34 -0
  341. package/dist/memory/recall/platform-memory.js +139 -0
  342. package/dist/memory/recall/project-memory.d.ts +19 -0
  343. package/dist/memory/recall/project-memory.js +80 -13
  344. package/dist/portal/bridge/bridge.d.ts +9 -3
  345. package/dist/portal/bridge/bridge.js +82 -22
  346. package/dist/portal/bridge/harness-request.d.ts +23 -0
  347. package/dist/portal/bridge/harness-request.js +27 -0
  348. package/dist/portal/bridge/pairing-token.d.ts +9 -0
  349. package/dist/portal/bridge/pairing-token.js +17 -0
  350. package/dist/portal/bridge/wrong-path.d.ts +17 -0
  351. package/dist/portal/bridge/wrong-path.js +35 -0
  352. package/dist/portal/input/network-mock-tools.js +11 -2
  353. package/dist/portal/input/real-input.d.ts +83 -10
  354. package/dist/portal/input/real-input.js +218 -30
  355. package/dist/portal/input/viewport-tools.js +3 -3
  356. package/dist/portal/pool/browser-pool.d.ts +70 -9
  357. package/dist/portal/pool/browser-pool.js +190 -37
  358. package/dist/portal/pool/context-permissions.d.ts +33 -0
  359. package/dist/portal/pool/context-permissions.js +33 -0
  360. package/dist/portal/pool/lease-marker-stamp.d.ts +23 -0
  361. package/dist/portal/pool/lease-marker-stamp.js +49 -0
  362. package/dist/portal/pool/playwright-launcher.d.ts +35 -0
  363. package/dist/portal/pool/playwright-launcher.js +64 -3
  364. package/dist/portal/pool/pool-contract.d.ts +28 -5
  365. package/dist/portal/session/agent-link.d.ts +8 -0
  366. package/dist/portal/session/agent-link.js +17 -0
  367. package/dist/portal/session/command-payload.d.ts +8 -0
  368. package/dist/portal/session/command-payload.js +24 -0
  369. package/dist/portal/session/daemon-answers.d.ts +3 -3
  370. package/dist/portal/session/daemon-answers.js +4 -2
  371. package/dist/portal/session/dev-server/dev-command.d.ts +21 -0
  372. package/dist/portal/session/dev-server/dev-command.js +87 -12
  373. package/dist/portal/session/facts/departure-note.d.ts +22 -0
  374. package/dist/portal/session/facts/departure-note.js +47 -0
  375. package/dist/portal/session/facts/observed-state.d.ts +16 -18
  376. package/dist/portal/session/facts/observed-state.js +46 -3
  377. package/dist/portal/session/facts/session-replaced.d.ts +5 -0
  378. package/dist/portal/session/facts/session-replaced.js +5 -0
  379. package/dist/portal/session/first-run-wiring.d.ts +42 -0
  380. package/dist/portal/session/first-run-wiring.js +132 -0
  381. package/dist/portal/session/human/live-control.d.ts +9 -2
  382. package/dist/portal/session/human/live-control.js +12 -3
  383. package/dist/portal/session/human/notes-ledger.d.ts +20 -0
  384. package/dist/portal/session/human/notes-ledger.js +55 -0
  385. package/dist/portal/session/human/review-store.d.ts +12 -0
  386. package/dist/portal/session/human/review-store.js +18 -10
  387. package/dist/portal/session/live-control-tools.d.ts +0 -13
  388. package/dist/portal/session/live-control-tools.js +107 -13
  389. package/dist/portal/session/narration-args.d.ts +5 -0
  390. package/dist/portal/session/narration-args.js +17 -0
  391. package/dist/portal/session/no-session-diagnosis.d.ts +8 -1
  392. package/dist/portal/session/no-session-diagnosis.js +46 -9
  393. package/dist/portal/session/no-session-next-action.d.ts +31 -0
  394. package/dist/portal/session/no-session-next-action.js +159 -60
  395. package/dist/portal/session/no-session-watch.d.ts +14 -1
  396. package/dist/portal/session/no-session-watch.js +227 -17
  397. package/dist/portal/session/presence/session-lease.js +1 -1
  398. package/dist/portal/session/presence/session-mirror.js +3 -0
  399. package/dist/portal/session/recorded-gaps.d.ts +97 -0
  400. package/dist/portal/session/recorded-gaps.js +251 -0
  401. package/dist/portal/session/serving-directory.d.ts +27 -0
  402. package/dist/portal/session/serving-directory.js +45 -0
  403. package/dist/portal/session/session-health.d.ts +18 -0
  404. package/dist/portal/session/session-health.js +9 -1
  405. package/dist/portal/session/session-info.d.ts +8 -1
  406. package/dist/portal/session/session-info.js +8 -1
  407. package/dist/portal/session/session-manager.d.ts +39 -0
  408. package/dist/portal/session/session-manager.js +98 -11
  409. package/dist/portal/session/session-reaper.js +4 -1
  410. package/dist/portal/session/session-successor.d.ts +13 -0
  411. package/dist/portal/session/session-successor.js +1 -1
  412. package/dist/portal/session/session-tools.js +26 -3
  413. package/dist/portal/session/session.d.ts +22 -30
  414. package/dist/portal/session/session.js +81 -79
  415. package/dist/portal/session/timing/command-timeout.js +25 -1
  416. package/dist/portal/session/timing/wall-clock.d.ts +1 -1
  417. package/dist/portal/session/timing/wall-clock.js +1 -1
  418. package/dist/portal/session/zero-install-first-call.d.ts +31 -0
  419. package/dist/portal/session/zero-install-first-call.js +88 -0
  420. package/dist/start-options.d.ts +12 -0
  421. package/dist/start-wiring.d.ts +63 -0
  422. package/dist/start-wiring.js +169 -0
  423. package/dist/status-payload.d.ts +23 -1
  424. package/dist/status-payload.js +36 -1
  425. package/dist/surface/http-server.js +18 -2
  426. package/dist/surface/mcp/attach-memory.d.ts +1 -0
  427. package/dist/surface/mcp/attach-memory.js +12 -1
  428. package/dist/surface/mcp/mcp-proxy.d.ts +9 -0
  429. package/dist/surface/mcp/mcp-proxy.js +65 -13
  430. package/dist/surface/mcp/mcp.d.ts +34 -6
  431. package/dist/surface/mcp/mcp.js +61 -17
  432. package/dist/surface/mcp/proxy/drive-calls.d.ts +10 -0
  433. package/dist/surface/mcp/proxy/drive-calls.js +27 -0
  434. package/dist/surface/mcp/proxy/mcp-post-transport.js +5 -0
  435. package/dist/surface/mcp/server-instructions.d.ts +4 -2
  436. package/dist/surface/mcp/server-instructions.js +32 -14
  437. package/dist/surface/mcp/shared-params.js +2 -2
  438. package/dist/surface/mcp/surface-vocabulary.d.ts +2 -0
  439. package/dist/surface/mcp/surface-vocabulary.js +1 -0
  440. package/dist/surface/tools/account-tool.d.ts +22 -0
  441. package/dist/surface/tools/account-tool.js +157 -0
  442. package/dist/surface/tools/act/act-danger.d.ts +11 -0
  443. package/dist/surface/tools/act/act-danger.js +38 -1
  444. package/dist/surface/tools/act/act-observation.d.ts +33 -0
  445. package/dist/surface/tools/act/act-observation.js +57 -0
  446. package/dist/surface/tools/act/act-preflight.js +25 -2
  447. package/dist/surface/tools/act/act-target.js +8 -3
  448. package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +8 -0
  449. package/dist/surface/tools/act/navigation/navigate-arrival.js +56 -2
  450. package/dist/surface/tools/act/resolve-target.d.ts +1 -1
  451. package/dist/surface/tools/act/resolve-target.js +18 -3
  452. package/dist/surface/tools/act/screen-request.d.ts +34 -0
  453. package/dist/surface/tools/act/screen-request.js +113 -0
  454. package/dist/surface/tools/act/sequence-grade.d.ts +8 -0
  455. package/dist/surface/tools/act/sequence-grade.js +13 -2
  456. package/dist/surface/tools/act/settle-in-flight.js +25 -3
  457. package/dist/surface/tools/act-sequence-tool.js +138 -29
  458. package/dist/surface/tools/act-tools.d.ts +0 -9
  459. package/dist/surface/tools/act-tools.js +71 -41
  460. package/dist/surface/tools/agent/app-notes-learning.d.ts +7 -0
  461. package/dist/surface/tools/agent/app-notes-learning.js +80 -0
  462. package/dist/surface/tools/agent/app-notes.d.ts +4 -0
  463. package/dist/surface/tools/agent/app-notes.js +48 -0
  464. package/dist/surface/tools/agent/build-staleness.d.ts +7 -0
  465. package/dist/surface/tools/agent/build-staleness.js +62 -0
  466. package/dist/surface/tools/agent/compact-envelope.d.ts +80 -0
  467. package/dist/surface/tools/agent/compact-envelope.js +374 -0
  468. package/dist/surface/tools/agent/for-the-agent.d.ts +12 -0
  469. package/dist/surface/tools/agent/for-the-agent.js +44 -0
  470. package/dist/surface/tools/agent/notices.d.ts +50 -0
  471. package/dist/surface/tools/agent/notices.js +152 -0
  472. package/dist/surface/tools/agent/reteach.d.ts +11 -0
  473. package/dist/surface/tools/agent/reteach.js +50 -0
  474. package/dist/surface/tools/args/alias-args.d.ts +5 -0
  475. package/dist/surface/tools/args/alias-args.js +10 -0
  476. package/dist/surface/tools/args/confirm-dangerous-arg.d.ts +6 -0
  477. package/dist/surface/tools/args/confirm-dangerous-arg.js +6 -0
  478. package/dist/surface/tools/assert/assert-source.d.ts +15 -0
  479. package/dist/surface/tools/assert/assert-source.js +40 -0
  480. package/dist/surface/tools/assert/assert-verdict.d.ts +1 -1
  481. package/dist/surface/tools/assert/assert-verdict.js +42 -17
  482. package/dist/surface/tools/browser-tools.js +51 -2
  483. package/dist/surface/tools/chat-drives.d.ts +101 -0
  484. package/dist/surface/tools/chat-drives.js +409 -0
  485. package/dist/surface/tools/coverage-tools.d.ts +2 -10
  486. package/dist/surface/tools/coverage-tools.js +2 -53
  487. package/dist/surface/tools/dynamic-tools.js +29 -1
  488. package/dist/surface/tools/empty-session-list.d.ts +51 -0
  489. package/dist/surface/tools/empty-session-list.js +120 -0
  490. package/dist/surface/tools/error-recovery.d.ts +14 -0
  491. package/dist/surface/tools/error-recovery.js +105 -8
  492. package/dist/surface/tools/explore-tools.d.ts +31 -1
  493. package/dist/surface/tools/explore-tools.js +438 -66
  494. package/dist/surface/tools/feedback-tools.d.ts +2 -3
  495. package/dist/surface/tools/feedback-tools.js +18 -3
  496. package/dist/surface/tools/gap-novelty.d.ts +3 -1
  497. package/dist/surface/tools/gap-novelty.js +8 -1
  498. package/dist/surface/tools/harness-explore.d.ts +118 -57
  499. package/dist/surface/tools/harness-explore.js +344 -292
  500. package/dist/surface/tools/harness-gate.d.ts +88 -0
  501. package/dist/surface/tools/harness-gate.js +235 -0
  502. package/dist/surface/tools/harness-hunt.d.ts +43 -0
  503. package/dist/surface/tools/harness-hunt.js +215 -0
  504. package/dist/surface/tools/harness-plan.d.ts +17 -0
  505. package/dist/surface/tools/harness-plan.js +38 -0
  506. package/dist/surface/tools/harness-script.d.ts +30 -0
  507. package/dist/surface/tools/harness-script.js +560 -0
  508. package/dist/surface/tools/harness-tab-guard.d.ts +5 -0
  509. package/dist/surface/tools/harness-tab-guard.js +27 -0
  510. package/dist/surface/tools/harness-toolset.d.ts +22 -1
  511. package/dist/surface/tools/harness-toolset.js +101 -7
  512. package/dist/surface/tools/human-notes.d.ts +16 -0
  513. package/dist/surface/tools/human-notes.js +27 -0
  514. package/dist/surface/tools/invoke-tool.d.ts +5 -2
  515. package/dist/surface/tools/invoke-tool.js +263 -85
  516. package/dist/surface/tools/lease-hint.js +26 -5
  517. package/dist/surface/tools/lease-permissions.d.ts +33 -0
  518. package/dist/surface/tools/lease-permissions.js +73 -0
  519. package/dist/surface/tools/lease-readiness.d.ts +38 -0
  520. package/dist/surface/tools/lease-readiness.js +57 -0
  521. package/dist/surface/tools/lease-seed.d.ts +49 -0
  522. package/dist/surface/tools/lease-seed.js +167 -0
  523. package/dist/surface/tools/lease-tools.d.ts +13 -24
  524. package/dist/surface/tools/lease-tools.js +146 -197
  525. package/dist/surface/tools/live-call-text.js +4 -4
  526. package/dist/surface/tools/merge-tools.js +42 -2
  527. package/dist/surface/tools/merged-name-redirect.js +4 -0
  528. package/dist/surface/tools/next-step.d.ts +29 -0
  529. package/dist/surface/tools/next-step.js +214 -0
  530. package/dist/surface/tools/observe-tools.js +45 -9
  531. package/dist/surface/tools/platform-moment.d.ts +72 -0
  532. package/dist/surface/tools/platform-moment.js +296 -0
  533. package/dist/surface/tools/query-hint-schema.d.ts +7 -0
  534. package/dist/surface/tools/query-hint-schema.js +10 -0
  535. package/dist/surface/tools/read-tools.js +71 -14
  536. package/dist/surface/tools/real-input-attempt.js +96 -13
  537. package/dist/surface/tools/reticle-result.d.ts +120 -0
  538. package/dist/surface/tools/reticle-result.js +364 -0
  539. package/dist/surface/tools/tool-kit.d.ts +83 -3
  540. package/dist/surface/tools/tool-kit.js +77 -7
  541. package/dist/surface/tools/tools.js +43 -59
  542. package/dist/telemetry/account-envelope.d.ts +7 -0
  543. package/dist/telemetry/account-envelope.js +61 -0
  544. package/dist/telemetry/agent-client.d.ts +15 -0
  545. package/dist/telemetry/agent-client.js +57 -0
  546. package/dist/telemetry/app-instrumented.js +9 -2
  547. package/dist/telemetry/argument-shape.d.ts +7 -0
  548. package/dist/telemetry/argument-shape.js +86 -1
  549. package/dist/telemetry/automation-hint.d.ts +2 -3
  550. package/dist/telemetry/automation-hint.js +33 -8
  551. package/dist/telemetry/cli-telemetry.js +7 -2
  552. package/dist/telemetry/daemon-telemetry.js +3 -0
  553. package/dist/telemetry/error-fingerprint.d.ts +10 -1
  554. package/dist/telemetry/error-fingerprint.js +61 -5
  555. package/dist/telemetry/feedback-cli.d.ts +0 -13
  556. package/dist/telemetry/feedback-cli.js +0 -77
  557. package/dist/telemetry/feedback.d.ts +13 -0
  558. package/dist/telemetry/feedback.js +183 -17
  559. package/dist/telemetry/harness-run.d.ts +18 -0
  560. package/dist/telemetry/harness-run.js +80 -0
  561. package/dist/telemetry/hud-events.d.ts +16 -0
  562. package/dist/telemetry/hud-events.js +27 -0
  563. package/dist/telemetry/hud-metrics.d.ts +29 -6
  564. package/dist/telemetry/hud-metrics.js +116 -25
  565. package/dist/telemetry/init-telemetry.js +2 -2
  566. package/dist/telemetry/install-source.d.ts +13 -25
  567. package/dist/telemetry/install-source.js +44 -3
  568. package/dist/telemetry/mcp-connection.d.ts +0 -14
  569. package/dist/telemetry/mcp-connection.js +5 -1
  570. package/dist/telemetry/onboarding-firsts.d.ts +32 -0
  571. package/dist/telemetry/onboarding-firsts.js +81 -6
  572. package/dist/telemetry/platform-linked.d.ts +5 -0
  573. package/dist/telemetry/platform-linked.js +32 -0
  574. package/dist/telemetry/project-profile.js +5 -3
  575. package/dist/telemetry/proxy-telemetry.js +4 -1
  576. package/dist/telemetry/session-metrics.d.ts +15 -4
  577. package/dist/telemetry/session-metrics.js +88 -52
  578. package/dist/telemetry/telemetry.d.ts +38 -2
  579. package/dist/telemetry/telemetry.js +144 -34
  580. package/dist/telemetry/verification-of.d.ts +3 -1
  581. package/dist/telemetry/verification-of.js +13 -4
  582. package/dist/wire-journal.d.ts +2 -2
  583. package/dist/wire-journal.js +20 -6
  584. package/docs/README.md +3 -3
  585. package/docs/actions.mdx +6 -3
  586. package/docs/adapters.md +1 -1
  587. package/docs/agent-cheatsheet.md +25 -28
  588. package/docs/architecture.md +5 -5
  589. package/docs/autodrive.md +33 -28
  590. package/docs/benchmarks.md +5 -5
  591. package/docs/best-practices.mdx +27 -9
  592. package/docs/capabilities.mdx +14 -16
  593. package/docs/cli/affected.mdx +1 -1
  594. package/docs/cli/cloud.mdx +54 -75
  595. package/docs/cli/doctor.mdx +14 -3
  596. package/docs/cli/drive.mdx +20 -14
  597. package/docs/cli/feedback.mdx +3 -3
  598. package/docs/cli/gate.mdx +7 -2
  599. package/docs/cli/help.mdx +50 -55
  600. package/docs/cli/init.mdx +43 -28
  601. package/docs/cli/license.mdx +12 -8
  602. package/docs/cli/mcp.mdx +4 -4
  603. package/docs/cli/open.mdx +3 -3
  604. package/docs/cli/report.mdx +4 -2
  605. package/docs/cli/restart.mdx +2 -2
  606. package/docs/cli/rollback.mdx +14 -8
  607. package/docs/cli/serve.mdx +4 -4
  608. package/docs/cli/setup.mdx +23 -0
  609. package/docs/cli/status.mdx +18 -5
  610. package/docs/cli/stop.mdx +67 -8
  611. package/docs/cli/try.mdx +62 -0
  612. package/docs/cli/update.mdx +4 -3
  613. package/docs/cli/verify.mdx +17 -6
  614. package/docs/cli/version.mdx +5 -4
  615. package/docs/cli.mdx +111 -42
  616. package/docs/debugging.md +3 -3
  617. package/docs/deploy-checks.md +1 -1
  618. package/docs/desktop.mdx +9 -3
  619. package/docs/enterprise.md +11 -10
  620. package/docs/environment.mdx +7 -8
  621. package/docs/faq.mdx +3 -3
  622. package/docs/first-drive.md +5 -4
  623. package/docs/flows.md +35 -27
  624. package/docs/for-agents.md +4 -5
  625. package/docs/frameworks.mdx +32 -21
  626. package/docs/getting-started.md +65 -61
  627. package/docs/human-control.md +16 -16
  628. package/docs/index.mdx +15 -42
  629. package/docs/install-agentic.mdx +22 -37
  630. package/docs/install-manual.mdx +23 -13
  631. package/docs/instrumentation.mdx +5 -3
  632. package/docs/integration-patterns.md +7 -7
  633. package/docs/license-activation.mdx +1 -1
  634. package/docs/multi-agent-testing.md +24 -6
  635. package/docs/packages/babel-plugin.mdx +4 -2
  636. package/docs/packages/browser.mdx +16 -10
  637. package/docs/packages/core.mdx +12 -5
  638. package/docs/packages/electron.mdx +3 -2
  639. package/docs/packages/engine.mdx +1 -1
  640. package/docs/packages/eslint-plugin.mdx +18 -12
  641. package/docs/packages/next.mdx +8 -7
  642. package/docs/packages/open-verification.mdx +1 -1
  643. package/docs/packages/server.mdx +5 -5
  644. package/docs/packages/tauri.mdx +9 -9
  645. package/docs/packages/test.mdx +4 -10
  646. package/docs/packages/vite-plugin.mdx +32 -4
  647. package/docs/packages.mdx +11 -15
  648. package/docs/platform-integration.md +6 -5
  649. package/docs/predicates.mdx +40 -24
  650. package/docs/quickstart.mdx +69 -30
  651. package/docs/required-checks.md +8 -7
  652. package/docs/reticle-manual.md +15 -5
  653. package/docs/skill-file.mdx +17 -79
  654. package/docs/skill-setup.md +9 -9
  655. package/docs/skill.md +200 -0
  656. package/docs/system-map.md +7 -7
  657. package/docs/telemetry.md +23 -25
  658. package/docs/testing.md +4 -4
  659. package/docs/token-efficiency.md +12 -12
  660. package/docs/tools/act-and-wait.mdx +9 -2
  661. package/docs/tools/act-sequence.mdx +6 -7
  662. package/docs/tools/act.mdx +2 -2
  663. package/docs/tools/assert.mdx +18 -17
  664. package/docs/tools/console.mdx +9 -9
  665. package/docs/tools/inspect.mdx +16 -7
  666. package/docs/tools/look.mdx +24 -0
  667. package/docs/tools/navigate.mdx +5 -3
  668. package/docs/tools/network.mdx +2 -2
  669. package/docs/tools/observe.mdx +6 -6
  670. package/docs/tools/overview.mdx +34 -33
  671. package/docs/tools/query.mdx +5 -5
  672. package/docs/tools/session-and-feedback.mdx +22 -13
  673. package/docs/tools/sessions.mdx +8 -8
  674. package/docs/tools/snapshot.mdx +6 -5
  675. package/docs/tools/state.mdx +9 -9
  676. package/docs/tools/tools-and-run.mdx +26 -24
  677. package/docs/tools/verify.mdx +28 -0
  678. package/docs/tools/wait-for.mdx +8 -4
  679. package/docs/troubleshooting.mdx +21 -6
  680. package/docs/usage.md +55 -46
  681. package/docs/use-cases.mdx +3 -3
  682. package/docs/vs-chrome-devtools-mcp.mdx +9 -6
  683. package/docs/vs-playwright-mcp.mdx +3 -1
  684. package/docs/what-is-recorded.md +17 -5
  685. package/docs/what-is-reticle.mdx +5 -3
  686. package/docs/why-reticle.mdx +1 -1
  687. package/package.json +9 -12
  688. package/dist/command/cli/demo/demo-page.d.ts +0 -78
  689. package/dist/command/cli/demo/demo-page.js +0 -241
  690. package/dist/command/cli/demo/demo-run.d.ts +0 -38
  691. package/dist/command/cli/demo/demo-run.js +0 -138
  692. package/dist/features/harness/driver.d.ts +0 -50
  693. package/dist/features/harness/driver.js +0 -236
  694. package/dist/features/harness/jev-driver.d.ts +0 -188
  695. package/dist/features/harness/jev-driver.js +0 -678
  696. package/dist/features/harness/openai-driver.d.ts +0 -58
  697. package/dist/features/harness/openai-driver.js +0 -206
  698. package/dist/judgement/hunt/hunt-report.d.ts +0 -49
  699. package/dist/judgement/hunt/hunt-report.js +0 -84
  700. package/dist/language/flows/buddy-status.d.ts +0 -25
  701. package/dist/language/flows/buddy-status.js +0 -32
  702. package/dist/language/flows/change/watch-batcher.d.ts +0 -18
  703. package/dist/language/flows/change/watch-batcher.js +0 -19
  704. package/dist/memory/cloud/harness-offer.d.ts +0 -44
  705. package/dist/memory/cloud/harness-offer.js +0 -145
  706. package/dist/memory/project/dir/fill-value-store.d.ts +0 -32
  707. package/dist/memory/project/dir/fill-value-store.js +0 -88
  708. package/dist/surface/tools/feature-capture.d.ts +0 -151
  709. package/dist/surface/tools/feature-capture.js +0 -235
  710. package/dist/surface/tools/tool-hit-rate.d.ts +0 -87
  711. package/dist/surface/tools/tool-hit-rate.js +0 -90
  712. package/dist/telemetry/harness-drive.d.ts +0 -4
  713. package/dist/telemetry/harness-drive.js +0 -35
  714. package/dist/telemetry/identify.d.ts +0 -22
  715. package/dist/telemetry/identify.js +0 -73
  716. package/docs/cli/capsules.mdx +0 -70
  717. package/docs/cli/hunt.mdx +0 -73
  718. package/docs/cli/identify.mdx +0 -76
  719. package/docs/cli/kill.mdx +0 -91
  720. package/docs/cli/watch.mdx +0 -62
  721. package/docs/local-registry.md +0 -143
package/docs/cli/init.mdx CHANGED
@@ -7,7 +7,10 @@ icon: wand-magic-sparkles
7
7
  `reticle init` is the one command a person runs before anything else. It inspects the directory it is standing in, works out the framework, and writes every piece of wiring Reticle needs: the MCP server registration, the agent rule files, the dev dependencies, `.reticle.json`, and the bundler plugin.
8
8
 
9
9
  ```bash
10
- npx @reticlehq/server init [--dry-run] [--port N] [--no-mcp] [--no-install] [--app <dir>] [--yes]
10
+ npx @reticlehq/server init [--env KEY=VALUE]... [--app <dir>] [--license <key>] [--json]
11
+ [--files-only] [--relaunch] [--no-open] [--no-agents] [--url <app url>]
12
+ [--timeout S] [--dry-run] [--hooks] [--port N] [--no-mcp] [--no-install]
13
+ [--start] [--capture-bodies] [--no-first-run]
11
14
  ```
12
15
 
13
16
  ## Flags
@@ -17,9 +20,21 @@ npx @reticlehq/server init [--dry-run] [--port N] [--no-mcp] [--no-install] [--a
17
20
  | `--dry-run` | boolean | `false` | Print the full plan and write nothing |
18
21
  | `--port N` | number | unset (resolves to `4400`) | Bridge port to write into the config |
19
22
  | `--no-mcp` | boolean | `false` (MCP is registered) | Skip the MCP registration **and** the agent rule files (`CLAUDE.md`, `AGENTS.md`, `.cursor`) and the `/reticle` command |
20
- | `--no-install` | boolean | `false` (deps are installed) | Do not run the install. The step becomes `[⚠]` and prints the `add -D` command for you to run by hand, rather than vanishing from the plan |
21
- | `--app <dir>` | string | unset | Pick which app to wire in a monorepo, without changing directory |
23
+ | `--no-install` | boolean | `false` (deps are installed) | Do not run the install. The step becomes `[–]` ("skipped (--no-install); install them yourself: …") with the install command for you to run by hand, rather than vanishing from the plan |
24
+ | `--app <dir>` | string | unset | Pick which app to wire in a monorepo, without changing directory. On its own it implies `--files-only` |
25
+ | `--start` | boolean | `false` | With `--app`, also boot the app the way a plain `init` does |
26
+ | `--capture-bodies` | boolean | `false` | Write `captureNetworkBodies: true` into the Vite plugin call, so request and response bodies are captured |
27
+ | `--no-first-run` | boolean | `false` | Connect and stop, without the coverage summary |
22
28
  | `--hooks` | boolean | `false` | Also add a print-only Stop hook to `.claude/settings.json`, merged into what is there. When the agent stops without a claim that held, it prints one line; it never blocks. See [`reticle report`](/cli/report) |
29
+ | `--env KEY=VALUE` | string, repeatable | none | What the app needs to reach a usable state: a key from `.env.example`, a mock backend, a variable that skips an auth wall. A value may contain spaces and `=` |
30
+ | `--license <key>` | string | unset | Write an enterprise license key to `.env` and keep `.env` out of git |
31
+ | `--json` | boolean | `false` | Put the result on stdout as one object, for an agent to read |
32
+ | `--files-only` | boolean | `false` | Write the files, register the MCP server and pre-approve the tools, then stop: no dev server, no browser. Also the upgrade path for an existing install |
33
+ | `--relaunch` | boolean | `false` | Print the exact command that restarts this agent conversation with the `reticle_*` tools loaded. Refuses when the session has no transcript behind it. Works with `--files-only` |
34
+ | `--no-open` | boolean | `false` | Do not open a browser window. The connect is checked in a hidden tab instead |
35
+ | `--no-agents` | boolean | `false` | Do not register the MCP server with the other agents on this machine |
36
+ | `--url <app url>` | string | unset | The app is already running at this URL: use it instead of starting a dev server |
37
+ | `--timeout S` | seconds | the framework's own budget | How long to wait for the dev server and for a session to connect |
23
38
  | `--yes` | boolean | `false` | Accepted for scripting. `init` has no interactive prompts today, so it is a no-op |
24
39
 
25
40
  <Warning>
@@ -29,7 +44,7 @@ npx @reticlehq/server init [--dry-run] [--port N] [--no-mcp] [--no-install] [--a
29
44
 
30
45
  ## What it prints
31
46
 
32
- A plan, one line per step, each with a status mark: `✓` written, `·` already in place or left alone, `⚠` needs a hand, `–` deliberately skipped by a flag. Captured from a real `--dry-run` inside `apps/bench-app`:
47
+ A plan, one line per step, each with a status mark: `✓` written, `·` already in place or left alone, `⚠` needs a hand, `–` deliberately skipped by a flag, `ℹ` done, but incomplete in a way that matters. Captured from a real `--dry-run` inside `apps/bench-app`:
33
48
 
34
49
  ```
35
50
  reticle init (dry run, no files written)
@@ -37,8 +52,8 @@ reticle init (dry run, no files written)
37
52
 
38
53
  [·] MCP server (Claude, global) → global (claude user scope)
39
54
  reticle already registered (install once, used by every project)
40
- [·] MCP server (Cursor, global) → /Users/you/.cursor/mcp.json
41
- reticle already in Cursor global config
55
+ [·] MCP server (Cursor) → /Users/you/.cursor/mcp.json
56
+ reticle already registered with Cursor
42
57
  [⚠] MCP server (Codex CLI) → /Users/you/.codex/config.toml
43
58
  add this to /Users/you/.codex/config.toml by hand:
44
59
  [mcp_servers.reticle]
@@ -54,7 +69,7 @@ reticle init (dry run, no files written)
54
69
  [✓] The /reticle command → .claude/commands/reticle.md
55
70
  type /reticle to verify one flow in the browser
56
71
  [✓] Install dependencies → package.json
57
- pnpm add -D @reticlehq/react@2.8.0 @reticlehq/vite-plugin@2.8.0
72
+ pnpm add -D @reticlehq/react@3.7.0 @reticlehq/vite-plugin@3.7.0
58
73
  [✓] Reticle config → .reticle.json
59
74
  write project config (framework + port)
60
75
  [✓] Vite plugin → vite.config.ts
@@ -62,9 +77,11 @@ reticle init (dry run, no files written)
62
77
  [·] Capabilities + store → src/reticle-dev.ts
63
78
  file exists, left alone, it is yours to edit
64
79
 
65
- Restart `vite`.
80
+ Restart your dev server (`vite`).
66
81
  ```
67
82
 
83
+ The install line pins the packages to the version of Reticle you are running. When the `codex` binary is on your PATH, the Codex row is not a hand edit: it reads `[✓] MCP server (Codex CLI)` and registers through `codex mcp add reticle -- npx @reticlehq/server mcp`.
84
+
68
85
  Below the plan it also prints the two things that actually finish the install: restart your agent so it re-reads its MCP server list, then run `npx @reticlehq/server status` to confirm the app connected.
69
86
 
70
87
  With `--no-mcp`, the whole MCP and rules group collapses into one skipped line:
@@ -74,24 +91,22 @@ With `--no-mcp`, the whole MCP and rules group collapses into one skipped line:
74
91
  --no-mcp ... also skips the agent rule files (CLAUDE.md / AGENTS.md / .cursor) and the /reticle command
75
92
  ```
76
93
 
77
- Run from a workspace root with several apps, it refuses to guess, names them, and exits `1`:
94
+ Run from a workspace root with several apps, it refuses to guess, prints a command for each one, and exits `1`:
78
95
 
79
96
  ```
80
- Several apps found in this workspace. Re-run `reticle init` inside the one you want:
81
- adapters/build/next
82
- adapters/build/vite
83
- apps/atlas
84
- apps/bench-app
85
- apps/electron-smoke
86
- apps/large-dom-bench
87
- apps/next-smoke
88
- apps/tauri-smoke
89
- apps/vibe-builder-demo
90
-
91
- Or name one without changing directory: reticle init --app apps/next-smoke
97
+ Several apps found in this workspace. Re-run `reticle init` for the one you want:
98
+ reticle init --app adapters/build/next
99
+ reticle init --app adapters/build/vite
100
+ reticle init --app apps/atlas
101
+ reticle init --app apps/bench-app
102
+ reticle init --app apps/electron-smoke
103
+ reticle init --app apps/large-dom-bench
104
+ reticle init --app apps/next-smoke
105
+ reticle init --app apps/tauri-smoke
106
+ reticle init --app apps/vibe-builder-demo
92
107
  ```
93
108
 
94
- Given `--app`, it says which directory it moved to before printing the plan:
109
+ Given `--app`, it writes that app's files and starts nothing: no daemon and no dev server, since a monorepo app's dev server is often run from the root. Add `--start` to boot it the way a plain `init` does. It says which directory it moved to before printing the plan:
95
110
 
96
111
  ```
97
112
  No app in this directory ... wiring apps/bench-app instead.
@@ -101,12 +116,12 @@ In the two captures above, the punctuation that separates the two halves of the
101
116
 
102
117
  ## Exit codes
103
118
 
104
- | Code | Meaning |
105
- | ---- | --------------------------------------------------------------------------------------- |
106
- | `0` | The plan ran. Steps marked `⚠` still need a hand, and do not change the code |
107
- | `1` | Init failed, an unknown flag was passed, or several apps were found and none was chosen |
119
+ | Code | Meaning |
120
+ | --- | --- |
121
+ | `0` | The app connected. Steps marked `⚠` still need a hand, and do not change the code |
122
+ | `1` | No session connected, init failed, an unknown flag was passed, or several apps were found and none was chosen |
108
123
 
109
- An unknown flag is rejected by name: `reticle init --bogus` prints `unknown argument '--bogus'`, then the full usage block, and exits `1`.
124
+ An unknown flag is rejected by name: `reticle init --bogus` prints `unknown argument '--bogus'`, then the short usage (`reticle --help`), and exits `1`.
110
125
 
111
126
  ## Worked example
112
127
 
@@ -118,5 +133,5 @@ npx @reticlehq/server status # confirm the app actually connected
118
133
  ```
119
134
 
120
135
  <Card title="The install, step by step" icon="wand-magic-sparkles" href="/install-agentic">
121
- What each step writes and how to read the four status marks.
136
+ What each step writes and how to read the five status marks.
122
137
  </Card>
@@ -14,24 +14,28 @@ No flags.
14
14
 
15
15
  ## What it prints
16
16
 
17
- One `reticle_license` line. Real capture on a checkout with no issuer key configured:
17
+ One `reticle_license` JSON line, on stderr. On a checkout with no issuer key configured:
18
18
 
19
19
  ```json
20
20
  {
21
21
  "t": "2026-08-15T18:42:26.758Z",
22
22
  "event": "reticle_license",
23
+ "gated": ["audit-log"],
24
+ "contact": "hey@reticle.sh",
23
25
  "status": "eval",
24
26
  "detail": "evaluation mode: enterprise features run free (no issuer key configured)"
25
27
  }
26
28
  ```
27
29
 
28
- | `status` | Meaning |
29
- | --------- | --------------------------------------------- |
30
- | `active` | A valid license is present |
31
- | `eval` | Evaluation mode. Enterprise features run free |
32
- | `missing` | No license, and the build expects one |
30
+ | `status` | Meaning |
31
+ | --------- | --------------------------------------------------- |
32
+ | `active` | A valid license is present |
33
+ | `eval` | Evaluation mode. Enterprise features run free |
34
+ | `missing` | No license, and the build expects one |
35
+ | `expired` | The key verified, but its expiry has passed |
36
+ | `invalid` | The key was rejected, or the build is misconfigured |
33
37
 
34
- `detail` is a sentence explaining the status.
38
+ `detail` is a sentence explaining the status. An active license also carries `licenseId`, `org`, `plan` and `expiresAt`.
35
39
 
36
40
  ## Exit codes
37
41
 
@@ -40,7 +44,7 @@ Always `0`.
40
44
  ## Worked example
41
45
 
42
46
  ```bash
43
- npx @reticlehq/server license | jq -r .status
47
+ npx @reticlehq/server license 2>&1 | jq -r .status
44
48
  ```
45
49
 
46
50
  <Card title="What enterprise covers" icon="building" href="/enterprise">
package/docs/cli/mcp.mdx CHANGED
@@ -18,15 +18,15 @@ This is what `reticle init` registers, so you rarely type it yourself.
18
18
  | --- | --- | --- | --- |
19
19
  | `--port N` | number | `4400` (or `RETICLE_PORT`, or the port in `.reticle.json`) | Bridge port |
20
20
  | `--drive <url>` | string | unset | Have the daemon launch its own browser at this URL, so the agent has autonomous control without relying on your tab |
21
- | `--headless` | boolean | `true` for `mcp` | Hide that browser |
22
- | `--headed` | boolean | `false` | Show it |
21
+ | `--headless` | boolean | on when `CI` or `RETICLE_HEADLESS` is set, or on Linux with no display | Hide that browser |
22
+ | `--headed` | boolean | on otherwise | Show it |
23
23
  | `--http` | boolean | `false` | Forward the HTTP verify endpoint flags to the daemon it spawns |
24
24
  | `--http-port N` | number | unset | Port for that endpoint |
25
25
  | `--http-token T` | string | unset | Bearer token for it |
26
26
 
27
27
  ## The rule this command lives by
28
28
 
29
- The proxy **is** the MCP server the editor launched. Nothing respawns it, so an uncaught throw here is what a user experiences as "the MCP server disconnected". Three behaviours follow from that:
29
+ The proxy **is** the MCP server the editor launched. Nothing respawns it, so an uncaught throw here is what a user experiences as "the MCP server disconnected". Four behaviours follow from that:
30
30
 
31
31
  - Crash handlers write to the proxy's own log file, not just stderr, because the editor swallows stderr.
32
32
  - A daemon that is not there is not fatal. The proxy answers `initialize` itself, serves the cached tool catalog, and retries a daemon on every client request. Present and complaining beats absent, because absent needs a human.
@@ -35,7 +35,7 @@ The proxy **is** the MCP server the editor launched. Nothing respawns it, so an
35
35
 
36
36
  ## What it prints
37
37
 
38
- Structured lines to the proxy log (`~/.reticle/`), not to your terminal, since stdout is the MCP transport.
38
+ Structured JSON lines on stderr, never stdout, since stdout is the MCP transport. Most editors swallow stderr, so the idle exit and the crash handlers also write to the proxy log, `~/.reticle/proxy-<port>.log`.
39
39
 
40
40
  | Event | Meaning |
41
41
  | --- | --- |
package/docs/cli/open.mdx CHANGED
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: reticle open
3
- description: Show the app in a browser, reusing the already-connected tab when there is one.
3
+ description: Open the app in your default browser, or reuse a tab that is already connected.
4
4
  icon: window-maximize
5
5
  ---
6
6
 
7
- `reticle open` is the one-command "show me the app". It resolves the port, makes sure a daemon is up, and then either reuses the tab that is already connected or opens a new one.
7
+ `reticle open` is the one-command "show me the app". It resolves the port, makes sure a daemon is up, and then either reuses the tab that is already connected or hands the URL to your operating system's default browser. It never opens the browser Reticle drives.
8
8
 
9
9
  ```bash
10
10
  npx @reticlehq/server open [url] [--port N]
@@ -27,7 +27,7 @@ One `reticle_open` line, whose fields say which of four things happened.
27
27
  | --- | --- |
28
28
  | `reusing` | A connected tab was already on the right page. Nothing was opened |
29
29
  | `reusing` + `requested` + `note` | A tab is connected on that origin but sitting on a different page. It was **left there**, not navigated. Drive it with `reticle_navigate` or open the URL yourself |
30
- | `opened` + `connected: true` | A browser was launched and a Reticle session appeared |
30
+ | `opened` + `connected: true` | The URL went to the system default browser and a new Reticle session appeared within 8 seconds |
31
31
  | `opened` + `connected: false` + `note` | The URL went to the system default browser and no session showed up within 8 seconds. Almost always means the app carries no SDK, or dials a different port |
32
32
  | `error` | No app connected and no URL given, or the browser could not be launched |
33
33
 
@@ -15,7 +15,7 @@ npx @reticlehq/server report [--session <id>] [--hook]
15
15
  | Flag | Default | What it does |
16
16
  | --- | --- | --- |
17
17
  | `--session <id>` | the newest session | Report a specific session |
18
- | `--hook` | off | Print one line, and only when the working tree changed and no claim held |
18
+ | `--hook` | off | Print a short message, and only when the working tree changed and no claim held |
19
19
 
20
20
  ## What it prints
21
21
 
@@ -27,11 +27,13 @@ session lease-85f8191b-3874-457b-973b-8ee365e5acfb
27
27
  ✗ signal order:placed
28
28
  ```
29
29
 
30
+ The report ends with one more line, an invitation to talk to the founder or leave an email. A session with no claims prints `no claims this session, so nothing was verified`.
31
+
30
32
  An `unknown` is never counted as held. It is Reticle saying it could not tell, and the owner beside it says what to do next.
31
33
 
32
34
  ## As a Claude Code Stop hook
33
35
 
34
- With `--hook` it prints nothing when a claim held or nothing in the tree changed, and otherwise one line, such as `Reticle: not verified. 3 claims: 1 failed, 2 unknown`. It prints Claude Code's `systemMessage` shape and always exits `0`: you see the line when the agent stops, and the agent is never blocked by it. `reticle init --hooks` adds it for you, merged into whatever `.claude/settings.json` already holds. By hand:
36
+ With `--hook` it prints nothing when a claim held or nothing in the tree changed, and otherwise one line, such as `Reticle: not verified. 3 claims: 1 failed, 2 unknown`, followed by the same invitation line. It prints Claude Code's `systemMessage` shape and always exits `0`: you see the line when the agent stops, and the agent is never blocked by it. `reticle init --hooks` adds it for you, merged into whatever `.claude/settings.json` already holds. By hand:
35
37
 
36
38
  ```json
37
39
  {
@@ -4,7 +4,7 @@ description: Free the bridge port and put a daemon back on it, reporting each ha
4
4
  icon: rotate
5
5
  ---
6
6
 
7
- `reticle restart` is [`reticle kill`](/cli/kill) followed by a daemon start that waits for a real bind.
7
+ `reticle restart` is [`reticle stop --force`](/cli/stop#freeing-the-port-force) followed by a daemon start that waits for a real bind.
8
8
 
9
9
  ```bash
10
10
  npx @reticlehq/server restart [--port N] [--force]
@@ -55,6 +55,6 @@ npx @reticlehq/server restart # after an upgrade, so the new version is
55
55
  npx @reticlehq/server status
56
56
  ```
57
57
 
58
- <Card title="Why not lsof" icon="skull" href="/cli/kill">
58
+ <Card title="Why not lsof" icon="skull" href="/cli/stop#freeing-the-port-force">
59
59
  The pipeline everyone reaches for kills the agent's own MCP proxy along with the daemon.
60
60
  </Card>
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: reticle rollback
3
- description: Restore the previously installed Reticle server version and restart.
3
+ description: Reinstall the previously installed Reticle server version, then exit so your agent restarts it.
4
4
  icon: arrow-rotate-left
5
5
  ---
6
6
 
7
- `reticle rollback` is the undo for [`reticle update`](/cli/update). It restores the previous server version and restarts.
7
+ `reticle rollback` is the undo for [`reticle update`](/cli/update). It reinstalls the version `update` replaced (recorded in the update manifest), then exits so the next start runs it.
8
8
 
9
9
  ```bash
10
10
  npx @reticlehq/server rollback
@@ -14,7 +14,11 @@ No flags.
14
14
 
15
15
  ## What it prints
16
16
 
17
- Nothing on the happy path: `rollback()` replaces the process. A failure logs `reticle_rollback_failed` with the error message.
17
+ Two structured lines on the happy path, `reticle_rollback_applying` and `reticle_rollback_applied`, each with the `version` and the `executionKind` (`global`, `local` or `npx`). A failure logs `reticle_rollback_failed` with the error message.
18
+
19
+ <Warning>
20
+ Run from a one-off `npx` download (no global or project install), there is nothing to reinstall. It logs `reticle_rollback_npx_strategy` with a note to pin the version in your MCP config (for example `@reticlehq/server@<version>` in `.mcp.json`), and does not exit. Pin the version there yourself.
21
+ </Warning>
18
22
 
19
23
  Telemetry records the move as a `version_changed` event with `direction: "rollback"`, which is treated as a release-quality alarm rather than a routine version move.
20
24
 
@@ -22,14 +26,16 @@ Telemetry records the move as a `version_changed` event with `direction: "rollba
22
26
 
23
27
  | Code | Meaning |
24
28
  | ---- | ----------------------------------------------------------- |
25
- | `0` | The previous version was restored (the process is replaced) |
29
+ | `0` | The previous version was reinstalled and the process exited |
26
30
  | `1` | There was nothing to roll back to, or the restore threw |
27
31
 
28
32
  ## Worked example
29
33
 
30
- ```bash
31
- npx @reticlehq/server update
34
+ On the global install the installer puts on your PATH (under `npx` there is nothing to roll back):
35
+
36
+ ```text
37
+ reticle update
32
38
  # the new build misbehaves:
33
- npx @reticlehq/server rollback
34
- npx @reticlehq/server version
39
+ reticle rollback
40
+ reticle version
35
41
  ```
@@ -16,10 +16,10 @@ Most people never type this. Your agent runs [`reticle mcp`](/cli/mcp), which st
16
16
 
17
17
  | Flag | Type | Default | What it does |
18
18
  | --- | --- | --- | --- |
19
- | `--port N` | number | `4400` (or `RETICLE_PORT`, or the port in `.reticle.json`) | Bridge port to bind |
19
+ | `--port N` | number | `RETICLE_PORT`, else the port in `.reticle.json`, else the daemon already serving this project, else `4400` | Bridge port to bind |
20
20
  | `--drive <url>` | string | unset | Launch Reticle's own browser at this URL instead of waiting for your tab |
21
- | `--headless` | boolean | `true` for `serve` | Hide the browser |
22
- | `--headed` | boolean | `false` | Show it. `serve` owns the pooled browser behind leases, which is batch work, so it hides by default |
21
+ | `--headless` | boolean | on when `CI` or `RETICLE_HEADLESS` is set (and not `0` or `false`), or on Linux with no display | Hide the browser |
22
+ | `--headed` | boolean | on otherwise | Show it, so you can watch the run |
23
23
  | `--http` | boolean | `false` | Also expose the HTTP verify endpoint |
24
24
  | `--http-port N` | number | unset (`7331`) | Port for that endpoint. Requires `--http`. |
25
25
  | `--http-token T` | string | unset | Bearer token the endpoint requires. Requires `--http`. |
@@ -34,7 +34,7 @@ One structured line. When a daemon already owns the port, it says so and does no
34
34
  { "t": "2026-08-15T18:43:33.065Z", "event": "reticle_daemon_already_running", "port": 4499 }
35
35
  ```
36
36
 
37
- A successful spawn logs `reticle_daemon_spawned` with the port:
37
+ Once the spawned daemon answers, it logs `reticle_daemon_spawned` with the port:
38
38
 
39
39
  ```json
40
40
  { "t": "2026-08-15T18:43:32.604Z", "event": "reticle_daemon_spawned", "port": 4499 }
@@ -0,0 +1,23 @@
1
+ ---
2
+ title: reticle setup mcp
3
+ description: Register the Reticle MCP server with every coding agent on this machine.
4
+ icon: plug
5
+ ---
6
+
7
+ `reticle setup mcp` registers the Reticle MCP server with the coding agents on this machine, so the `reticle_*` tools are there the next time each one starts. It is the registration half of the [installer](/quickstart), and you rarely need to run it yourself.
8
+
9
+ ```bash
10
+ npx @reticlehq/server setup mcp
11
+ ```
12
+
13
+ No flags, and nothing is asked. It works for your user account, not for one project, so it does not touch your app. To wire an app, run [`reticle init`](/cli/init).
14
+
15
+ ## What it prints
16
+
17
+ One line per agent: `✓ <agent>` for a new registration, `✓ <agent> (already set up)` when Reticle was there already, `⚠ <agent>: Reticle registration failed…` when a registration failed (the command then exits `1`), and `⚠ <agent>: add the reticle entry to <path> by hand` for a config it will not rewrite. If it finds no agent, it names every agent it looked for.
18
+
19
+ ## How you know it worked
20
+
21
+ Restart your coding agent. An agent reads its server list only when it starts. After the restart, the `reticle_*` tools are listed.
22
+
23
+ Codex CLI keeps a TOML config that Reticle does not rewrite. When the `codex` binary is on your PATH, Reticle registers through `codex mcp add` instead; otherwise it prints the hand-edit line above.
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: reticle status
3
- description: Ask whether the Reticle daemon is up and which app sessions have connected to it.
3
+ description: Ask whether the Reticle daemon is up, which app sessions have connected, who is signed in, and whether this folder is linked.
4
4
  icon: heart-pulse
5
5
  ---
6
6
 
7
- `reticle status` is the command that tells you whether the install actually finished. Not a tick in a checklist: a connected app.
7
+ `reticle status` tells you whether the daemon is up and which pages connected, who you are signed in to Reticle Cloud as, and whether this folder is linked to a cloud project. The account facts come from local files; no network call is made. A session listed means the SDK reached the page. Setup is finished when the first run returns a verdict.
8
8
 
9
9
  ```bash
10
10
  npx @reticlehq/server status [--port N] [--json]
@@ -19,6 +19,13 @@ npx @reticlehq/server status [--port N] [--json]
19
19
 
20
20
  ## What it prints
21
21
 
22
+ The block also carries an account row: who you are signed in as and the cloud project this folder is linked to, or what to run (`reticle connect`) when it is not. `reticle whoami` is the old name for this question; it still works for one release.
23
+
24
+ ```text
25
+ account ✓ signed in as Acme
26
+ this repo is not linked: run `reticle connect`
27
+ ```
28
+
22
29
  A short block, for whoever is reading the terminal. Real capture, daemon up with two apps connected:
23
30
 
24
31
  ```text
@@ -35,6 +42,7 @@ And with no daemon on the port:
35
42
  ```text
36
43
  reticle status
37
44
  daemon ✗ not running on :4999
45
+ port presence: free
38
46
  agent link never-attached
39
47
  next no daemon is running on this port, which is normal. An agent starts it when it
40
48
  first calls a Reticle tool, and it exits again when idle. Ask your agent to verify
@@ -45,7 +53,11 @@ A session's parenthesised notes are the ones that explain an answer you would ot
45
53
 
46
54
  ### `--json`
47
55
 
48
- The same facts as one event line on stderr, for a caller that parses rather than reads:
56
+ The same facts as one JSON line on stdout, so a caller can pipe it to a parser:
57
+
58
+ ```bash
59
+ npx @reticlehq/server status --json | jq '.running, .sessionCount'
60
+ ```
49
61
 
50
62
  ```json
51
63
  {
@@ -67,6 +79,7 @@ It is one line in the terminal, pretty-printed here, with `why` trimmed at the e
67
79
  "sessionId": "s223e0fad-e012-43f9-a23d-6d585470c90d",
68
80
  "url": "http://localhost:4310/",
69
81
  "throttled": false,
82
+ "hidden": false,
70
83
  "stale": false,
71
84
  "pendingMarks": 0
72
85
  }
@@ -75,9 +88,9 @@ It is one line in the terminal, pretty-printed here, with `why` trimmed at the e
75
88
  | Field | Meaning |
76
89
  | --- | --- |
77
90
  | `running` | Whether a usable daemon owns the port |
78
- | `presence` | Present when the pid file is dead: `daemon`, `foreign`, or `absent`. The port is asked, not just the pid file |
91
+ | `presence` | Present when no usable daemon answered: `foreign` (something else holds the port) or `free`. The port is asked, not just the pid file |
79
92
  | `pid` | The daemon process |
80
- | `sessionCount` / `sessions` | Connected app sessions, each with `sessionId`, `url`, `throttled`, `stale`, `pendingMarks` |
93
+ | `sessionCount` / `sessions` | Connected app sessions, each with `sessionId`, `url`, `throttled`, `hidden`, `stale`, `pendingMarks` |
81
94
  | `why` | Present when zero sessions connected. Names the two likely causes and refuses to assert either |
82
95
  | `updateAvailable` | Present when a newer server version is on the registry |
83
96
 
package/docs/cli/stop.mdx CHANGED
@@ -1,21 +1,24 @@
1
1
  ---
2
2
  title: reticle stop
3
- description: Stop the Reticle daemon on a port, escalating from SIGTERM to SIGKILL if it will not go.
3
+ description: Stop the Reticle daemon on a port, or free the port by its listener with --force, never touching the agent's MCP proxy.
4
4
  icon: circle-stop
5
5
  ---
6
6
 
7
- `reticle stop` reads the pid recorded for the port and stops that process.
7
+ `reticle stop` reads the pid recorded for the port and stops that process. `reticle stop --force` asks **who is listening** on the port instead, and frees it.
8
8
 
9
9
  ```bash
10
- npx @reticlehq/server stop [--port N] [--quiet]
10
+ npx @reticlehq/server stop [--port N] [--quiet] [--force]
11
11
  ```
12
12
 
13
+ `reticle kill` is the old name for `stop --force`. It still works for one release and prints one line naming the new spelling.
14
+
13
15
  ## Flags
14
16
 
15
17
  | Flag | Type | Default | What it does |
16
18
  | --- | --- | --- | --- |
17
19
  | `--port N` | number | `4400` (or `RETICLE_PORT`, or the port in `.reticle.json`) | Which daemon to stop |
18
20
  | `--quiet` | boolean | `false` | Print nothing. For scripts that stop a daemon that may not be running |
21
+ | `--force` | boolean | `false` | Find the process by the **listener** on the port, not by the recorded pid. See [Freeing the port](#freeing-the-port-force) |
19
22
 
20
23
  ## How it stops
21
24
 
@@ -28,7 +31,7 @@ npx @reticlehq/server stop [--port N] [--quiet]
28
31
  | Event | When |
29
32
  | --- | --- |
30
33
  | `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 |
34
+ | `reticle_daemon_not_running` | No live pid for that port, and nothing answers `/status` on it. The stale pid file is removed |
32
35
  | `reticle_daemon_stop_timeout` | It survived everything. Exits `1` |
33
36
 
34
37
  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:
@@ -48,17 +51,73 @@ With `--quiet` that same run prints nothing at all and still exits `0`.
48
51
 
49
52
  <Warning>
50
53
  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).
54
+ own `reticle mcp` proxy as well as the daemon and takes both down. Use this command, or `reticle
55
+ stop --force`.
56
+ </Warning>
57
+
58
+ ## Freeing the port: `--force`
59
+
60
+ `stop` starts from the pid Reticle recorded. When that pid is dead or missing but a Reticle daemon still answers `/status` on the port (a stale pid file, or a daemon from another checkout), plain `stop` frees that listener the same way `--force` does. When nothing answers `/status`, plain `stop` reports `reticle_daemon_not_running`. `stop --force` always asks the **port** first, and is the command to reach for when the pid file and the port disagree.
61
+
62
+ <Warning>
63
+ Never free the port with `lsof -ti tcp:4400 | xargs kill -9`. `reticle mcp` holds a **client**
64
+ socket on that port, so `-ti` lists the proxy right beside the daemon and the pipeline kills both.
65
+ When the proxy dies, the agent's next tool calls get no reply at all: not an error, not a timeout.
66
+ Nothing is written to the proxy log either, because the process that writes it is the one that
67
+ died. That is the mechanism behind most "my MCP disconnected" reports.
53
68
  </Warning>
54
69
 
55
- ## When this is not enough
70
+ | | `reticle stop` | `reticle stop --force` |
71
+ | --- | --- | --- |
72
+ | Finds the process by | the pid recorded in Reticle's own state | the **listener** on the port |
73
+ | Works when the pid file is stale or was never written | yes, when the daemon answers `/status` | yes |
74
+ | Works on a daemon from another checkout | yes, when it answers `/status` | yes |
75
+ | Works without `lsof` (Windows, slim containers) | yes | yes, falling back to the recorded pid and saying so |
76
+
77
+ ### How `--force` decides
78
+
79
+ 1. Look up the listener with `lsof -nP -iTCP:<port> -sTCP:LISTEN`. Client sockets are excluded by construction, so the proxy is never a candidate.
80
+ 2. It is Reticle's if it answers `/status`, **or** if it is the pid Reticle recorded for the port. `/status` outranks the pid file, so a daemon started from another checkout is still recognised as ours.
81
+ 3. Anything else is refused, by name: it is someone else's process.
82
+ 4. `SIGTERM`, then `SIGKILL` after 5 seconds, then report that it survived and exit `1`.
83
+
84
+ ### What `--force` prints
85
+
86
+ Real captures, taken against a daemon started on a scratch port. The long `note` and `reason` strings are trimmed at the ellipsis. Measured exit codes: `0` for killed and nothing-to-do, `1` for refused.
87
+
88
+ Killed:
89
+
90
+ ```
91
+ {"t":"2026-08-15T18:43:43.590Z","event":"reticle_killed","port":4499,"pid":78621,"escalated":false,"listenerIdentified":true,"note":"only the listener was signalled. Any `reticle mcp` proxy on this port holds a client connection, not the port, and was left alone ..."}
92
+ ```
93
+
94
+ Refused, because the listener is not ours. This one was captured with `python3 -m http.server 4498` holding the port:
95
+
96
+ ```
97
+ {"t":"2026-08-15T18:43:57.128Z","event":"reticle_kill_refused","port":4498,"reason":"pid 78795 (\"Python\") is listening, and it is not a Reticle daemon ... it never answered /status and it is not the pid Reticle recorded. Killing it would be killing someone else's process. Run it again with --force if that is what you meant, or start Reticle on another port.","holder":"Python"}
98
+ ```
99
+
100
+ Nothing to free:
101
+
102
+ ```
103
+ {"t":"2026-08-15T18:43:43.784Z","event":"reticle_kill_nothing_to_do","port":4499,"presence":"free"}
104
+ ```
105
+
106
+ | Event | When |
107
+ | ---------------------------- | ----------------------------------------------------------------- |
108
+ | `reticle_killed` | The listener is gone. `escalated: true` means it took a `SIGKILL` |
109
+ | `reticle_kill_refused` | The listener is not a Reticle daemon. Exits `1` |
110
+ | `reticle_kill_survived` | It survived `SIGKILL`. The port is still held. Exits `1` |
111
+ | `reticle_kill_nothing_to_do` | No listener, and no live recorded pid |
112
+
113
+ `listenerIdentified: false` means `lsof` could not run and the pid came from Reticle's records rather than from an observed listener. Those are different claims, so the field says which one you got.
56
114
 
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.
115
+ With `--force`, exit `0` means the port is free and `1` means it is still held: refused, or the process survived `SIGKILL`.
58
116
 
59
117
  ## Worked example
60
118
 
61
119
  ```bash
62
120
  npx @reticlehq/server stop --port 4400 --quiet && npx @reticlehq/server serve --port 4400
63
121
  npx @reticlehq/server restart --port 4400 # the same thing, honest about each half
122
+ npx @reticlehq/server stop --force # the port is held and the pid file says nothing
64
123
  ```
@@ -0,0 +1,62 @@
1
+ ---
2
+ title: reticle try
3
+ description: Sign in, then watch Reticle drive any URL once and say which journeys work.
4
+ icon: play
5
+ ---
6
+
7
+ `reticle try` is the fastest way to see Reticle on your own app. It drives a URL once with the Reticle Harness, in a browser window you can watch, and ends with a list of the journeys it tried and how each one ended.
8
+
9
+ ```bash
10
+ npx @reticlehq/server try <url> [--persona <who>]
11
+ ```
12
+
13
+ The app needs nothing installed. A page with no Reticle SDK gets one supplied for the drive, so verdicts cover the DOM, network, console and routes. There is no component state and no source `file:line` until you run [`reticle init`](/cli/init).
14
+
15
+ ## Sign in first
16
+
17
+ The drive runs on the Reticle platform, so `try` needs a linked folder. On a machine that is not linked it drives nothing and says:
18
+
19
+ ```
20
+ Sign in first: reticle connect (it is free, no card)
21
+ ```
22
+
23
+ Run [`reticle connect`](/cli/cloud) in the folder, then run `try` again. It exits `1` in this case.
24
+
25
+ ## Arguments and flags
26
+
27
+ | Argument | Type | Default | What it does |
28
+ | --- | --- | --- | --- |
29
+ | `url` | string, positional, **required** | none | The page to drive. It must already be running |
30
+ | `--persona <who>` | string | unset | Who to be, or what to get done ("a returning customer checking out"). Without it, the platform plans the journeys from what the page offers |
31
+
32
+ ## What happens
33
+
34
+ 1. `try` asks the platform for one free drive. If the workspace needs a card first, it prints the platform's message and the plan page, then exits `1` without opening anything.
35
+ 2. It opens the URL in a window you can watch, through the Reticle daemon, and starting one if none is running.
36
+ 3. The Harness drives for up to two minutes and 40 steps, and records what it drove as saved flows.
37
+ 4. It prints the result and sends the run to your dashboard, the same way [`reticle sync`](/cli/cloud#reticle-sync) does.
38
+
39
+ ## What it prints
40
+
41
+ A `Driving <url>` line first, telling you to watch the window, then:
42
+
43
+ ```
44
+ Tried 3 journeys: 1 work, 1 broken, 1 not proved
45
+ ✓ works: Shopper: checks out
46
+ ✗ broken: Shopper: applies a coupon
47
+ ? not proved (blocked): Admin: refunds
48
+ See it in your dashboard: <the run's page>
49
+ ```
50
+
51
+ There is one `See it in your dashboard` line per run. When the dashboard address is not known, a single `Saved to your dashboard: <url>` line takes their place.
52
+
53
+ Each verdict comes from the engine. A journey that neither passed nor failed is reported as **not proved**. It is never counted as working.
54
+
55
+ If the run could not be sent, `try` says so, keeps the run on this machine and tells you to run `reticle sync`. It never prints a dashboard line in that case.
56
+
57
+ ## Exit codes
58
+
59
+ | Code | When |
60
+ | ---- | -------------------------------------------------------------------------- |
61
+ | `0` | The drive ran. Broken journeys are a finding, not a failure of the command |
62
+ | `1` | Not signed in, no free drive granted, or the drive could not run |