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 open Notes, select Add notes, and click a broken element. The agent gets the element and its source file:line.
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 give the agent an instruction, talk to it in its own window. The panel sends only notes pinned to elements, and the pause and end controls. There’s also a clean, unmistakable “session ended” signal for both you and the agent.
Watch the testing score climb (the live verdict tally)
The panel header shows a running ✓N ✗M tally: the verdict score, live. It’s hidden until the first verdict lands, then climbs as the agent verifies: everyreticle_assert, every replayed flow step, every pass/fail outcome bumps it, and the side that just grew pops so you feel the green (or red) arrive. The cursor flies, the log streams the journey, and the score ticks up. You see the agent working and the result landing, not just a final checkmark. It persists when the session ends, so the last thing on screen is what this run actually verified. Green that’s earned, not asserted.
The constraint that shapes the design
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:- Pause. The agent’s next
reticle_act(single orsteps) /reticle_act_and_waitrefuses 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. - End. The session is over; the panel shows “Session ended” and clears.
From the panel (the human)
The floating panel (bottom-center,present: true) gives you:
- Pause / Resume: one toggle. Paused turns the panel + page border amber with a
PAUSEDbadge. - End ends the session: panel turns emerald, shows
Session ended · <summary>, then fades away. - 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 saysNo coding agent connectedand offers Copy prompt, a prompt to paste into one. - 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 therunIdto follow it. - Minimise (▾) collapses the panel to a bar that streams only the live line; click the bar to restore.
- Notes. Open the Notes page and select Add notes. Click the element that looks wrong and type what is wrong (⌘/Ctrl+Enter sends, Esc backs out). Reticle pins a numbered marker and gives 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. A linked project syncs them to the dashboard.
Notes: annotate the mistake where you see it
You don’t have to describe a bug in prose. Point at it. The note captures the element’s re-resolvable anchor and the sourcefile:line (when the framework stamped one), so the agent fixes the exact element and code, not a guess. The loop:
- You add a note on the element and type the problem → Reticle emits a
HUMAN_MARK. - The agent drains it with
reticle_session { action: "review" }, getting note + element label +source: { file, line }+ a ready-to-actfixhint.reticle_session { action: "list" }also reportspendingMarksso the agent notices notes. - The agent opens the file, fixes it, and calls
reticle_session({ action: "review", resolve: "m1" }). - You see ”✓ fixed: <your note>” land in the panel. Note → fix → confirmation.
reticle_session { action: "review" } in the usage guide for the tool shape. Suppress the button with annotate: false if you don’t want it.
From the agent (the tools)
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.
Piggybacked guidance
Even without a pause, any Reticle tool result carries acontrol block when there’s something to tell the agent:
guidance is drained (delivered once), so a hint never repeats. When the session is clean and the inbox empty, no control field is added: zero overhead on the happy path.
Tell your agent to honor it
Add this to your operating prompt /CLAUDE.md (see the agent cheat-sheet):
The human may pause you from the Reticle panel. On anyreticle_actresult withpaused: true, stop, readguidance, adjust, then callreticle_session { action: "resume" }. Treat acontrol.guidancefield on any result as a live instruction from the human.