@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.
- package/README.md +1 -1
- package/SKILL.md +123 -116
- package/dist/chromium-launch-options.d.ts +3 -1
- package/dist/chromium-launch-options.js +2 -1
- package/dist/command/cli/adhoc-suite.d.ts +14 -0
- package/dist/command/cli/adhoc-suite.js +42 -7
- package/dist/command/cli/adhoc-verdict.d.ts +19 -2
- package/dist/command/cli/adhoc-verdict.js +76 -9
- package/dist/command/cli/answers/gate-exit.d.ts +23 -0
- package/dist/command/cli/answers/gate-exit.js +45 -0
- package/dist/command/cli/answers/gate-hook-message.d.ts +2 -0
- package/dist/command/cli/answers/gate-hook-message.js +3 -1
- package/dist/command/cli/answers/open-note.d.ts +2 -0
- package/dist/command/cli/answers/open-note.js +22 -0
- package/dist/command/cli/auth/device-flow.d.ts +13 -2
- package/dist/command/cli/auth/device-flow.js +17 -0
- package/dist/command/cli/cli-doctor.js +14 -0
- package/dist/command/cli/cli-flow-commands.d.ts +0 -11
- package/dist/command/cli/cli-flow-commands.js +31 -112
- package/dist/command/cli/cli-kill.js +3 -2
- package/dist/command/cli/cli-parse-grammar.d.ts +24 -0
- package/dist/command/cli/cli-parse-grammar.js +75 -0
- package/dist/command/cli/cli-parse-verify.d.ts +2 -0
- package/dist/command/cli/cli-parse-verify.js +18 -0
- package/dist/command/cli/cli-parse.d.ts +19 -28
- package/dist/command/cli/cli-parse.js +82 -182
- package/dist/command/cli/cli-update-commands.d.ts +1 -1
- package/dist/command/cli/cli-update-commands.js +61 -9
- package/dist/command/cli/cli-usage.d.ts +33 -0
- package/dist/command/cli/cli-usage.js +287 -0
- package/dist/command/cli/cli-verify.d.ts +35 -5
- package/dist/command/cli/cli-verify.js +114 -35
- package/dist/command/cli/cloud-cli.d.ts +13 -0
- package/dist/command/cli/cloud-cli.js +192 -341
- package/dist/command/cli/cloud-kit.d.ts +12 -0
- package/dist/command/cli/cloud-kit.js +41 -2
- package/dist/command/cli/cloud-link.d.ts +57 -0
- package/dist/command/cli/cloud-link.js +308 -0
- package/dist/command/cli/cloud-login.d.ts +22 -0
- package/dist/command/cli/cloud-login.js +96 -8
- package/dist/command/cli/context-command.d.ts +1 -0
- package/dist/command/cli/context-command.js +33 -0
- package/dist/command/cli/daemon-start-options.d.ts +3 -0
- package/dist/command/cli/daemon-start-options.js +24 -3
- package/dist/command/cli/doctor/browser/chromium-hint.d.ts +46 -0
- package/dist/command/cli/doctor/browser/chromium-hint.js +99 -1
- package/dist/command/cli/doctor/doctor-coverage-line.d.ts +2 -0
- package/dist/command/cli/doctor/doctor-coverage-line.js +47 -0
- package/dist/command/cli/doctor/doctor-project-line.d.ts +0 -12
- package/dist/command/cli/doctor/doctor-project-line.js +5 -4
- package/dist/command/cli/doctor/doctor-rows.d.ts +6 -0
- package/dist/command/cli/doctor/doctor-rows.js +6 -0
- package/dist/command/cli/doctor/doctor-signing-line.d.ts +38 -0
- package/dist/command/cli/doctor/doctor-signing-line.js +114 -0
- package/dist/command/cli/drive/drive-attach.d.ts +27 -2
- package/dist/command/cli/drive/drive-attach.js +71 -4
- package/dist/command/cli/drive/drive-command.d.ts +2 -1
- package/dist/command/cli/drive/drive-command.js +13 -7
- package/dist/command/cli/known-regression.d.ts +13 -0
- package/dist/command/cli/known-regression.js +34 -0
- package/dist/command/cli/launch/sdk-version-match.d.ts +12 -0
- package/dist/command/cli/launch/sdk-version-match.js +25 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.js +15 -3
- package/dist/command/cli/mcp-command.d.ts +6 -0
- package/dist/command/cli/mcp-command.js +13 -5
- package/dist/command/cli/ports/port-holder.d.ts +10 -0
- package/dist/command/cli/ports/port-holder.js +25 -1
- package/dist/command/cli/project-name.d.ts +29 -1
- package/dist/command/cli/project-name.js +107 -2
- package/dist/command/cli/setup-mcp-cli.d.ts +17 -1
- package/dist/command/cli/setup-mcp-cli.js +35 -12
- package/dist/command/cli/status/status-lines.d.ts +1 -0
- package/dist/command/cli/status/status-lines.js +47 -2
- package/dist/command/cli/status/workspace-links.d.ts +10 -0
- package/dist/command/cli/status/workspace-links.js +29 -0
- package/dist/command/cli/try-command.d.ts +96 -0
- package/dist/command/cli/try-command.js +362 -0
- package/dist/command/cli/tutorial.d.ts +0 -100
- package/dist/command/cli/tutorial.js +0 -181
- package/dist/command/cli/verify-results.d.ts +19 -0
- package/dist/command/cli/verify-results.js +29 -0
- package/dist/command/cli-onboarding.d.ts +0 -11
- package/dist/command/cli-onboarding.js +0 -15
- package/dist/command/cli.d.ts +20 -0
- package/dist/command/cli.js +130 -104
- package/dist/command/daemon/binding/daemon-status-probe.d.ts +2 -0
- package/dist/command/daemon/binding/daemon-status-probe.js +1 -0
- package/dist/command/daemon/daemon-resilience.js +4 -4
- package/dist/command/daemon/daemon-resolve.d.ts +23 -1
- package/dist/command/daemon/daemon-resolve.js +79 -9
- package/dist/command/setup/agent-writer.d.ts +1 -1
- package/dist/command/setup/agent-writer.js +3 -2
- package/dist/command/setup/bringup/bridge-port.d.ts +3 -1
- package/dist/command/setup/bringup/bridge-port.js +13 -3
- package/dist/command/setup/bringup/connect-lease.d.ts +1 -0
- package/dist/command/setup/bringup/connect-lease.js +1 -0
- package/dist/command/setup/bringup/dev-server-log-cap.js +2 -0
- package/dist/command/setup/bringup/dev-server-wait.d.ts +8 -0
- package/dist/command/setup/bringup/dev-server-wait.js +19 -0
- package/dist/command/setup/bringup/ensure-daemon.js +9 -2
- package/dist/command/setup/init/agent-restart.d.ts +23 -0
- package/dist/command/setup/init/agent-restart.js +28 -0
- package/dist/command/setup/init/init-port.d.ts +14 -1
- package/dist/command/setup/init/init-port.js +32 -2
- package/dist/command/setup/init/init-runtime.d.ts +22 -2
- package/dist/command/setup/init/init-runtime.js +114 -38
- package/dist/command/setup/node-effects.d.ts +2 -0
- package/dist/command/setup/node-effects.js +38 -9
- package/dist/command/setup/probe/existing-app.d.ts +12 -0
- package/dist/command/setup/probe/existing-app.js +14 -0
- package/dist/command/setup/remaining-steps.js +2 -1
- package/dist/command/setup/run-setup.d.ts +34 -9
- package/dist/command/setup/run-setup.js +65 -51
- package/dist/command/setup/setup-command.d.ts +25 -1
- package/dist/command/setup/setup-command.js +59 -4
- package/dist/command/setup/setup-mcp.js +25 -2
- package/dist/command/setup/tauri-signing.d.ts +19 -0
- package/dist/command/setup/tauri-signing.js +79 -0
- package/dist/command/setup/terminal/listeners.d.ts +10 -1
- package/dist/command/setup/terminal/listeners.js +37 -6
- package/dist/command/update/update-nudge.d.ts +9 -0
- package/dist/command/update/update-nudge.js +1 -1
- package/dist/command/update/updater.js +11 -15
- package/dist/command/version/version-nudge.js +3 -0
- package/dist/command/version/version-skew.d.ts +20 -1
- package/dist/command/version/version-skew.js +49 -4
- package/dist/features/crawl/crawl-tools.js +4 -0
- package/dist/features/crawl/crawl.d.ts +6 -0
- package/dist/features/crawl/crawl.js +23 -2
- package/dist/features/exhaust/ledger.d.ts +21 -14
- package/dist/features/exhaust/ledger.js +35 -9
- package/dist/features/harness/app-findings.d.ts +2 -0
- package/dist/features/harness/app-findings.js +52 -0
- package/dist/features/harness/drive-report.d.ts +61 -1
- package/dist/features/harness/drive-report.js +394 -26
- package/dist/features/harness/drive-runs.d.ts +120 -0
- package/dist/features/harness/drive-runs.js +289 -0
- package/dist/features/harness/drivers.d.ts +10 -14
- package/dist/features/harness/drivers.js +10 -14
- package/dist/features/harness/explore/console-pages.d.ts +15 -0
- package/dist/features/harness/explore/console-pages.js +146 -0
- package/dist/features/harness/explore/disparity.d.ts +19 -0
- package/dist/features/harness/explore/disparity.js +71 -0
- package/dist/features/harness/explore/fake-app.d.ts +16 -0
- package/dist/features/harness/explore/fake-app.js +49 -0
- package/dist/features/harness/explore/goal-search.d.ts +26 -0
- package/dist/features/harness/explore/goal-search.js +144 -0
- package/dist/features/harness/explore/page-tree.d.ts +49 -0
- package/dist/features/harness/explore/page-tree.js +148 -0
- package/dist/features/harness/explore/site-map.d.ts +34 -0
- package/dist/features/harness/explore/site-map.js +150 -0
- package/dist/features/harness/fill-values.d.ts +3 -73
- package/dist/features/harness/fill-values.js +3 -169
- package/dist/features/harness/goals.d.ts +82 -0
- package/dist/features/harness/goals.js +330 -0
- package/dist/features/harness/harness.d.ts +51 -1
- package/dist/features/harness/harness.js +207 -6
- package/dist/features/harness/platform/drive-target.d.ts +30 -0
- package/dist/features/harness/platform/drive-target.js +81 -0
- package/dist/features/harness/platform/local-apps.d.ts +127 -0
- package/dist/features/harness/platform/local-apps.js +280 -0
- package/dist/features/harness/platform/persona-credentials.d.ts +20 -0
- package/dist/features/harness/platform/persona-credentials.js +69 -0
- package/dist/features/harness/platform/platform-drives.d.ts +61 -0
- package/dist/features/harness/platform/platform-drives.js +114 -0
- package/dist/features/harness/platform/refusal.d.ts +52 -0
- package/dist/features/harness/platform/refusal.js +71 -0
- package/dist/features/harness/platform/remote-drive.d.ts +186 -0
- package/dist/features/harness/platform/remote-drive.js +378 -0
- package/dist/features/harness/platform/script.d.ts +94 -0
- package/dist/features/harness/platform/script.js +260 -0
- package/dist/features/harness/platform/server-driver.d.ts +54 -0
- package/dist/features/harness/platform/server-driver.js +182 -0
- package/dist/features/harness/platform-config.d.ts +41 -1
- package/dist/features/harness/platform-config.js +106 -9
- package/dist/features/harness/route-guess.d.ts +13 -0
- package/dist/features/harness/route-guess.js +49 -0
- package/dist/features/harness/script/app-controls.d.ts +5 -0
- package/dist/features/harness/script/app-controls.js +40 -0
- package/dist/features/harness/script/lane-ids.d.ts +14 -0
- package/dist/features/harness/script/lane-ids.js +16 -0
- package/dist/features/harness/script/script-run.d.ts +70 -0
- package/dist/features/harness/script/script-run.js +606 -0
- package/dist/features/license/license.d.ts +2 -2
- package/dist/features/visual/step-shots.d.ts +31 -0
- package/dist/features/visual/step-shots.js +231 -0
- package/dist/features/visual/visual-tools.d.ts +10 -1
- package/dist/features/visual/visual-tools.js +62 -17
- package/dist/hooks/client-directory.d.ts +18 -0
- package/dist/hooks/client-directory.js +57 -0
- package/dist/hooks/coding-agents.d.ts +34 -0
- package/dist/hooks/coding-agents.js +117 -0
- package/dist/hooks/driven-by.d.ts +23 -0
- package/dist/hooks/driven-by.js +56 -0
- package/dist/hooks/hook-bus.d.ts +4 -0
- package/dist/hooks/hook-bus.js +18 -0
- package/dist/hooks/hook-commands.js +15 -4
- package/dist/hooks/tool-log.d.ts +9 -0
- package/dist/hooks/tool-log.js +29 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +80 -243
- package/dist/judgement/capsule/capsule-store.d.ts +2 -2
- package/dist/judgement/capsule/causal-summary.d.ts +15 -1
- package/dist/judgement/capsule/causal-summary.js +33 -0
- package/dist/judgement/runs/artifact/build-verification-run.d.ts +1 -1
- package/dist/judgement/runs/artifact/build-verification-run.js +25 -3
- package/dist/judgement/runs/artifact/gap-summary.d.ts +0 -18
- package/dist/judgement/runs/artifact/gap-summary.js +12 -3
- package/dist/judgement/runs/artifact/replay-mapping.d.ts +1 -1
- package/dist/judgement/runs/artifact/replay-mapping.js +37 -11
- package/dist/judgement/runs/artifact/run-store.d.ts +14 -2
- package/dist/judgement/runs/artifact/run-store.js +195 -3
- package/dist/judgement/runs/context-tools.js +59 -1
- package/dist/judgement/runs/default-run-id.d.ts +3 -0
- package/dist/judgement/runs/default-run-id.js +16 -0
- package/dist/judgement/runs/drive-run.d.ts +71 -1
- package/dist/judgement/runs/drive-run.js +317 -5
- package/dist/judgement/runs/repair-prompt.js +1 -1
- package/dist/judgement/runs/resume.d.ts +44 -0
- package/dist/judgement/runs/resume.js +137 -0
- package/dist/judgement/runs/reticle-runner.js +13 -3
- package/dist/judgement/runs/runner-port.d.ts +5 -1
- package/dist/judgement/runs/runner-port.js +8 -2
- package/dist/judgement/runs/verification-sync.d.ts +5 -2
- package/dist/judgement/runs/verification-sync.js +40 -18
- package/dist/language/flows/change/gate.d.ts +10 -0
- package/dist/language/flows/change/gate.js +22 -0
- package/dist/language/flows/decision.js +36 -1
- package/dist/language/flows/fields/flow-secret-field.d.ts +12 -0
- package/dist/language/flows/fields/flow-secret-field.js +25 -2
- package/dist/language/flows/flow-anchor.d.ts +61 -10
- package/dist/language/flows/flow-anchor.js +98 -6
- package/dist/language/flows/flow-cross-step.d.ts +15 -0
- package/dist/language/flows/flow-cross-step.js +21 -0
- package/dist/language/flows/flow-intent.d.ts +1 -0
- package/dist/language/flows/flow-journey.d.ts +6 -0
- package/dist/language/flows/flow-journey.js +20 -0
- package/dist/language/flows/flow-learning.d.ts +4 -0
- package/dist/language/flows/flow-learning.js +45 -14
- package/dist/language/flows/flow-mutate-tools.js +5 -3
- package/dist/language/flows/flow-replay-run.d.ts +23 -9
- package/dist/language/flows/flow-replay-run.js +115 -110
- package/dist/language/flows/flow-replay-types.d.ts +1 -1
- package/dist/language/flows/flow-replay.d.ts +40 -1
- package/dist/language/flows/flow-replay.js +110 -22
- package/dist/language/flows/flow-result.d.ts +22 -1
- package/dist/language/flows/flow-result.js +47 -2
- package/dist/language/flows/flow-scope.js +5 -1
- package/dist/language/flows/flow-step-runners.d.ts +22 -2
- package/dist/language/flows/flow-step-runners.js +247 -47
- package/dist/language/flows/flow-store-for-session.d.ts +2 -2
- package/dist/language/flows/flow-store-for-session.js +7 -3
- package/dist/language/flows/flow-tools.d.ts +10 -0
- package/dist/language/flows/flow-tools.js +112 -89
- package/dist/language/flows/flows.d.ts +16 -1
- package/dist/language/flows/flows.js +74 -12
- package/dist/language/flows/heal-run.js +6 -4
- package/dist/language/flows/narrow-write.d.ts +7 -0
- package/dist/language/flows/narrow-write.js +36 -1
- package/dist/language/flows/recording/flake.d.ts +2 -2
- package/dist/language/flows/recording/recording-backtrack.js +14 -1
- package/dist/language/flows/recording/tape/recordings.d.ts +58 -4
- package/dist/language/flows/recording/tape/recordings.js +95 -13
- package/dist/language/flows/replay-from-hud.d.ts +20 -0
- package/dist/language/flows/replay-from-hud.js +51 -0
- package/dist/language/flows/replay.d.ts +9 -5
- package/dist/language/flows/replay.js +56 -15
- package/dist/language/flows/single-replay.d.ts +7 -0
- package/dist/language/flows/single-replay.js +26 -0
- package/dist/language/flows/suite/suite-flakes.js +2 -0
- package/dist/language/flows/suite-selection.d.ts +2 -15
- package/dist/language/flows/suite-selection.js +4 -3
- package/dist/language/flows/verify-change-tools.d.ts +1 -0
- package/dist/language/flows/verify-change-tools.js +202 -191
- package/dist/launch-chromium.d.ts +27 -5
- package/dist/launch-chromium.js +38 -8
- package/dist/memory/cloud/cloud-config.d.ts +22 -1
- package/dist/memory/cloud/cloud-config.js +34 -5
- package/dist/memory/cloud/cloud-sync.d.ts +17 -14
- package/dist/memory/cloud/cloud-sync.js +15 -4
- package/dist/memory/cloud/harness-config.d.ts +75 -1
- package/dist/memory/cloud/harness-config.js +115 -24
- package/dist/memory/cloud/hud-notices-source.d.ts +21 -0
- package/dist/memory/cloud/hud-notices-source.js +128 -0
- package/dist/memory/cloud/memory-scope.d.ts +161 -0
- package/dist/memory/cloud/memory-scope.js +227 -0
- package/dist/memory/cloud/sync-cycle.d.ts +44 -7
- package/dist/memory/cloud/sync-cycle.js +129 -15
- package/dist/memory/cloud/sync-daemon.d.ts +11 -0
- package/dist/memory/cloud/sync-daemon.js +121 -9
- package/dist/memory/cloud/sync-disk.d.ts +1 -1
- package/dist/memory/cloud/sync-disk.js +31 -10
- package/dist/memory/cloud/sync-screenshots.d.ts +32 -0
- package/dist/memory/cloud/sync-screenshots.js +105 -0
- package/dist/memory/cloud/unsynced-roots.d.ts +47 -0
- package/dist/memory/cloud/unsynced-roots.js +166 -0
- package/dist/memory/impact/account-watch.d.ts +34 -0
- package/dist/memory/impact/account-watch.js +59 -0
- package/dist/memory/impact/impact-recorder.d.ts +8 -0
- package/dist/memory/impact/impact-recorder.js +12 -2
- package/dist/memory/impact/impact-store.d.ts +17 -4
- package/dist/memory/impact/impact-store.js +169 -63
- package/dist/memory/intent/inline-intent.d.ts +1 -0
- package/dist/memory/intent/intent-shard-store.js +16 -4
- package/dist/memory/intent/intent-shard.d.ts +14 -2
- package/dist/memory/intent/intent-store.d.ts +1 -0
- package/dist/memory/intent/intent-tools.js +122 -4
- package/dist/memory/intent/open-intents.d.ts +6 -0
- package/dist/memory/intent/open-intents.js +10 -1
- package/dist/memory/intent/settled-words.d.ts +24 -0
- package/dist/memory/intent/settled-words.js +130 -0
- package/dist/memory/journal/drive-flow.d.ts +16 -0
- package/dist/memory/journal/drive-flow.js +34 -2
- package/dist/memory/journal/drive-run-flush.d.ts +2 -0
- package/dist/memory/journal/drive-run-flush.js +20 -5
- package/dist/memory/journal/envelope.d.ts +8 -8
- package/dist/memory/journal/journal-recorder.js +52 -3
- package/dist/memory/journal/on-disk/retention.d.ts +8 -0
- package/dist/memory/journal/on-disk/retention.js +32 -2
- package/dist/memory/journal/on-disk/startup-maintenance.js +3 -1
- package/dist/memory/journal/on-disk/workspace-tiers.js +9 -4
- package/dist/memory/journal/session-end.d.ts +15 -1
- package/dist/memory/journal/session-end.js +42 -9
- package/dist/memory/project/artifact-root-resolver.d.ts +26 -1
- package/dist/memory/project/artifact-root-resolver.js +125 -16
- package/dist/memory/project/artifact-root.d.ts +46 -8
- package/dist/memory/project/artifact-root.js +89 -10
- package/dist/memory/project/dir/reticle-dir.d.ts +18 -2
- package/dist/memory/project/dir/reticle-dir.js +26 -3
- package/dist/memory/project/link-directory.d.ts +15 -0
- package/dist/memory/project/link-directory.js +44 -0
- package/dist/memory/project/project-tools.js +22 -3
- package/dist/memory/project/root-claims.d.ts +6 -0
- package/dist/memory/project/root-claims.js +39 -0
- package/dist/memory/project/session-root.d.ts +26 -1
- package/dist/memory/project/session-root.js +49 -5
- package/dist/memory/project/sync-status.d.ts +85 -0
- package/dist/memory/project/sync-status.js +224 -0
- package/dist/memory/recall/memory-tools.js +47 -2
- package/dist/memory/recall/platform-memory.d.ts +34 -0
- package/dist/memory/recall/platform-memory.js +139 -0
- package/dist/memory/recall/project-memory.d.ts +19 -0
- package/dist/memory/recall/project-memory.js +80 -13
- package/dist/portal/bridge/bridge.d.ts +9 -3
- package/dist/portal/bridge/bridge.js +82 -22
- package/dist/portal/bridge/harness-request.d.ts +23 -0
- package/dist/portal/bridge/harness-request.js +27 -0
- package/dist/portal/bridge/pairing-token.d.ts +9 -0
- package/dist/portal/bridge/pairing-token.js +17 -0
- package/dist/portal/bridge/wrong-path.d.ts +17 -0
- package/dist/portal/bridge/wrong-path.js +35 -0
- package/dist/portal/input/network-mock-tools.js +11 -2
- package/dist/portal/input/real-input.d.ts +83 -10
- package/dist/portal/input/real-input.js +218 -30
- package/dist/portal/input/viewport-tools.js +3 -3
- package/dist/portal/pool/browser-pool.d.ts +70 -9
- package/dist/portal/pool/browser-pool.js +190 -37
- package/dist/portal/pool/context-permissions.d.ts +33 -0
- package/dist/portal/pool/context-permissions.js +33 -0
- package/dist/portal/pool/lease-marker-stamp.d.ts +23 -0
- package/dist/portal/pool/lease-marker-stamp.js +49 -0
- package/dist/portal/pool/playwright-launcher.d.ts +35 -0
- package/dist/portal/pool/playwright-launcher.js +64 -3
- package/dist/portal/pool/pool-contract.d.ts +28 -5
- package/dist/portal/session/agent-link.d.ts +8 -0
- package/dist/portal/session/agent-link.js +17 -0
- package/dist/portal/session/command-payload.d.ts +8 -0
- package/dist/portal/session/command-payload.js +24 -0
- package/dist/portal/session/daemon-answers.d.ts +3 -3
- package/dist/portal/session/daemon-answers.js +4 -2
- package/dist/portal/session/dev-server/dev-command.d.ts +21 -0
- package/dist/portal/session/dev-server/dev-command.js +87 -12
- package/dist/portal/session/facts/departure-note.d.ts +22 -0
- package/dist/portal/session/facts/departure-note.js +47 -0
- package/dist/portal/session/facts/observed-state.d.ts +16 -18
- package/dist/portal/session/facts/observed-state.js +46 -3
- package/dist/portal/session/facts/session-replaced.d.ts +5 -0
- package/dist/portal/session/facts/session-replaced.js +5 -0
- package/dist/portal/session/first-run-wiring.d.ts +42 -0
- package/dist/portal/session/first-run-wiring.js +132 -0
- package/dist/portal/session/human/live-control.d.ts +9 -2
- package/dist/portal/session/human/live-control.js +12 -3
- package/dist/portal/session/human/notes-ledger.d.ts +20 -0
- package/dist/portal/session/human/notes-ledger.js +55 -0
- package/dist/portal/session/human/review-store.d.ts +12 -0
- package/dist/portal/session/human/review-store.js +18 -10
- package/dist/portal/session/live-control-tools.d.ts +0 -13
- package/dist/portal/session/live-control-tools.js +107 -13
- package/dist/portal/session/narration-args.d.ts +5 -0
- package/dist/portal/session/narration-args.js +17 -0
- package/dist/portal/session/no-session-diagnosis.d.ts +8 -1
- package/dist/portal/session/no-session-diagnosis.js +46 -9
- package/dist/portal/session/no-session-next-action.d.ts +31 -0
- package/dist/portal/session/no-session-next-action.js +159 -60
- package/dist/portal/session/no-session-watch.d.ts +14 -1
- package/dist/portal/session/no-session-watch.js +227 -17
- package/dist/portal/session/presence/session-lease.js +1 -1
- package/dist/portal/session/presence/session-mirror.js +3 -0
- package/dist/portal/session/recorded-gaps.d.ts +97 -0
- package/dist/portal/session/recorded-gaps.js +251 -0
- package/dist/portal/session/serving-directory.d.ts +27 -0
- package/dist/portal/session/serving-directory.js +45 -0
- package/dist/portal/session/session-health.d.ts +18 -0
- package/dist/portal/session/session-health.js +9 -1
- package/dist/portal/session/session-info.d.ts +8 -1
- package/dist/portal/session/session-info.js +8 -1
- package/dist/portal/session/session-manager.d.ts +39 -0
- package/dist/portal/session/session-manager.js +98 -11
- package/dist/portal/session/session-reaper.js +4 -1
- package/dist/portal/session/session-successor.d.ts +13 -0
- package/dist/portal/session/session-successor.js +1 -1
- package/dist/portal/session/session-tools.js +26 -3
- package/dist/portal/session/session.d.ts +22 -30
- package/dist/portal/session/session.js +81 -79
- package/dist/portal/session/timing/command-timeout.js +25 -1
- package/dist/portal/session/timing/wall-clock.d.ts +1 -1
- package/dist/portal/session/timing/wall-clock.js +1 -1
- package/dist/portal/session/zero-install-first-call.d.ts +31 -0
- package/dist/portal/session/zero-install-first-call.js +88 -0
- package/dist/start-options.d.ts +12 -0
- package/dist/start-wiring.d.ts +63 -0
- package/dist/start-wiring.js +169 -0
- package/dist/status-payload.d.ts +23 -1
- package/dist/status-payload.js +36 -1
- package/dist/surface/http-server.js +18 -2
- package/dist/surface/mcp/attach-memory.d.ts +1 -0
- package/dist/surface/mcp/attach-memory.js +12 -1
- package/dist/surface/mcp/mcp-proxy.d.ts +9 -0
- package/dist/surface/mcp/mcp-proxy.js +65 -13
- package/dist/surface/mcp/mcp.d.ts +34 -6
- package/dist/surface/mcp/mcp.js +61 -17
- package/dist/surface/mcp/proxy/drive-calls.d.ts +10 -0
- package/dist/surface/mcp/proxy/drive-calls.js +27 -0
- package/dist/surface/mcp/proxy/mcp-post-transport.js +5 -0
- package/dist/surface/mcp/server-instructions.d.ts +4 -2
- package/dist/surface/mcp/server-instructions.js +32 -14
- package/dist/surface/mcp/shared-params.js +2 -2
- package/dist/surface/mcp/surface-vocabulary.d.ts +2 -0
- package/dist/surface/mcp/surface-vocabulary.js +1 -0
- package/dist/surface/tools/account-tool.d.ts +22 -0
- package/dist/surface/tools/account-tool.js +157 -0
- package/dist/surface/tools/act/act-danger.d.ts +11 -0
- package/dist/surface/tools/act/act-danger.js +38 -1
- package/dist/surface/tools/act/act-observation.d.ts +33 -0
- package/dist/surface/tools/act/act-observation.js +57 -0
- package/dist/surface/tools/act/act-preflight.js +25 -2
- package/dist/surface/tools/act/act-target.js +8 -3
- package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +8 -0
- package/dist/surface/tools/act/navigation/navigate-arrival.js +56 -2
- package/dist/surface/tools/act/resolve-target.d.ts +1 -1
- package/dist/surface/tools/act/resolve-target.js +18 -3
- package/dist/surface/tools/act/screen-request.d.ts +34 -0
- package/dist/surface/tools/act/screen-request.js +113 -0
- package/dist/surface/tools/act/sequence-grade.d.ts +8 -0
- package/dist/surface/tools/act/sequence-grade.js +13 -2
- package/dist/surface/tools/act/settle-in-flight.js +25 -3
- package/dist/surface/tools/act-sequence-tool.js +138 -29
- package/dist/surface/tools/act-tools.d.ts +0 -9
- package/dist/surface/tools/act-tools.js +71 -41
- package/dist/surface/tools/agent/app-notes-learning.d.ts +7 -0
- package/dist/surface/tools/agent/app-notes-learning.js +80 -0
- package/dist/surface/tools/agent/app-notes.d.ts +4 -0
- package/dist/surface/tools/agent/app-notes.js +48 -0
- package/dist/surface/tools/agent/build-staleness.d.ts +7 -0
- package/dist/surface/tools/agent/build-staleness.js +62 -0
- package/dist/surface/tools/agent/compact-envelope.d.ts +80 -0
- package/dist/surface/tools/agent/compact-envelope.js +374 -0
- package/dist/surface/tools/agent/for-the-agent.d.ts +12 -0
- package/dist/surface/tools/agent/for-the-agent.js +44 -0
- package/dist/surface/tools/agent/notices.d.ts +50 -0
- package/dist/surface/tools/agent/notices.js +152 -0
- package/dist/surface/tools/agent/reteach.d.ts +11 -0
- package/dist/surface/tools/agent/reteach.js +50 -0
- package/dist/surface/tools/args/alias-args.d.ts +5 -0
- package/dist/surface/tools/args/alias-args.js +10 -0
- package/dist/surface/tools/args/confirm-dangerous-arg.d.ts +6 -0
- package/dist/surface/tools/args/confirm-dangerous-arg.js +6 -0
- package/dist/surface/tools/assert/assert-source.d.ts +15 -0
- package/dist/surface/tools/assert/assert-source.js +40 -0
- package/dist/surface/tools/assert/assert-verdict.d.ts +1 -1
- package/dist/surface/tools/assert/assert-verdict.js +42 -17
- package/dist/surface/tools/browser-tools.js +51 -2
- package/dist/surface/tools/chat-drives.d.ts +101 -0
- package/dist/surface/tools/chat-drives.js +409 -0
- package/dist/surface/tools/coverage-tools.d.ts +2 -10
- package/dist/surface/tools/coverage-tools.js +2 -53
- package/dist/surface/tools/dynamic-tools.js +29 -1
- package/dist/surface/tools/empty-session-list.d.ts +51 -0
- package/dist/surface/tools/empty-session-list.js +120 -0
- package/dist/surface/tools/error-recovery.d.ts +14 -0
- package/dist/surface/tools/error-recovery.js +105 -8
- package/dist/surface/tools/explore-tools.d.ts +31 -1
- package/dist/surface/tools/explore-tools.js +438 -66
- package/dist/surface/tools/feedback-tools.d.ts +2 -3
- package/dist/surface/tools/feedback-tools.js +18 -3
- package/dist/surface/tools/gap-novelty.d.ts +3 -1
- package/dist/surface/tools/gap-novelty.js +8 -1
- package/dist/surface/tools/harness-explore.d.ts +118 -57
- package/dist/surface/tools/harness-explore.js +344 -292
- package/dist/surface/tools/harness-gate.d.ts +88 -0
- package/dist/surface/tools/harness-gate.js +235 -0
- package/dist/surface/tools/harness-hunt.d.ts +43 -0
- package/dist/surface/tools/harness-hunt.js +215 -0
- package/dist/surface/tools/harness-plan.d.ts +17 -0
- package/dist/surface/tools/harness-plan.js +38 -0
- package/dist/surface/tools/harness-script.d.ts +30 -0
- package/dist/surface/tools/harness-script.js +560 -0
- package/dist/surface/tools/harness-tab-guard.d.ts +5 -0
- package/dist/surface/tools/harness-tab-guard.js +27 -0
- package/dist/surface/tools/harness-toolset.d.ts +22 -1
- package/dist/surface/tools/harness-toolset.js +101 -7
- package/dist/surface/tools/human-notes.d.ts +16 -0
- package/dist/surface/tools/human-notes.js +27 -0
- package/dist/surface/tools/invoke-tool.d.ts +5 -2
- package/dist/surface/tools/invoke-tool.js +263 -85
- package/dist/surface/tools/lease-hint.js +26 -5
- package/dist/surface/tools/lease-permissions.d.ts +33 -0
- package/dist/surface/tools/lease-permissions.js +73 -0
- package/dist/surface/tools/lease-readiness.d.ts +38 -0
- package/dist/surface/tools/lease-readiness.js +57 -0
- package/dist/surface/tools/lease-seed.d.ts +49 -0
- package/dist/surface/tools/lease-seed.js +167 -0
- package/dist/surface/tools/lease-tools.d.ts +13 -24
- package/dist/surface/tools/lease-tools.js +146 -197
- package/dist/surface/tools/live-call-text.js +4 -4
- package/dist/surface/tools/merge-tools.js +42 -2
- package/dist/surface/tools/merged-name-redirect.js +4 -0
- package/dist/surface/tools/next-step.d.ts +29 -0
- package/dist/surface/tools/next-step.js +214 -0
- package/dist/surface/tools/observe-tools.js +45 -9
- package/dist/surface/tools/platform-moment.d.ts +72 -0
- package/dist/surface/tools/platform-moment.js +296 -0
- package/dist/surface/tools/query-hint-schema.d.ts +7 -0
- package/dist/surface/tools/query-hint-schema.js +10 -0
- package/dist/surface/tools/read-tools.js +71 -14
- package/dist/surface/tools/real-input-attempt.js +96 -13
- package/dist/surface/tools/reticle-result.d.ts +120 -0
- package/dist/surface/tools/reticle-result.js +364 -0
- package/dist/surface/tools/tool-kit.d.ts +83 -3
- package/dist/surface/tools/tool-kit.js +77 -7
- package/dist/surface/tools/tools.js +43 -59
- package/dist/telemetry/account-envelope.d.ts +7 -0
- package/dist/telemetry/account-envelope.js +61 -0
- package/dist/telemetry/agent-client.d.ts +15 -0
- package/dist/telemetry/agent-client.js +57 -0
- package/dist/telemetry/app-instrumented.js +9 -2
- package/dist/telemetry/argument-shape.d.ts +7 -0
- package/dist/telemetry/argument-shape.js +86 -1
- package/dist/telemetry/automation-hint.d.ts +2 -3
- package/dist/telemetry/automation-hint.js +33 -8
- package/dist/telemetry/cli-telemetry.js +7 -2
- package/dist/telemetry/daemon-telemetry.js +3 -0
- package/dist/telemetry/error-fingerprint.d.ts +10 -1
- package/dist/telemetry/error-fingerprint.js +61 -5
- package/dist/telemetry/feedback-cli.d.ts +0 -13
- package/dist/telemetry/feedback-cli.js +0 -77
- package/dist/telemetry/feedback.d.ts +13 -0
- package/dist/telemetry/feedback.js +183 -17
- package/dist/telemetry/harness-run.d.ts +18 -0
- package/dist/telemetry/harness-run.js +80 -0
- package/dist/telemetry/hud-events.d.ts +16 -0
- package/dist/telemetry/hud-events.js +27 -0
- package/dist/telemetry/hud-metrics.d.ts +29 -6
- package/dist/telemetry/hud-metrics.js +116 -25
- package/dist/telemetry/init-telemetry.js +2 -2
- package/dist/telemetry/install-source.d.ts +13 -25
- package/dist/telemetry/install-source.js +44 -3
- package/dist/telemetry/mcp-connection.d.ts +0 -14
- package/dist/telemetry/mcp-connection.js +5 -1
- package/dist/telemetry/onboarding-firsts.d.ts +32 -0
- package/dist/telemetry/onboarding-firsts.js +81 -6
- package/dist/telemetry/platform-linked.d.ts +5 -0
- package/dist/telemetry/platform-linked.js +32 -0
- package/dist/telemetry/project-profile.js +5 -3
- package/dist/telemetry/proxy-telemetry.js +4 -1
- package/dist/telemetry/session-metrics.d.ts +15 -4
- package/dist/telemetry/session-metrics.js +88 -52
- package/dist/telemetry/telemetry.d.ts +38 -2
- package/dist/telemetry/telemetry.js +144 -34
- package/dist/telemetry/verification-of.d.ts +3 -1
- package/dist/telemetry/verification-of.js +13 -4
- package/dist/wire-journal.d.ts +2 -2
- package/dist/wire-journal.js +20 -6
- package/docs/README.md +3 -3
- package/docs/actions.mdx +6 -3
- package/docs/adapters.md +1 -1
- package/docs/agent-cheatsheet.md +25 -28
- package/docs/architecture.md +5 -5
- package/docs/autodrive.md +33 -28
- package/docs/benchmarks.md +5 -5
- package/docs/best-practices.mdx +27 -9
- package/docs/capabilities.mdx +14 -16
- package/docs/cli/affected.mdx +1 -1
- package/docs/cli/cloud.mdx +54 -75
- package/docs/cli/doctor.mdx +14 -3
- package/docs/cli/drive.mdx +20 -14
- package/docs/cli/feedback.mdx +3 -3
- package/docs/cli/gate.mdx +7 -2
- package/docs/cli/help.mdx +50 -55
- package/docs/cli/init.mdx +43 -28
- package/docs/cli/license.mdx +12 -8
- package/docs/cli/mcp.mdx +4 -4
- package/docs/cli/open.mdx +3 -3
- package/docs/cli/report.mdx +4 -2
- package/docs/cli/restart.mdx +2 -2
- package/docs/cli/rollback.mdx +14 -8
- package/docs/cli/serve.mdx +4 -4
- package/docs/cli/setup.mdx +23 -0
- package/docs/cli/status.mdx +18 -5
- package/docs/cli/stop.mdx +67 -8
- package/docs/cli/try.mdx +62 -0
- package/docs/cli/update.mdx +4 -3
- package/docs/cli/verify.mdx +17 -6
- package/docs/cli/version.mdx +5 -4
- package/docs/cli.mdx +111 -42
- package/docs/debugging.md +3 -3
- package/docs/deploy-checks.md +1 -1
- package/docs/desktop.mdx +9 -3
- package/docs/enterprise.md +11 -10
- package/docs/environment.mdx +7 -8
- package/docs/faq.mdx +3 -3
- package/docs/first-drive.md +5 -4
- package/docs/flows.md +35 -27
- package/docs/for-agents.md +4 -5
- package/docs/frameworks.mdx +32 -21
- package/docs/getting-started.md +65 -61
- package/docs/human-control.md +16 -16
- package/docs/index.mdx +15 -42
- package/docs/install-agentic.mdx +22 -37
- package/docs/install-manual.mdx +23 -13
- package/docs/instrumentation.mdx +5 -3
- package/docs/integration-patterns.md +7 -7
- package/docs/license-activation.mdx +1 -1
- package/docs/multi-agent-testing.md +24 -6
- package/docs/packages/babel-plugin.mdx +4 -2
- package/docs/packages/browser.mdx +16 -10
- package/docs/packages/core.mdx +12 -5
- package/docs/packages/electron.mdx +3 -2
- package/docs/packages/engine.mdx +1 -1
- package/docs/packages/eslint-plugin.mdx +18 -12
- package/docs/packages/next.mdx +8 -7
- package/docs/packages/open-verification.mdx +1 -1
- package/docs/packages/server.mdx +5 -5
- package/docs/packages/tauri.mdx +9 -9
- package/docs/packages/test.mdx +4 -10
- package/docs/packages/vite-plugin.mdx +32 -4
- package/docs/packages.mdx +11 -15
- package/docs/platform-integration.md +6 -5
- package/docs/predicates.mdx +40 -24
- package/docs/quickstart.mdx +69 -30
- package/docs/required-checks.md +8 -7
- package/docs/reticle-manual.md +15 -5
- package/docs/skill-file.mdx +17 -79
- package/docs/skill-setup.md +9 -9
- package/docs/skill.md +200 -0
- package/docs/system-map.md +7 -7
- package/docs/telemetry.md +23 -25
- package/docs/testing.md +4 -4
- package/docs/token-efficiency.md +12 -12
- package/docs/tools/act-and-wait.mdx +9 -2
- package/docs/tools/act-sequence.mdx +6 -7
- package/docs/tools/act.mdx +2 -2
- package/docs/tools/assert.mdx +18 -17
- package/docs/tools/console.mdx +9 -9
- package/docs/tools/inspect.mdx +16 -7
- package/docs/tools/look.mdx +24 -0
- package/docs/tools/navigate.mdx +5 -3
- package/docs/tools/network.mdx +2 -2
- package/docs/tools/observe.mdx +6 -6
- package/docs/tools/overview.mdx +34 -33
- package/docs/tools/query.mdx +5 -5
- package/docs/tools/session-and-feedback.mdx +22 -13
- package/docs/tools/sessions.mdx +8 -8
- package/docs/tools/snapshot.mdx +6 -5
- package/docs/tools/state.mdx +9 -9
- package/docs/tools/tools-and-run.mdx +26 -24
- package/docs/tools/verify.mdx +28 -0
- package/docs/tools/wait-for.mdx +8 -4
- package/docs/troubleshooting.mdx +21 -6
- package/docs/usage.md +55 -46
- package/docs/use-cases.mdx +3 -3
- package/docs/vs-chrome-devtools-mcp.mdx +9 -6
- package/docs/vs-playwright-mcp.mdx +3 -1
- package/docs/what-is-recorded.md +17 -5
- package/docs/what-is-reticle.mdx +5 -3
- package/docs/why-reticle.mdx +1 -1
- package/package.json +9 -12
- package/dist/command/cli/demo/demo-page.d.ts +0 -78
- package/dist/command/cli/demo/demo-page.js +0 -241
- package/dist/command/cli/demo/demo-run.d.ts +0 -38
- package/dist/command/cli/demo/demo-run.js +0 -138
- package/dist/features/harness/driver.d.ts +0 -50
- package/dist/features/harness/driver.js +0 -236
- package/dist/features/harness/jev-driver.d.ts +0 -188
- package/dist/features/harness/jev-driver.js +0 -678
- package/dist/features/harness/openai-driver.d.ts +0 -58
- package/dist/features/harness/openai-driver.js +0 -206
- package/dist/judgement/hunt/hunt-report.d.ts +0 -49
- package/dist/judgement/hunt/hunt-report.js +0 -84
- package/dist/language/flows/buddy-status.d.ts +0 -25
- package/dist/language/flows/buddy-status.js +0 -32
- package/dist/language/flows/change/watch-batcher.d.ts +0 -18
- package/dist/language/flows/change/watch-batcher.js +0 -19
- package/dist/memory/cloud/harness-offer.d.ts +0 -44
- package/dist/memory/cloud/harness-offer.js +0 -145
- package/dist/memory/project/dir/fill-value-store.d.ts +0 -32
- package/dist/memory/project/dir/fill-value-store.js +0 -88
- package/dist/surface/tools/feature-capture.d.ts +0 -151
- package/dist/surface/tools/feature-capture.js +0 -235
- package/dist/surface/tools/tool-hit-rate.d.ts +0 -87
- package/dist/surface/tools/tool-hit-rate.js +0 -90
- package/dist/telemetry/harness-drive.d.ts +0 -4
- package/dist/telemetry/harness-drive.js +0 -35
- package/dist/telemetry/identify.d.ts +0 -22
- package/dist/telemetry/identify.js +0 -73
- package/docs/cli/capsules.mdx +0 -70
- package/docs/cli/hunt.mdx +0 -73
- package/docs/cli/identify.mdx +0 -76
- package/docs/cli/kill.mdx +0 -91
- package/docs/cli/watch.mdx +0 -62
- package/docs/local-registry.md +0 -143
package/docs/cli/update.mdx
CHANGED
|
@@ -16,8 +16,8 @@ No flags.
|
|
|
16
16
|
|
|
17
17
|
1. Ask the registry what is available.
|
|
18
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"`,
|
|
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.
|
|
19
|
+
3. Nothing newer: if this project's SDK is older than the CLI, bring it up to the CLI's version; then log `reticle_update` with `ok: false` and `message: "already on the latest version"`, and stop.
|
|
20
|
+
4. Otherwise refresh the Reticle block in agent rule files that already carry one, then 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
21
|
5. Then apply the CLI update, which execs and exits. Your agent client restarts it.
|
|
22
22
|
|
|
23
23
|
## What it prints
|
|
@@ -27,6 +27,7 @@ No flags.
|
|
|
27
27
|
| `reticle_update` | `ok`, and either `from` and `to`, or `message` and `version` |
|
|
28
28
|
| `reticle_update_sdk` | `synced`, `packages`, `to`, `packageManager`. Or `synced: false` with `reason: "no @reticlehq packages in this project"` |
|
|
29
29
|
| `reticle_update_sdk_failed` | A `hint` naming the exact command to run by hand |
|
|
30
|
+
| `reticle_rules_refreshed` | `files`, `to`: the agent rule files whose Reticle block was brought up to the new version |
|
|
30
31
|
| `reticle_update_failed` | The error |
|
|
31
32
|
|
|
32
33
|
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.
|
|
@@ -51,7 +52,7 @@ This installs the current server without going through the old updater.
|
|
|
51
52
|
## Worked example
|
|
52
53
|
|
|
53
54
|
```bash
|
|
54
|
-
npx @reticlehq/server version #
|
|
55
|
+
npx @reticlehq/server version # 3.6.0
|
|
55
56
|
npx @reticlehq/server update
|
|
56
57
|
```
|
|
57
58
|
|
package/docs/cli/verify.mdx
CHANGED
|
@@ -4,7 +4,7 @@ description: Drive a URL once, replay every saved flow, and exit zero only on a
|
|
|
4
4
|
icon: circle-check
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
`reticle verify` is the CI command: no model in the loop, no MCP.
|
|
7
|
+
`reticle verify` is the CI command: no model in the loop, no MCP. On a free port 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. When a Reticle daemon already owns the port, it asks that daemon to replay the flows instead.
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
npx @reticlehq/server verify <url> [--headed] [--timeout N] [--storage-state <file>]
|
|
@@ -20,6 +20,13 @@ It uses the same runner and the same verdict as the MCP and HTTP paths, so a pla
|
|
|
20
20
|
| `--headed` | boolean | `false` (headless) | Show the browser |
|
|
21
21
|
| `--timeout N` | number, ms | `15000` | How long to wait for a browser session to dial back |
|
|
22
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
|
+
| `--results-json <file>` | string | unset | Also write one verdict per journey to this file: `{ verdict, results: [{ journey, verdict, reason? }] }`, each verdict `yes`, `no` or `unknown`. A skipped journey is `unknown`, and the run is `yes` only when every journey is. Written when verify boots its own browser and a run finishes; a refusal before that writes nothing. The [GitHub Action](https://github.com/reticlehq/reticle/tree/main/action) posts this file |
|
|
24
|
+
| `--port N` | number | `RETICLE_PORT`, else the project's port, else `4400` | The bridge port the app dials |
|
|
25
|
+
| `--session-id <id>` | string | unset | Use a tab that is already connected |
|
|
26
|
+
| `--select <label>` | string, repeatable | unset | Verify only flows carrying this label |
|
|
27
|
+
| `--expect '<json predicate>'` / `--expect-file <path>` | string | unset | One verdict on one predicate, no saved flows needed. Asks the daemon that owns the port and never starts one; with no daemon it refuses. Exits `0` only on `verified: "yes"`. Cannot be combined with `--storage-state` |
|
|
28
|
+
| `--explore` / `--persona "<who does what>"` | boolean / string | off | No saved flows yet? The Harness drives the app and records them. `--persona` implies `--explore` |
|
|
29
|
+
| `--confirm-dangerous` | boolean | off | Let this run press the controls the replay guard holds as destructive, such as a "Place order" or "Delete" button in a saved flow. Without it such a step is refused, so a checkout flow cannot pass. It covers this run only and is never saved into a flow. |
|
|
23
30
|
|
|
24
31
|
## What it prints
|
|
25
32
|
|
|
@@ -34,6 +41,8 @@ No app connected: Reticle drove the URL but no @reticlehq/browser session dialed
|
|
|
34
41
|
No saved flows to verify (.reticle/flows is empty), so refusing to report a pass for verifying nothing.
|
|
35
42
|
Flows are recorded interactively by an agent (reticle_record{action:"start"} → act → reticle_flow_save via the
|
|
36
43
|
MCP tools), then committed to .reticle/flows/. In CI, check those files in and re-run `reticle verify`.
|
|
44
|
+
Or let Reticle record them for you: `reticle verify <url> --explore` drives the app itself and saves what it
|
|
45
|
+
drove, so every run after the first one replays with no model in the loop.
|
|
37
46
|
```
|
|
38
47
|
|
|
39
48
|
<Warning>
|
|
@@ -49,11 +58,13 @@ Call log:
|
|
|
49
58
|
```
|
|
50
59
|
|
|
51
60
|
<Warning>
|
|
52
|
-
`verify`
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
61
|
+
`verify` never starts a second daemon on a port that already has one. With a daemon there, it
|
|
62
|
+
replays the saved flows (or answers `--expect`, or runs `--explore`) through that daemon. Only
|
|
63
|
+
`--headed` and `--storage-state` need a browser of its own, so with a daemon on the port those
|
|
64
|
+
refuse and print the ways out (drive through the running daemon, ask it via `reticle_run`, move
|
|
65
|
+
both to another port with `--port` or `RETICLE_PORT`, or stop it). This bites most often on a
|
|
66
|
+
developer machine, where an agent has usually left a daemon running; in CI the port is normally
|
|
67
|
+
free.
|
|
57
68
|
</Warning>
|
|
58
69
|
|
|
59
70
|
## Exit codes
|
package/docs/cli/version.mdx
CHANGED
|
@@ -16,10 +16,10 @@ All three are the same command. No flags.
|
|
|
16
16
|
|
|
17
17
|
## What it prints
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
The version, and nothing else, on stdout, so `V=$(reticle version)` works:
|
|
20
20
|
|
|
21
|
-
```
|
|
22
|
-
|
|
21
|
+
```text
|
|
22
|
+
3.7.0
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
## Exit codes
|
|
@@ -29,7 +29,8 @@ Always `0`.
|
|
|
29
29
|
## Worked example
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
npx @reticlehq/server version
|
|
32
|
+
V=$(npx @reticlehq/server version)
|
|
33
|
+
echo "$V"
|
|
33
34
|
```
|
|
34
35
|
|
|
35
36
|
<Note>
|
package/docs/cli.mdx
CHANGED
|
@@ -4,7 +4,7 @@ description: Every reticle command. What it does, what it prints, and what it ex
|
|
|
4
4
|
icon: terminal
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
The `reticle` CLI installs Reticle into a project and proves the install works (`init`), runs and diagnoses the daemon your app connects to (`
|
|
7
|
+
The `reticle` CLI installs Reticle into a project and proves the install works (`init`), runs and diagnoses the daemon your app connects to (`status`, `doctor`, `stop`, `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
8
|
|
|
9
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
10
|
|
|
@@ -24,6 +24,82 @@ npx @reticlehq/server <command>
|
|
|
24
24
|
below are pretty-printed so you can read them, and long lists are trimmed where the label says so.
|
|
25
25
|
</Note>
|
|
26
26
|
|
|
27
|
+
## Every command
|
|
28
|
+
|
|
29
|
+
`reticle --help` prints the short list, grouped the way you meet the commands. `reticle help all` prints every command, and `reticle <command> --help` prints one command's detail.
|
|
30
|
+
|
|
31
|
+
### Get started
|
|
32
|
+
|
|
33
|
+
| Command | What it does | Page |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| `reticle init` | Wire Reticle into this project, boot the app, prove a session connected | [init](/cli/init) |
|
|
36
|
+
| `reticle connect [--project <name\|id>] [--workspace <name\|id>] [--url <origin>]` | Wire if needed, sign in, link this folder to a cloud project (created if it does not exist) in the workspace named (else the one you are signed in to, said when you belong to several), send local history | [cloud](/cli/cloud) |
|
|
37
|
+
| `reticle try <url> [--persona <who>]` | Signed in: one free Harness drive of a URL, in a window you watch, then which journeys work | [try](/cli/try) |
|
|
38
|
+
|
|
39
|
+
### Check your app
|
|
40
|
+
|
|
41
|
+
| Command | What it does | Page |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| `reticle verify <url>` | One-shot: drive the URL, verify saved flows or one predicate, exit 0 on pass | [verify](/cli/verify) |
|
|
44
|
+
| `reticle gate [--since <ref>] [--accept-coverage] [--hook]` | Exit non-zero unless passing artifacts cover the affected flows | [gate](/cli/gate) |
|
|
45
|
+
|
|
46
|
+
### Reticle on this machine
|
|
47
|
+
|
|
48
|
+
| Command | What it does | Page |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| `reticle status [--json]` | Is the daemon up, which pages connected, who is signed in, is this repo linked | [status](/cli/status) |
|
|
51
|
+
| `reticle doctor` | Diagnose setup: Chromium, daemon, port | [doctor](/cli/doctor) |
|
|
52
|
+
| `reticle open [url]` | Show the app: reuse the connected tab, else open one | [open](/cli/open) |
|
|
53
|
+
| `reticle stop [--force]` | Stop the daemon we started; `--force` frees the port by its listener, never the agent's MCP proxy | [stop](/cli/stop) |
|
|
54
|
+
| `reticle restart` | Free the port, then start a daemon and wait for a real bind | [restart](/cli/restart) |
|
|
55
|
+
| `reticle update` | Install the latest server version and restart | [update](/cli/update) |
|
|
56
|
+
|
|
57
|
+
### Account
|
|
58
|
+
|
|
59
|
+
| Command | What it does | Page |
|
|
60
|
+
| --- | --- | --- |
|
|
61
|
+
| `reticle logout [--url <u>]` | Sign out of one host; others stay signed in | [cloud](/cli/cloud#reticle-logout) |
|
|
62
|
+
| `reticle feedback` | Tell us what worked and what did not | [feedback](/cli/feedback) |
|
|
63
|
+
| `reticle telemetry [status\|enable\|disable]` | Anonymous usage metrics: what is sent, and the switch | [telemetry](/cli/telemetry) |
|
|
64
|
+
|
|
65
|
+
### More commands (`reticle help all`)
|
|
66
|
+
|
|
67
|
+
| Command | What it does | Page |
|
|
68
|
+
| --- | --- | --- |
|
|
69
|
+
| `reticle sync [--watch] [--move-history]` | Send what has not synced yet; `--watch` keeps going; `--move-history` also sends the runs, flows and records made under the folder's previous link | [cloud](/cli/cloud#reticle-sync) |
|
|
70
|
+
| `reticle runs [<runId>]` | The linked project's recent runs, or one of them | [cloud](/cli/cloud#reticle-runs) |
|
|
71
|
+
| `reticle runs regression` | Which flows broke; exits `3` if any did | [cloud](/cli/cloud#reticle-runs-regression) |
|
|
72
|
+
| `reticle runs share <runId>` | Mint a public proof link for one run | [cloud](/cli/cloud#reticle-runs-share) |
|
|
73
|
+
| `reticle runs issues [--fix <fp>]` | The triage queue; `--fix` prints one issue's fix prompt | [cloud](/cli/cloud#reticle-runs-issues) |
|
|
74
|
+
| `reticle runs memory` | What the linked project has learned | [cloud](/cli/cloud#reticle-runs-memory) |
|
|
75
|
+
| `reticle config` | Choose what syncs: runs, memory, flows; where verification runs | [cloud](/cli/cloud#reticle-config) |
|
|
76
|
+
| `reticle setup mcp` | Register the MCP server with your coding agents (the installer's registration half) | [setup](/cli/setup) |
|
|
77
|
+
| `reticle serve` | Start the daemon and wait for it to bind | [serve](/cli/serve) |
|
|
78
|
+
| `reticle mcp` | The MCP stdio proxy your agent runs; starts the daemon if needed | [mcp](/cli/mcp) |
|
|
79
|
+
| `reticle drive <url>` | Foreground mode, for debugging | [drive](/cli/drive) |
|
|
80
|
+
| `reticle affected [--since <ref>]` | Which saved flows must re-verify for the changed files | [affected](/cli/affected) |
|
|
81
|
+
| `reticle context --compact [--session <id>]` | Resume after a compaction: what was proved, failed and is still owed | none |
|
|
82
|
+
| `reticle report [--session <id>] [--hook]` | What the latest session claimed, and what held | [report](/cli/report) |
|
|
83
|
+
| `reticle rollback` | Restore the previous server version and restart | [rollback](/cli/rollback) |
|
|
84
|
+
| `reticle license` | Enterprise license status: active, eval or missing | [license](/cli/license) |
|
|
85
|
+
| `reticle version` | Print the version | [version](/cli/version) |
|
|
86
|
+
| `reticle help [all\|<command>]` | Usage: the short list, every command, or one command | [help](/cli/help) |
|
|
87
|
+
|
|
88
|
+
### Renamed and removed
|
|
89
|
+
|
|
90
|
+
The old names below still work for one release and print one line naming the new one.
|
|
91
|
+
|
|
92
|
+
| Old | Now |
|
|
93
|
+
| --- | --- |
|
|
94
|
+
| `reticle kill` | `reticle stop --force` |
|
|
95
|
+
| `reticle login`, `reticle link` | `reticle connect` |
|
|
96
|
+
| `reticle project` | `reticle connect --project <name\|id>` |
|
|
97
|
+
| `reticle whoami` | `reticle status` |
|
|
98
|
+
| `reticle push` | `reticle sync` |
|
|
99
|
+
| `reticle regression`, `share`, `issues`, `memory` | `reticle runs regression`, `runs share`, `runs issues`, `runs memory` |
|
|
100
|
+
|
|
101
|
+
`hunt`, `watch`, `capsules`, `tutorial` and `identify` were removed. Each prints what to use instead and exits `1`: `reticle affected` or `reticle gate` for `watch`, `reticle init` or `reticle try <url>` for `tutorial`, `reticle feedback` for `identify`. Saved capsules stay in `.reticle/capsules`.
|
|
102
|
+
|
|
27
103
|
## Setup and diagnosis
|
|
28
104
|
|
|
29
105
|
### `reticle connect`
|
|
@@ -38,18 +114,20 @@ For a self-hosted cloud, add `--url <cloud origin>`. If the app was already wire
|
|
|
38
114
|
|
|
39
115
|
### `reticle init`
|
|
40
116
|
|
|
41
|
-
Wires Reticle into the project in the current directory, then boots the app and proves a session connected. It exits non-zero if nothing connected, and prints what is left to do. It does not drive: proving a flow is the FIRST RUN, `reticle verify <url> --explore --persona "<who does what>"`.
|
|
117
|
+
Wires Reticle into the project in the current directory, then boots the app and proves a session connected. It exits non-zero if nothing connected, and prints what is left to do. It does not drive: proving a flow is the FIRST RUN, which your agent drives with `reticle_act_and_wait` and an `until` on its last step, or, with a linked project, `reticle verify <url> --explore --persona "<who does what>"`.
|
|
42
118
|
|
|
43
119
|
```
|
|
44
120
|
reticle init [--env KEY=VALUE]... [--app <dir>] [--license <key>]
|
|
45
|
-
[--json] [--files-only] [--no-open] [--
|
|
46
|
-
[--
|
|
121
|
+
[--json] [--files-only] [--relaunch] [--no-open] [--no-agents]
|
|
122
|
+
[--url <app url>] [--timeout S] [--dry-run] [--hooks]
|
|
123
|
+
[--port N] [--no-mcp] [--no-install] [--start]
|
|
124
|
+
[--capture-bodies] [--no-first-run]
|
|
47
125
|
```
|
|
48
126
|
|
|
49
127
|
`--env` and `--app` are the answers the command cannot work out for itself: what the app needs to reach a usable state, and which app in a monorepo. Which journey proves what you care about is asked on the first run, as `--persona`. `--files-only` is what `init` did before it learned to boot the app: it still registers the MCP server and pre-approves Reticle's tools, so it doubles as the upgrade path for an existing install.
|
|
50
128
|
|
|
51
129
|
<Card title="Full walkthrough with real output" icon="wand-magic-sparkles" href="/install-agentic">
|
|
52
|
-
What it writes, and how to read its
|
|
130
|
+
What it writes, and how to read its five status marks.
|
|
53
131
|
</Card>
|
|
54
132
|
|
|
55
133
|
### `reticle doctor`
|
|
@@ -64,9 +142,11 @@ npx @reticlehq/server doctor
|
|
|
64
142
|
reticle doctor
|
|
65
143
|
node v22.14.0
|
|
66
144
|
chromium ✓ installed (chromium-1234)
|
|
67
|
-
daemon ✓ running on :4400 (pid 72698,
|
|
145
|
+
daemon ✓ running on :4400 (pid 72698, v3.7.0)
|
|
68
146
|
sessions ✓ 1 page connected
|
|
69
147
|
bridge port 4400 (your app must dial THIS port, not your dev-server port)
|
|
148
|
+
agent link ✓ an MCP client attached here and called tools before (a record, not a live check)
|
|
149
|
+
project ✓ wired here (my-app)
|
|
70
150
|
daemon log /Users/you/.reticle/daemon-4400.log
|
|
71
151
|
tracing RETICLE_TRACE=1 on the daemon for per-stage timings in that log
|
|
72
152
|
```
|
|
@@ -75,7 +155,7 @@ Exits `0`. That parenthetical about the bridge port is doing a lot of work. Mixi
|
|
|
75
155
|
|
|
76
156
|
### `reticle status`
|
|
77
157
|
|
|
78
|
-
Whether the daemon is up
|
|
158
|
+
Whether the daemon is up, which apps have connected, who is signed in, and whether this repo is linked to a cloud project.
|
|
79
159
|
|
|
80
160
|
```text
|
|
81
161
|
reticle status
|
|
@@ -87,7 +167,7 @@ reticle status
|
|
|
87
167
|
|
|
88
168
|
Add `--json` for the same facts as one machine-readable event line. See [`reticle status`](/cli/status) for the fields.
|
|
89
169
|
|
|
90
|
-
Exits `0`. A session
|
|
170
|
+
Exits `0`. A session listed means the SDK reached the page. Setup is finished when the first run returns a verdict.
|
|
91
171
|
|
|
92
172
|
### `reticle telemetry [status|enable|disable]`
|
|
93
173
|
|
|
@@ -110,8 +190,8 @@ policy https://github.com/reticlehq/reticle/blob/main/docs/telemetry.md
|
|
|
110
190
|
| --- | --- |
|
|
111
191
|
| `reticle serve` | Start the daemon and wait for it to bind. `--drive <url>`, `--headless`, `--headed`, `--http`, `--http-port N`, `--http-token T` |
|
|
112
192
|
| `reticle stop` | Stop the daemon we started, by its recorded pid. `--quiet` |
|
|
113
|
-
| `reticle
|
|
114
|
-
| `reticle restart` |
|
|
193
|
+
| `reticle stop --force` | Free the port by asking who is **listening** on it |
|
|
194
|
+
| `reticle restart` | Free the port, then start a daemon and wait for a real bind. `--force` |
|
|
115
195
|
| `reticle open [url]` | Show the app. Reuse the connected tab, or open one |
|
|
116
196
|
| `reticle drive <url>` | Foreground mode, for debugging |
|
|
117
197
|
| `reticle mcp` | The MCP stdio proxy. Auto-starts the daemon if needed. This is what your agent runs |
|
|
@@ -124,15 +204,17 @@ A bare `reticle` with no arguments is not help. It is `reticle serve`.
|
|
|
124
204
|
`npx @reticlehq/server` never pairs a daemon with an SDK it cannot talk to. `init`, `update`,
|
|
125
205
|
`rollback`, `setup install`, `version` and `help` always run as typed, and so does a command whose
|
|
126
206
|
version you pinned yourself (`npx @reticlehq/server@<version> …`). Set `RETICLE_NO_VERSION_MATCH=1` to
|
|
127
|
-
turn it off.
|
|
207
|
+
turn it off. Because `--help` runs as typed too, it describes the CLI you ran. When the command it
|
|
208
|
+
describes would run at the project's version instead, the help opens with a line naming that version.
|
|
128
209
|
</Note>
|
|
129
210
|
|
|
130
|
-
<
|
|
131
|
-
`reticle verify`
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
211
|
+
<Note>
|
|
212
|
+
`reticle verify` works whether or not a daemon is running. With none, it starts its own browser on
|
|
213
|
+
the bridge port. With one, it replays the saved flows (or answers `--expect`) through that daemon.
|
|
214
|
+
Only `--headed` and `--storage-state` need their own browser, so with a daemon running those two
|
|
215
|
+
refuse and say so. Do not stop the daemon to get around it: that cuts your agent's MCP link. Point
|
|
216
|
+
`verify` at a free port with `--port N` instead.
|
|
217
|
+
</Note>
|
|
136
218
|
|
|
137
219
|
## Verification
|
|
138
220
|
|
|
@@ -144,7 +226,16 @@ One-shot: drive the URL, replay the saved flows, exit `0` on pass. This is the c
|
|
|
144
226
|
npx @reticlehq/server verify http://localhost:5173 --timeout 60000
|
|
145
227
|
```
|
|
146
228
|
|
|
147
|
-
Options:
|
|
229
|
+
Options:
|
|
230
|
+
|
|
231
|
+
- `--headed`, `--timeout N`, `--port N`.
|
|
232
|
+
- `--storage-state <file>`: verify flows behind a login without scripting the login every time.
|
|
233
|
+
- `--session-id <id>`: use a tab that is already connected.
|
|
234
|
+
- `--select <label>`: verify only flows carrying this label. Repeatable.
|
|
235
|
+
- `--expect '<json predicate>'` or `--expect-file <path>`: one verdict, no saved flows needed. Asks the running daemon; with none, it refuses. Exits `0` only on `verified: "yes"`.
|
|
236
|
+
- `--explore` with `--persona "<who does what>"`: no saved flows yet? The Harness drives the app and records them. Needs a linked project (`reticle connect`).
|
|
237
|
+
- `--results-json <file>`: also write one verdict per journey as JSON, for CI.
|
|
238
|
+
- `--confirm-dangerous`: let this run press what the replay guard holds as destructive.
|
|
148
239
|
|
|
149
240
|
### `reticle affected`
|
|
150
241
|
|
|
@@ -196,18 +287,6 @@ Measured exit code: **`1`**, with the flow lists trimmed above. That run genuine
|
|
|
196
287
|
|
|
197
288
|
`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.
|
|
198
289
|
|
|
199
|
-
### `reticle watch [url]`
|
|
200
|
-
|
|
201
|
-
On save, report which saved flows must re-verify. The interactive companion to `affected`. Long-running; stop it with `Ctrl+C`.
|
|
202
|
-
|
|
203
|
-
### `reticle capsules`
|
|
204
|
-
|
|
205
|
-
List the saved fail-to-pass bug capsules in `.reticle/capsules`. No flags. See [capsules](/cli/capsules).
|
|
206
|
-
|
|
207
|
-
### `reticle hunt <dir>`
|
|
208
|
-
|
|
209
|
-
Aggregate a directory of crawl reports into one false-green rate. See [hunt](/cli/hunt).
|
|
210
|
-
|
|
211
290
|
## Maintenance
|
|
212
291
|
|
|
213
292
|
| Command | What it does |
|
|
@@ -216,7 +295,7 @@ Aggregate a directory of crawl reports into one false-green rate. See [hunt](/cl
|
|
|
216
295
|
| `reticle rollback` | Restore the previous version and restart |
|
|
217
296
|
| `reticle license` | Enterprise license status: active, eval, or missing |
|
|
218
297
|
| `reticle version` | Print the version |
|
|
219
|
-
| `reticle help` |
|
|
298
|
+
| `reticle help` | The short list; `help all` for every command |
|
|
220
299
|
|
|
221
300
|
<Tip>
|
|
222
301
|
`rollback` exists because an auto-updating dev tool that cannot go back is a dev tool that can
|
|
@@ -230,7 +309,7 @@ Aggregate a directory of crawl reports into one false-green rate. See [hunt](/cl
|
|
|
230
309
|
npx @reticlehq/server feedback "what worked, what didn't"
|
|
231
310
|
|
|
232
311
|
# agents, including from a setup that never finished
|
|
233
|
-
npx @reticlehq/server feedback --agent --kind <bug|gap|ambiguity|feature_request|improvement> "what happened"
|
|
312
|
+
npx @reticlehq/server feedback --agent --kind <bug|gap|ambiguity|feature_request|improvement|experience> "what happened"
|
|
234
313
|
```
|
|
235
314
|
|
|
236
315
|
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.
|
|
@@ -238,13 +317,3 @@ The `--agent` form matters more than it looks: the setup that failed halfway is
|
|
|
238
317
|
<Card title="How feedback is handled" icon="comments" href="/tools/session-and-feedback">
|
|
239
318
|
What each kind means, and what happens when a report cannot be delivered.
|
|
240
319
|
</Card>
|
|
241
|
-
|
|
242
|
-
## `reticle identify`
|
|
243
|
-
|
|
244
|
-
Opt-in, and off by default:
|
|
245
|
-
|
|
246
|
-
```bash
|
|
247
|
-
npx @reticlehq/server identify --context company|side_project|open_source|learning [--company N] [--email E] [--forget]
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
Only useful if you want support or an enterprise trial. `--forget` removes it.
|
package/docs/debugging.md
CHANGED
|
@@ -12,7 +12,7 @@ Reticle produces four different signals and they answer four different questions
|
|
|
12
12
|
|
|
13
13
|
| Question | Signal | Where |
|
|
14
14
|
| --- | --- | --- |
|
|
15
|
-
| What did the **agent** do to the app, and what did the app do back? | the journal | `reticle_observe` (the event window), `reticle_run_export` (a saved run),
|
|
15
|
+
| What did the **agent** do to the app, and what did the app do back? | the journal | `reticle_observe` (the event window), `reticle_run_export` (a saved run), `.reticle/sessions/<id>/` in the project |
|
|
16
16
|
| What did **Reticle** do internally to answer that call? | the **trace** | daemon log, with `RETICLE_TRACE=1` |
|
|
17
17
|
| What happened at a milestone (daemon start, skew, refusal)? | structured log lines | daemon log |
|
|
18
18
|
| How much is this being used, and does it work? | telemetry | [telemetry.md](telemetry.md) |
|
|
@@ -36,7 +36,7 @@ tail -f ~/.reticle/daemon-4400.log | jq .
|
|
|
36
36
|
Off by default, because a trace on every tool call is a cost on the hot path, and a verification loop is 50 to 200 calls. Measured, so the claim is checkable: a disabled span costs **126ns** per site (against ~9ns for a bare call), which is under a microsecond per tool call and not the literal zero it is tempting to write. Turn it on **for the daemon** (the flag is read per call, but the daemon is the process doing the work, so it has to be set where the daemon starts):
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
RETICLE_TRACE=1
|
|
39
|
+
RETICLE_TRACE=1 npx @reticlehq/server serve --port 4400
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
Every instrumented stage then emits one line **when it ends**, carrying its own duration:
|
|
@@ -95,7 +95,7 @@ init.write 1ms target=.reticle.json
|
|
|
95
95
|
init.apply 262ms steps=5
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
-
Two things that trace makes visible and nothing else did. Planning is ~2ms, so init's wall-clock is essentially all subprocess: the package manager, and `claude mcp add` when MCP registration is on. And when the pinned install is refused, the unpinned **retry is a second full package-manager run**, so init legitimately takes about twice as long on that path.
|
|
98
|
+
Two things that trace makes visible and nothing else did. Planning is ~2ms, so init's wall-clock is essentially all subprocess: the package manager, and `claude mcp add` when MCP registration is on. And when the pinned install is refused, the unpinned **retry is a second full package-manager run**, so init legitimately takes about twice as long on that path. An install of a version that is not published yet always takes it.
|
|
99
99
|
|
|
100
100
|
### Adding a span
|
|
101
101
|
|
package/docs/deploy-checks.md
CHANGED
|
@@ -91,7 +91,7 @@ Both. For a non-loopback origin Reticle injects `reticle.connect()` with a one-t
|
|
|
91
91
|
|
|
92
92
|
### One of my flows logs in and the next one starts logged in. How do I stop that?
|
|
93
93
|
|
|
94
|
-
`verify` replays flows sequentially against one tab, so leftover state carries. Either author each flow to be self-contained, or use `reticle_verify { action: "flows", parallel:
|
|
94
|
+
`verify` replays flows sequentially against one tab, so leftover state carries. Either author each flow to be self-contained, or use `reticle_verify { action: "flows", parallel: 4 }` (`parallel` is how many flows run at once), which gives every flow its own isolated browser context with its own cookies and storage.
|
|
95
95
|
|
|
96
96
|
### Should I run reticle gate as well as reticle verify?
|
|
97
97
|
|
package/docs/desktop.mdx
CHANGED
|
@@ -210,13 +210,15 @@ installReticleCapture(win);
|
|
|
210
210
|
|
|
211
211
|
That is all: no CDP flag, no extra packages, and it works on a packaged `file://` renderer. `reticle_screenshot` and `reticle_visual_diff` then work on your app.
|
|
212
212
|
|
|
213
|
+
In a multi-window app, name each window: `installReticleCapture(win, { label: 'settings' })`. The session list then shows `window: "settings"`. Electron windows have no name of their own, and two of them often share a url.
|
|
214
|
+
|
|
213
215
|
Alternatively, since an Electron renderer _is_ Chromium, `--remote-debugging-port=9222` plus `RETICLE_CDP_URL=http://127.0.0.1:9222` also works and additionally enables `fullPage` (the main-process route captures the window as composited, so it cannot scroll-stitch).
|
|
214
216
|
|
|
215
217
|
**Tauri: one Rust command.** The crate is versioned independently of the npm packages:
|
|
216
218
|
|
|
217
219
|
```toml
|
|
218
220
|
[dependencies]
|
|
219
|
-
reticle-tauri = "3.
|
|
221
|
+
reticle-tauri = "3.7"
|
|
220
222
|
```
|
|
221
223
|
|
|
222
224
|
```rust
|
|
@@ -225,6 +227,8 @@ tauri::Builder::default()
|
|
|
225
227
|
.on_page_load(reticle_tauri::on_page_load)
|
|
226
228
|
```
|
|
227
229
|
|
|
230
|
+
**Dev builds only.** In a release build the crate is inert: `reticle_capture` refuses and `on_page_load` does nothing, so the binary you sign and ship carries no Reticle capability. A release build you test with Reticle (a CI fixture) turns it on with `reticle-tauri = { version = "3.7", features = ["in-release"] }`.
|
|
231
|
+
|
|
228
232
|
Nothing on the JavaScript side: the SDK invokes the command through Tauri's own internals, because Tauri has no preload stage where a shim could be installed.
|
|
229
233
|
|
|
230
234
|
### Why the backing store, and not a screen capture
|
|
@@ -245,7 +249,7 @@ All three capture the visible viewport by default, so a baseline taken on a deve
|
|
|
245
249
|
|
|
246
250
|
**`{ fullPage: true }` works on Tauri/Linux only.** WebKitGTK can render the whole document offscreen; `takeSnapshot` (macOS) and `CapturePreview` (Windows) only give what is composited, and Electron's `capturePage()` is the same. Asked for a full page they cannot produce, all of them return `{ ok: false, reason: 'full-page-unsupported' }` rather than quietly handing back the viewport, which would be a baseline that omits everything below the fold while every later diff of it reports green about a region that was never captured. No baseline is written on a refusal.
|
|
247
251
|
|
|
248
|
-
An app that already has its own capture can expose `window.__reticleIpc.capture()` returning a PNG path instead; the SDK prefers it over the built-in command.
|
|
252
|
+
An app that already has its own capture can expose `window.__reticleIpc.capture()` returning a PNG path instead; the SDK prefers it over the built-in command. The daemon reads only a file in the OS temp directory whose name starts with `reticle-capture-`, so write the PNG there.
|
|
249
253
|
|
|
250
254
|
<Warning>
|
|
251
255
|
One honest caveat. A fully occluded or minimized window is only partially composited, so parts of
|
|
@@ -322,7 +326,7 @@ Without `@reticlehq/electron/preload`, every IPC call is invisible to Reticle. A
|
|
|
322
326
|
|
|
323
327
|
## How it compares to Playwright MCP
|
|
324
328
|
|
|
325
|
-
Both attached to the same running Electron app, same task ("archive a todo, then verify it worked"):
|
|
329
|
+
Both attached to the same running Electron app, same task ("archive a todo, then verify it worked"). Measured by hand, with Reticle's `lean` tool profile, which has since been retired:
|
|
326
330
|
|
|
327
331
|
| tool | ~tokens | ms | verdict |
|
|
328
332
|
| ----------------------- | ------- | ------- | ----------------------------------------- |
|
|
@@ -344,6 +348,8 @@ Playwright MCP is faster. It is also structurally unable to see an IPC failure,
|
|
|
344
348
|
|
|
345
349
|
**`reticle open` says there is nothing to open.** That is correct for a desktop app. There is no URL, and there is no `reticle drive` for desktop either. Both launch a browser, which is not what you are testing.
|
|
346
350
|
|
|
351
|
+
**Several windows, and the wrong one gets driven.** Every window that loads the SDK is its own session, and `reticle_session { action: "list" }` names each (`window: "main"`: Tauri's label, or the `label` you gave `installReticleCapture` on Electron) with whether it is `hidden`. A page served as an error (a dev server's 404 for a static page, say) carries `documentStatus` and is never auto-selected ahead of a working one. To drive a specific window, pass its `sessionId`. To get rid of a stray hidden window for good, call `reticle_session { action: "end", sessionId, disconnect: true }`. It stays detached across its own reloads until the daemon restarts.
|
|
352
|
+
|
|
347
353
|
**A screenshot came back partly blank.** The window is occluded or minimized, so it is only partially composited. Bring it forward and capture again.
|
|
348
354
|
|
|
349
355
|
**`{ ok: false, reason: 'full-page-unsupported' }`.** You asked for `fullPage: true` on a platform that cannot render offscreen. Only Tauri on Linux (WebKitGTK) can. Capture the viewport instead, or scroll and capture in sections.
|
package/docs/enterprise.md
CHANGED
|
@@ -4,7 +4,7 @@ description: 'Premium access and activation, what is gated, the security and dat
|
|
|
4
4
|
icon: building
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Enterprise features ship inside the open package and are unlocked by a signed license key you set as `RETICLE_LICENSE_KEY`. Activation is verified locally with Ed25519 and makes **no network call**, so nothing about your usage leaves your machine. Run `npx @reticlehq/server license` to see whether you are `active`, `eval`, `missing` or `
|
|
7
|
+
Enterprise features ship inside the open package and are unlocked by a signed license key you set as `RETICLE_LICENSE_KEY`. Activation is verified locally with Ed25519 and makes **no network call**, so nothing about your usage leaves your machine. Run `npx @reticlehq/server license` to see whether you are `active`, `eval`, `missing`, `expired` or `invalid`.
|
|
8
8
|
|
|
9
9
|
> Premium access (how you get + activate it), what's gated, the security/data-handling posture, and the licensing model. Integration mechanics live in [`platform-integration.md`](./platform-integration.md).
|
|
10
10
|
|
|
@@ -22,19 +22,20 @@ Enterprise (`ee/`) features ship **inside the open package**; they're source-ava
|
|
|
22
22
|
export RETICLE_LICENSE_KEY="<your key>"
|
|
23
23
|
# the release already bakes the issuer public key (RETICLE_LICENSE_PUBLIC_KEY)
|
|
24
24
|
```
|
|
25
|
-
3. **Verify.** `reticle license`
|
|
25
|
+
3. **Verify.** `reticle license` prints one JSON line whose `status` and `detail` say where you stand:
|
|
26
26
|
|
|
27
27
|
```
|
|
28
|
-
active licensed to Acme Corp (enterprise), expires 2027-06-
|
|
28
|
+
active licensed to Acme Corp (enterprise), expires 2027-06-20T00:00:00.000Z
|
|
29
29
|
eval evaluation mode: enterprise features run free (no issuer key configured)
|
|
30
30
|
missing set RETICLE_LICENSE_KEY to activate enterprise features in production. Request a key from hey@reticle.sh
|
|
31
31
|
expired license expired. Renew with hey@reticle.sh to keep using enterprise features
|
|
32
|
+
invalid license key rejected (<reason>). hey@reticle.sh can re-issue it
|
|
32
33
|
```
|
|
33
34
|
|
|
34
35
|
Every status reports `contact`, so a reader who is stuck always has somebody to write to. An unlicensed status also reports `gated`, what a licence unlocks in the build you are running, so the command answers "what would this buy me, and how do I get one" without anybody having to find this page first. It is derived from the features the gate actually enforces, so it names what your build will really refuse rather than a roadmap. An `active` licence does not report it: that reader has already bought, and listing feature names at them answers nothing they asked.
|
|
35
36
|
|
|
36
|
-
4. **Unlock.** Enterprise features now run
|
|
37
|
-
5. **Renew.** Keys carry an expiry
|
|
37
|
+
4. **Unlock.** Enterprise features now run; without a valid key they refuse to run (a clear error, never a silent half-feature). A published release has the issuer key baked in, so it enforces the key everywhere. Only a build without one (from source) runs in `eval` mode, where the features run free outside `NODE_ENV=production`.
|
|
38
|
+
5. **Renew.** Keys carry an expiry, shown as `expiresAt`; once it passes, the status is `expired`.
|
|
38
39
|
|
|
39
40
|
> Procuring a license: contact **[hey@reticle.sh](mailto:hey@reticle.sh)**. Keys are issued offline and signed with Ed25519; the activation you run (`reticle license`) verifies them locally with no network call.
|
|
40
41
|
|
|
@@ -42,26 +43,26 @@ Enterprise (`ee/`) features ship **inside the open package**; they're source-ava
|
|
|
42
43
|
|
|
43
44
|
The licensing **mechanism** is open core (inspectable, FSL). Only the **features** under `ee/` are gated:
|
|
44
45
|
|
|
45
|
-
- **Today:** the activation gate +
|
|
46
|
+
- **Today:** the activation gate + one gated feature (audit event recording, `audit-log`).
|
|
46
47
|
- **Roadmap** (the reliably enterprise-only set): **SSO/SAML, SCIM, RBAC / team permissions, audit logs, multi-org management, verify-before-merge policy gates, and the hosted control-plane connectors.** These are the things a security/compliance org pays for; the core verification engine stays free forever.
|
|
47
48
|
|
|
48
49
|
> What's premium vs free, and pricing, are business decisions for the owner; this doc describes the _mechanism_, not the price list.
|
|
49
50
|
|
|
50
51
|
## Security & data handling
|
|
51
52
|
|
|
52
|
-
The honest one-pager a security review needs. Reticle is built so the answer to "where does our data go?" is **nowhere. It runs on your machine, in your infra.**
|
|
53
|
+
The honest one-pager a security review needs. Reticle is built so the answer to "where does our data go?" is **nowhere, unless you link a project to the dashboard. It runs on your machine, in your infra.**
|
|
53
54
|
|
|
54
55
|
| Question | Answer |
|
|
55
56
|
| --- | --- |
|
|
56
57
|
| Does the SDK ship to production? | **No.** Dev/preview-only, tree-shaken from production builds. |
|
|
57
58
|
| Where does the server run? | **Localhost.** The bridge binds `127.0.0.1`; the verify endpoint is localhost-bound + token-guarded (constant-time), with request/body-size/timeout limits. |
|
|
58
|
-
| Does anything phone home? | **No app data
|
|
59
|
+
| Does anything phone home? | **No app data unless you opt in.** Linking a project to the dashboard (`reticle connect`) sends its runs there; see [what is recorded](what-is-recorded.md) and `reticle config` for what it sends. License checks are offline (Ed25519). The CLI sends anonymous, opt-out usage metrics only (random id + event names, no code, no PII; see [telemetry](telemetry.md)); disable fleet-wide with `RETICLE_TELEMETRY=0` or per-machine with `reticle telemetry disable`. Feedback your team explicitly sends us (`reticle feedback`) is the only free text that ever leaves; it is never collected passively, is redacted client-side, and is disabled fleet-wide with `RETICLE_FEEDBACK=0`. |
|
|
59
60
|
| Where do artifacts live? | Your disk: `.reticle/runs/<id>.json` (atomic writes, bounded retention), `.reticle/flows/`, `.reticle/contract.json`. You own them. |
|
|
60
61
|
| What can the server read? | The DOM/network/console/routing/state of the app under test, locally. |
|
|
61
62
|
| Leak risk downstream? | The **`prod-preview` profile** redacts source `file:line`, raw bodies, and app-state values. |
|
|
62
63
|
| Path safety | Run/flow ids are validated as single path segments on read **and** write (no traversal). |
|
|
63
64
|
|
|
64
|
-
**Verify it yourself:** the SDK + server are source-available, so read the tree-shaking, the `127.0.0.1` bind, and the offline license verify. `SECURITY.md` has the disclosure process; an SBOM is available on request. SOC 2 is
|
|
65
|
+
**Verify it yourself:** the SDK + server are source-available, so read the tree-shaking, the `127.0.0.1` bind, and the offline license verify. `SECURITY.md` has the disclosure process; an SBOM is available on request. SOC 2 is not in place; the posture above is the honest current state.
|
|
65
66
|
|
|
66
67
|
## Licensing model (per package)
|
|
67
68
|
|
|
@@ -69,7 +70,7 @@ The honest one-pager a security review needs. Reticle is built so the answer to
|
|
|
69
70
|
| --- | --- | --- |
|
|
70
71
|
| The protocol and the rules (`open-verification`, `core`, `engine`) | **Apache-2.0** | the part that DECIDES a verdict, auditable and reimplementable by anyone |
|
|
71
72
|
| Embeddable SDK (`browser`, `react`, `babel-plugin`, `next`, `vite-plugin`, `electron`, `eslint-plugin`) | **Apache-2.0** | safe to ship inside your customers' apps; explicit patent grant |
|
|
72
|
-
| Server / CLI / MCP (`server`, `
|
|
73
|
+
| Server / CLI / MCP (`server`, `init`, `test`) | **FSL-1.1-ALv2** | free for any use except reselling Reticle itself; converts to Apache after 2 years |
|
|
73
74
|
| Enterprise features (`server/src/features/ee/`) | **Reticle Enterprise License** | source-available; free for dev/eval, license key required in production |
|
|
74
75
|
|
|
75
76
|
Embedding / OEM / enterprise: **[hey@reticle.sh](mailto:hey@reticle.sh)**.
|
package/docs/environment.mdx
CHANGED
|
@@ -17,6 +17,7 @@ Reticle works with none of these set. Each one changes a single behaviour, and m
|
|
|
17
17
|
| `RETICLE_ALLOWED_ORIGINS` | daemon | Comma-separated WebSocket origins the bridge accepts. |
|
|
18
18
|
| `RETICLE_STATE_DIR` | daemon, CLI | Daemon state: pid files, the discovery registry and logs. Defaults to `~/.reticle`. |
|
|
19
19
|
| `RETICLE_DAEMON_READY_TIMEOUT_MS` | MCP proxy | How long the MCP proxy waits for a daemon to come up before reporting it unreachable. |
|
|
20
|
+
| `RETICLE_NO_VERSION_MATCH` | CLI | `1` turns off version matching: when the project's SDK is a different major version from the CLI you ran, the CLI normally hands the command to the matching server version. |
|
|
20
21
|
| `RETICLE_DEV` | `@reticlehq/next` | Instrument even when `NODE_ENV` says production, for `NODE_ENV=production next dev`. |
|
|
21
22
|
|
|
22
23
|
## Daemon lifetime
|
|
@@ -33,6 +34,7 @@ Reticle works with none of these set. Each one changes a single behaviour, and m
|
|
|
33
34
|
| Variable | Read by | What it does |
|
|
34
35
|
| --- | --- | --- |
|
|
35
36
|
| `RETICLE_CDP_URL` | daemon | Attach to a browser that is already running, over CDP, instead of launching one. |
|
|
37
|
+
| `RETICLE_CHROMIUM_PATH` | daemon, `drive`, `verify`, `doctor` | The Chromium executable to launch, for a machine where Playwright's own build is missing and cannot be installed and there is no Chrome or Edge in the usual place. When set, nothing else is tried: no Playwright build, no Chrome or Edge, no install. A path that does not exist, is not a file, or is not executable is refused with a message naming it and saying which. `doctor` reports on this path instead of the bundled build. |
|
|
36
38
|
| `RETICLE_MAX_CONTEXTS` | daemon | The most leased headless browser contexts the pool runs at once. |
|
|
37
39
|
| `RETICLE_MAX_MESSAGES_PER_SECOND` | daemon | Events per second a page may send before the bridge starts sampling them. It never disconnects. Raise it for a legitimately busy app, such as a streaming dashboard. |
|
|
38
40
|
|
|
@@ -40,7 +42,7 @@ Reticle works with none of these set. Each one changes a single behaviour, and m
|
|
|
40
42
|
|
|
41
43
|
| Variable | Read by | What it does |
|
|
42
44
|
| --- | --- | --- |
|
|
43
|
-
| `RETICLE_ADVERTISE_ALL_TOOLS` | daemon | Advertise
|
|
45
|
+
| `RETICLE_ADVERTISE_ALL_TOOLS` | daemon | Advertise 30 tools directly instead of the default ten, under their unmerged names (`reticle_snapshot` instead of `reticle_look { action: "page" }`, and so on). Everything is reachable either way, through `reticle_run`. |
|
|
44
46
|
| `RETICLE_VERIFY_SURFACE` | daemon | Advertise the smallest surface that can still produce a verdict. |
|
|
45
47
|
| `RETICLE_TOOL_PROFILE` | daemon | Retired. Any value it used to accept still resolves to a sensible surface, and the daemon says which one it used instead. |
|
|
46
48
|
| `RETICLE_ENCODING` | daemon | How tool results are written for the agent. Compact JSON by default; `pretty` indents it, and `toon` is a denser tabular form. The typed result is the same in every encoding. |
|
|
@@ -62,13 +64,9 @@ Reticle works with none of these set. Each one changes a single behaviour, and m
|
|
|
62
64
|
| `RETICLE_CLOUD_KEY` | CLI, daemon | The key's earlier name. Still honoured. |
|
|
63
65
|
| `RETICLE_CLOUD_URL`, `RETICLE_URL` | CLI, daemon | The platform host. `RETICLE_CLOUD_URL` wins when both are set. |
|
|
64
66
|
| `RETICLE_SYNC_INTERVAL_MS` | `reticle sync --watch` | How often the watching sync runs. Every 60 seconds by default. |
|
|
65
|
-
| `
|
|
66
|
-
| `
|
|
67
|
-
| `
|
|
68
|
-
| `RETICLE_HARNESS_MAX_STEPS` | autonomous drive | A hard ceiling on model turns in one drive. It bounds cost. |
|
|
69
|
-
| `RETICLE_HARNESS_DRIVER` | autonomous drive | Which model drives: `anthropic` (the default) or `jev`. |
|
|
70
|
-
| `JEV_API_KEY`, `RETICLE_HARNESS_JEV_URL` | autonomous drive | A direct key and base URL for the `jev` driver. The usual path is `RETICLE_API_KEY` through the platform. |
|
|
71
|
-
| `OPENAI_API_KEY`, `RETICLE_HARNESS_OPENAI_MODEL` | autonomous drive | A direct key and model for the OpenAI driver. |
|
|
67
|
+
| `RETICLE_HARNESS_MAX_STEPS` | autonomous drive | A hard ceiling on steps in one drive. It bounds cost. The drive itself runs on the platform and needs a linked project; each drive spends credits from the workspace's allowance. |
|
|
68
|
+
| `RETICLE_DRIVE_ID` | autonomous drive | The free drive the platform granted, sent with every Harness call. `reticle try` sets it; you do not need to. |
|
|
69
|
+
| `RETICLE_SECRET_<FIELD>` | autonomous drive, replay | The value of a secret field, typed in on this machine. Only the field's name goes to the platform. |
|
|
72
70
|
|
|
73
71
|
## Licensing
|
|
74
72
|
|
|
@@ -84,4 +82,5 @@ Reticle works with none of these set. Each one changes a single behaviour, and m
|
|
|
84
82
|
| `RETICLE_TELEMETRY_FILE` | CLI, daemon | Write telemetry to a local JSONL file and send nothing, so you can read exactly what would be sent. |
|
|
85
83
|
| `RETICLE_TELEMETRY_URL`, `RETICLE_TELEMETRY_KEY` | CLI, daemon | Send telemetry to a different host or project, such as an EU region or your own instance. |
|
|
86
84
|
| `RETICLE_FEEDBACK` | daemon | Turns off the feedback channel only. Usage telemetry follows `RETICLE_TELEMETRY`. |
|
|
85
|
+
| `RETICLE_INSTALL_SOURCE` | `init`, installer, plugin | Names the published route an install came through (`docs_site`, `skill_file`, `plugin`). Self-declared, carries nothing about you, and changes nothing about the install. |
|
|
87
86
|
| `RETICLE_TRACE` | daemon, CLI | Verbose internal tracing for people working on Reticle itself. Off by default. |
|
package/docs/faq.mdx
CHANGED
|
@@ -11,8 +11,8 @@ Reticle is a dev-only, localhost-only verification layer an AI coding agent uses
|
|
|
11
11
|
|
|
12
12
|
<Accordion title="Does this run in production?">
|
|
13
13
|
No, and it is built so that it cannot easily be made to. Keep `reticle.connect()` behind a dev
|
|
14
|
-
guard; the SDK is side-effect-free and tree-shakes out of production builds.
|
|
15
|
-
|
|
14
|
+
guard; the SDK is side-effect-free and tree-shakes out of production builds. In a production `vite
|
|
15
|
+
build`, the Vite plugin swaps the SDK for an inert stub and injects nothing.
|
|
16
16
|
</Accordion>
|
|
17
17
|
|
|
18
18
|
<Accordion title="Do I have to change my components?">
|
|
@@ -68,7 +68,7 @@ If you believe an `unknown` is wrong, report it. Reticle's own response says as
|
|
|
68
68
|
</Accordion>
|
|
69
69
|
|
|
70
70
|
<Accordion title="Does my data leave the machine?">
|
|
71
|
-
|
|
71
|
+
Reticle is dev-only and localhost-only. Nothing from your app leaves the machine until you link a project (`reticle connect`, or `RETICLE_API_KEY` in CI). After that, what syncs is set by `reticle config`, and when the Harness drives, the platform sees the steps it drives. Secret values never leave. Credential-shaped values are redacted before they leave the page. You will see `[REDACTED]` in request bodies without configuring anything.
|
|
72
72
|
|
|
73
73
|
Anonymous usage counts are sent by default, separately, and carry nothing from your app. `reticle telemetry disable`, `RETICLE_TELEMETRY=0` or `DO_NOT_TRACK=1` turns them off.
|
|
74
74
|
|