> ## Documentation Index
> Fetch the complete documentation index at: https://notte-experiment-visibility-md-links.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Browser Sessions

> Cloud-hosted browser instances for automation

Sessions are isolated browser instances running in the cloud that you can control programmatically. Think of them as headless Chrome browsers, but managed, scalable, and equipped with anti-detection, proxies, and captcha solving out of the box.

Every operation in Notte—whether you're running an AI agent, scraping data, or automating a workflow—happens within a session.

## Quick Start

Create a session and start automating:

{/* @sniptest testers/sessions/index.py */}

```python session.py theme={null}
from notte_sdk import NotteClient

client = NotteClient()

# The session is automatically stopped when the context manager is exited
with client.Session(idle_timeout_minutes=2) as session:
    status = session.status()
    print(status)
```

<Tip>
  We strongly recommend using the `with` statement (context manager) to ensure sessions are automatically stopped when done. This prevents orphaned sessions and unexpected costs. See [Session Lifecycle](/features/sessions/lifecycle.md) for manual management options.
</Tip>

## Core Operations

Sessions provide three methods for interacting with the browser:

| Method      | Purpose                                          |
| ----------- | ------------------------------------------------ |
| `observe()` | Get the current page state and available actions |
| `execute()` | Perform an action on the page                    |
| `scrape()`  | Extract structured data from the page            |

{/* @sniptest testers/pages/linkedin_step.py */}

```python linkedin_step.py theme={null}
from notte_sdk import NotteClient

client = NotteClient()

with client.Session() as page:
    url = "https://www.linkedin.com/"

    # observe page and take a step
    page.execute(type="goto", url=url)
    actions = page.observe(instructions="click 'jobs'")
    res = page.execute(actions[0])
    print(res.message)

    # another one
    actions = page.observe(instructions="dismiss the sign in check")
    res = page.execute(actions[0])
    print(res.message)
```

## Session Capabilities

Sessions come with powerful built-in capabilities:

<CardGroup cols={2}>
  <Card title="Proxies" icon="globe" href="/features/sessions/proxies.md">
    Route traffic through residential proxies for geo-targeting
  </Card>

  <Card title="Captcha Solving" icon="robot" href="/features/sessions/captcha-solving.md">
    Automatically solve reCAPTCHA and hCaptcha
  </Card>

  <Card title="Stealth Mode" icon="user-secret" href="/features/sessions/stealth-mode.md">
    Evade bot detection with fingerprint randomization
  </Card>

  <Card title="Recordings" icon="video" href="/features/sessions/recordings.md">
    Record sessions for debugging and replay
  </Card>

  <Card title="Live View" icon="eye" href="/features/sessions/live-view.md">
    Watch sessions execute in real-time
  </Card>

  <Card title="Browser Profiles" icon="user" href="/features/sessions/browser-profiles.md">
    Persist browser state across sessions
  </Card>
</CardGroup>

## Next Steps

<CardGroup cols={2}>
  <Card title="Session Lifecycle" icon="rotate" href="/features/sessions/lifecycle.md">
    Create, manage, and stop sessions
  </Card>

  <Card title="Session Configuration" icon="gear" href="/features/sessions/configuration.md">
    All configuration options
  </Card>

  <Card title="Browser Controls" icon="hand-pointer" href="/features/sessions/browser-controls.md">
    Complete action reference
  </Card>

  <Card title="Connect with Playwright" icon="code" href="/features/sessions/playwright.md">
    Use Playwright via CDP
  </Card>
</CardGroup>
