Skip to main content
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 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: every reticle_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 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.
  • 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 PAUSED badge.
  • 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 says No coding agent connected and 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 the runId to 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 source file:line (when the framework stamped one), so the agent fixes the exact element and code, not a guess. The loop:
  1. You add a note on the element and type the problem → Reticle emits a HUMAN_MARK.
  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 notes.
  3. The agent opens the file, fixes it, and calls reticle_session({ action: "review", resolve: "m1" }).
  4. You see ”✓ fixed: <your note>” land in the panel. Note → fix → confirmation.
See 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 a control 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 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.
Last modified on October 25, 2026