Blog
Queen’s merged browser changes expose actions as they arrive, keep a compact journal, and let human input request server-side control—with the remaining handover limits made explicit.

An agent saying “done” is not the same as a person seeing what happened. A browser can finish on the right page after a wrong click, a failed permission request, or several unproductive attempts. On September 21–22, a sequence of merged changes gave Queen a more useful relationship with the browser: the person and the agent share a window, actions become visible while the answer is arriving, and recent steps remain below the picture.
PR #1088 added the BROWSER view to the Queen board. It refers to the person’s existing remote browser, not a second machine opened for the dashboard. The board’s copy at app.t27.ai/queen/ shares the app’s origin; the viewer address must resolve to that same origin under /live/. Elsewhere, the panel offers a route into the app instead of pretending the authenticated window is available.
Opening the panel only reads session state. Starting a browser needs a press of Open; a homepage preview does not even ask the broker for that state. PR #1094 then routed chat from this view to the person’s browser-equipped agent, carrying the tab context and up to eight previous turns. This fixes a concrete mismatch: a conversation beside a browser should reach the agent that can act in that browser.
PR #1096 changed how the response is read. Instead of collecting the whole answer first, Queen consumes newline-delimited events as they arrive. A browser tool call becomes a step in the chat; answer text grows alongside it. These are tool events and answer text, not a display of the model’s private reasoning, and a tool name alone does not prove that the intended task succeeded.
The small engineering detail matters for Russian readers: a network chunk can end halfway through a Cyrillic character. The decoder keeps its state between chunks, while an incomplete event waits for its next bytes. The contract test divides a response into seven-byte pieces and checks both intact text and a tool step appearing before the answer. It also checks that progress snapshots are copies, so later updates cannot silently rewrite an earlier observation.
The live picture shows the page now. PR #1107 added a different view: recent recorded actions below it, with a time, a verb, and a short fact or error. PR #1111 stopped repeated observations from consuming the entire list. The panel reads up to 24 entries and displays at most six folded lines, refreshing every five seconds while the browser is live and the document is visible.
Only consecutive entries with the same tool, outcome, and displayed text collapse into a counted line. The newest timestamp survives. A failure between two successful observations breaks the run rather than disappearing inside a reassuring count. This is a compact operational view, not a complete archive or a claim that every action has been independently verified.
PR #1109 connected the board’s pointer and keyboard activity to requests for the server’s “wheel” mechanism. Its public report describes a ten-minute human-control lease: the agent may look and ask, but should not click or type while the person holds it. That server behaviour is reported by the PR, not independently demonstrated here. The public panel code sends renewal requests at most once every thirty seconds of continued input, and provides a button requesting that control return to the agent.
There is an important remaining limit. The current panel changes its driving indicator before the request is acknowledged and does not surface a failed wheel request. The indicator is therefore not proof that the server accepted control. Nor does this implementation establish that every in-flight action is cancelled. A lease left behind by a closed tab can last until its expiry. These are boundaries to test and improve, not details to hide behind the word “safe”.
PR #1104 also made the panel re-read session state when its own viewer reports a reconnecting or stuck connection. Messages from another frame or origin are ignored. That can replace a dead session’s frozen picture with the appropriate session state; it is not a promise that networks never fail.
For this article, we inspected the public merged diffs and reran check:queen-browser on September 23: it passed. The linked CI run also records the contract passing. Those checks exercise decisions and simulated streams, not a fresh signed-in, end-to-end browser session. The practical advance is specific: the interface exposes more of what the agent does, keeps repetition from hiding useful events, and lets human input request server-side control—with its remaining limits stated beside the result.
Work with me
I audit RTL and build independent, bit-exact models, then take the result through synthesis and, when useful, onto an Artix-7 board. The first conformance module is free.