Repository navigation
feat(computer): a website browser running alone is a computer, on the ubuntu-24.04-headless base with the page driver - #471
Merged
Conversation
… browser-24.04 base with the page driver chromium deployed alone now runs on browser-24.04, a base with no display, with the page driver, whose screen is its active tab, over browser/v1's new page/viewport, page/capture and page/input. A ready check can be final: while one fails, computer-ready/v1 says the computer failed and why, and boot.ready() raises at once. A website browser runs headless exactly when its computer has no display. A driver's card says its screen, and put refuses a page computer unless it has exactly one website browser, which its AppDeclaration now says it is. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hes ubuntu-24.04's, its digest bumped by Dependabot A base with no disk form gets no disk image. The shipped driver aliases now include page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…licks, a failed browser stays failed, and headless pages wait for their size Shift held types a as A, and a held modifier carries to clicks, drags and scrolls. Once the browser has ended on its own, every page call is refused with why, even after its server launches another. Headless, each new page is held until it is sized to the window, then told to run, and told to run even if preparing it fails. The stand-in proxy takes IPv6 literals in CONNECT. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ide ubuntu-24.04, for what sets it apart Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
A website browser running alone is now a computer. This is the first of three PRs for the browser as a computer, part of FD-5116. Its decisions are in the design note, and the evaluation compared it with a separate front door.
chromiumdeployed alone now runs on a new base,ubuntu-24.04-headless, which has no display, with a newpagedriver, whose screen is chromium's active tab. It deploys through the computer provider like any computer, and gate 3 probes it the same way.The browser computer
ubuntu-24.04-headlessis Ubuntu 24.04 with no display server or desktop (display = "none"). supervisord runs every program as the session user, including a stand-in site proxy on127.0.0.1:3128. The stand-in forwards everything and refuses nothing; the shared site proxy replaces it later.pagedriver serves the sevencomputer_*tools and the pointer and keyboard groups overbrowser/v1's newpage/viewport,page/captureandpage/input, on chromium's own socket.ubuntu-24.04-headlessandpage, soEnv.get("chromium").deploy()is the browser computer. A desktop with chromium is a computer env that lists it, as the chromium test bundle's desktop already is.Decisions 4–8 of the note
ReadyCheckgainsfinal.computer-ready/v1's status carriesfailed, saying why.boot.ready()raisesComputerFailedat once rather than waiting out its timeout.exit. Its tools then answer with the same detail.none.AGENTENV_BROWSER_ALONEandAGENTENV_BROWSER_OPEN_WEBare removed: nothing set them but the old prototype, and the open web will need a display of its own.browser/v1operations (decision 6), like every extension operation.computer/v1card now saysscreen: "desktop" | "page", from its class'sscreen_kind; drivers already name methodsscreen.AppDeclarationgainsbrowser: truefor aWebsiteBrowserEnvironment.putrefuses a computer env, or an app deployed alone, whose driver's screen is a page unless it has exactly one website browser.Page.captureScreenshotwithoptimizeForSpeed.Also fixed in the control connection: a page attached as it opens is held to the window's size before it runs, headless. And the page driver releases a modifier with its own bit off, as a real keyboard does.
Not in this PR:
/dev/shmsizing;/svc/<app>/.Publishing: releases now publish
ubuntu-24.04-headlessas they doubuntu-24.04:ghcr.io/scaleapi/agentenv-ubuntu-24.04-headless, its base digest bumped by Dependabot. A base with no disk form gets no disk image. Until a package admin makes the new package public, a run builds the base from its folder instead of pulling it.Compatibility:
AppDeclarationforbids unknown fields. A hub on an older protocol can't load a website browser env put by this version until its pin is bumped. Other apps' stored declarations don't change, becausebrowseris left out unless it's true.How it was tested
ruff check: clean.Protocol tests: 1001 passed. The new ones cover:
failed;screenfeature and its check;browser: trueon a website browser's declaration and on no other app's;Unit tests: 11,729 passed.
test_a_token_signs_the_clonewas left out, because it waits ongit credential fillon this laptop, on main too. The new ones cover:putrefusing a page computer with no browser or two, and an app alone that isn't one;boot.ready()raisingComputerFailedat once.Integration, slow tier, on agent-environments-admin VMs (amd64 c6i.2xlarge, arm64 c7g.2xlarge):
browser_computer_test, on chromium deployed alone:--headless=newat its window's size, nothing runs X, and nothing listens but the driver and the stand-in proxy;failednames the signal, and a screenshot answers with the same detail.chromium_app_test,website_browser_testandcomputer_app_test, on the desktop: all pass, the popup test included.72530bed, after the rename and Greptile's fixes: 12 of 12 on each.Greptile, round 1 (2/5): four findings, all fixed in
e6c92732:aasA, which gate 3's P6 expects, and a held modifier carries to clicks, drags and scrolls;CONNECT.The new unit and protocol tests cover each. Greptile then gave 5/5.
CI on
72530bed: 25 of 25, CodeBuild included.Not run: gate 3's input checks on a page (P3–P7, P9) stay unverified until PR 3's HTML Fixture Desk. The run with a real site proxy waits on it.
🤖 Generated with Claude Code


Confidence Score: 5/5
The changes appear safe to merge; no new blocking issue was found.Summary
Adds standalone Chromium computers on
ubuntu-24.04-headless, with thepagedriver supplying screenshots and input.Diagram
%%{init: {'theme': 'neutral'}}%% flowchart LR A["Standalone chromium"] --> B["ubuntu-24.04-headless"] B --> C["page driver"] C -->|"browser/v1 page operations"| D["Chromium app server"] D -->|"CDP"| E["Active tab"] C -->|"Recorded browser exit"| F["Computer permanently failed"]Reviews (3) · Last reviewed commit: "refactor(computer): name the headless ba..." · Reviewed by Greptile