Workspace

VNC pipeline

The previous sandbox shipped a full noVNC plus Fluxbox desktop the user could watch over. The Ultron shell does not. This page describes what replaced VNC: a screenshot binary plus Playwright-driven live previews plus an HTTP-streamed deploy preview for built artefacts.

Updated today

Overview

At a glance
Old surface
Xvfb + Fluxbox + noVNC. One persistent desktop per user.
New surface
Headless. Visual outputs via screenshot binary or deploy preview.
Visual debug
ultron-screenshot binary in /tools-bin
Browser automation
Playwright + Chromium installed in the image
Live preview
HTTP-served from the container's working directory; surfaced via the dashboard preview pane

Keeping noVNC up reliably across container restarts was the heaviest single source of operational pain in the previous sandbox. Sessions migrated to a different node mid-render, noVNC sockets dropped, the desktop ended up in a half-rendered state. The shell trades that surface for a cleaner set of single-purpose tools that cover each VNC use case explicitly.

What changed from the old sandbox

Use caseOld (VNC)New (shell)
Watch the agent click a buttonLive noVNC iframeultron-screenshot at key moments, displayed inline in chat
Drive a real browserManual click in the noVNC sessionPlaywright script written by the agent + ultron-screenshot for verification
See a built UIOpen a localhost URL inside the desktopultron-deploy to a hosted preview URL; the dashboard preview pane points at it
Debug a Python scriptRun + observe via the desktopRun in container, capture stdout/stderr in the chat
Fill out a formManual click in the desktopPlaywright + ultron-screenshot to verify

Screenshot path

The most-used visual primitive in the new world.

usagebash
1# Grab a screenshot of an arbitrary URL
2ultron-screenshot --url https://example.com --out /work/snap.png
3
4# Grab a screenshot of a running localhost dev server
5ultron-screenshot --url http://localhost:3000 --out /work/dev.png
6
7# Take three at different viewport widths
8ultron-screenshot --url ... --widths 375,768,1280 --out-dir /work/snaps/

The binary uses the same Playwright Chromium that the rest of the shell uses. Output PNGs are written to /work; the chat agent can attach them to its reply, and they survive session snapshots like any other file in /work.

Playwright sessions

For agent flows that need an interactive browser session (form submission, OAuth handshake, drag-and-drop testing), the agent CLI spawns a Playwright session directly. The session is headless by default; the agent uses ultron-screenshot at each meaningful step to produce a frame the operator can review.

Tip
For the rare case where a human really needs to watch a browser session live, the agent can spin up an X server in the container and stream frames as a series of screenshots posted to chat at a fixed interval. Not as smooth as VNC, but good enough for the cases that mattered.

Live preview surfaces

When the agent builds a web artefact (a landing page, a small app, a static export of a deck), the right pattern is to call ultron-deploy and surface a hosted preview URL. The dashboard's preview pane points at that URL. The artefact is reachable from the operator's own browser, not from inside a desktop session, which avoids every flavour of VNC failure mode.

usagebash
1# Build then deploy to a hosted preview URL
2cd /work/my-app
3npm install && npm run build
4
5ultron-deploy --dir ./out --project-name my-app-preview
6# Returns the URL: https://my-app-preview.<workspace>.preview.51ultron.com

Legacy VNC support

Warning
The Xvfb + Fluxbox + noVNC pipeline that was previously documented here is fully retired. Sessions migrated to the shell automatically; there is no per-user toggle to switch back. The previous documentation is preserved in the changelog for historical reference only.