@reticlehq/server 2.8.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +130 -813
- package/dist/bridge/bridge.d.ts +23 -0
- package/dist/bridge/bridge.js +80 -2
- package/dist/bridge/bridge.test-harness.d.ts +5 -0
- package/dist/bridge/bridge.test-harness.js +6 -4
- package/dist/capsule/causal-summary.d.ts +16 -1
- package/dist/capsule/causal-summary.js +2 -1
- package/dist/cli/cli-doctor.js +41 -13
- package/dist/cli/cli-flow-commands.js +8 -8
- package/dist/cli/cli-launch.d.ts +0 -17
- package/dist/cli/cli-launch.js +0 -28
- package/dist/cli/cli-port.d.ts +24 -0
- package/dist/cli/cli-port.js +66 -35
- package/dist/cli/cli-verify.d.ts +21 -0
- package/dist/cli/cli-verify.js +45 -1
- package/dist/cli/config-discovery.d.ts +35 -0
- package/dist/cli/config-discovery.js +163 -0
- package/dist/cli/doctor-daemon-line.js +4 -1
- package/dist/cli/doctor-project-line.d.ts +37 -0
- package/dist/cli/doctor-project-line.js +35 -0
- package/dist/cli/doctor-rows.d.ts +51 -0
- package/dist/cli/doctor-rows.js +54 -0
- package/dist/cli/doctor-sessions-line.js +6 -3
- package/dist/cli/drive-attach.d.ts +99 -0
- package/dist/cli/drive-attach.js +203 -0
- package/dist/cli/drive-command.d.ts +13 -0
- package/dist/cli/drive-command.js +103 -0
- package/dist/cli/open-note.d.ts +20 -0
- package/dist/cli/open-note.js +37 -0
- package/dist/cli/status-next-action.d.ts +37 -0
- package/dist/cli/status-next-action.js +61 -0
- package/dist/cli.js +65 -70
- package/dist/events/contradictions.d.ts +32 -0
- package/dist/events/contradictions.js +9 -5
- package/dist/events/declared.d.ts +45 -0
- package/dist/events/declared.js +73 -0
- package/dist/events/echo-mismatch.d.ts +8 -2
- package/dist/events/echo-mismatch.js +33 -5
- package/dist/events/event-filters.d.ts +1 -1
- package/dist/events/event-filters.js +7 -4
- package/dist/events/predicate-eval.d.ts +17 -91
- package/dist/events/predicate-eval.js +85 -326
- package/dist/events/predicate-parse.js +31 -3
- package/dist/events/predicate-route.d.ts +32 -0
- package/dist/events/predicate-route.js +102 -0
- package/dist/events/predicate-schema.d.ts +99 -0
- package/dist/events/predicate-schema.js +309 -0
- package/dist/events/predicate.d.ts +8 -0
- package/dist/events/predicate.js +127 -5
- package/dist/flows/annotate-tools.js +3 -0
- package/dist/flows/annotate.js +18 -4
- package/dist/flows/coverage.d.ts +38 -5
- package/dist/flows/coverage.js +30 -4
- package/dist/flows/decision.d.ts +15 -0
- package/dist/flows/decision.js +1 -1
- package/dist/flows/flow-replay-run.js +8 -1
- package/dist/flows/flow-tools.js +9 -1
- package/dist/flows/replay.js +3 -0
- package/dist/honesty/accepted-write.d.ts +3 -0
- package/dist/honesty/accepted-write.js +8 -3
- package/dist/honesty/already-true.js +15 -0
- package/dist/honesty/blind-spots.js +4 -0
- package/dist/honesty/honesty.d.ts +11 -0
- package/dist/honesty/honesty.js +1 -0
- package/dist/honesty/uncaptured-bodies.d.ts +4 -2
- package/dist/honesty/uncaptured-bodies.js +9 -2
- package/dist/honesty/unread-outcome.d.ts +8 -0
- package/dist/honesty/unread-outcome.js +36 -9
- package/dist/honesty/unsettled.d.ts +9 -0
- package/dist/honesty/unsettled.js +7 -3
- package/dist/honesty/verified.d.ts +29 -3
- package/dist/honesty/verified.js +51 -8
- package/dist/http-server.d.ts +19 -0
- package/dist/http-server.js +202 -4
- package/dist/impact/impact-recorder.d.ts +23 -0
- package/dist/impact/impact-recorder.js +76 -0
- package/dist/impact/impact-store.d.ts +47 -0
- package/dist/impact/impact-store.js +171 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +44 -10
- package/dist/init/agent-rules.d.ts +20 -0
- package/dist/init/agent-rules.js +36 -0
- package/dist/init/astro-patch.js +27 -1
- package/dist/init/confirm.d.ts +21 -3
- package/dist/init/confirm.js +32 -5
- package/dist/init/connect-steps.d.ts +2 -0
- package/dist/init/connect-steps.js +50 -0
- package/dist/init/csp-check.d.ts +38 -0
- package/dist/init/csp-check.js +92 -0
- package/dist/init/csp-doctor.d.ts +25 -0
- package/dist/init/csp-doctor.js +49 -0
- package/dist/init/cursor.js +6 -9
- package/dist/init/detect.d.ts +8 -0
- package/dist/init/detect.js +33 -3
- package/dist/init/mcp-clients.d.ts +1 -0
- package/dist/init/mcp-clients.js +51 -7
- package/dist/init/mcp.d.ts +15 -0
- package/dist/init/mcp.js +19 -0
- package/dist/init/plan-framework.d.ts +10 -0
- package/dist/init/plan-framework.js +25 -1
- package/dist/init/plan.d.ts +7 -2
- package/dist/init/plan.js +66 -30
- package/dist/init/run.js +11 -5
- package/dist/init/slash-command.d.ts +1 -1
- package/dist/init/slash-command.js +12 -4
- package/dist/init/snippets.d.ts +1 -1
- package/dist/init/snippets.js +35 -7
- package/dist/init/vite-config.js +24 -2
- package/dist/input/network-mock-tools.js +8 -1
- package/dist/input/scroll-find.d.ts +6 -0
- package/dist/input/scroll-find.js +17 -2
- package/dist/input/scroll-tools.js +4 -0
- package/dist/journal/attach-journal.d.ts +9 -1
- package/dist/journal/attach-journal.js +13 -2
- package/dist/journal/journal-query.d.ts +13 -0
- package/dist/journal/journal-query.js +28 -3
- package/dist/journal/workspace-gitignore.d.ts +10 -0
- package/dist/journal/workspace-gitignore.js +59 -0
- package/dist/mcp/mcp-proxy.d.ts +5 -66
- package/dist/mcp/mcp-proxy.js +180 -163
- package/dist/mcp/mcp.d.ts +10 -1
- package/dist/mcp/mcp.js +47 -27
- package/dist/mcp/proxy-handshake.d.ts +82 -1
- package/dist/mcp/proxy-handshake.js +109 -2
- package/dist/mcp/proxy-lifecycle.d.ts +10 -1
- package/dist/mcp/proxy-lifecycle.js +11 -2
- package/dist/mcp/proxy-log.d.ts +63 -0
- package/dist/mcp/proxy-log.js +132 -0
- package/dist/mcp/server-instructions.d.ts +17 -0
- package/dist/mcp/server-instructions.js +56 -0
- package/dist/mcp/shared-params.d.ts +27 -0
- package/dist/mcp/shared-params.js +36 -0
- package/dist/project/reticle-dir.d.ts +2 -0
- package/dist/project/reticle-dir.js +1 -0
- package/dist/session/connection-memory.d.ts +59 -0
- package/dist/session/connection-memory.js +108 -0
- package/dist/session/dev-command.d.ts +26 -0
- package/dist/session/dev-command.js +89 -0
- package/dist/session/dev-server-probe.d.ts +68 -0
- package/dist/session/dev-server-probe.js +102 -7
- package/dist/session/last-act.d.ts +26 -0
- package/dist/session/last-act.js +35 -1
- package/dist/session/live-control-tools.js +42 -5
- package/dist/session/no-session-diagnosis.d.ts +48 -2
- package/dist/session/no-session-diagnosis.js +176 -20
- package/dist/session/no-session-next-action.d.ts +46 -0
- package/dist/session/no-session-next-action.js +85 -0
- package/dist/session/no-session-watch.d.ts +40 -1
- package/dist/session/no-session-watch.js +165 -11
- package/dist/session/pending-commands.d.ts +12 -0
- package/dist/session/pending-commands.js +13 -1
- package/dist/session/session-manager.d.ts +4 -0
- package/dist/session/session-manager.js +35 -5
- package/dist/session/session.d.ts +10 -1
- package/dist/session/session.js +146 -5
- package/dist/telemetry/app-instrumented.d.ts +8 -0
- package/dist/telemetry/app-instrumented.js +10 -0
- package/dist/telemetry/bug-found.d.ts +18 -0
- package/dist/telemetry/bug-found.js +14 -0
- package/dist/telemetry/daemon-telemetry.js +24 -0
- package/dist/telemetry/install-source.d.ts +20 -0
- package/dist/telemetry/install-source.js +34 -0
- package/dist/telemetry/instrumentation-stall.d.ts +50 -0
- package/dist/telemetry/instrumentation-stall.js +90 -0
- package/dist/telemetry/session-metrics.d.ts +8 -0
- package/dist/telemetry/session-metrics.js +10 -0
- package/dist/telemetry/telemetry.d.ts +3 -1
- package/dist/telemetry/telemetry.js +13 -2
- package/dist/tools/act-tools.js +166 -29
- package/dist/tools/assert-verdict.js +32 -7
- package/dist/tools/browser-tools.js +10 -0
- package/dist/tools/dynamic-tools.js +16 -7
- package/dist/tools/error-recovery.js +9 -5
- package/dist/tools/invoke-tool.js +20 -3
- package/dist/tools/lease-hint.d.ts +30 -8
- package/dist/tools/lease-hint.js +65 -14
- package/dist/tools/lease-tools.d.ts +11 -0
- package/dist/tools/lease-tools.js +141 -96
- package/dist/tools/observe-tools.js +9 -3
- package/dist/tools/react-grace.d.ts +4 -0
- package/dist/tools/react-grace.js +6 -3
- package/dist/tools/read-tools.js +47 -1
- package/dist/tools/resolve-target.d.ts +33 -0
- package/dist/tools/resolve-target.js +53 -0
- package/dist/tools/settle-in-flight.d.ts +15 -0
- package/dist/tools/settle-in-flight.js +42 -2
- package/dist/tools/snapshot-delta.d.ts +3 -0
- package/dist/tools/snapshot-delta.js +67 -6
- package/dist/tools/tool-kit.d.ts +8 -0
- package/dist/tools/tool-surface.d.ts +60 -0
- package/dist/tools/tool-surface.js +85 -19
- package/dist/tools/tools.js +45 -4
- package/dist/tools/unadvertised-help.js +9 -6
- package/docs/README.md +1 -2
- package/docs/actions.mdx +41 -8
- package/docs/agent-cheatsheet.md +4 -2
- package/docs/architecture.md +6 -0
- package/docs/benchmarks.md +60 -12
- package/docs/best-practices.mdx +11 -6
- package/docs/capabilities.mdx +201 -54
- package/docs/cli/affected.mdx +6 -4
- package/docs/cli/capsules.mdx +9 -8
- package/docs/cli/cloud.mdx +30 -4
- package/docs/cli/doctor.mdx +41 -8
- package/docs/cli/drive.mdx +34 -15
- package/docs/cli/gate.mdx +6 -6
- package/docs/cli/help.mdx +8 -6
- package/docs/cli/hunt.mdx +18 -2
- package/docs/cli/identify.mdx +16 -2
- package/docs/cli/init.mdx +35 -8
- package/docs/cli/kill.mdx +5 -5
- package/docs/cli/license.mdx +1 -1
- package/docs/cli/open.mdx +6 -0
- package/docs/cli/restart.mdx +6 -6
- package/docs/cli/serve.mdx +10 -3
- package/docs/cli/status.mdx +29 -5
- package/docs/cli/stop.mdx +8 -0
- package/docs/cli/verify.mdx +20 -1
- package/docs/cli/version.mdx +1 -1
- package/docs/cli/watch.mdx +9 -2
- package/docs/cli.mdx +44 -22
- package/docs/debugging.md +3 -1
- package/docs/deploy-checks.md +30 -1
- package/docs/desktop.mdx +276 -80
- package/docs/docs.json +13 -12
- package/docs/enterprise.md +2 -0
- package/docs/faq.mdx +49 -35
- package/docs/fixtures.md +2 -0
- package/docs/flows.md +3 -1
- package/docs/for-agents.md +3 -3
- package/docs/frameworks.mdx +46 -7
- package/docs/gate-plan.md +4 -2
- package/docs/gates.md +7 -5
- package/docs/getting-started.md +53 -12
- package/docs/human-control.md +2 -0
- package/docs/index.mdx +43 -1
- package/docs/install-agentic.mdx +13 -4
- package/docs/install-manual.mdx +6 -4
- package/docs/instrumentation.mdx +7 -1
- package/docs/integration-patterns.md +3 -1
- package/docs/local-registry.md +4 -2
- package/docs/multi-agent-testing.md +3 -1
- package/docs/packages/babel-plugin.mdx +15 -6
- package/docs/packages/browser.mdx +2 -2
- package/docs/packages/core.mdx +26 -16
- package/docs/packages/electron.mdx +5 -7
- package/docs/packages/eslint-plugin.mdx +5 -3
- package/docs/packages/next.mdx +3 -5
- package/docs/packages/react.mdx +3 -3
- package/docs/packages/server.mdx +2 -2
- package/docs/packages/tauri.mdx +6 -6
- package/docs/packages/test.mdx +18 -7
- package/docs/packages/vite-plugin.mdx +4 -6
- package/docs/packages.mdx +14 -13
- package/docs/platform-integration.md +2 -0
- package/docs/predicates.mdx +76 -7
- package/docs/quickstart.mdx +51 -5
- package/docs/recipes.mdx +62 -22
- package/docs/skill-file.mdx +3 -1
- package/docs/state-management.mdx +2 -0
- package/docs/system-map.md +3 -1
- package/docs/telemetry-contract.md +16 -5
- package/docs/telemetry-events.mdx +63 -18
- package/docs/telemetry.md +8 -5
- package/docs/testing.md +35 -1
- package/docs/token-efficiency.md +8 -2
- package/docs/tools-act-and-wait.mdx +64 -14
- package/docs/tools-act-sequence.mdx +34 -17
- package/docs/tools-act.mdx +24 -11
- package/docs/tools-assert.mdx +69 -10
- package/docs/tools-console.mdx +11 -7
- package/docs/tools-inspect.mdx +11 -8
- package/docs/tools-navigate.mdx +41 -5
- package/docs/tools-network.mdx +42 -9
- package/docs/tools-observe.mdx +66 -10
- package/docs/tools-overview.mdx +26 -23
- package/docs/tools-query.mdx +52 -8
- package/docs/tools-session-and-feedback.mdx +30 -9
- package/docs/tools-sessions.mdx +39 -10
- package/docs/tools-snapshot.mdx +57 -3
- package/docs/tools-state.mdx +24 -1
- package/docs/tools-tools-and-run.mdx +40 -9
- package/docs/tools-wait-for.mdx +34 -15
- package/docs/troubleshooting.mdx +80 -10
- package/docs/usage.md +43 -21
- package/docs/vs-chrome-devtools-mcp.mdx +41 -0
- package/docs/vs-playwright-mcp.mdx +42 -2
- package/docs/vs-screenshots.mdx +42 -1
- package/docs/what-is-reticle.mdx +1 -1
- package/docs/why-reticle.mdx +3 -1
- package/package.json +5 -5
- package/docs/desktop-apps.md +0 -265
package/docs/cli.mdx
CHANGED
|
@@ -4,6 +4,8 @@ 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 wires Reticle into a project (`init`), runs and diagnoses the daemon your app connects to (`serve`, `status`, `doctor`, `kill`, `restart`), and gates a build on verification in CI (`verify`, `affected`, `gate`). This page is the index; each command has its own page with real captured output and measured exit codes.
|
|
8
|
+
|
|
7
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.
|
|
8
10
|
|
|
9
11
|
```bash
|
|
@@ -22,7 +24,8 @@ npx @reticlehq/server <command>
|
|
|
22
24
|
|
|
23
25
|
<Note>
|
|
24
26
|
Every output block on this page was captured by running the command. Where an exit code is quoted,
|
|
25
|
-
it was measured, not assumed.
|
|
27
|
+
it was measured, not assumed. The CLI emits each structured line as one line of JSON; the blocks
|
|
28
|
+
below are pretty-printed so you can read them, and long lists are trimmed where the label says so.
|
|
26
29
|
</Note>
|
|
27
30
|
|
|
28
31
|
## Setup and diagnosis
|
|
@@ -50,8 +53,8 @@ npx @reticlehq/server doctor
|
|
|
50
53
|
```
|
|
51
54
|
reticle doctor
|
|
52
55
|
node v22.14.0
|
|
53
|
-
chromium ✓ installed
|
|
54
|
-
daemon ✓ running on :4400 (pid
|
|
56
|
+
chromium ✓ installed (chromium-1234)
|
|
57
|
+
daemon ✓ running on :4400 (pid 72698, v2.8.0)
|
|
55
58
|
sessions ✓ 1 page connected
|
|
56
59
|
bridge port 4400 (your app must dial THIS port, not your dev-server port)
|
|
57
60
|
daemon log /Users/you/.reticle/daemon-4400.log
|
|
@@ -66,17 +69,19 @@ Whether the daemon is up and which apps have connected.
|
|
|
66
69
|
|
|
67
70
|
```json
|
|
68
71
|
{
|
|
72
|
+
"t": "2026-08-15T18:45:58.190Z",
|
|
69
73
|
"event": "reticle_status",
|
|
70
74
|
"port": 4400,
|
|
71
75
|
"running": true,
|
|
72
|
-
"pid":
|
|
76
|
+
"pid": 72698,
|
|
73
77
|
"sessionCount": 1,
|
|
74
78
|
"sessions": [
|
|
75
79
|
{
|
|
76
|
-
"sessionId": "
|
|
77
|
-
"url": "http://localhost:
|
|
78
|
-
"throttled":
|
|
79
|
-
"stale": false
|
|
80
|
+
"sessionId": "s223e0fad-e012-43f9-a23d-6d585470c90d",
|
|
81
|
+
"url": "http://localhost:4310/",
|
|
82
|
+
"throttled": false,
|
|
83
|
+
"stale": false,
|
|
84
|
+
"pendingMarks": 0
|
|
80
85
|
}
|
|
81
86
|
]
|
|
82
87
|
}
|
|
@@ -103,16 +108,21 @@ policy https://github.com/reticlehq/reticle/blob/main/docs/telemetry.md
|
|
|
103
108
|
|
|
104
109
|
| Command | What it does |
|
|
105
110
|
| --- | --- |
|
|
106
|
-
| `reticle serve` | Start the daemon
|
|
107
|
-
| `reticle stop` | Stop
|
|
111
|
+
| `reticle serve` | Start the daemon and wait for it to bind. `--drive <url>`, `--headless`, `--headed`, `--http`, `--http-port N`, `--http-token T` |
|
|
112
|
+
| `reticle stop` | Stop the daemon we started, by its recorded pid. `--quiet` |
|
|
113
|
+
| `reticle kill` | Free the port by asking who is **listening** on it. `--force` |
|
|
114
|
+
| `reticle restart` | Kill, then start a daemon and wait for a real bind. `--force` |
|
|
108
115
|
| `reticle open [url]` | Show the app. Reuse the connected tab, or open one |
|
|
109
116
|
| `reticle drive <url>` | Foreground mode, for debugging |
|
|
110
117
|
| `reticle mcp` | The MCP stdio proxy. Auto-starts the daemon if needed. This is what your agent runs |
|
|
111
118
|
|
|
119
|
+
A bare `reticle` with no arguments is not help. It is `reticle serve`.
|
|
120
|
+
|
|
112
121
|
<Warning>
|
|
113
|
-
`reticle
|
|
114
|
-
|
|
115
|
-
daemon
|
|
122
|
+
`reticle verify` binds the bridge port itself, so it fails if a daemon is already listening, which
|
|
123
|
+
is the normal state once your agent has started one. Stop the daemon first, or point it elsewhere
|
|
124
|
+
with `RETICLE_PORT`. `reticle mcp` reuses a running daemon, and `reticle drive` attaches to one
|
|
125
|
+
(see [drive](/cli/drive)) rather than competing for the port.
|
|
116
126
|
</Warning>
|
|
117
127
|
|
|
118
128
|
## Verification
|
|
@@ -137,13 +147,16 @@ npx @reticlehq/server affected --since HEAD~1
|
|
|
137
147
|
|
|
138
148
|
```json
|
|
139
149
|
{
|
|
150
|
+
"t": "2026-08-15T18:42:57.431Z",
|
|
140
151
|
"event": "reticle_affected",
|
|
141
|
-
"changedFiles": ["docs/
|
|
142
|
-
"affected": ["deploy-journey", "verify-modal", "verify-route"
|
|
143
|
-
"unknownProvenance": ["deploy-journey", "verify-modal", "
|
|
152
|
+
"changedFiles": ["SKILL.md", "docs/cli/doctor.mdx", "packages/server/src/init/agent-rules.ts"],
|
|
153
|
+
"affected": ["WEB-flow", "deploy-journey", "verify-modal", "verify-route"],
|
|
154
|
+
"unknownProvenance": ["WEB-flow", "deploy-journey", "verify-modal", "verify-route"]
|
|
144
155
|
}
|
|
145
156
|
```
|
|
146
157
|
|
|
158
|
+
Both lists are trimmed here; the real run named 47 flows.
|
|
159
|
+
|
|
147
160
|
<Note>
|
|
148
161
|
`unknownProvenance` lists flows Reticle could not map to source files, so it includes them to be
|
|
149
162
|
safe. A flow recorded before provenance tracking existed has no file list, and Reticle would
|
|
@@ -161,21 +174,30 @@ npx @reticlehq/server gate --since HEAD~1
|
|
|
161
174
|
|
|
162
175
|
```json
|
|
163
176
|
{
|
|
177
|
+
"t": "2026-08-15T18:42:58.434Z",
|
|
164
178
|
"event": "reticle_gate",
|
|
165
179
|
"pass": false,
|
|
166
|
-
"uncovered": ["deploy-journey", "verify-modal", "
|
|
167
|
-
"quarantined": ["drift-demo", "qa2-flow"],
|
|
168
|
-
"coverage": { "pct":
|
|
180
|
+
"uncovered": ["WEB-flow", "deploy-journey", "verify-modal", "verify-route"],
|
|
181
|
+
"quarantined": ["asserted-demo", "blast-radius-compose", "drift-demo", "qa2-flow"],
|
|
182
|
+
"coverage": { "pct": 0, "covered": 0, "total": 47 }
|
|
169
183
|
}
|
|
170
184
|
```
|
|
171
185
|
|
|
172
|
-
Measured exit code: **`1
|
|
186
|
+
Measured exit code: **`1`**, with the flow lists trimmed above. That run genuinely failed, with 0 of 47 flows covered, which is what a gate is supposed to do when you have not verified anything yet.
|
|
173
187
|
|
|
174
188
|
`quarantined` flows are excluded from the pass/fail decision. Quarantine is for a flow that is known flaky and being fixed; it is not a place to hide failures, because the list is printed on every run.
|
|
175
189
|
|
|
176
190
|
### `reticle watch [url]`
|
|
177
191
|
|
|
178
|
-
On save, report which saved flows must re-verify. The interactive companion to `affected`.
|
|
192
|
+
On save, report which saved flows must re-verify. The interactive companion to `affected`. Long-running; stop it with `Ctrl+C`.
|
|
193
|
+
|
|
194
|
+
### `reticle capsules`
|
|
195
|
+
|
|
196
|
+
List the saved fail-to-pass bug capsules in `.reticle/capsules`. No flags. See [capsules](/cli/capsules).
|
|
197
|
+
|
|
198
|
+
### `reticle hunt <dir>`
|
|
199
|
+
|
|
200
|
+
Aggregate a directory of crawl reports into one false-green rate. See [hunt](/cli/hunt).
|
|
179
201
|
|
|
180
202
|
## Maintenance
|
|
181
203
|
|
|
@@ -213,7 +235,7 @@ The `--agent` form matters more than it looks: the setup that failed halfway is
|
|
|
213
235
|
Opt-in, and off by default:
|
|
214
236
|
|
|
215
237
|
```bash
|
|
216
|
-
npx @reticlehq/server identify --context company|side_project|open_source|learning [--email E] [--forget]
|
|
238
|
+
npx @reticlehq/server identify --context company|side_project|open_source|learning [--company N] [--email E] [--forget]
|
|
217
239
|
```
|
|
218
240
|
|
|
219
241
|
Only useful if you want support or an enterprise trial. `--forget` removes it.
|
package/docs/debugging.md
CHANGED
|
@@ -4,6 +4,8 @@ description: For people working on Reticle itself. How to work out why a flow be
|
|
|
4
4
|
icon: bug
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
**To debug Reticle itself, start with the daemon log at `~/.reticle/daemon-<port>.log`, and turn on `RETICLE_TRACE=1` for the daemon when you need per-stage timings.** `reticle doctor` prints the exact log path for your port. Reticle produces four distinct signals and they answer four different questions, so the first step is picking the right one.
|
|
8
|
+
|
|
7
9
|
> For people working **on** Reticle, and for an agent asked to explain why a flow behaved the way it did. If you are debugging **your app** with Reticle, you want [usage.md](usage.md) instead.
|
|
8
10
|
|
|
9
11
|
Reticle produces four different signals and they answer four different questions. Reaching for the wrong one is why investigations here have historically started by reading source.
|
|
@@ -39,7 +41,7 @@ RETICLE_TRACE=1 reticle serve --port 4400
|
|
|
39
41
|
|
|
40
42
|
Every instrumented stage then emits one line **when it ends**, carrying its own duration:
|
|
41
43
|
|
|
42
|
-
```
|
|
44
|
+
```jsonl
|
|
43
45
|
{"event":"trace","span":"browser.command","ms":412,"depth":1,"callId":"p8123-c7","ok":true,"command":"act"}
|
|
44
46
|
{"event":"trace","span":"tool.handler","ms":430,"depth":0,"callId":"p8123-c7","ok":true,"tool":"reticle_act"}
|
|
45
47
|
```
|
package/docs/deploy-checks.md
CHANGED
|
@@ -4,11 +4,13 @@ description: 'Enforce verification at the moment code becomes a preview URL, as
|
|
|
4
4
|
icon: circle-check
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
To gate a PR on Reticle, run `npx @reticlehq/server verify <preview-url>` in CI when the preview deploy succeeds. It exits **0** when every saved flow passes and **1** otherwise, so the job's own pass/fail becomes the check on the PR. There is no workflow-level integration to write beyond that one command.
|
|
8
|
+
|
|
7
9
|
The strongest place to enforce verification is the moment code becomes a preview URL. Every deploy already produces one, and both Vercel and Netlify let a third party attach a **check** to it: pass/fail, shown on the PR, with no workflow file to write.
|
|
8
10
|
|
|
9
11
|
That makes the non-developer story complete: the SDK is auto-injected by the build plugin, flows are minted from toolbar recordings with auto-proposed consequences, and verification runs at publish, **without anyone writing a test.**
|
|
10
12
|
|
|
11
|
-
>
|
|
13
|
+
> **Recipe A works today; Recipe B does not exist yet.** `reticle verify` exits 0/1 and persists a run artifact right now. What is _not_ built is a hosted Reticle app that registers itself as a Vercel or Netlify check provider. Until it exists, use the CI recipe.
|
|
12
14
|
|
|
13
15
|
## The shape
|
|
14
16
|
|
|
@@ -35,6 +37,11 @@ jobs:
|
|
|
35
37
|
steps:
|
|
36
38
|
- uses: actions/checkout@v4
|
|
37
39
|
- uses: pnpm/action-setup@v4
|
|
40
|
+
# setup-node must come AFTER pnpm/action-setup, or its pnpm cache has no pnpm to find.
|
|
41
|
+
- uses: actions/setup-node@v4
|
|
42
|
+
with:
|
|
43
|
+
node-version: 22
|
|
44
|
+
cache: pnpm
|
|
38
45
|
- run: pnpm install --frozen-lockfile
|
|
39
46
|
- run: npx playwright install --with-deps chromium
|
|
40
47
|
# Reticle drives the preview and owns its own browser + daemon.
|
|
@@ -71,3 +78,25 @@ Use both: `gate` in the agent's Stop hook (see `agent-cheatsheet`), `verify` at
|
|
|
71
78
|
- **`verify` needs one connected session.** If several tabs of the app are open against the same daemon it refuses rather than guessing which to drive.
|
|
72
79
|
- **It replays flows sequentially against one tab**, so flows must not depend on each other's leftover state (a flow that logs in contaminates the next one). Author self-contained flows, or use `reticle_flow_verify { parallel }`, which gives each flow an isolated context.
|
|
73
80
|
- **No saved flows means nothing to verify.** `verify` fails rather than reporting a vacuous pass.
|
|
81
|
+
|
|
82
|
+
## FAQ
|
|
83
|
+
|
|
84
|
+
### verify says 'no app connected' on my preview URL. Why?
|
|
85
|
+
|
|
86
|
+
Almost always because the deployed build tree-shook the dev-only SDK out, so there is nothing in the page dialling the bridge. `reticle.connect()` is meant to be dev-gated, and a production build honours that gate. Either build the preview with the dev guard satisfied, or accept that `verify` is correctly reporting that it cannot see the app. It is not a false alarm: with no SDK there is no program to read.
|
|
87
|
+
|
|
88
|
+
### Does it work on a real preview URL, or only localhost?
|
|
89
|
+
|
|
90
|
+
Both. For a non-loopback origin Reticle injects `reticle.connect()` with a one-time pairing token and allow-lists the preview origin, so you do not rebuild per environment. The bridge refuses to bind a non-loopback host without a token, which is the point.
|
|
91
|
+
|
|
92
|
+
### One of my flows logs in and the next one starts logged in. How do I stop that?
|
|
93
|
+
|
|
94
|
+
`verify` replays flows sequentially against one tab, so leftover state carries. Either author each flow to be self-contained, or use `reticle_flow_verify { parallel: true }`, which gives every flow its own isolated browser context with its own cookies and storage.
|
|
95
|
+
|
|
96
|
+
### Should I run reticle gate as well as reticle verify?
|
|
97
|
+
|
|
98
|
+
If you want an agent to be unable to call a change finished without re-verifying, yes. They catch the same regression at different moments: `gate` runs locally against the files the agent just edited, `verify` runs against the deployed preview. They read the same run artifacts, so a green gate locally and a green check on the PR mean the same thing.
|
|
99
|
+
|
|
100
|
+
### verify exited 1 but I cannot see which flow failed.
|
|
101
|
+
|
|
102
|
+
The verdict is in the run artifact, not only in the log. Each run writes `.reticle/runs/<id>.json` with `repair.failurePackets[]` naming what broke and where; `reticle_run_export { format: "report" }` renders it legibly. The artifact is stable and versioned precisely so a CI surface can render it without parsing log lines.
|