Rapidly build reliable web automation agents
The web agent framework built for speed, cost-efficiency, scale, and reliability
→ [Docs](https://docs.notte.cc?ref=github) • [Console](https://console.notte.cc/?ref=github) • [Anything API](https://anything.notte.cc?ref=github) • [Landing](https://notte.cc?ref=github) • [Slack](https://join.slack.com/t/nottelabs-dev/shared_invite/zt-39a8n6hr9-d_BG7RNfytimSpVo5H03mA) • [X](https://x.com/nottecore?ref=github)

Notte gives AI agents and developers cloud browsers. Drive them from your terminal, your coding agent or your code, deploy browser automations as APIs, and fetch structured data from any page.
Create a free API key in the Console 🔑, then pick where to start:
| You want to... | Use |
|---|---|
| Drive browsers from the terminal, scripts or CI | Notte CLI |
| Give Claude Code, Codex or Cursor a browser | Notte MCP |
| Run your own Playwright / Puppeteer code on stealth cloud browsers | Browser Sessions |
| Ship a browser script as an API endpoint or a cron job | Browser Functions |
| Describe a task in English and get a deployed API back | Anything API |
| Turn a URL into clean, structured data | Fetch |
Notte CLI
Drive cloud browsers from your terminal, shell scripts or CI.
brew tap nottelabs/notte-cli https://github.com/nottelabs/notte-cli.git
brew install notte
notte auth login
notte sessions start
notte page goto "https://news.ycombinator.com"
notte page scrape --instructions "Top 3 posts with their points"
notte sessions stop
See the CLI repo for every command.
Let your coding agent set it up
Paste this into Claude Code, Codex or Cursor. It installs the Notte skill and CLI, signs you in and opens a live session:
Read https://notte.cc/skill.md and follow its setup instructions.
Notte MCP
Give your coding agent a cloud browser it can open, drive, observe and scrape, with saved logins.
claude mcp add --transport http notte https://api.notte.cc/mcp
npx skills add nottelabs/notte-skills -y # optional: Notte agent skills
Run /mcp in Claude Code to sign in. Setup for Codex, Cursor and other clients is in the MCP docs.
Browser Sessions
Every session is a cloud Chrome with proxies, CAPTCHA solving, anti-detection, live view and recordings. Connect anything that speaks CDP: Playwright, Puppeteer, Stagehand, Browser Use.
pip install notte-sdk # or: npm install notte-sdk playwright-core
from notte_sdk import NotteClient
from playwright.sync_api import sync_playwright
client = NotteClient() # reads NOTTE_API_KEY
with client.Session(proxies=True, solve_captchas=True) as session:
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(session.cdp_url())
page = browser.contexts[0].pages[0]
page.goto("https://example.com")
print(page.title())
TypeScript
import { chromium } from 'playwright-core';
import { NotteClient } from 'notte-sdk';
const client = new NotteClient(); // reads NOTTE_API_KEY
await client.Session({ proxies: true, solve_captchas: true }).use(async (session) => {
const { cdp_url } = await session.status();
if (!cdp_url) throw new Error('Session did not return a cdp_url');
const browser = await chromium.connectOverCDP(cdp_url);
try {
const page = browser.contexts()[0].pages()[0];
await page.goto('https://example.com');
console.log(await page.title());
} finally {
await browser.close();
}
});
For logged-in workflows, attach a Vault (credentials and MFA the LLM never sees), a Browser Profile or a Persona.
Browser Functions
Deploy a browser script as a serverless endpoint. Call it over HTTP, schedule it with cron, or trigger it from your app.
import os
from notte_sdk import NotteClient
client = NotteClient()
# Deploy once with: client.Function(path="my_automation.py", name="My automation")
function = client.Function(function_id=os.environ["NOTTE_FUNCTION_ID"])
result = function.run(url="https://example.com")
print(result.result)
Anything API
Describe a web task in English. Notte explores the site, writes the automation, deploys it as a Function and runs it.
curl -N -X POST https://anything.notte.cc/api/anything/start \
-H "Authorization: Bearer $NOTTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "fetch the top 3 hacker news posts"}'
Or browse ready-made functions in the marketplace.
Fetch
One call, no session to manage. Get markdown, or data in your schema.
from notte_sdk import NotteClient
from pydantic import BaseModel
class Article(BaseModel):
title: str
content: str
client = NotteClient()
article = client.scrape(url="https://example.com", response_format=Article)
print(article)
Open source or Notte Cloud
This repo contains the open source agent framework (notte) and the cloud SDKs (notte-sdk for Python, notte-sdk on npm).
| Open source | Notte Cloud | |
|---|---|---|
| Install | pip install notte |
pip install notte-sdk |
| Browser | Local Chromium | Managed cloud Chrome |
| LLM | Your own keys | Notte-managed or your own keys |
| Proxies, CAPTCHA, anti-detection | Bring your own | Built in |
| Vaults, profiles, personas | - | Built in |
| Functions, Anything API, Browser MCP | - | Built in |
Run the open source agent locally
pip install notte
patchright install --with-deps chromium
import notte
import os
with notte.Session(headless=False) as session:
model = os.getenv("NOTTE_EXAMPLE_MODEL", "gemini/gemini-3.5-flash")
agent = notte.Agent(session=session, reasoning_model=model, max_steps=10)
response = agent.run(task="Find three cat memes on Google Images and describe them")
Resources
- Documentation · llms.txt for AI agents
- Node SDK · API reference · Pricing
- BrowserArena: our open benchmark of cloud browser providers
- Contributing
License
This project is licensed under the Server Side Public License v1.
Citation
@software{notte2025,
author = {Pinto, Andrea and Giordano, Lucas and {nottelabs-team}},
title = {Notte: Software suite for internet-native agentic systems},
url = {https://github.com/nottelabs/notte},
year = {2025},
publisher = {GitHub},
license = {SSPL-1.0},
}
Copyright © 2025-2026 Notte Labs, Inc.