Code
Createnotte-browser-agent.py with the code below, or save it directly from your editor.
Skill Configuration
Createskills/notte-browser-skill/skill.yaml:
How It Works
Notte SDK configurationNotteClient(): a single long-lived client read fromNOTTE_API_KEYin 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, defaultgemini/gemini-2.5-flash) — LiteLLM model id; escalate toanthropic/claude-sonnet-4-5oropenai/gpt-4.1for harder multi-step flows.max_steps(NOTTE_MAX_STEPS, default15) — per-task step budget.
NOTTE_SOLVE_CAPTCHAS=trueflips on Notte’s built-in captcha solver for the session.NOTTE_USE_PROXIES=trueroutes traffic through Notte’s managed proxy pool, which helps with rate-limited or geo-blocked targets.
- The handler walks
messagesin reverse to find the latestrole == "user"entry and pulls itscontentstring. That string becomes thetaskargument toagent.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.
agent.run() returns
- A response object whose
.answerattribute 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.answeras-is — no schema enforcement on the Bindu side. If.answerisNone, the handler returns a hint to raiseNOTTE_MAX_STEPSor use a stronger reasoning model.
- 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
- “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”
Example API Calls
Message Send Request
Message Send Request
Task get Request
Task get Request