mrkeyoor.com_
Thu 03 Sept 06:59 UTC
Automationevaluationupdated 03 Sept 2026

stagehand review

Stagehand is a browser automation SDK for TypeScript, Python, and Go. It combines familiar page and locator methods with language-model commands that click, inspect, and extract data when fixed selectors are too brittle.

Verdict

Our Stagehand run installed 1,444 packages in 58 seconds and built in 41, but the 23-second test command still exited 1 after all 34 browser tests were skipped. Use it when a few change-prone browser steps justify model calls and you can keep hard assertions around the result. Keep Playwright or another direct browser API for complete test suites, PDF work, network inspection, and flows where repeatability matters more than recovery.

We ran it

Lab card: what happened when we ran stagehandScreenshot of stagehand (stagehand.dev)
Install✓ · 58s1444 packages · 1595 MB
Build✓ · 41s
Tests✗ · 23s2 passed · 0 failed of 2 (vitest)
Repo1222 files~181,037 lines of source · 49.4 MB · 6 CI workflows

Answers from our run

Does stagehand build from source?

Dependencies installed in 58 seconds (1444 packages), and the build succeeded in 41 seconds. We cloned commit 13c845e into a clean Debian container with 3 CPUs and no project-specific setup.

Do stagehand's tests pass?

Yes: 2 of 2 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use stagehand?

Teams trying to remove Playwright from a broad automation estate: open issue #2744 says 13 of 15 scripts in one migration were blocked by missing PDF, network-event, emulation, locator, or interception APIs.

What are the alternatives to stagehand?

Playwright, browser-use, Steel Browser. Our Stagehand run installed 1,444 packages in 58 seconds and built in 41, but the 23-second test command still exited 1 after all 34 browser tests were skipped.

Setup3/5Install and build passed, but 1,595 MB and six tools add weight
Docs4/5Three SDKs and local setup are covered; root cleanup is incomplete
Community5/524,134 stars and a September 2 push with active issue traffic
Maturity3/5v4 is usable, but browser API gaps and a failed test gate remain

Who it’s for

Teams adding language-model assistance to browser jobs that already have clear success checks.
TypeScript, Python, or Go developers who want one browser protocol across local Chrome and Browserbase sessions.
Automation owners who can keep deterministic locators for stable steps and reserve natural-language actions for changing pages.
Agent builders who need structured extraction, browser observations, WebMCP, or MCP integrations.

Who it’s NOT for

Teams trying to remove Playwright from a broad automation estate: open issue #2744 says 13 of 15 scripts in one migration were blocked by missing PDF, network-event, emulation, locator, or interception APIs.
Contributors who want a small JavaScript-only checkout: the source workflow spans Node, pnpm, Go, Python, uv, and just, while our install used 1,595 MB.
Release gates that require the default repository test command to pass: our commit exited 1 even though its reported unit tests passed.
Organizations that cannot approve either Browserbase's model gateway or their own model provider for page-derived prompts and output.
Operators unwilling to own cloud-session cleanup: issue #2726 shows that the root TypeScript example omits both Stagehand and Browserbase closure.

Setup reality

Our sandbox installed commit 13c845e in 58 seconds, adding 1,444 packages and using 1,595 MB. The build succeeded in 41 seconds. Tests exited 1 after 23 seconds: the lab summary counted 2 passed and 0 failed, while the log marked 2 browser files failed and skipped all 34 browser tests.

Source work needs Node, pnpm, Go, Python, uv, and just. Hosted runs need a Browserbase key; its model gateway can choose a model without a separate provider key. Local Chrome removes the Browserbase requirement, but language-model actions still need an approved model configuration.

The 49.4 MB monorepo uses a Chrome extension over CDP and has no Dockerfile. Linux local-browser setup needs Chrome libraries named in the docs. Browser ownership, session closure, model cost, and Playwright API gaps all need application code rather than a copied five-line example.

Stagehand 4.0.0 mixes locators with three model-driven commands

Stagehand 4.0.0 exposes ordinary browser methods such as goto, locator, click, and screenshot, then adds act, observe, and extract. An agent can ask what is clickable, carry out an instruction, or return data checked against a schema. TypeScript, Python, and Go clients talk to an extension inside Chrome over the Chrome DevTools Protocol. That split keeps the page runtime close to the browser while the SDK stays in the application process.

This is a sizeable implementation of that idea. Our commit contained 1,222 files, roughly 181,037 lines of source, and 49.4 MB before dependencies. The monorepo holds the protocol, extension, three public SDKs, documentation, evaluation tools, and agent integrations. Protocol models generate into Python and Go, so a wire change crosses language boundaries. A contributor cannot treat the TypeScript package as the whole project.

A local Chrome path exists, but model inference still needs a home

The v4 quickstart uses Browserbase and requires one Browserbase API key. Its model gateway selects and authenticates a model for act, observe, and extract, which avoids a second provider account. Stagehand can also launch Chrome locally, and the Python README demonstrates that route. Local browsing removes the hosted-browser key, while model-backed commands still require a configured provider or another approved model endpoint. Plain locator calls can run without asking a model to choose an action.

Building the repository asks for Node 22.18 or later, Go 1.26, pnpm, Python tooling, uv, and just. Our pnpm-focused sandbox installed 1,444 packages and occupied 1,595 MB. Local Linux execution also needs Chrome or Chromium plus system libraries including NSS, GTK, XSS, and ALSA packages listed in the browser guide. The source checkout is manageable on a workstation, but it is a poor fit for a tiny build image.

What happened when we ran it

Our sandbox installed Stagehand at commit 13c845e in 58 seconds, then completed the build in 41 seconds. Installation added 1,444 packages and left 1,595 MB on disk. The checkout used a Node 22 image with 3 CPUs and 8 GB of RAM. It had 6 CI workflow files, no Dockerfile, no root tests directory, and workspace packages spread through the monorepo.

The top-level test step exited 1 after 23 seconds. The lab summary counted 2 Vitest tests passed and 0 failed. In the same log tail, the browser task marked 2 test files failed, skipped 1 file, and skipped all 34 browser tests. The output does not identify an individual failed browser assertion, so we cannot say why those files failed. The decision-grade result is simpler: the repository test command did not pass in our fresh container.

It cannot replace Playwright for PDF and network-heavy jobs

Open issue #2744 documents a Stagehand 4.0.0 migration covering 15 automation scripts. The reporter says 13 remained blocked by missing APIs, including page.pdf(), request and response events, browser emulation, device presets, request interception, and several Playwright locator helpers. That report does not mean Stagehand fails at every Playwright job. It does show that similar method names do not amount to complete API compatibility.

The better use is selective. Keep direct locators for known elements and use observe or self-healing actions where page structure changes often. Then check the final URL, submitted value, downloaded file, or extracted schema in ordinary code. In the 15-script report, selector repair helped two brittle pipelines, yet 13 scripts still needed APIs outside Stagehand's current surface. That is a useful boundary for buyers, not a minor missing-method list.

Browser ownership and trace defaults need an explicit policy

The v4 quickstart closes Stagehand and the browser in nested cleanup blocks. The root TypeScript example does not. Open issue #2726 says copying that shorter example can leave a billable Browserbase session active until its timeout and may retain an uploaded extension. Python documentation also warns that keep_alive=True changes close() into a disconnect. Production code should record who created each browser, who releases it, and whether a surviving session was intentional.

Telemetry deserves the same review. Open issue #2732 reports that an omitted v4 telemetry setting defaults an OTLP trace exporter to https://example.com/v1/traces; the issue was still open with 0 comments when fetched. We did not reproduce that request in the lab, so treat it as a specific unresolved report rather than a measured behavior. A team with outbound-network controls should inspect the current protocol defaults and set tracing explicitly before rollout.

September activity is high, while v3 and v4 records overlap

GitHub showed 24,134 stars, 98 open issues, and 245 open pull requests. The last push was September 2, 2026, and issue activity covered v4 initialization, browser API gaps, Windows tests, telemetry, and integrations. The repository is being worked on daily. A queue with 343 issues and pull requests also takes sorting; the combined count is not a bug total.

GitHub's latest SDK release endpoint returned 3.7.3 from August 28, while the main workspace identifies itself as 4.0.0 and the current docs lead with v4. Pin the package and read its matching documentation instead of treating main as the installed release. Stagehand earns a trial when self-healing can save repeated selector repair. Our 1,595 MB install, failed test command, and the 13-of-15 migration gap make it a companion to direct automation today, not its wholesale replacement.

Alternatives

ProjectWhat it isPick it when
Playwright gh↗A browser testing and automation framework for Chromium, Firefox, and WebKit.pick this instead when deterministic APIs, cross-browser coverage, PDF output, and request interception matter more than natural-language actions.
browser-use gh↗A Python framework that connects AI agents to browser tasks.pick this instead when a Python-first autonomous agent loop is closer to the job than a Playwright-style SDK.
Steel BrowserA self-hostable browser API and sandbox for agent applications.pick this instead when browser infrastructure and session hosting are the main problem, rather than self-healing action primitives.

What people are saying

  1. [velocity-scout] browserbase/stagehand

Sources

  1. Stagehand GitHub repository
  2. Stagehand README at measured commit 13c845e
  3. Stagehand contributing guide
  4. Stagehand v4 quickstart
  5. Stagehand v4 browser configuration
  6. Stagehand 3.7.3 release
  7. Issue 2744: API gaps blocking a Playwright exit
  8. Issue 2732: Default telemetry endpoint report

More automation reviews

Win11Debloat · node-red · XianyuAutoAgent · Sequoia-X · rclone · lego · the whole board →