Skip to main content
Real-browser automation agent powered by Notte — navigates JS-rendered pages, fills forms, solves captchas, and uses proxies.

Code

Create notte-browser-agent.py with the code below, or save it directly from your editor.

Skill Configuration

Create skills/notte-browser-skill/skill.yaml:

How It Works

Notte SDK configuration
  • NotteClient(): a single long-lived client read from NOTTE_API_KEY in the environment.
  • client.Session(solve_captchas=..., proxies=...): a context-managed browser session, scoped per request so every A2A call gets an isolated Chromium context with its own cookies and fingerprint.
  • client.Agent(session, reasoning_model, max_steps): the agent loop on top of the session.
    • reasoning_model (NOTTE_REASONING_MODEL, default gemini/gemini-2.5-flash) — LiteLLM model id; escalate to anthropic/claude-sonnet-4-5 or openai/gpt-4.1 for harder multi-step flows.
    • max_steps (NOTTE_MAX_STEPS, default 15) — per-task step budget.
  • NOTTE_SOLVE_CAPTCHAS=true flips on Notte’s built-in captcha solver for the session.
  • NOTTE_USE_PROXIES=true routes traffic through Notte’s managed proxy pool, which helps with rate-limited or geo-blocked targets.
Bridging the bindu message → Notte task
  • The handler walks messages in reverse to find the latest role == "user" entry and pulls its content string. That string becomes the task argument to agent.run(...) — there’s no prompt construction, no tool catalog wiring, no system prompt to author. Notte is the agent.
  • Empty histories, missing user turns, and empty content all return helpful error strings rather than raising.
What agent.run() returns
  • A response object whose .answer attribute is a single string. If the task asks for structured output (“…as JSON with keys X, Y”) the string is JSON; otherwise it’s free text.
  • The handler returns response.answer as-is — no schema enforcement on the Bindu side. If .answer is None, the handler returns a hint to raise NOTTE_MAX_STEPS or use a stronger reasoning model.
Why use it
  • The headless browser runs in Notte’s cloud, not on your machine. JavaScript renders, forms submit, captchas can be solved, and proxies are available — all without you wiring Playwright, Selenium, or a captcha provider.

Dependencies

notte-sdk isn’t bundled with Bindu’s agents extra — install it explicitly or boot fails on AuthenticationError.

Environment Setup

Create .env file:

Run

Examples:
  • “Find the cheapest flight from SF to LA on Google Flights for next Monday”
  • “Go to news.ycombinator.com and return the top 5 posts as JSON with title, url, and points”
  • “Search ‘air force 1’ on nike.com, solve any captcha, and return the current price and availability”
  • “Fill the contact form at https://example.com/contact with name=Jane, email=jane@ex.com, submit, and confirm the success state”
Expect 10–30s per task for multi-step flows. Each request gets its own browser context.

Example API Calls

Frontend Setup

Open http://localhost:5173 and try to chat with the Notte browser agent.