Giving your agents the power to browse the web is like giving them superpowers. You can automate almost anything. Rotunda is a browser built for agents from the ground up. Sick of seeing more captchas in Claude than when you open Chrome and do it yourself? Try Rotunda.
Getting started
Install Rotunda into your Python project with uv, then fetch the latest Rotunda browser build:
uv add rotunda uv run rotunda fetch
rotunda fetch syncs the available browser releases and installs the latest build for the active channel.
Then use Rotunda from Playwright by swapping in the Rotunda launch helper and creating contexts with NewContext:
from playwright.sync_api import sync_playwright from rotunda import NewBrowser, NewContext with sync_playwright() as playwright: browser = NewBrowser(playwright, headless=False) context = NewContext(browser) page = context.new_page() page.goto("https://pierce.dev", wait_until="domcontentloaded") first_article_text = page.locator("main article article").first.inner_text() print(first_article_text) browser.close()
Default add-ons are opt-in because they are a page-dependent tradeoff. uBlock
takes extra processing time, but it can still be net faster on pages with lots
of ads or trackers. For SaaS sites with minimal or no ads, keep default add-ons
off so Rotunda does not spend time processing unnecessary extension rules.
Pass NewBrowser(playwright, default_addons=True) when that tradeoff is useful.
Isolated eval
For custom DOM reads that should avoid page monkeypatches, Rotunda exposes Playwright's isolated utility context:
from rotunda import evaluate_in_utility title = evaluate_in_utility(page, "() => document.title")
Async code can use async_evaluate_in_utility(page, expression, arg=None).
Import rotunda before starting Playwright so Rotunda can install the driver
preload; Rotunda(...) / AsyncRotunda(...) do this automatically.
Agent
You can also drive Rotunda directly from the command line with uvx, without adding it to a project first. The agent commands keep browser profiles, daemon sessions, and short resource indexes under ~/.rotunda, so later uvx rotunda ... calls can attach to the same profile.
For the daemon, resource-index, heartbeat, and singleton process model behind these commands, see Agent CLI Architecture.
For agent clients that support installable skills, see the Rotunda skill for a compact operating guide.
First install the active browser build and create a profile:
uvx rotunda fetch uvx rotunda agent new-profile --name agent-demo
Create a browser context by passing the profile name to new-context, then navigate the printed page index. The page number below is an example; use the index printed by your commands:
uvx rotunda agent new-context agent-demo uvx rotunda agent navigate 3 https://pierce.dev
Describe the page to get element refs:
uvx rotunda agent describe 3
Use those refs directly for actions. You do not need to pass the page index once a ref has been described:
