Browser use
Agents on dbb-server open a preview in headless Chromium, capture it, and check the capture before handing work over.
What is installed
Section titled “What is installed”bootstrap/playwright.sh at the root of dbb-platform is idempotent. It installs, for the user who runs it:
libatomic1, with sudo- Playwright’s Chromium system libraries, with sudo (
pnpm dlx playwright install-deps chromium) - Chromium, the headless shell, and ffmpeg under
~/.cache/ms-playwright
The pin is PLAYWRIGHT_VERSION in that script. The current pin is Playwright 1.65.0-alpha-2026-10-30, which is Chromium revision 1252 (Chrome for Testing 157.0.8103.15). Node comes from fnm. The package manager is pnpm.
.cursor/mcp.json starts a playwright MCP server with pnpm dlx @playwright/mcp@0.0.84, headless, one browser profile in memory per server (--isolated). That package launches the Playwright version above. fnm exec is the command so pnpm resolves when the worker’s PATH only has ~/.local/bin. The server sets TMPDIR to /home/daz/.cache/dbb-tmp, which the bootstrap script creates.
How agents use it
Section titled “How agents use it”Before handing work over, open the preview and look at a capture.
- Call
browser_navigatewith the preview URL. - Call
browser_take_screenshotfor a still of the page. - Call
browser_start_video, walk the flow, thenbrowser_stop_videowhen the change is motion or more than one step.
Read the capture and fix the preview before the handoff. The same browser is available without the MCP server:
pnpm dlx playwright@1.65.0-alpha-2026-10-30 screenshot https://dbb-os.server.daz.dev _artifacts/<agent>/home.pngWhere captures go
Section titled “Where captures go”Save screenshots and video under <repo>/_artifacts/<agent>/. Automatic names from the MCP server land in <repo>/_artifacts/. _artifacts/ is gitignored. Never write captures to /tmp.
Parallel use
Section titled “Parallel use”Each agent runs its own MCP server process, and that process starts its own Chromium. dbb-server has 125 GB of RAM and 24 cores, so several headless browsers can run at once. --isolated keeps each profile in memory, so those browsers do not share a profile directory. Give each agent its own directory under _artifacts/ so files stay apart.
Updating
Section titled “Updating”In a pull request, bump PLAYWRIGHT_VERSION in bootstrap/playwright.sh and the @playwright/mcp pin in .cursor/mcp.json. The Playwright version has to be the one that @playwright/mcp release depends on, so both launch the same Chromium build. Then run bootstrap/playwright.sh.