Notte is a Python framework and hosted platform for building web-automation agents that combine scripted, deterministic steps with LLM-driven browser actions. You script the parts of a workflow that do not need reasoning with Playwright-compatible primitives (goto, fill, click) and hand off to an agent only for the steps that require adapting to the page; the project positions this hybrid approach as a way to lower LLM cost and raise reliability. Python 3.11 or later is required.
The open-source core runs locally against a Patchright Chromium install with your own LLM API keys: a notte.Session holds the browser, a notte.Agent takes a natural-language task, a reasoning model identifier (for example gemini/gemini-2.5-flash), and a step budget, and session.scrape() extracts data from the current page. The same objects exist in the notte_sdk client, so switching to hosted browser sessions is a change of import and a NotteClient API key.
The hosted service adds browser infrastructure: stealth sessions with CAPTCHA solving and proxies, credential vaults, digital personas with email addresses, phone numbers, and automated two-factor handling, file storage that agents can upload to and download from, cookie import and export for authenticated sessions, and attachment to any external browser over the Chrome DevTools Protocol (CDP). The platform also offers browser functions that run automations co-located with the browsers on a schedule.
Results from the project's own open-operator-evals benchmark:
| Provider | Agent self-report | LLM evaluation | Time per task | Task reliability |
|---|---|---|---|---|
| Notte | 86.2% | 79.0% | 47 s | 96.6% |
| Browser-Use | 77.3% | 60.2% | 113 s | 83.3% |
| Convergence | 38.4% | 31.4% | 83 s | 50% |
Features
- Natural-language agents: Agent.run(task=...) drives a browser session with a chosen reasoning model and a max_steps limit
- Structured output: pass a Pydantic model as response_format and the agent returns data in that shape
- Hybrid workflows: mix session.execute() primitives, agent steps, and session.scrape(instructions=...) in one session
- Agent fallback: wrap deterministic steps so an agent takes over when a scripted step fails
- Vaults: attach stored credentials that the agent uses when a site asks for a login
- Personas: generated identities with email, optional phone number, and automated 2FA for sign-up flows
- Stealth sessions: built-in or custom proxies, CAPTCHA solving, and a choice of browser type
- File storage: user-scoped uploads and session-scoped downloads available to the agent
- Cookies: set and retrieve cookies to reuse authenticated sessions
- CDP compatibility: run the agent on any CDP-compatible external browser via cdp_url
- Session viewer: open_viewer=True streams a live view of the browser
