Browser actions and task controls

The browser toolbar retains its address, navigation, reload, action markers, operation history, and preview controls. Pages have no separate pause or resume button. Conversation execution controls next to the composer own task pause and continuation.

Clicks, scrolling, and typing

Users and Agents may operate pages, including OpenProgram itself. Pointer, wheel, keyboard, edit, and navigation events do not change task state, request a pause, or create a page write prohibition. Legacy client page-input notifications are ignored.

Closing and recovery

Closing a page takes effect immediately without waiting for task pause. When a binding becomes unavailable, the browser tool first reacquires the original window and tab. An existing page is observed in its current state. Only an absent page is reopened at its last known URL. Recovery returns a fresh observation; it never replays the previous click or submission or selects an unrelated page. An unavailable connection is not proof that a page closed.

Task pause

Explicit conversation pause stops later generation and tool dispatch through execution control. Ownership, access, and frame validation remain enforced. Continuation observes current page state and is not subject to a second page-level permission.

Preview and status

The floating preview header offers Open page, More, and a Close preview X icon. Hiding retains the page and its session resource; Resources can reopen it. More contains a checked Automatically show the page the Agent is using item: checked follows the Agent-operated page, unchecked keeps the current page. It does not mean always-on-top or control Agent execution. The header has no pin or expand/shrink button. Dragging and edge resizing remain available, and legacy expanded geometry remains compatible. Operation history, action markers, and page lifecycle describe activity without controlling execution. Lost authentication and unsaved data are reported honestly.

Preview control acceptance

The existing X only hides the preview, the pin changes selection policy, and the diagonal arrows change its dimensions. Reuse the existing hide and follow functions without changing resource lifetime or session ownership. Verify header hide retains the page, Resources can reopen it, the More checkbox changes selection without execution-control requests, native and Web menus agree, and compact chrome retains eight-direction resizing.

Fixed preview viewport

The interactive preview renders a fixed 1920 × 1080 CSS-pixel desktop viewport. Resizing its container changes only presentation scale: a 16:9 rectangle fitted inside the available area. Desktop rounds that rectangle to whole native pixels and covers it uniformly, clipping less than one native pixel at the trailing edge when needed. Unused space outside that rectangle uses the host background. Page identity, DOM layout, scroll position, and Agent CSS coordinates are independent of preview size. Opening the same page in a normal tab disables the preview viewport override and restores the user's page zoom. Hiding a preview retains the Page.

Desktop uses Electron enableDeviceEmulation with fixed viewSize and variable scale. This replaces the previous width-derived browser zoom, whose 25% lower bound could change layout. A screenshot-only surface would lose direct native interaction and is not used. Browser iframe previews use the same fixed dimensions with a CSS transform; cross-origin embedding restrictions and separate iframe state remain unchanged. No resolution selector or desktop-wide emulation is introduced.

Renderer bounds are converted to native DIP before scaling. Native input uses Chromium's emulated-view mapping. Agent observations and screenshots remain in CSS coordinates; the exact native Page reports an input_scale through the owner-checked binding reply. Coordinate clicks and pointer movement multiply CSS coordinates by this scale before CDP dispatch. Wheel deltas and CSS window.scrollBy remain in CSS units. MCP reference namespaces stay upstream: scaled reference clicks evaluate the existing click script there, and hover uses a temporary exact-element marker followed by frame-aware Playwright bounds and native pointer movement. Action markers use the same fixed viewport and presentation scale. Owner checks and deferred transfer restoration remain in effect. Navigation reapplies preview geometry; cleanup restores ordinary pane behavior. Agent screenshots use a fixed CSS-resolution CDP capture, with matching temporary device metrics and DPR compensation. Concurrent captures share one result. Cleanup removes the temporary override and restores current native geometry; final debugger detach also reapplies it. A resize, navigation, ownership change, or exit from preview invalidates an in-flight result.

Fixed viewport acceptance

Resize below 480 pixels and above that threshold: innerWidth/innerHeight stay 1920/1080 and responsive layout stays unchanged. Verify native clicks, Agent clicks, action markers, scrolling, and fresh screenshots at two sizes. Verify application UI zoom, page navigation, ordinary-tab restoration, and transfer cleanup. Run desktop checks, Web checks and tests, TypeScript checking, repository contracts, documentation links, and the installed default App.

Preview movement and rendering cost

Position-only moves update native bounds without reconfiguring device emulation or page zoom. Identical geometry does not issue another native layout update. Scale changes only when native dimensions change; navigation and final debugger detach explicitly restore emulation. Renderer reports share one rounded native geometry, including application zoom. Outside pointer gestures the same live page remains interactive; the gesture-only presentation described below does not use a screenshot loop.

The preview hides only root scrollbar tracks with a reversible author-origin stylesheet (Electron removal defaults to this origin); wheel, keyboard and nested scrolling remain enabled. Leaving preview removes the stylesheet, including when insertion overlaps navigation or exit. The native view itself is fitted to 16:9; unused space belongs to the host rather than the emulated page. Uniform scale covers the rounded native rectangle, avoiding uncovered compositor pixels. Native transparency alone does not prevent a white page canvas from filling excess bounds. Edge resize handles remain outside the native surface. Acceptance covers sixty moves and repeated identical bounds with zero emulation resets, one reset per changed scale, forced restoration, stylesheet lifecycle, UI zoom, continuous native dragging, scrolling and full-tab restoration.

Implementation status

Preview rendering optimization passes independent specification and quality review. Final checks and installed-App acceptance are recorded separately in the task evidence.

Fixed preview viewport: implemented; independent specification and quality reviews pass. Installed-App acceptance is tracked separately.

The implementation passes independent specification and quality review. Component, interface, contract, and installation checks validate the behavior.

Preview controls and resource grouping pass independent specification and quality review. Final checks and installed-App evidence are recorded separately.

Continuous preview gestures

While a pointer drag or resize is held, a single decoded presentation bitmap moves and scales in the same renderer as the preview chrome. Native bounds and device emulation stay fixed during the gesture. On release, the hidden native page receives the final bounds once, a presentation capture waits for its painted surface, and live interaction resumes. The virtual viewport remains 1920 by 1080. Presentation captures use capturePage, never CDP or a periodic capture loop. An invalidated or timed-out capture cannot hide or restore a replaced preview. Page animations are visually frozen only during the gesture.

Frameless preview layout

The preview has no decorative outer frame, shadow, or side and bottom padding. The page fills the area below its 30 CSS-pixel header. The preview forms one card with 10 CSS-pixel outer corners: the header rounds only its top corners, and the stage clips fallback, iframe and gesture surfaces at its bottom corners. The retained gesture image also rounds its top corners by 10 CSS pixels. The stage shares the header background so the uniformly rounded native page's top corner cutouts blend into the header. Electron View.setBorderRadius uses the rounded product of 10 and host UI zoom, with a minimum of 1; the applied radius is cached and resets to zero in a normal tab only when needed. Eight transparent resize targets extend outward, with 24×24 CSS-pixel corner targets half outside the page. Only the hovered corner shows a curved hint; moving or resizing does not reveal the other hints. The 2px stroke retains its 14×14 box and 12px outer arc, positioned 2px outside the corner without a reserved gap. Native surfaces receive page input, so resizing uses the outer hit area. Placement reserves 22 CSS pixels per side: 12 for the corner handle, 8 for the adjacent sidebar resize rail and 2 for separation. Default and expanded content remains 16:9. This appearance change leaves viewport, resource ownership and gesture lifecycle unchanged.

Exact editable values

The native type action retains standard input and textarea filling. For a contenteditable editor it replaces the selected contents with a plain text node and emits an input event after the native editable check and clear. This avoids Chromium paragraph nodes that add an extra rendered newline for blank lines. It does not alter editor CSS or normalize the requested text. The action reads the actual rendered innerText after input handlers; an editor that rewrites text or whose CSS collapses significant whitespace returns a failed action and requires a fresh observation. The caller never treats that failure as permission to replay a write. A fresh public observation remains the evidence for successful exact field readback.