Skip to main content

Notte + Steel: Bring Your Own Browser Infrastructure

Sam's profile picture
Sam
February 17, 2026 · Updated
Share

Run Notte agents on Steel's browser infrastructure via CDP. Bring your own browser runtime without changing your automation code.

Notte agents now support Steel as an optional browser runtime. If you prefer to run your automations on external infrastructure, or want to leverage Steel's specific capabilities for certain workflows, you can point your Notte agent at Steel's CDP endpoint without changing your code.

How It Works

The integration is straightforward: Steel provisions a cloud browser, Notte controls it via CDP.

main.py
import os
from notte_sdk import NotteClient
from steel import Steel

# Initialize clients
steel_client = Steel(api_key=os.getenv("STEEL_API_KEY"))
notte_client = NotteClient()

# Create a browser session on Steel
steel_session = steel_client.sessions.create()

# Connect Notte to Steel's browser via CDP
with notte_client.Session(cdp_url=steel_session.websocket_url) as session:
    # Create an agent with a task
    agent = notte_client.Agent(session=session, max_steps=10)

    # Run your automation task
    result = agent.run(
        task="extract pricing plans from https://www.notte.cc"
    )

For production workflows that need persistent sessions across multiple tasks:

main.py
import os
from notte_sdk import NotteClient
from steel import Steel
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

def main():
    # Initialize clients
    steel_api_key = os.getenv("STEEL_API_KEY")
    notte_api_key = os.getenv("NOTTE_API_KEY")

    if not steel_api_key:
        raise ValueError("STEEL_API_KEY not found in environment variables")
    if not notte_api_key:
        raise ValueError("NOTTE_API_KEY not found in environment variables")

    steel_client = Steel(api_key=steel_api_key)
    notte_client = NotteClient(api_key=notte_api_key)

    # Create a browser session on Steel
    print("Creating browser session on Steel...")
    steel_session = steel_client.sessions.create()

    try:
        # Connect Notte to Steel's browser via CDP
        print("Connecting Notte to Steel browser...")
        with notte_client.Session(cdp_url=steel_session.websocket_url) as session:
            # Create an agent with a task
            agent = notte_client.Agent(session=session, max_steps=10)

            # Run your automation task
            result = agent.run(
                task="extract pricing plans from https://www.notte.cc"
            )

            print(f"Task completed: {result.answer}")

    except Exception as e:
        print(f"Error during automation: {e}")

    finally:
        # Always clean up the browser session
        steel_client.sessions.delete(steel_session.id)
        print("Browser session cleaned up")

if __name__ == "__main__":
    main()

Why This Matters

Notte provides intelligent browser automation, such as task planning, navigation, form filling, anti-detection, and session management, out of the box. For teams that want to bring their own browser infrastructure or prefer Steel's approach to browser provisioning, the integration is seamless.

Different teams have different infrastructure requirements. Some prefer Notte's native browser runtime. Others want to use Steel for specific scaling or persistence needs. Now you can choose what works best for your workflow, all from within Notte.

It's all about giving teams more room to experiment with production-grade environments and optimise without friction.

The Bottom Line

Notte gives you the framework to build intelligent browser agents. Now you can run those agents on the infrastructure that makes sense for your stack, whether that's Notte's built-in options or Steel's browsers.

Learn more: https://docs.notte.cc/integrations/steel

Steel: Browser Infrastructure for AI Agents

Frequently asked questions

Can I run Notte agents on my own browser infrastructure?

Yes. Notte agents support Steel as an optional browser runtime. Steel provisions a cloud browser and Notte controls it over CDP, so you point the Notte session at Steel's CDP endpoint without changing your automation code.

How do I connect a Notte agent to a Steel browser session?

Create a session with the Steel client, then pass its websocket URL as the cdp_url when creating a Notte Session. Create a Notte Agent on that session and call run with your task. Delete the Steel session when you are done so the browser is cleaned up.

What does Notte still provide when the browser runs on Steel?

The automation layer: task planning, navigation, form filling, anti-detection, and session management come from Notte, while Steel provides the browser runtime underneath.

Why would a team use Steel instead of Notte's built-in browser runtime?

Different teams have different infrastructure requirements. Some want to bring their own browser infrastructure or prefer Steel's approach to browser provisioning, and some use Steel for specific scaling or persistence needs. The integration lets you choose without leaving Notte.

Related articles

Related glossary terms