Skip to main content

Stagehand is the SDK for browser agents.
Read the Docs

MIT License Discord Community

browserbase%2Fstagehand | Trendshift

Ask DeepWiki

Stagehand Python SDK

What is Stagehand?

Stagehand is the SDK for browser agents. Playwright was built for testing, Stagehand is built for agents. Use familiar APIs, self-healing actions, and network-level security across TypeScript, Python, and Go.

Why Stagehand?

Stagehand gives browser agents an interface built for how they actually work. It combines familiar Playwright-style APIs with self-healing actions, agent-optimized page context, and native support for complex DOM structures like out-of-process iframes and closed Shadow DOMs.

Agents use fewer tokens, recover when websites change, and complete tasks more reliably. With a complete browser driver across TypeScript, Python, and Go, Stagehand delivers the flexibility of AI without sacrificing the speed, control, determinism, reliability, and observability required in production.

For the full overview, examples, and contributing guide, see the main README.

Example

The async Python SDK for Stagehand browser automation:

import asyncio

from stagehand import Stagehand, local_browser


async def main() -> None:
    browser = await local_browser.launch(headless=True)
    try:
        stagehand = await Stagehand.create(browser=browser)
        try:
            page = (await browser.context.pages())[0]
            if page is None:
                raise RuntimeError("Stagehand initialized without an active page")
            response = await page.goto("https://example.com")
            if response is not None:
                print(response.status, await response.text())
            await stagehand.observe("Find the more information link")
            print(await page.title())
        finally:
            await stagehand.close()
    finally:
        await browser.close()


asyncio.run(main())

See examples for action, extraction, observation, and custom LLM usage.

For hosted browsers, import browserbase from stagehand and use browserbase.launch(api_key=...) or browserbase.connect(api_key=..., session_id=...) instead of local_browser. A launched session is released when you close() the browser handle, except with keep_alive=True: that handle's close() only disconnects, and the session keeps running until it is released out of band (Browserbase dashboard or API) or reaches its configured timeout. The Stagehand extension that launch() uploaded for that session is retained on the account for the same reason, so a keep_alive=True workflow that launches repeatedly accumulates extensions until they are deleted out of band. Sessions reached through browserbase.connect() are never released by close() — whoever created the session owns it.

Stagehand.act(), Stagehand.observe(), and Stagehand.extract() use the active page by default. Pass page=page to target a specific SDK Page.

Page.goto(), reload(), go_back(), and go_forward() return the main-document Response, or None when navigation does not produce one. Response bodies and complete headers are retrieved lazily while the Stagehand session remains open.

When contributing examples or tests, keep browser ownership explicit: launch or connect a browser handle, pass it to Stagehand.create(), close Stagehand first, and close the browser in the outermost finally block.

Contributing

# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install just
brew install just

just install
just generate
just check
just test
just build

Download files

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

Source Distribution

stagehand-4.0.0.tar.gz (483.0 kB view details)

Uploaded Source

Built Distribution

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

stagehand-4.0.0-py3-none-any.whl (494.9 kB view details)

Uploaded Python 3

File details

Details for the file stagehand-4.0.0.tar.gz.

File metadata

  • Download URL: stagehand-4.0.0.tar.gz
  • Upload date:
  • Size: 483.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for stagehand-4.0.0.tar.gz
Algorithm Hash digest
SHA256 842549cbecf45557c20b17cd2ea4e454a8080f756dbff59a50aa93cb7db62a16
MD5 70f5b5dd38dd5a584891d38de7dafd14
BLAKE2b-256 eaaf7f3cb04497d71b0a4c6944db00dd1c001d2bba2b9d3e4a78e05707984045

See more details on using hashes here.

File details

Details for the file stagehand-4.0.0-py3-none-any.whl.

File metadata

  • Download URL: stagehand-4.0.0-py3-none-any.whl
  • Upload date:
  • Size: 494.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for stagehand-4.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aae7d4b66b85f6a00d1fb44f53cab95b7fe33e8f2ca1e4f4721b6e26ee45c265
MD5 ee25353b17ba1821b6b9b0ecadc77672
BLAKE2b-256 e18ebb578acfe581ddff13091e87995d586dd14fb185bdc33bf7523060dcc693

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 Sentry Error logging StatusPage Status page