atriumatrium

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+B opens 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: and chrome://).
  • URL bar with an autocomplete dropdown. Typing blends visit history, open-tab titles, and live Google search suggestions. Arrow keys select, Enter navigates. 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 — no https:// 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-scheme without 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 — so Cmd+T in another pane still opens a new room.
  • Cmd+[ / Cmd+] — back / forward. Cmd+Left / Cmd+Right are 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.
Right-click → View source opens the page source in a new browser subtab.

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 console reads the buffered DevTools console messages (500 most recent per pane). Object arguments are stringified by the renderer, so structured payloads land as [object Object] — use browser eval if you need to round-trip structured data.