Repository navigation
feat(computer): [settings] defaults for computer apps, and chromium on WebsiteBrowserEnvironment - #453
Merged
earakely-scale merged 5 commits intoNov 3, 2026
Conversation
…n WebsiteBrowserEnvironment A computer app's env.toml takes [settings], defaults for its Settings, and a computer env can set its own beside an app in its apps entry; a deploy's env_params override them by top-level field, and the deploy records the merged values. The shipped chromium becomes a WebsiteBrowserEnvironment: Chrome launched directly on its debugging pipe, with the base's flags and policies, a cache emptied before each launch, prompt answers in its profile, and its shared memory in files only where /dev/shm is under 1 GiB. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…g and without its own dev-shm flag Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s first tab Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
earakely-scale
marked this pull request as ready for review
November 2, 2026 23:16
…keeps what each app is handed Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… window over its pipe A second copy launched on the same profile handed its window to the first and exited. Before it did, its launch had emptied the running browser's cache, replaced the server's pipe and recorded the short-lived pid, which left the server no CDP connection and nothing to stop on reset. An app can now say what a launch does while it runs; a website browser opens a window over its pipe, and every other app still starts another copy. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
earakely-scale
deleted the
edgararakelyan/fd-4938-m59-chromium-on-websitebrowserenvironment
branch
November 3, 2026 01:27
earakely-scale
added a commit
that referenced
this pull request
Nov 3, 2026
…isk form _probe keeps the disk form's `form` and boots with the apps' defaults as #453 made it. 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
This lands two issues in one PR, as agreed in the design note (eight decisions, signed off Nov 2):
[settings]for every computer app. These are deploy-time defaults thatenv_paramsoverride.chromiummoves ontoWebsiteBrowserEnvironmentfrom feat(computer): WebsiteBrowserEnvironment, the base class for website browsers #449.chromium is the first app that needs
[settings], and M1.10's "done when" is shown through it.[settings]for computer appsAn app's settings now come from four layers, each overriding the one before by top-level field. A table or list is replaced whole.
Settingsdefaults.[settings]in its env.toml.settingsbeside the app in itsappsentry:apps = [{ env = "chromium", settings = { locale = "fr-FR" } }].env_params.app_settings.<app>.Settings: an unknown name, a build setting, a secret's value or a wrong type is refused. A required setting may be left to the deploy.params.app_settings) and handed to the app inAGENTENV_APP_SETTINGSas before.computer.app_settings: exactly what each app is handed, all four layers merged, with secrets withheld. The app's class fills in the rest.env_paramsis still recorded as given.env_paramsboots it, so a required setting that an env supplies doesn't fail the probe.settings, and a computer env's app refs gainsettings. Both are left out when empty, so existing documents don't change.chromium on WebsiteBrowserEnvironment
chromium.pyis now a subclass: the build, anunpackstep and Chrome for Testing's policy folder. Chrome launches directly (chromium/chrome/chrome --no-sandbox --class=Chromium), so the wrapper script and its own--user-data-dirare gone.--disk-cache-dir, under~/.cache. It's an owned flag, and the folder is emptied before each launch, so no episode inherits another's cache.--disable-dev-shm-usage, also owned, added only when/dev/shmholds under 1 GiB. Docker gives 64 MiB, so today it stays on wherever the computer runs in Docker. Sizing/dev/shmfrom an app's declared need is FD-5052 (M8.50), before M8.10.geolocationandnotificationsonBrowserSettings, eachdeny(the default) orask. They're written into the profile'sDefault/Preferencesbefore each launch, not into a managed policy file, which the session user could otherwise rewrite.start_urlsdefaults to the base's["about:blank"]instead of[].env.tomlspells out its defaults under[settings], so authors see how an app's settings are set.dialogsmoves to M5.10, which answers dialogs. The issue text is updated.Not in this PR: the control connection (M5.10),
browser/v1's operations (M5.11), the data plane (M5.13), chromium alone (M8.10), and an app env that names another app env (left to M8.10 or M8.24).Overlap: William's draft #448 adds fields beside
app_settingsinutils/params.pyand to the deploy record inenv_computer_provider.py. Whichever lands second rebases.How it was tested
ruff check: clean.tst/unit/env/envs,tst/unit/bundle,packages/agentenv-protocol/tests). New ones cover:appsentry;app_settingswithholding secrets, andenv_paramsrecorded as given;[settings]andapps-entrysettingsread from bundle folders, and refused when malformed;/dev/shmthreshold at 64 MiB and at 1 GiB, and both new flags refused in a subclass's command;Preferenceswritten before each launch fordenyandask, merged with what's there, with the cache emptied;unpackstep.chromium_app_test.py(4):--no-sandbox --class=Chromium, then the base's profile, cache and pipe flags,--langand, on Docker's 64 MiB/dev/shm,--disable-dev-shm-usage. No socket listens in its session.denied promptforgeolocation = denyandnotifications = ask, and the deploy record'sapp_settingsshows both.desktop-frcomputer env lists chromium withlocale = "fr-FR"and deploys with--lang=fr-FR. A deploy'stime_zoneoverrides the env's, and the record showsfr-FRwith the deploy's zone whileenv_paramsstays as given.website_browser_test.py(2): feat(computer): WebsiteBrowserEnvironment, the base class for website browsers #449's tests, its fixture now without its own--disable-dev-shm-usage. The first run caught an argv position check I'd missed; the fix is the second commit, and the rerun passed on both arches.computer_app_test.py(3): every existing computer app still deploys and runs on its settings.--shm-size=1g:Preferenceshold both prompts denied;~/.cache/chromium/Default) was emptied before the relaunch.local_sandbox_test.py::test_teardown_kills_a_process_that_ignores_sigterm), and passed on retry.c32190f1), on fresh amd64 and arm64 VMs after the Greptile fixes: all 9 integration tests passed on each, with gate 3 now probing chromium with its env's[settings], and the 14 plain-container checks passed again. CI is 24/24.86da990b): a launch while a website browser runs, from its menu launcher say, opens another window over its pipe instead of a second copy. A second copy had emptied the running browser's cache, replaced the server's pipe and recorded a short-lived pid, which left nothing to reset. A protocol test covers it with a fake browser, andchromium_app_test.pynow runs the real menu-launcher command in a computer. It checks for two windows, the same browser pid, the cache kept and the app still ready. All 9 integration tests passed on fresh amd64 and arm64 VMs, and CI is 24/24.🤖 Generated with Claude Code