v0.4 — Overlays, automation, & URL-driven launches
2026-05-05
A big batch of UI + automation work that turns the shell page into a launchable, embeddable Linux desktop. Everything is opt-in via URL parameters — defaults are unchanged.
- featFullscreen browser overlay on top of the shell.
Ctrl+Alt+F1toggles a URL bar,Ctrl+Alt+F2shows it,Ctrl+Alt+F3hides it. Iframe iscredentialless+ sandboxed so it loads under the shell's COEPrequire-corp. - featFloating button fallbacks (✕ / ☰) sit above the iframe in z-order — when a cross-origin page steals focus and swallows the hotkeys, the buttons stay clickable. Clicking outside the iframe pulls focus back to the parent so hotkeys resume.
- featTerminal Picture-in-Picture mode.
Ctrl+Alt+F4floats the xterm into a draggable, resizable panel above any other content. Position + size are saved across reloads. - featURL parameter:
?pip=1— opens the shell with PiP terminal + browser overlay shown immediately. Combine with?pipx=&pipy=&pipw=&piph=to set the initial frame rect. - featURL parameter:
?browser=<url>— overrides the F2 browser's landing page. Bare hosts auto-prefixhttps://; non-URL strings fall through to a DuckDuckGo search. Try?browser=about:blank,?browser=getclaw.site, or?browser=hello+world. - featURL parameter:
?postboot=<cmd-or-url>— runs a shell command (or wgets+runs an http(s) script) inside the guest after init has finished and the prompt is ready. Streams line-by-line so BusyBox hush doesn't truncate. Example:?postboot=https://getclaw.site/install.shauto-installs claw and drops you into the REPL. - featMultiple
postboot=values run in order — repeat the param to compose env-var exports + an installer URL without shell-escaping a megaline. Each value is independently classified as URL vs verbatim. - featFragment form:
#postboot=...for secret-bearing commands. URL fragments are never sent to the server, never logged, never leaked viaReferer— so#postboot=export%20OPENAI_API_KEY%3Dsk-...&postboot=https://getclaw.site/install.shkeeps the key purely client-side while still wiring it intoclaw's environment. - featURL parameter:
?reset=1(alias?restore=0) — skips snapshot restore and boots fresh. One-shot escape hatch when a saved state is wedged. - fixWall-clock sync during net init. v86 inherits the snapshot's CMOS time, which can be years stale, causing TLS handshakes to fail with
certificate verify failed. Init now runsrdate -s 1.1.1.1 || ntpd -dnq -p pool.ntp.orgright after DNS comes up, on both fresh boot and snapshot restore. - featLocal dev server (
./serve.sh) ships COOP/COEP headers +Cache-Control: no-storeso SharedArrayBuffer + v86 work onlocalhost:8000. - featJS API:
window.fsBrowser.setUrl(url, {show:true})— programmatically navigate the browser overlay from devtools or another script. Also rewrites the default so subsequent first-shows stick. - featJS API:
window.termPip.{show,hide,toggle,set,getRect}— drive the terminal PiP frame from outside. - feat“Launch Linux (in window)” CTA on the homepage that boots the shell with PiP + browser-overlay layout in one click — same tab, no popup blocker drama.
“Launch Linux (new tab)”is preserved next to it. - fixUTF-8 round-trip in the terminal. Cyrillic / emoji / non-Latin input was silently truncated to single bytes; output was decoded as Latin-1, producing mojibake.
sendGuestTextnowTextEncoders and writes byte-by-byte, and the serial-VFS line buffer runs through a realTextDecoder('utf-8')before resolving stdout. - fixclaw installer TTY.
wget … | shleft the REPL with stdin pointed at the closed pipe (Enter showed as^M). The auto-expanded?postboot=URL form now downloads to/tmp/postboot.shand runs it, andinstall.shends withexec claw </dev/tty >/dev/tty 2>&1to fully restore the controlling terminal.
Demo URL combining everything:
/shell/?pip=1&pipx=20&pipy=50&pipw=600&piph=400&browser=https://linuxontab.com&postboot=https://getclaw.site/install.sh