@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/getting-started.md
CHANGED
|
@@ -4,7 +4,7 @@ description: 'Zero to your agent verifying your real app, step by step, with wor
|
|
|
4
4
|
icon: rocket
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
**To get started
|
|
7
|
+
**To get started: run the installer, then `reticle init` in your app directory before opening your coding agent.** The installer puts the CLI on the machine and registers its MCP tools with supported agents. `init` wires your app and checks that a browser session connected; without it the agent has the tools and nothing to point them at. For a cloud dashboard, use `reticle connect --project "My App"`, which does the same and also links a cloud project and syncs history. The first run is what proves anything: ask your agent to verify one journey in your app, or, on a project linked with `reticle connect`, use `reticle_verify { action: "explore", persona: "<the journey worth proving>" }`. A connected app is not a verified one. You need Node 20.11 or newer, an app you run locally, and an agent that speaks MCP.
|
|
8
8
|
|
|
9
9
|
> **Looking for the fast path?** [Quickstart](/quickstart) gets you to a real verdict in five minutes, and every response on it was captured live. [Agentic install](/install-agentic) and [Manual install](/install-manual) cover setup in detail, per agent and per framework.
|
|
10
10
|
>
|
|
@@ -14,7 +14,9 @@ This walks you from zero to your agent verifying your app, step by step, with re
|
|
|
14
14
|
|
|
15
15
|
- [What you're setting up](#what-youre-setting-up)
|
|
16
16
|
- [Prerequisites](#prerequisites)
|
|
17
|
-
- [Step 1: Connect your coding agent (MCP)](#step-1-connect-your-coding-agent-mcp)
|
|
17
|
+
- [Step 1: Connect your coding agent (MCP), once](#step-1-connect-your-coding-agent-mcp-once)
|
|
18
|
+
- [Wire your app: on the first run, or `reticle init`](#wire-your-app-on-the-first-run-or-reticle-init)
|
|
19
|
+
- [Add a cloud dashboard: `reticle connect`](#add-a-cloud-dashboard-reticle-connect)
|
|
18
20
|
- [Step 2: Embed the SDK in your app](#step-2-embed-the-sdk-in-your-app)
|
|
19
21
|
- [Vite + React](#vite--react)
|
|
20
22
|
- [Next.js](#nextjs)
|
|
@@ -52,23 +54,52 @@ Everything is **dev-only** and **localhost-only**. It's tree-shaken out of produ
|
|
|
52
54
|
|
|
53
55
|
## Prerequisites
|
|
54
56
|
|
|
55
|
-
- Node 20 or newer, and a package manager (npm/pnpm/yarn).
|
|
57
|
+
- Node 20.11 or newer, and a package manager (npm/pnpm/yarn).
|
|
56
58
|
- A coding agent that speaks MCP: Claude Code, Cursor, Windsurf, Claude Desktop, etc.
|
|
57
59
|
- A web app you run locally in dev (any framework; React gets the richest features).
|
|
58
60
|
|
|
59
61
|
---
|
|
60
62
|
|
|
61
|
-
##
|
|
63
|
+
## Step 1: Connect your coding agent (MCP), once
|
|
62
64
|
|
|
63
|
-
|
|
65
|
+
You don't start the server manually; your agent starts it via MCP. Register Reticle **once, at the user (global) scope** so every project picks it up. There's nothing to add per project.
|
|
66
|
+
|
|
67
|
+
**The installer does this for every agent on the machine**, which is why it is the first thing on the [quickstart](/quickstart):
|
|
64
68
|
|
|
65
69
|
```bash
|
|
66
|
-
|
|
70
|
+
curl -fsSL https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.sh | sh # macOS, Linux
|
|
71
|
+
irm https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.ps1 | iex # Windows PowerShell
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Run it in a terminal before you open your agent and there is nothing to restart. The rest of this section is what it writes, for a machine where you would rather do it by hand.
|
|
75
|
+
|
|
76
|
+
**Claude Code**, one command:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
claude mcp add reticle -s user -- npx @reticlehq/server mcp
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
(`reticle setup mcp` and `reticle init` both run exactly this for you. `-s user` is what makes it global; drop it for a project-local registration instead.)
|
|
83
|
+
|
|
84
|
+
**Cursor**: add to your global `~/.cursor/mcp.json` (not per-project; `reticle init` writes this for you):
|
|
85
|
+
|
|
86
|
+
```jsonc
|
|
87
|
+
{
|
|
88
|
+
"mcpServers": {
|
|
89
|
+
"reticle": { "command": "npx", "args": ["@reticlehq/server", "mcp"] },
|
|
90
|
+
},
|
|
91
|
+
}
|
|
67
92
|
```
|
|
68
93
|
|
|
69
|
-
|
|
94
|
+
Other MCP clients (Windsurf, Claude Desktop, …) use the same `command`/`args` shape. An agent that was already open reads its server list at startup, so reopen it once. When it launches Reticle, the bridge starts listening on `ws://localhost:4400`.
|
|
95
|
+
|
|
96
|
+
> Want a different port? Set `RETICLE_PORT` in the server `env` and pass the same URL to `reticle.connect({ url })` in Step 2.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Wire your app: on the first run, or `reticle init`
|
|
70
101
|
|
|
71
|
-
|
|
102
|
+
Installing Reticle changes nothing in your project. The first time your agent uses Reticle in a project that has never connected (its first `reticle_session { action: "list" }`), Reticle runs `init` there itself and returns the files it changed under `wired`, so you can skip straight to asking your agent to verify a flow. That call wires the project the agent is in, including a second project on a machine where Reticle is already running for another one. Run `init` yourself to wire a project ahead of time, to preview the changes, or when the agent's MCP server was started outside the project (the call then answers `run_init` with this same command).
|
|
72
103
|
|
|
73
104
|
From your project root:
|
|
74
105
|
|
|
@@ -78,17 +109,18 @@ RETICLE_INSTALL_SOURCE=docs_site npx @reticlehq/server init
|
|
|
78
109
|
|
|
79
110
|
It detects your framework, package manager, and React version, then:
|
|
80
111
|
|
|
81
|
-
- **registers the Reticle MCP server once, globally, for each agent you have installed** (Claude Code via `claude mcp add reticle -s user`, and
|
|
112
|
+
- **registers the Reticle MCP server once, globally, for each agent you have installed** (Claude Code via `claude mcp add reticle -s user`, plus every other agent config it finds: Cursor, Windsurf, VS Code, Gemini CLI, OpenCode and Antigravity; Codex CLI through `codex mcp add`, or the lines to paste when that command is missing), so every project on this machine gets it; you never re-add it per project,
|
|
82
113
|
- **writes a verification rule into your agent's instruction file** (`CLAUDE.md`, `.cursor/rules/reticle.mdc`, or `AGENTS.md`), so the agent knows to verify a feature with Reticle _after building it_, not only when you remember to ask (idempotent; appended below anything you already have),
|
|
83
114
|
- installs the SDK kit (`@reticlehq/react`) and the right build plugin (`@reticlehq/vite-plugin` or `@reticlehq/next`) as dev dependencies,
|
|
84
115
|
- **Vite:** adds the `reticle()` plugin to your config, which wires source mapping _and_ `reticle.connect()` for you, so there is nothing else to edit,
|
|
85
|
-
- **Next
|
|
116
|
+
- **Next:** wraps `next.config` in `withReticle` and mounts a generated `<ReticleDev />` component in your root layout; on a config shape it does not recognise it prints the snippet to paste instead (it never half-edits a build config).
|
|
117
|
+
- **Other frameworks:** writes or prints the connect wiring for that framework (see [Frameworks](/frameworks)).
|
|
86
118
|
|
|
87
119
|
The bridge + MCP server is a single process that serves all your projects, so it's registered at **user scope**, not in a per-project `.mcp.json`. Only the SDK (the `reticle()` plugin / connect call) is added per project.
|
|
88
120
|
|
|
89
121
|
Re-running is safe: already-registered and already-patched steps are skipped, and on a wired project it goes straight to proving the app still works. Preview without writing via `npx @reticlehq/server init --dry-run`.
|
|
90
122
|
|
|
91
|
-
`init` does not stop at writing files. It starts your dev server, opens the app, and waits for a session to connect from inside it. That connection is the whole proof that onboarding worked. If a dev server was already running without Reticle, restart it once: it read the build config before `init` edited it. It exits non-zero if nothing connected and prints what is left to do. It does NOT drive. Then prove a flow. That is the FIRST RUN, and it is a separate call: `reticle_verify { action: "explore", persona: "<who does what>" }
|
|
123
|
+
`init` does not stop at writing files. It starts your dev server, opens the app, and waits for a session to connect from inside it. That connection is the whole proof that onboarding worked. If a dev server was already running without Reticle, restart it once: it read the build config before `init` edited it. It exits non-zero if nothing connected and prints what is left to do. It does NOT drive. Then prove a flow. That is the FIRST RUN, and it is a separate call: drive one journey with `reticle_act_and_wait` and an `until` on its last step. On a project linked with `reticle connect`, `reticle_verify { action: "explore", persona: "<who does what>" }` lets the Reticle Harness drive it on the platform instead (every plan includes Harness credits, Free too). Either way what was driven is saved as a flow, so later checks replay it with no model in the loop.
|
|
92
124
|
|
|
93
125
|
These carry what the command cannot work out for itself:
|
|
94
126
|
|
|
@@ -104,42 +136,15 @@ If you ran `--files-only` with a dev server already running, restart it, then sk
|
|
|
104
136
|
|
|
105
137
|
---
|
|
106
138
|
|
|
107
|
-
##
|
|
108
|
-
|
|
109
|
-
You don't start the server manually; your agent starts it via MCP. Register Reticle **once, at the user (global) scope** so every project picks it up. There's nothing to add per project.
|
|
139
|
+
## Add a cloud dashboard: `reticle connect`
|
|
110
140
|
|
|
111
|
-
|
|
141
|
+
Optional. Instead of, or after, `init`, run this in your app directory:
|
|
112
142
|
|
|
113
143
|
```bash
|
|
114
|
-
|
|
115
|
-
irm https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.ps1 | iex # Windows PowerShell
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Run it in a terminal before you open your agent and there is nothing to restart. The rest of this section is what it writes, for a machine where you would rather do it by hand.
|
|
119
|
-
|
|
120
|
-
**Claude Code**, one command:
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
claude mcp add reticle -s user -- npx @reticlehq/server mcp
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
(`reticle setup mcp` and `reticle init` both run exactly this for you. `-s user` is what makes it global; drop it for a project-local registration instead.)
|
|
127
|
-
|
|
128
|
-
**Cursor**: add to your global `~/.cursor/mcp.json` (not per-project; `reticle init` writes this for you):
|
|
129
|
-
|
|
130
|
-
```jsonc
|
|
131
|
-
{
|
|
132
|
-
"mcpServers": {
|
|
133
|
-
"reticle": { "command": "npx", "args": ["@reticlehq/server", "mcp"] },
|
|
134
|
-
},
|
|
135
|
-
}
|
|
144
|
+
npx @reticlehq/server connect --project "My App"
|
|
136
145
|
```
|
|
137
146
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
> Want a different port? Set `RETICLE_PORT` in the server `env` and pass the same URL to `reticle.connect({ url })` in Step 2.
|
|
141
|
-
|
|
142
|
-
---
|
|
147
|
+
Approve the short browser code if Reticle asks you to sign in. The browser asks you to sign in, or to create a free account at app.reticle.sh. A new account gets 10 free credits to try the Harness. What syncs, and how to switch each part off, is in [What is recorded](what-is-recorded.md). The command then links this folder and sends any history already on the machine. Open or restart your coding agent and ask it to verify one real journey. For a new project, the dashboard has no result until that first run is recorded.
|
|
143
148
|
|
|
144
149
|
## Step 2: Embed the SDK in your app
|
|
145
150
|
|
|
@@ -166,7 +171,7 @@ export default defineConfig({
|
|
|
166
171
|
});
|
|
167
172
|
```
|
|
168
173
|
|
|
169
|
-
This injects `reticle.connect()` for you _and_ handles React 19 source mapping (Step 3), so there's no entry-file edit and no separate Babel setup. `
|
|
174
|
+
This injects `reticle.connect()` for you _and_ handles React 19 source mapping (Step 3), so there's no entry-file edit and no separate Babel setup. A production `vite build` injects nothing and replaces the SDK with an inert stub, so it can never reach production. (This is exactly what `reticle init` adds.)
|
|
170
175
|
|
|
171
176
|
<details>
|
|
172
177
|
<summary>Prefer to wire it by hand instead of the plugin?</summary>
|
|
@@ -181,7 +186,8 @@ import { App } from './App';
|
|
|
181
186
|
|
|
182
187
|
if (import.meta.env.DEV) {
|
|
183
188
|
// SESSION_AUTO gives this tab a unique session id, so multiple apps/tabs never collide.
|
|
184
|
-
|
|
189
|
+
// The token is the contents of ~/.reticle/pairing-token; see "The pairing token" below.
|
|
190
|
+
reticle.connect({ session: SESSION_AUTO, token: import.meta.env.VITE_RETICLE_TOKEN }); // ws://localhost:4400 by default
|
|
185
191
|
}
|
|
186
192
|
|
|
187
193
|
createRoot(document.getElementById('root')!).render(
|
|
@@ -201,6 +207,7 @@ The daemon auto-generates a **pairing token** on first run and stores it at `~/.
|
|
|
201
207
|
|
|
202
208
|
- **Vite plugin users:** nothing to do. The plugin reads the token server-side and injects it into `connect()` for you.
|
|
203
209
|
- **Next.js / hand-wired `connect()`:** your `connect()` runs in the browser and can't read the file, so pass the token in yourself. The simplest path is a shared secret: set `RETICLE_TOKEN` for the daemon (it uses that instead of auto-generating) and expose the same value to the client as `NEXT_PUBLIC_RETICLE_TOKEN`, then pass it to `connect({ token })` (see below). On a single-user machine you can also just read `~/.reticle/pairing-token` in your dev tooling and forward it the same way.
|
|
210
|
+
- **Keep the token out of `.env` files.** Pass it on the dev command (`VITE_RETICLE_TOKEN="$(cat ~/.reticle/pairing-token)" npm run dev`). A production build reads `.env` too, and would write the token into the JavaScript it ships.
|
|
204
211
|
|
|
205
212
|
### Next.js
|
|
206
213
|
|
|
@@ -254,19 +261,16 @@ Anywhere your app boots in dev:
|
|
|
254
261
|
|
|
255
262
|
```ts
|
|
256
263
|
import { reticle, SESSION_AUTO } from '@reticlehq/react';
|
|
257
|
-
//
|
|
258
|
-
|
|
264
|
+
// A dev-only guard the bundler strips from production builds (Vite shown), and the pairing token
|
|
265
|
+
// (see "The pairing token" above) passed in on the dev command line only.
|
|
266
|
+
if (import.meta.env.DEV) {
|
|
259
267
|
reticle.connect({ session: SESSION_AUTO, token: import.meta.env.VITE_RETICLE_TOKEN });
|
|
268
|
+
}
|
|
260
269
|
```
|
|
261
270
|
|
|
262
|
-
|
|
271
|
+
Not on Vite? Use your bundler's dev-only flag and its way of passing a value to the browser at dev time. Or run `npx @reticlehq/server init`, which wires the token for every supported stack.
|
|
263
272
|
|
|
264
|
-
|
|
265
|
-
<script type="module">
|
|
266
|
-
import { reticle, SESSION_AUTO } from 'https://esm.sh/@reticlehq/react';
|
|
267
|
-
reticle.connect({ session: SESSION_AUTO });
|
|
268
|
-
</script>
|
|
269
|
-
```
|
|
273
|
+
Plain HTML with no build step: run `npx @reticlehq/server init` in the folder that holds `index.html`. It adds a dev-only snippet that connects only on localhost, and puts this machine's pairing token in a gitignored `reticle.local.js` beside the page, so the token never lands in anything you publish. A hand-written script tag without that token is refused by the bridge.
|
|
270
274
|
|
|
271
275
|
> **Want to watch the agent work?** Add `present: true` to `reticle.connect()` for a glowing border, a synthetic cursor that flies to targets, click/hover effects, and a narration HUD. See [usage §16](usage.md#16-presenter-mode-narration--fake-clock-watch--control).
|
|
272
276
|
|
|
@@ -367,7 +371,7 @@ If the list is empty, see [Troubleshooting](#troubleshooting).
|
|
|
367
371
|
|
|
368
372
|
## Step 5: Your first verification
|
|
369
373
|
|
|
370
|
-
> `reticle_verify { action: "explore", persona: "<what>" }` drives this for you and saves the flow. This section is what it does, for when you want to do it yourself.
|
|
374
|
+
> On a project linked with `reticle connect`, `reticle_verify { action: "explore", persona: "<what>" }` drives this for you on the platform and saves the flow. This section is what it does, for when you want to do it yourself.
|
|
371
375
|
|
|
372
376
|
Now just talk to your agent in plain language. For example:
|
|
373
377
|
|
|
@@ -387,7 +391,7 @@ reticle_assert({ timeout_ms: 2000, predicate: { kind: "allOf", predicates: [
|
|
|
387
391
|
{ kind: "net", method: "GET", urlContains: "/api/dashboard", status: 200, since: 920 },
|
|
388
392
|
{ kind: "console", level: "error", absent: true }
|
|
389
393
|
]}})
|
|
390
|
-
// → { pass: true }
|
|
394
|
+
// → { verified: "yes", verdict: { pass: true, … } }
|
|
391
395
|
```
|
|
392
396
|
|
|
393
397
|
You get a real, evidence-backed answer. If it fails, the agent sees the reason (e.g. the call 404'd, or a `TypeError` in `Dashboard.tsx:88`) and can fix it and re-check.
|
|
@@ -433,12 +437,12 @@ registerCapabilities({
|
|
|
433
437
|
signals: ['order:saved', 'cart:updated'],
|
|
434
438
|
stores: ['cart'],
|
|
435
439
|
});
|
|
436
|
-
// agent: reticle_capabilities
|
|
440
|
+
// agent: reticle_run({ tool: "reticle_capabilities", args: {} }) → the whole testable surface
|
|
437
441
|
```
|
|
438
442
|
|
|
439
|
-
> **Multi-domain apps:** prefer `registerReticleDomain({ testids, signals, stores })` co-located in one `reticle.ts` per domain. Each self-registers and `reticle_capabilities
|
|
443
|
+
> **Multi-domain apps:** prefer `registerReticleDomain({ testids, signals, stores })` co-located in one `reticle.ts` per domain. Each self-registers and `reticle_run({ tool: "reticle_capabilities", args: {} })` assembles the union, so there's no central map to forget. See [integration-patterns.md](integration-patterns.md).
|
|
440
444
|
|
|
441
|
-
> Watch the agent work: pass `present: true` to `reticle.connect()` for a glowing border, a cursor that flies to targets, and a HUD; the agent can call `reticle_session
|
|
445
|
+
> Watch the agent work: pass `present: true` to `reticle.connect()` for a glowing border, a cursor that flies to targets, and a HUD; the agent can call `reticle_session({ action: "narrate", text })` to show its intent. See [usage §16](usage.md#16-presenter-mode-narration--fake-clock-watch--control).
|
|
442
446
|
|
|
443
447
|
> **Hover-gated UI (tooltips, hover menus, pointer drag)?** Synthetic events can't trigger native `onMouseEnter`. Enable **real input** by launching your browser with `--remote-debugging-port=9222` and setting `RETICLE_CDP_URL` in the MCP server `env`. Reticle then drives real pointer input and `reticle_act` reports `inputMode:"real"`. See [usage §18](usage.md#18-real-input-mode-native-hover--drag).
|
|
444
448
|
|
|
@@ -531,7 +535,7 @@ pnpm add @reticlehq/next
|
|
|
531
535
|
|
|
532
536
|
### What exactly does `reticle init` change in my project?
|
|
533
537
|
|
|
534
|
-
|
|
538
|
+
A handful of files, none of them mysterious: a `.reticle.json` project config, your build config (the `reticle()` Vite plugin, or `withReticle` in `next.config`), `package.json` (two dev dependencies), a dev-only capabilities file at `src/reticle-dev.ts` (or `app/reticle-dev.tsx` on Next.js), and your agent's rule files (`CLAUDE.md`, `AGENTS.md`, `RETICLE.md`, `.claude/commands/reticle.md`). It then starts your dev server and opens the app, neither of which changes your source: the dev server is left running for you afterwards. It also registers the MCP server globally, which is a once-per-machine step rather than a per-project one. Run `npx @reticlehq/server init --dry-run` first to see the exact plan before anything is written.
|
|
535
539
|
|
|
536
540
|
### Do I have to re-register the MCP server for every project?
|
|
537
541
|
|
|
@@ -543,7 +547,7 @@ Because your agent read its MCP server list at startup, before Reticle existed,
|
|
|
543
547
|
|
|
544
548
|
### Which Node version do I need?
|
|
545
549
|
|
|
546
|
-
Node 20 or newer.
|
|
550
|
+
Node 20.11 or newer.
|
|
547
551
|
|
|
548
552
|
### Do I need the React adapter?
|
|
549
553
|
|
|
@@ -555,7 +559,7 @@ Yes, as long as each connection has a unique session id, which `SESSION_AUTO` gi
|
|
|
555
559
|
|
|
556
560
|
### Will Reticle end up in my production bundle?
|
|
557
561
|
|
|
558
|
-
No. Keep `connect()` behind a dev guard (`import.meta.env.DEV` or a `NODE_ENV` check); the packages are side-effect free and tree-shake out when unused.
|
|
562
|
+
No. Keep `connect()` behind a dev guard (`import.meta.env.DEV` or a `NODE_ENV` check); the packages are side-effect free and tree-shake out when unused. A production `vite build` with the Vite plugin injects nothing and replaces the SDK with an inert stub. As a backstop, `connect()` also self-disables when the build reports `NODE_ENV=production`.
|
|
559
563
|
|
|
560
564
|
### Why is my install failing with `ERESOLVE`?
|
|
561
565
|
|
package/docs/human-control.md
CHANGED
|
@@ -4,9 +4,9 @@ description: 'Watch the agent’s live transcript, steer it mid-run, or end the
|
|
|
4
4
|
icon: hand
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
With the presenter on (`reticle.connect({ present: true })`), the floating panel in your page lets you watch the agent's live transcript and steer it: **pause** it (its next action tool refuses
|
|
7
|
+
With the presenter on (`reticle.connect({ present: true })`), the floating panel in your page lets you watch the agent's live transcript and steer it: **pause** it (its next action tool refuses until you resume) or **end** the session. You can also point at a broken element with **Flag a bug** and hand the agent the element plus its source `file:line`.
|
|
8
8
|
|
|
9
|
-
When you run with the presenter on (`reticle.connect({ present: true })`), the floating panel is a **two-way control surface**. You watch the agent's live transcript _and_ can steer it (pause it
|
|
9
|
+
When you run with the presenter on (`reticle.connect({ present: true })`), the floating panel is a **two-way control surface**. You watch the agent's live transcript _and_ can steer it (pause it or end the session) without leaving the page. To tell the agent something, talk to it in its own window: the panel sends it no text. There's also a clean, unmistakable "session ended" signal for both you and the agent.
|
|
10
10
|
|
|
11
11
|
## Watch the testing score climb (the live verdict tally)
|
|
12
12
|
|
|
@@ -16,8 +16,7 @@ The panel header shows a running **✓N ✗M** tally: the verdict score, live. I
|
|
|
16
16
|
|
|
17
17
|
MCP is **pull-based**: the agent only receives data when it calls a tool. Reticle can't freeze the model mid-thought, but it **intercepts the agent's next tool call**, which is exactly when the agent would touch the page. That makes steering reliable:
|
|
18
18
|
|
|
19
|
-
- **
|
|
20
|
-
- **Pause.** The agent's next `reticle_act` (single or `steps`) / `reticle_act_and_wait` **refuses to execute** and returns `{ paused: true, guidance: ["<your message>"], hint: "…" }`. The page is untouched until resume. _Read-only tools (snapshot/query/observe) still work_, so the agent can look while paused.
|
|
19
|
+
- **Pause.** The agent's next `reticle_act` (single or `steps`) / `reticle_act_and_wait` **refuses to execute** and returns `{ paused: true, guidance: […], hint: "…" }`. The page is untouched until resume. _Read-only tools (`reticle_look`, `reticle_observe`) still work_, so the agent can look while paused.
|
|
21
20
|
- **End.** The session is over; the panel shows "Session ended" and clears.
|
|
22
21
|
|
|
23
22
|
## From the panel (the human)
|
|
@@ -25,36 +24,37 @@ MCP is **pull-based**: the agent only receives data when it calls a tool. Reticl
|
|
|
25
24
|
The floating panel (bottom-center, `present: true`) gives you:
|
|
26
25
|
|
|
27
26
|
- **Pause / Resume**: one toggle. Paused turns the panel + page border **amber** with a `PAUSED` badge.
|
|
28
|
-
- **Message box + send.** Type a correction ("check the error state first"), hit Send (or Enter). Your message shows as a `🧑 you:` bubble in the transcript **and** is delivered to the agent.
|
|
29
27
|
- **End** ends the session: panel turns **emerald**, shows `Session ended · <summary>`, then fades away.
|
|
28
|
+
- **Coding agent.** The Agent Log names the coding agent attached to Reticle (`Claude Code connected`, read from the MCP handshake). With no agent attached it says `No coding agent connected` and offers **Copy prompt**, a prompt to paste into one.
|
|
29
|
+
- **Run Harness**, on the Harness page, drives the page as a person you pick: First-time visitor (the default), Returning power user, On a phone, slow connection, Keyboard only, Careless user (bad and unexpected input), Admin / settings, or Custom… in your own words. The pick is remembered per project. The agent hears about the drive on its next tool call (`harness`), with the `runId` to follow it.
|
|
30
30
|
- **Minimise (▾)** collapses the panel to a bar that streams only the live line; click the bar to restore.
|
|
31
|
-
- **Flag a bug**, the button in the corner. Toggle it on, click the element that looks wrong, type what's wrong (⌘/Ctrl+Enter to send, Esc to back out). Reticle pins a numbered marker, logs your flag in the panel, and hands the agent a structured mark.
|
|
31
|
+
- **Flag a bug**, the button in the corner. Toggle it on, click the element that looks wrong, type what's wrong (⌘/Ctrl+Enter to send, Esc to back out). Reticle pins a numbered marker, logs your flag in the panel, and hands the agent a structured mark. Notes are kept in `.reticle/notes.json` (pending and resolved), so a reload or a daemon restart does not lose them, and a linked project syncs them to the dashboard.
|
|
32
32
|
|
|
33
33
|
## Flag a bug: annotate the mistake where you see it
|
|
34
34
|
|
|
35
35
|
You don't have to describe a bug in prose. **Point at it.** The flag captures the element's re-resolvable anchor _and_ the source `file:line` (when the framework stamped one), so the agent fixes the exact element and code, not a guess. The loop:
|
|
36
36
|
|
|
37
37
|
1. **You** flag the element and type the problem → Reticle emits a `HUMAN_MARK`.
|
|
38
|
-
2. **The agent** drains it with `reticle_session {action:"review"}`, getting note + element label + `source: { file, line }` + a ready-to-act `fix` hint. `reticle_session { action: "list" }` also reports `pendingMarks` so the agent notices flags.
|
|
39
|
-
3. **The agent** opens the file, fixes it, and calls `reticle_session
|
|
38
|
+
2. **The agent** drains it with `reticle_session { action: "review" }`, getting note + element label + `source: { file, line }` + a ready-to-act `fix` hint. `reticle_session { action: "list" }` also reports `pendingMarks` so the agent notices flags.
|
|
39
|
+
3. **The agent** opens the file, fixes it, and calls `reticle_session({ action: "review", resolve: "m1" })`.
|
|
40
40
|
4. **You** see **"✓ fixed: \<your note\>"** land in the panel. Flag → fix → confirmation.
|
|
41
41
|
|
|
42
|
-
See [`reticle_session {action:"review"}` in the usage guide](/usage) for the tool shape. Suppress the button with `annotate: false` if you don't want it.
|
|
42
|
+
See [`reticle_session { action: "review" }` in the usage guide](/usage) for the tool shape. Suppress the button with `annotate: false` if you don't want it.
|
|
43
43
|
|
|
44
44
|
## From the agent (the tools)
|
|
45
45
|
|
|
46
46
|
| Tool | Args | Effect |
|
|
47
47
|
| --- | --- | --- |
|
|
48
|
-
| `reticle_session {action:"end"}` | `{ summary?, sessionId? }` | end the session; the panel shows "Session ended · summary" |
|
|
49
|
-
| `reticle_session {action:"resume"}` | `{ sessionId? }` | clear a pause and continue |
|
|
50
|
-
| `reticle_session {action:"messages"}` | `{ sessionId? }` | drain + read pending human messages (explicit poll) |
|
|
51
|
-
| `reticle_session {action:"review"}` | `{ resolve?, all?, sessionId? }` | list the bugs the human flagged; resolve one once fixed |
|
|
48
|
+
| `reticle_session { action: "end" }` | `{ summary?, sessionId? }` | end the session; the panel shows "Session ended · summary" |
|
|
49
|
+
| `reticle_session { action: "resume" }` | `{ sessionId? }` | clear a pause and continue |
|
|
50
|
+
| `reticle_session { action: "messages" }` | `{ sessionId? }` | drain + read pending human messages (explicit poll) |
|
|
51
|
+
| `reticle_session { action: "review" }` | `{ resolve?, all?, sessionId? }` | list the bugs the human flagged; resolve one once fixed |
|
|
52
52
|
|
|
53
|
-
When paused, every action tool short-circuits with the human's guidance, so the agent learns of the pause on its very next action. The agent's expected behavior: **read the guidance, adjust the plan, then call `reticle_session {action:"resume"}`** (or wait for the human to click Resume). The agent can also end the run itself with `reticle_session
|
|
53
|
+
When paused, every action tool short-circuits with the human's guidance, so the agent learns of the pause on its very next action. The agent's expected behavior: **read the guidance, adjust the plan, then call `reticle_session { action: "resume" }`** (or wait for the human to click Resume). The agent can also end the run itself with `reticle_session({ action: "end", summary })` when it's done. Either path shows the same "ended" state.
|
|
54
54
|
|
|
55
55
|
## Piggybacked guidance
|
|
56
56
|
|
|
57
|
-
Even without a pause,
|
|
57
|
+
Even without a pause, any Reticle tool result carries a `control` block when there's something to tell the agent:
|
|
58
58
|
|
|
59
59
|
```jsonc
|
|
60
60
|
{ since, dispatched, settled, result, control: { state: "active", guidance: ["looks good, keep going"] } }
|
|
@@ -66,4 +66,4 @@ Even without a pause, action/observe/assert results carry a `control` block when
|
|
|
66
66
|
|
|
67
67
|
Add this to your operating prompt / `CLAUDE.md` (see the [agent cheat-sheet](agent-cheatsheet.md)):
|
|
68
68
|
|
|
69
|
-
> The human may pause you
|
|
69
|
+
> The human may pause you from the Reticle panel. On any `reticle_act` result with `paused: true`, stop, read `guidance`, adjust, then call `reticle_session { action: "resume" }`. Treat a `control.guidance` field on any result as a live instruction from the human.
|
package/docs/index.mdx
CHANGED
|
@@ -14,63 +14,36 @@ It answers the only question that matters: did the change actually work? On Reac
|
|
|
14
14
|
|
|
15
15
|
## Install it
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Four steps. Each command says what it did and is safe to run twice. Needs Node 20.11 or newer.
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
| Step | Command | Once per | It worked when |
|
|
20
|
+
| --- | --- | --- | --- |
|
|
21
|
+
| 1. Install | `curl -fsSL https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.sh \| sh` | machine | it says Reticle is on this machine, not in your app yet |
|
|
22
|
+
| 2. Wire your app | `reticle init` (in your app's folder) | project | it lists the files it changed and reports a connected session |
|
|
23
|
+
| 3. Connect _(optional)_ | `reticle connect --project "My App"` | project | `reticle status` shows this folder linked |
|
|
24
|
+
| 4. Sync _(optional)_ | `reticle sync` | whenever you like | your runs show on the dashboard |
|
|
20
25
|
|
|
21
|
-
|
|
22
|
-
curl -fsSL https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.sh | sh
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
```powershell Windows
|
|
26
|
-
irm https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.ps1 | iex
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
</CodeGroup>
|
|
30
|
-
|
|
31
|
-
That registers the MCP server with every coding agent it can reach, so the `reticle_*` tools are there the next time you open one. Then, in your project, `npx @reticlehq/server init` wires the app. The [quickstart](/quickstart) walks both.
|
|
26
|
+
On Windows, step 1 is `irm https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.ps1 | iex`. The installer puts `reticle` on your PATH, registers it with every coding agent it finds. It does not wire your app: that is step 2. Skip step 2 and your agent's first `reticle_session` call wires the app instead. The [quickstart](/quickstart) walks every step.
|
|
32
27
|
|
|
33
|
-
|
|
28
|
+
A session listed means the SDK reached the page. Setup is finished when the first run returns a verdict.
|
|
34
29
|
|
|
35
|
-
|
|
30
|
+
### Then hand it to your agent
|
|
36
31
|
|
|
37
|
-
|
|
38
|
-
Reticle is the proof layer for AI coding agents. It runs a dev-only SDK inside my
|
|
39
|
-
running web app, so instead of guessing whether your change worked, you can drive
|
|
40
|
-
the real app and read what actually happened: the network calls, the store, the
|
|
41
|
-
console, the routes, the DOM. You get back pass, fail, or "couldn't tell", with
|
|
42
|
-
the file:line to fix. No screenshots, no vision model, no test syntax.
|
|
32
|
+
The installer ends with **Next steps**. Do them in order:
|
|
43
33
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
your work before telling me it is done, and how you stop reporting "fixed" over a
|
|
47
|
-
silent 500.
|
|
48
|
-
|
|
49
|
-
Install it now:
|
|
50
|
-
|
|
51
|
-
RETICLE_INSTALL_SOURCE=docs_site npx @reticlehq/server@latest init
|
|
52
|
-
|
|
53
|
-
That one command wires the project, starts the dev server, opens the app and
|
|
54
|
-
waits for it to connect. Do not walk it by hand: read what it prints, do anything
|
|
55
|
-
it says is outstanding, and re-run it, which is safe. It exits non-zero until the
|
|
56
|
-
app connects, and that connection, not a config file, is what "installed" means.
|
|
57
|
-
Then prove a flow, which is a separate call:
|
|
58
|
-
reticle_verify { action: "explore", persona: "<who does what>" }. Only if it could not run at all, follow
|
|
59
|
-
https://docs.reticle.sh/install-manual.md.
|
|
60
|
-
|
|
61
|
-
Afterwards, use it whenever you change any user-facing behaviour.
|
|
62
|
-
```
|
|
34
|
+
1. **Restart your coding agent.** An agent loads its MCP tools only when it starts, so one that was open during the install cannot see Reticle yet. That restart is why setup begins with a command, not a prompt.
|
|
35
|
+
2. **Paste the prompt the installer printed** into the agent, opened in your app's folder. The agent runs `reticle init`, wires your app, and drives one real flow to a verdict.
|
|
63
36
|
|
|
64
37
|
<Tip>
|
|
65
38
|
The plugin and the skills CLI are alternatives to the *registration* half only, not to `init`:
|
|
66
|
-
neither one touches your app, so you still run
|
|
39
|
+
neither one touches your app, so you still run `reticle init` afterwards to instrument it. On
|
|
67
40
|
Claude Code, `/plugin marketplace add reticlehq/reticle` then `/plugin install reticle@reticlehq`
|
|
68
41
|
registers the MCP server and the skills in one step; on most other agents, `npx skills add
|
|
69
42
|
reticlehq/reticle`.
|
|
70
43
|
</Tip>
|
|
71
44
|
|
|
72
45
|
<Card title="What that command actually changes" icon="wand-magic-sparkles" href="/install-agentic">
|
|
73
|
-
The
|
|
46
|
+
The files it writes, the marks it prints, and how to read its report.
|
|
74
47
|
</Card>
|
|
75
48
|
|
|
76
49
|
<CardGroup cols={3}>
|
package/docs/install-agentic.mdx
CHANGED
|
@@ -29,43 +29,27 @@ The install is designed for the agent to run rather than you. The agent is about
|
|
|
29
29
|
bin name on your PATH, which is the only context where the unscoped name is ours.
|
|
30
30
|
</Warning>
|
|
31
31
|
|
|
32
|
-
## What do I
|
|
32
|
+
## What do I give my coding agent?
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
Not a prompt first: a command. Run the installer in a terminal:
|
|
35
35
|
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
the real app and read what actually happened: the network calls, the store, the
|
|
40
|
-
console, the routes, the DOM. You get back pass, fail, or "couldn't tell", with
|
|
41
|
-
the file:line to fix. No screenshots, no vision model, no test syntax.
|
|
42
|
-
|
|
43
|
-
Use it because you cannot otherwise tell whether your own code works. Reading the
|
|
44
|
-
diff proves nothing, and unit tests do not run the app. Reticle is how you check
|
|
45
|
-
your work before telling me it is done, and how you stop reporting "fixed" over a
|
|
46
|
-
silent 500.
|
|
47
|
-
|
|
48
|
-
Install it now:
|
|
36
|
+
```bash
|
|
37
|
+
curl -fsSL https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.sh | sh
|
|
38
|
+
```
|
|
49
39
|
|
|
50
|
-
|
|
40
|
+
On Windows: `irm https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.ps1 | iex`.
|
|
51
41
|
|
|
52
|
-
|
|
53
|
-
manual edit, https://docs.reticle.sh/install-manual.md. Do not stop until you have
|
|
54
|
-
driven one real flow in my app and produced a verdict. That, not a config file, is
|
|
55
|
-
what "installed" means.
|
|
42
|
+
It registers Reticle with every coding agent it finds and closes with **Next steps**: restart your agent if it is already open, then paste the prompt it printed. That prompt is the one to give the agent. It has the agent run `init`, close the coverage gaps `reticle doctor` lists, and sets what counts as finished: one real flow in your app driven to a verdict, not a config file.
|
|
56
43
|
|
|
57
|
-
|
|
58
|
-
```
|
|
44
|
+
The order matters. An agent reads its MCP server list when it starts, so a prompt pasted into an agent that is already running has no `reticle_*` tools to call until that agent restarts.
|
|
59
45
|
|
|
60
46
|
<Tip>
|
|
61
47
|
Prefer installing the skills instead? `npx skills add reticlehq/reticle` on most agents, or
|
|
62
48
|
`/plugin marketplace add reticlehq/reticle` then `/plugin install reticle@reticlehq` on Claude
|
|
63
|
-
Code, which registers the MCP server and
|
|
49
|
+
Code, which registers the MCP server and the Reticle skill in one step. Then type `/reticle` and
|
|
64
50
|
the agent runs this same setup from the skill.
|
|
65
51
|
</Tip>
|
|
66
52
|
|
|
67
|
-
The `RETICLE_INSTALL_SOURCE=docs_site` marker is how we tell which published route an install came through. It is self-declared by this page and never inferred, it carries no information about you or your project, and dropping it changes nothing about the install.
|
|
68
|
-
|
|
69
53
|
<Note>
|
|
70
54
|
Everything on this page is real output. It was captured by scaffolding a pristine `npm create
|
|
71
55
|
vite` React app and running `init` inside it while writing this.
|
|
@@ -122,8 +106,9 @@ There are five, and they mean different things. This is the part worth understan
|
|
|
122
106
|
| `ℹ` | Done, but incomplete in a way that matters | **Yes, read it** |
|
|
123
107
|
|
|
124
108
|
<Warning>
|
|
125
|
-
A `⚠` is not cosmetic. In the run above, Reticle could not write the Codex CLI's TOML config
|
|
126
|
-
it printed the exact block to paste. Leave it and
|
|
109
|
+
A `⚠` is not cosmetic. In the run above, Reticle could not write the Codex CLI's TOML config (the
|
|
110
|
+
`codex` command was not installed to do it), so it printed the exact block to paste. Leave it and
|
|
111
|
+
Codex simply never sees the tools.
|
|
127
112
|
</Warning>
|
|
128
113
|
|
|
129
114
|
That `ℹ` line is the one people skim past, so here it is in full:
|
|
@@ -138,7 +123,7 @@ That `ℹ` line is the one people skim past, so here it is in full:
|
|
|
138
123
|
|
|
139
124
|
## What it actually changes
|
|
140
125
|
|
|
141
|
-
|
|
126
|
+
The files it writes in your project, none of them mysterious.
|
|
142
127
|
|
|
143
128
|
<AccordionGroup>
|
|
144
129
|
<Accordion title=".reticle.json (project config)">
|
|
@@ -206,7 +191,7 @@ Four files in your project, none of them mysterious.
|
|
|
206
191
|
|
|
207
192
|
<Accordion title="src/reticle-dev.ts (your capabilities)">
|
|
208
193
|
```ts
|
|
209
|
-
// Dev-only.
|
|
194
|
+
// Dev-only. Loaded for you after connect() by @reticlehq/vite-plugin's injected connect, so you do not import it.
|
|
210
195
|
// Self-guards on import.meta.env.DEV, so it is a no-op in a production build.
|
|
211
196
|
import { registerCapabilities } from '@reticlehq/react';
|
|
212
197
|
|
|
@@ -244,9 +229,9 @@ Three of these are answers only the caller has. `init` reads your repository; it
|
|
|
244
229
|
|
|
245
230
|
| Flag | When you want it |
|
|
246
231
|
| --- | --- |
|
|
247
|
-
| `persona: "<what>"` | **Name the journey worth proving**, on the FIRST RUN (`reticle_verify { action: "explore", persona: "<the journey worth proving>" }`), not on `init`, which does not drive. Reticle can list the buttons on a page; it cannot know that checkout matters and the theme toggle does not. Naming it is the difference between a drive that finishes and one that spends its budget looking for something to do. |
|
|
232
|
+
| `persona: "<what>"` | **Name the journey worth proving**, on the FIRST RUN (`reticle_verify { action: "explore", persona: "<the journey worth proving>" }`, on a project linked with `reticle connect`; otherwise drive it with `reticle_act_and_wait`), not on `init`, which does not drive. Reticle can list the buttons on a page; it cannot know that checkout matters and the theme toggle does not. Naming it is the difference between a drive that finishes and one that spends its budget looking for something to do. |
|
|
248
233
|
| `--env KEY=VALUE` | What the app needs to reach a usable state: the key from `.env.example`, the mock backend, the variable that skips an auth wall. Repeatable, and a value may contain spaces and equals signs. Without it a real app sits on a login screen and there is no flow to drive. |
|
|
249
|
-
| `--app <dir>` | Monorepos. `init` can find the apps that are servable; only your request says which one you are working in. |
|
|
234
|
+
| `--app <dir>` | Monorepos. `init` can find the apps that are servable; only your request says which one you are working in. It writes that app's files only; add `--start` to boot it too. |
|
|
250
235
|
| `--license <key>` | Writes `RETICLE_LICENSE_KEY` to `.env` and keeps `.env` out of git. Do not do those two by hand. |
|
|
251
236
|
| `--json` | One result object on stdout; progress and package-manager output go to stderr. Default init reports runtime setup and connection. `--files-only` and `--dry-run` report the wiring result. Init does not drive a flow or produce a verification verdict. |
|
|
252
237
|
| `--files-only` | Write the files, register the MCP server with every agent on the machine, pre-approve Reticle's tools, and stop: no dev server, no drive. What `init` did before it learned to boot the app, and the upgrade path for a machine that installed Reticle on an earlier version. |
|
|
@@ -270,16 +255,16 @@ That writes the files, registers the MCP server with every agent it finds, pre-a
|
|
|
270
255
|
|
|
271
256
|
Two things to know afterwards:
|
|
272
257
|
|
|
273
|
-
- **A GUI client reads its config at startup.** Cursor, Antigravity
|
|
258
|
+
- **A GUI client reads its config at startup.** Cursor, Antigravity and VS Code need a window reload before the new server or rules take effect. The CLIs pick them up on their next run.
|
|
274
259
|
- **The pre-approval is scoped to `reticle` alone**, never a blanket rule for every MCP server, and never a global auto-run switch. If a client's approval file did not exist before, `init` says so in a line, because in Cursor's case that file supersedes what you had approved inside the app.
|
|
275
260
|
|
|
276
|
-
Drop `--files-only`
|
|
261
|
+
Drop `--files-only` for the full run: boot the app and wait for a session to connect. Proving a flow is the first run, a separate call.
|
|
277
262
|
|
|
278
|
-
## The two restarts
|
|
263
|
+
## The two restarts, and when you need them
|
|
279
264
|
|
|
280
|
-
**Your dev server:
|
|
265
|
+
**Your dev server: restart it once.** One that was already running read your build config before `init` edited it, so it keeps serving a bundle without the SDK. Restart it and hard-reload the tab. `init` names this case when it finds it.
|
|
281
266
|
|
|
282
|
-
**Your agent:
|
|
267
|
+
**Your agent: restart it once, if the tools are missing.** An agent reads its MCP server list when it starts. If it started before Reticle was registered, the `reticle_*` tools are not in this session, and no slash command re-reads the list (`/mcp` manages servers already loaded). Restart the agent once. `reticle init --relaunch` prints the exact command that resumes this conversation with the tools loaded. Until then, `npx @reticlehq/server verify <url> --expect '<predicate JSON>'` proves a flow from the shell. Reticle registers globally, so this happens once per machine.
|
|
283
268
|
|
|
284
269
|
## Confirm it worked
|
|
285
270
|
|
|
@@ -287,7 +272,7 @@ Drop `--files-only` to get the full run: boot the app, drive a flow, return a ve
|
|
|
287
272
|
npx @reticlehq/server status
|
|
288
273
|
```
|
|
289
274
|
|
|
290
|
-
It confirms the app connected, or tells you exactly why it hasn't. A session
|
|
275
|
+
It confirms the app connected, or tells you exactly why it hasn't. A session listed means the SDK reached the page. Setup is finished when the first run returns a verdict.
|
|
291
276
|
|
|
292
277
|
<Card title="Something marked ⚠?" icon="screwdriver-wrench" href="/install-manual">
|
|
293
278
|
The manual install covers every step `init` can't automate, per agent and per framework.
|