Status: exploratory, purely QoL — NOT on the roadmap, not committed to building. Capturing the idea + research so it isn't lost.
The gap
The agent can verify Python (run it, catch crashes) and a web server (curl → 200 + HTML), but has no feedback loop for what actually runs in the browser — uncaught JS exceptions, canvas rendering, gameplay logic. So it can ship a page that "serves 200" yet is broken in a browser (the recurring example: a generated Snake game that renders but doesn't move).
The idea
A browser_check tool: load the served page (http://localhost:PORT) in a headless browser and report uncaught JS exceptions + console errors; optionally simulate input (keypress/click) and screenshot for a later vision check. (A working proxy tool + sandbox endpoint were prototyped and then dropped — see git history if revisiting.)
Why it's not being built now
- It would not fix the main pain (logic/visual correctness like the Snake dx/dy bug — no JS error, just wrong). That class needs a vision loop (screenshot → multimodal model), which is gated on running a vision-capable model. A console-error rail catches a narrower, different class (JS crashes).
- The bigger quality lever already shipped: the lens-training loop (
/good·/bad + atlas lens retrain) catches bad writes more generally.
Research findings (adversarially verified — so a future attempt doesn't re-litigate)
- jsdom / happy-dom: unreliable even for error capture — async exceptions escape to Node and can crash the host; no real canvas. Not viable.
- Lightpanda: AGPL-3.0 (license), no rendering engine (no canvas/screenshots), Beta; headline RAM/speed claims didn't survive verification. Not viable for this.
- Servo / servoshell: genuinely rasterizes canvas, but too immature for headless container automation as of 2026 (feature-flagged, screenshot/automation maturity unestablished).
- Viable path = real Chromium headless-shell (Playwright
--only-shell, or @sparticuz/chromium ~130 MiB uncompressed, or the chromedp/headless-shell image): real engine, does both tiers, ~150 MB not ~1 GB. Should be an opt-in service (compose profile) so the default sandbox stays lean.
If ever revisited
Build it once, properly: headless-shell + input simulation + screenshot + vision, as an opt-in atlas-browser service — when there's a vision-capable model to make the visual/logic check real. Don't ship a partial Tier-1-only rail that gets rebuilt later.
Status: exploratory, purely QoL — NOT on the roadmap, not committed to building. Capturing the idea + research so it isn't lost.
The gap
The agent can verify Python (run it, catch crashes) and a web server (curl → 200 + HTML), but has no feedback loop for what actually runs in the browser — uncaught JS exceptions, canvas rendering, gameplay logic. So it can ship a page that "serves 200" yet is broken in a browser (the recurring example: a generated Snake game that renders but doesn't move).
The idea
A
browser_checktool: load the served page (http://localhost:PORT) in a headless browser and report uncaught JS exceptions + console errors; optionally simulate input (keypress/click) and screenshot for a later vision check. (A working proxy tool + sandbox endpoint were prototyped and then dropped — see git history if revisiting.)Why it's not being built now
/good·/bad+atlas lens retrain) catches bad writes more generally.Research findings (adversarially verified — so a future attempt doesn't re-litigate)
--only-shell, or@sparticuz/chromium~130 MiB uncompressed, or thechromedp/headless-shellimage): real engine, does both tiers, ~150 MB not ~1 GB. Should be an opt-in service (compose profile) so the default sandbox stays lean.If ever revisited
Build it once, properly: headless-shell + input simulation + screenshot + vision, as an opt-in
atlas-browserservice — when there's a vision-capable model to make the visual/logic check real. Don't ship a partial Tier-1-only rail that gets rebuilt later.