Browser pane
Full Chromium browser with DevTools, security indicators, and automation.
The browser pane is a full Chromium-based browser tile inside atrium. It is a real browser, not a headless automation surface — pages that refuse WebKit (Google sign-in, Gmail, Figma sign-in, Zoom meetings) work normally.
Available on macOS only today.
Opening a browser
Cmd+Shift+Bopens a browser pane in the current room.- Click the Browser tile in the toolbar and drop it into any split zone.
- In an existing browser pane, any
window.open()call creates a grouped subtab on the same pane, so OAuth popups and multi-window flows keep working.
The UI
Every browser pane has a chrome strip at the top:
- Back, Forward, Reload buttons.
- Security indicator in the URL bar lead icon — green lock (valid cert, no mixed content), amber lock (cert errors or insecure sub-resources), warning triangle (plain HTTP), globe (internal pages like
about:andchrome://). - URL bar with an autocomplete dropdown. Typing blends visit history, open-tab titles, and live Google search suggestions. Arrow keys select,
Enternavigates. When the bar is not focused,https://and trailing slashes on bare domains are elided (Chrome-style); focus or click to edit the full URL. Non-http(s)schemes (file://,chrome://,about:) navigate as-is — nohttps://prefix is auto-injected. - Color-scheme button next to DevTools cycles System / Light / Dark. The choice is global across all browser panes, persists across restarts, and swaps what the page sees for
prefers-color-schemewithout changing atrium's own theme. - DevTools button opens Chrome DevTools in its own window (Elements, Console, Network, Sources, Performance). Right-click anywhere in the page and choose Inspect to do the same.
Keyboard
All standard browser shortcuts work inside the pane:
Cmd+R— reload.Cmd+Shift+R(or shift/cmd-click the reload button) hard-reloads, bypassing cache.Cmd+T— open a new browser subtab on the current pane. The shortcut only fires when the browser pane has actual focus (clicking inside the page or URL bar), not just because the pane sits in the active room — soCmd+Tin another pane still opens a new room.Cmd+[/Cmd+]— back / forward.Cmd+Left/Cmd+Rightare equivalents.Cmd+L— focus URL bar.Cmd+=/Cmd+-/Cmd+0— zoom in / out / reset. Pinch-to-zoom works on trackpads. Per-site zoom is remembered.Cmd+F— find in page.
History and persistence
- Per-pane navigation history — back/forward arrays persist across restarts.
- Global visit history — the history drop-down in the URL bar is retained across restarts and used for autocomplete.
- Per-site zoom — your last zoom level for each domain is restored on return.
Subtabs
When a page opens a new tab (via target="_blank", window.open(), or middle-click), atrium creates a subtab on the current browser pane rather than a floating window. Subtabs sit in the pane's header strip:
- Click a subtab to switch to it.
- Drag a subtab out onto a split zone to promote it to its own pane.
- Close with the
×on the subtab.
Sign-in flows
Passkeys (FedCM/WebAuthn), Google Sign-In, and Bluetooth-pairing prompts work inside the pane the same way they do in Chrome. Bluetooth in particular has a one-time native permission prompt — atrium handles the macOS TCC handshake on the main thread so the prompt actually surfaces instead of crashing the engine. Cookies and sign-ins from the earlier WKWebView-based browser do not carry over to the current Chromium engine; sign-ins made before the upgrade must be redone once.
Background behavior
Browser panes throttle their CPU usage while their room is inactive, dropping host CPU when web content isn't visible. When the room is in any state other than focused, the underlying CEF NSView is hidden inside its wrapper view by a watchdog so it never intercepts pointer events meant for atrium chrome. Switching back to the room restores the pane to its previous URL, scroll, and zoom — and hit-testing IPCs from atrium overlays batch across visible panes only, so context menus and dropdowns stay smooth even with many browser panes open.
Crash recovery
If Chromium's render process crashes, the pane shows a recovery screen with a Reload button. Closing a browser pane while it is loading does not exit the app. Rapid reloads and URL-bar enters are coalesced so navigation work does not pile up.
Driving the browser from scripts and agents
Every browser pane is scriptable from the atrium CLI. This is how agents drive pages alongside editor and terminal panes, and how you can script browser work from your shell. The automation surface is comprehensive — DOM snapshots, click/fill/type/press/select, scroll, eval, wait conditions, screenshots, cookie management.
# Snapshot the accessibility tree (interactive elements get refs like e1, e2)
"$ATRIUM_CLI_PATH" browser snapshot <pane> [--interactive true] [--selector CSS]
# Click, fill, type, press, select
"$ATRIUM_CLI_PATH" browser click <pane> e3 [--snapshot-after]
"$ATRIUM_CLI_PATH" browser fill <pane> e5 "hello"
"$ATRIUM_CLI_PATH" browser type <pane> e5 "hello"
"$ATRIUM_CLI_PATH" browser press <pane> Enter
"$ATRIUM_CLI_PATH" browser select <pane> e7 "value"
# Scroll, evaluate, wait, screenshot
"$ATRIUM_CLI_PATH" browser scroll <pane> --dy 400
"$ATRIUM_CLI_PATH" browser eval <pane> "document.title"
"$ATRIUM_CLI_PATH" browser wait <pane> --selector ".done" --timeout 10000
"$ATRIUM_CLI_PATH" browser screenshot <pane> --path out.png --full-page
# Read DOM and element state
"$ATRIUM_CLI_PATH" browser get <pane> text e5
"$ATRIUM_CLI_PATH" browser is <pane> e5 visible
# Cookies
"$ATRIUM_CLI_PATH" browser cookies <pane> [--domain example.com] [--name session]
"$ATRIUM_CLI_PATH" browser cookies <pane> --delete session
See CLI → browser for every flag.
Constraints
- macOS only. Other platforms return an error stub today.
- DevTools keyboard events (Enter, Tab, arrow keys inside a DevTools input) are routed through the DevTools process, not atrium — they affect DevTools, not the page.
atrium browser consolereads the buffered DevTools console messages (500 most recent per pane). Object arguments are stringified by the renderer, so structured payloads land as[object Object]— usebrowser evalif you need to round-trip structured data.
