Skip to main content

Notte, the full-stack web AI agent framework

Project description

Rapidly build reliable and fast web agents

We outperform all other web agents in speed, costs, and reliability
→ 🔥 Read more on open-operator-evalsXLinkedInLandingConsole

Notte Logo

GitHub stars License: SSPL-1.0 Python 3.11+ PyPI version PyPI Downloads commits main CodeRabbit Pull Request Reviews Open Replit Template Notte - Product Hunt


What is Notte?

Notte provides the full-stack web AI agents framework that allows you to develop, deploy, and scale your own agents, all with a single API. Transform the internet into an agent-friendly environment and websites into structured, navigable maps described in natural language.

Key Features

  • Browser Sessions → on-demand headless browser instances, built in & custom proxy config, CDP, cookie integration, session replay
  • Run automated LLM-powered agents → solve complex tasks on the web
  • Observe, Step, Scrape → observe website states and execute actions using intuitive natural language commands — granular control while maintaining the simplicity of natural language interaction
  • Secrets Vault → enterprise-grade credential management for your Sessions & Agents

🚀 Zero Friction Agentic Browsing

notte.agents.run(task="go to twitter and post: new era this is @nottecore taking over my acc")

Demo

Fast, reliable, agentic browsing (speed x2):

  • secure password vault
  • bypass bot detection

Benchmarks

Rank Provider Agent Self-Report LLM Evaluation Time per Task Task Reliability
🏆 Notte 86.2% 79.0% 47s 96.6%
2️⃣ Browser-Use 77.3% 60.2% 113s 83.3%
3️⃣ Convergence 38.4% 31.4% 83s 50%

Read the full story here: https://github.com/nottelabs/open-operator-evals


Quickstart me

To run the above you'll need a notte API key from our console platform 🔑

uv venv --python 3.11
uv pip install notte-sdk

...and spin up your crazy cool and dead simple agent on our remote machine:

import os
from notte_sdk import NotteClient

notte = NotteClient(api_key=os.getenv("NOTTE_API_KEY"))
agi = notte.Agent(headless=False,reasoning_model="gemini/gemini-2.0-flash", max_steps=5)
agi.run(task="doom scroll cat memes on google images")

This is by far the closest attempt to AGI we've ever witnessed ;)


✨ Highlights

Our main tech highlight is that we introduce a perception layer that turns the internet into an agent-friendly environment, by turning websites into structured maps described in natural language, ready to be digested by an LLM with less effort.

from notte_sdk import NotteClient

notte = NotteClient()
with notte.Session(headless=False) as page:
    obs = page.observe(url="https://www.google.com/travel/flights")
    print(obs.space.markdown)
# Flight Search
* I1: Enters departure location (departureLocation: str = "San Francisco")
* I3: Selects departure date (departureDate: date)
* I6: Selects trip type (tripType: str = "round-trip", allowed=["round-trip", "one-way", "multi-city"])
* B3: Search flights options with current filters

# Website Navigation
* B5: Opens Google apps menu
* L28: Navigates to Google homepage

# User Preferences
* B26: Open menu to change language settings
...

The above gives you the gist of how we push to better parse webpages and reduce the cognitive load of LLM reasoners. The aim is to enable you to build and deploy more accurate web browsing agents, while downgrading to smaller models, which in turn increase inference speed and reduce production costs.

☄️ Speed contest vs. Browser-Use

The perception layer enables smaller models (e.g. the llama suite) to be connected for the agent's reasoning, because all the DOM noise is abstracted and the LLM can focus on a set of actions described in plain language. This allows the agent to be served on ultra-high inference such as Cerebras without losing precision:

from notte_sdk import NotteClient

notte = NotteClient()
agent = notte.Agent(headless=False,reasoning_model="gemini/gemini-2.0-flash", max_steps=5)
agent.run(task="search cheapest flight from paris to nyc on gflight")

left:browser-use, right:notte-agent (cerebras)

Demo

🌐 The Full Stack Framework

Notte's full stack agentic internet framework combines core browser infrastructure (sessions, live replay, cdp) with intelligent browsing agents, bridged and enhanced with our perception layer. Our entire codebase is made to be highly customizable, ready to integrate other devtools from the ecosystem and packaged to be push to prod. We also provide web scripting capabilities and sota scraping endpoints out of the box, because why not.

service agent.run() agent.cloud() page.scrape() page.step() page.perceive()
browser-use 🌕 🌕
stagehand 🌕 🌕
notte 🌕 🌕 🌕 🌕 🌕

PS: The title of services are figurative eg. agent.cloud() refers to hosting an agent in cloud for you.

Unstable and upcoming features

⏭️ We have either already partially shipped or are working on the following features: captcha resolution, residential proxies, web security, vpn-style browsing, authentication and payments with secure safe, improved speed and memory, human-in-the-loop integration, channeled notifications, and cookies management.

API endpoints

Scraping endpoint:

  • /v1/scrape - Scrape data from a URL

Session management:

  • /v1/sessions/start - Create a new browser session
  • /v1/sessions/{session_id}/stop - Close a session
  • /v1/sessions/{session_id}/replay - Get replay information (video in .webp format)
  • /v1/sessions/{session_id}/debug - Get debugging information from a session (i.e live CDP url / viewer url)
  • /v1/sessions - List active sessions

Browser & Page interactions:

  • /v1/sessions/{session_id}/page/scrape - Extract structured data from current page
  • /v1/sessions/{session_id}/page/observe - Get action space (perception) from current page
  • /v1/sessions/{session_id}/page/step - Perform action on current page with text command

Agent launchpad:

  • /v1/agent/start - Start a new agent task ()
  • /v1/agent/{agent_id} - Get agent task status
  • /v1/agent/{agent_id}/stop - Stop running agent
  • /v1/agents/ - List running agent tasks

Read more on our documentation website. You can cURL all of them 🥰

Notte Console

You use our [console]((https://console.notte.cc) to manage your agents and sessions, create API keys and monitor your usage.

Most of our open-source features are also available on the cloud-hosted version with a large free-tier!

Example for webpage scraping & structured schema llm extraction

from notte_sdk import NotteClient

notte = NotteClient()
data = notte.scrape(url="https://pump.fun", instructions="get top 5 latest trendy coins on pf, return ticker, name, mcap")

Demo

How to run notte locally ?

You will need to provide your own LLM provider API key, and install the dependencies:

uv venv --python 3.11
uv pip install notte
uv run patchright install --with-deps chromium
export GEMINI_API_KEY="your-api-key"

...and spin up your crazy cool and dead simple agent on your local machine:

import notte

agi = notte.Agent(headless=False,reasoning_model="gemini/gemini-2.0-flash", max_steps=5)
agi.run(task="doom scroll cat memes on google images")

Contribute

Setup your local working environment;

uv sync --all-extras --dev
uv run patchright install --with-deps chromium
uv run pre-commit install

Find an issue, fork, open a PR, and merge :)

License

This project is licensed under the Server Side Public License v1. See the LICENSE file for details.

Citation

If you use notte in your research or project, please cite:

@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}
  version = {1.4.4},
}

Built with luv from Earth 🌏


Copyright © 2025 Notte Labs, Inc.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

notte-1.5.2.tar.gz (40.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

notte-1.5.2-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

Details for the file notte-1.5.2.tar.gz.

File metadata

  • Download URL: notte-1.5.2.tar.gz
  • Upload date:
  • Size: 40.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.12

File hashes

Hashes for notte-1.5.2.tar.gz
Algorithm Hash digest
SHA256 a16cb613e97a879d88aad48ee88ab488d09f32ae64ce9351d4c57a592bff4334
MD5 8459a583705f87066a09dab918e72451
BLAKE2b-256 1015d0db7c838afd741db9133faf012aa01b249e07b6d074f0f2acaa297a1761

See more details on using hashes here.

File details

Details for the file notte-1.5.2-py3-none-any.whl.

File metadata

  • Download URL: notte-1.5.2-py3-none-any.whl
  • Upload date:
  • Size: 16.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.12

File hashes

Hashes for notte-1.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fd022f497e170cc763811c66d290de0a2675709e8bb4fcf260484fc588bc2ac8
MD5 c246da844aebe833f665cdea689bcbc7
BLAKE2b-256 e9a8241e90ba6a4277496c17b94bc646257c1f4946927d5b816d1913491d6ec4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page