Stagehand Updates & Release Notes
85 updates curated from 1 source by the Releasebot Team. Last updated: Sep 4, 2026
- Sep 3, 2026
- Date parsed from source:Sep 3, 2026
- First seen by Releasebot:Sep 4, 2026
[email protected]: Generalize `Page.on` beyond `"console"` events (#2875)
Stagehand generalizes Page.on listeners beyond console events and prepares CDP subscriptions for future page events.
why
Generalize the system and types to handle more than "console" events for Page.on listeners.
what changed
PageCDPEvent schema now has method: z.enum parameter. We propagate through the page event (today, still just "console") down to the CDP subscription manager.
test plan
This refactor introduces no functional changes. We update existing tests to in preparation for more events. All tests should continue passing.
Original source - Sep 3, 2026
- Date parsed from source:Sep 3, 2026
- First seen by Releasebot:Sep 3, 2026
[email protected]: [feat]: add support for WebMCP tool invokation in iframes (#2878)
Stagehand now supports WebMCP tools in iframes, including out-of-process frames, with discovery, invocation, response handling, and cancellation routed through the owning CDP session. Stale or detached iframe tools are rejected, and cross-session cleanup and lifecycle coverage were added.
why
before this PR, WebMCP tools registered inside of iframes were unable to be discovered or invoked
what changed
changed WebMCP discovery to enable and collect tools from the page's main CDP session and every adopted OOPIF session
routed invocation, response handling, & cancellation through the CDP session that owns the tool's frame
stale tools are now rejected instead of falling back to the main frame, & only affected invocations are cleaned up when an OOPIF detaches
added extension coverage for cross-session discovery, invocation, cancellation, response correlation, frame detachment, disposal, & lifecycle races
test plan
Extension discovery tests cover combined main/OOPIF snapshots, child-session removals, stable session snapshots, next-call discovery after adoption, & listener cleanup after child enable failure.
Extension invocation tests cover child-session invocation, response, cancellation, wrong-session events, targeted detach cleanup, detach during command setup, page disposal, duplicate invocation IDs, unknown frames, & failed-command listener cleanup.
Browser integration coverage verifies distinct main/child CDP targets and sessions, successful iframe tool discovery and invocation, structured output, & stale-tool rejection after iframe removal.
Summary by cubic
WebMCP tools registered in out-of-process iframes (OOPIFs) are now discoverable and invokable; previously iframe tools were invisible and unusable. Invocation, response handling, and cancellation use the CDP session that owns the frame, while stale or detached frames fail instead of falling back to the main frame.
Discovery enables WebMCP on the main session and adopted OOPIF sessions, then combines their snapshots.
Detaching an OOPIF rejects only its pending invocations and removes its listeners.
Added extension and SDK integration coverage for cross-session lifecycle, cleanup, and iframe removal.
Written for commit 2a0744a.
Summary will update on new commits.
Original source All of your release notes in one feed
Join Releasebot and get updates from Browserbase and hundreds of other software products.
- Sep 2, 2026
- Date parsed from source:Sep 2, 2026
- First seen by Releasebot:Sep 3, 2026
[email protected]: feat(sdk): expose Browserbase search and fetch (#2828)
Stagehand adds Browserbase Search and Fetch to the TypeScript and Python facades, and brings matching SearchBrowserbase and FetchBrowserbase APIs to Go. It also normalizes response models, adds usage docs and tests, and keeps the SDKs aligned without launching a browser.
Summary
expose Browserbase Search and Fetch through the TypeScript and Python
browserbase facadesadd equivalent SearchBrowserbase and FetchBrowserbase APIs to Go using
the existing Browserbase HTTP transportnormalize response models across SDKs and document usage
Testing
pnpm --filter @browserbasehq/stagehand build
pnpm --filter @browserbasehq/stagehand test:unit (199 passed)
Python Ruff, ty, and pytest (460 passed, 1 skipped)
Go package tests (passed)
Summary by cubic
Implements AP-2921 by exposing Browserbase Search and Fetch through the
TypeScript and Python browserbase facades and Go's
SearchBrowserbase/FetchBrowserbase functions, without launching a
browser.Uses the official Browserbase SDK in TypeScript and Python and the
existing HTTP transport in Go.Validates query limits, fetch formats, schema requirements, URLs, and
required Go search-result fields.Normalizes result models, adds typed fetch content handling in Go, and
keeps the three SDKs' APIs in sync.Adds README examples and tests, and improves Go extension drift checks
with SHA-256 hashes and cache invalidation.Written for commit 30fae44.
Summary will update on new commits.
Original source - Sep 2, 2026
- Date parsed from source:Sep 2, 2026
- First seen by Releasebot:Sep 2, 2026
[email protected]: [fix]: close parity gaps across SDKs for local browser launching (#2864)
Stagehand closes local browser-launching parity gaps across Python, Go, and TypeScript with tighter Chrome discovery, safer port checks, and shared startup contracts. Python now waits for a usable CDP endpoint, cleans up failed launches, and aligns shutdown and profile handling across SDKs.
why
this PR addresses parity gaps in local launch behaviour:
the TypeScript and Go SDKs already waited for a newly launched Chrome
process to expose a usable CDP endpoint, detected early process exit, &
cleaned up owned resources when launch failed.the Python SDK returned immediately after spawning Chrome & had
narrower executable discovery, profile setup, cancellation, &
process-tree shutdown behaviorGo & Python also accepted an explicit debugging port without first
proving it was available. that could let launch continue toward a
browser endpoint the SDK did not ownwhat changed
added a default Chrome flag fixture & made all three SDK test suites
compare their local flag lists against itadded cross SDK contract coverage for launch argument ordering,
about:blank, viewport behavior, & profile ownershiprefactored the Python local launcher into focused validation,
executable discovery, profile, readiness, & shutdown helpersaligned Python Chrome discovery with TypeScript & Go:
explicit executable then CHROME_PATH then platform candidates
Chrome Canary, Stable, Beta, & Chromium on macOS
Canary & Stable across the standard Windows roots
the shared Chrome & Chromium executable order on Linux
validate Python launch options & explicit executables before creating
a profile or spawning Chromecreate caller-provided Python profile directories recursively while
preserving caller ownershipwait for a successful /json/version response with a non-empty
webSocketDebuggerUrl before a Python launch resolvesrace Python readiness against browser exit & initialization
cancellation, then terminate the owned process & remove its temporary
profile when launch does not completeadded explicit loopback port availability checks to the Python & Go
launchers before profile creation or process spawnreturn a focused occupied-port error instead of adopting or continuing
toward an existing browser, while preserving other socket failuresaligned Python shutdown with the TypeScript & Go launchers:
automatically disable the Chromium sandbox for Linux root
terminate Unix process groups with graceful then forced signals
terminate Windows process trees with taskkill /T then /F
share one close task across concurrent callers
continue profile cleanup after shutdown failures & preserve combined
errorstest plan
Verify all three SDKs use the same static default Chrome flags,
argument ordering, starting URL, viewport behavior, & profile ownership
contract.Verify Python option validation, explicit executable precedence,
CHROME_PATH, complete platform discovery order, unsupported platforms,
& caller profile creation.Verify Python waits for a valid CDP version response, rejects
malformed readiness responses, detects early browser exit, & cleans up
after spawn failure or cancellation.Verify Python & Go automatic port selection, occupied
explicit-port rejection before resource creation, & preservation of
non-occupancy socket errors.Verify Python Linux-root sandbox behavior, Unix graceful & forced
process-group termination, Windows tree termination, already-exited
processes, concurrent close, & combined cleanup errorsSummary by cubic
Closes local browser-launching parity gaps across the Python, Go, and
TypeScript SDKs. Python previously returned after spawning Chrome and
could leave failed launches behind; it now waits for a usable CDP
endpoint, while Python and Go reject occupied debugging ports and all
SDKs treat empty profile paths as omitted.Bug Fixes
Python validates launch options, executable paths, and explicit ports
before creating profiles or spawning Chrome; explicit ports must be
between 1 and 65535.Python Chrome discovery now follows the same precedence and platform
candidate order as Go and TypeScript.Caller-owned Python profiles are created recursively and preserved,
while SDK-owned temporary profiles are removed after failures,
cancellation, or close.Python disables the Chromium sandbox for Linux root and shuts down
process groups or Windows process trees with graceful-then-forced
termination.Concurrent Python closes share one cleanup task, and shutdown
continues profile cleanup while reporting combined errors.Go checks loopback port availability before profile creation and
preserves non-occupancy socket errors.Tests
Shared fixtures and cross-SDK contract tests cover default flags,
argument ordering, startup URL, viewport behavior, port handling, and
profile ownership.Written for commit a7bccfa.
Summary will update on new commits.
Original source - Sep 2, 2026
- Date parsed from source:Sep 2, 2026
- First seen by Releasebot:Sep 2, 2026
Stagehand adds a Cursor agent bench harness for evals and integrations with the Cursor SDK.
feat(evals): add Cursor agent bench harness (integrations/cursor-sdk)…
Original source Similar to Stagehand with recent updates:
- Claude Code updates437 release notes · Latest Sep 5, 2026
- Claude updates136 release notes · Latest Sep 2, 2026
- Claude Developer Platform updates157 release notes · Latest Sep 3, 2026
- Anthropic updates61 release notes · Latest Sep 1, 2026
- 1Password Browser updates56 release notes · Latest Aug 25, 2026
- Gemini updates408 release notes · Latest Sep 4, 2026
- Sep 1, 2026
- Date parsed from source:Sep 1, 2026
- First seen by Releasebot:Sep 2, 2026
[email protected]: [chore]: fix ts package boundaries (#2865)
Stagehand fixes stale Turbo typecheck caching by giving each package ownership of its own TypeScript config. It narrows the protocol config, adds package-specific typechecks and tests, and aligns Turbo invalidation with workspace dependencies to better match the source graph.
why
the protocol package previously owned a repository-wide TypeScript config that also checked SDK TS, extension, & root tooling files. Turbo was still running that typecheck as a protocol package task, so changes outside the protocol package could reuse a stale cached result giving each package ownership of its own TypeScript program makes the check graph match the source graph, closes gaps in the old umbrella config, & lets Turbo invalidate checks through declared workspace dependencies
what changed
- added package-owned TypeScript configs & typecheck scripts for the extension, SDK TS, & selected root tooling
- narrowed the protocol TypeScript config to protocol-owned source, tests, schema generation, & type tests
- added internal protocol source exports & declared the private protocol workspace package as an SDK TS and extension development dependency
- replaced SDK TS & extension filesystem imports into the protocol package with explicit package subpath imports
- moved RPC client tests from protocol to SDK TS, moved the fake-WebSocket CDP transport test to extension, & moved the full client/extension browser smoke test to SDK TS
- removed the now-empty protocol browser test script & Turbo task
- replaced cross-package Turbo input globs with package-owned typecheck tasks & workspace dependency edges
- scoped the root tooling task to rules/ast-grep & scripts/release
- removed cross-package unit-test cache inputs now covered by the workspace graph
test plan
- Run protocol, extension, SDK TS, & root tooling typechecks directly.
- Verify Turbo's dry typecheck graph has protocol as the upstream dependency of SDK TS & extension, with no package task owning source outside its package.
- Verify Turbo's dry unit-test graph derives protocol invalidation through workspace build dependencies & no protocol browser task remains.
- Run protocol unit tests & the moved SDK TS and extension tests.
- Build protocol, extension, & SDK TS and regenerate repository artifacts.
- Verify SDK JavaScript & declaration output contain no unresolved private protocol imports.
Summary by cubic
Fixes stale Turbo typecheck caching by giving each package ownership of its own TypeScript config. The protocol package previously ran a repository-wide typecheck, so changes outside it could reuse a stale cached result.
What changed
- Added package-owned typecheck scripts and tsconfigs for the extension, SDK TS, and root tooling, and narrowed the protocol tsconfig to protocol-owned source.
- Replaced filesystem imports into packages/protocol with @browserbasehq/stagehand-protocol subpath imports and declared the private protocol package as a dev dependency of SDK TS and the extension.
- Moved RPC client tests to SDK TS, the fake-WebSocket CDP transport test to the extension, and the browser smoke test to SDK TS; removed the protocol browser test task.
- Replaced cross-package Turbo input globs with workspace dependency edges so typecheck and unit-test invalidation follows the source graph.
Written for commit f514c26.
Summary will update on new commits.
Original source - Aug 30, 2026
- Date parsed from source:Aug 30, 2026
- First seen by Releasebot:Aug 30, 2026
[email protected]: feat(evals): add stagehand_facade tool surface (#2750)
Stagehand adds stagehand_facade, an MCP tool surface that launches the shipped facade stdio server so evals benchmark the exact browser automation surface integrations ship. It also improves harness registration, env filtering, verification, and cleanup handling.
Stacked on the codex-sdk extraction PR. Part 4 (final) of the harness consolidation stack — this closes the loop: evals now benchmarks the byte-identical facade surface the claude-code/codex/pi integrations ship.
What
New via:"mcp" tool surface stagehand_facade: the mount spawns the shipped facade stdio server (@browserbasehq/stagehand-integrations/facade/stdio-server) with an allowlisted STAGEHAND_*/BROWSERBASE_* env (browser selection forced to match the eval environment) and FACADE_AGENT_INSTRUCTIONS by identity. Registered for both external harnesses, selectable alongside stagehand_code (not replacing it). The facade server owns its browser (tool_launch_local/tool_create_browserbase); evidence semantics match the other external-MCP surfaces (verification via the tool_result stream). Also ignores evals run artifacts (.trajectories/, rubric cache) — generated output with session IDs that was dirtying trees.
Verification
Full gates ✅; surface test pins mount shape, prompt identity, env filtering, and harness registration
End-to-end: evals run b:webvoyager --harness claude_code --tool stagehand_facade -l 1 -e browserbase → 3/3 trials complete, agents drove mcp__stagehand__{run,snapshot,screenshot}, 2/3 graded pass, 0/12 criteria unverifiable (better verifiability than the handles surface)
Summary by cubic
Adds stagehand_facade, an MCP tool surface that launches the shipped facade stdio server so evals benchmark the exact surface integrations ship. The facade owns its browser, verification uses the tool_result stream, and it's selectable alongside stagehand_code for the agent harnesses rather than replacing it.
stagehand_facade is mount-only: left out of the core tool list and TUI help since its runner-side session throws on every page operation, but resolvable for the claude_code and codex harness mounts.
The mount spawns the stdio server with FACADE_AGENT_INSTRUCTIONS and an allowlisted env, forces STAGEHAND_BROWSER by environment, and applies longer MCP timeouts in the Codex config.
Mount cleanup is best-effort; the stdio child and browser belong to the agent harness process tree, with Browserbase session TTL bounding the remote leak case.
TUI help now lists stagehand_code, which was previously missing from the valid core tools list.
Written for commit db42303.
Summary will update on new commits.
Review updates (2026-08-29)
Mount-only: stagehand_facade no longer appears in listCoreTools() or the TUI help — its CoreSession throws on every page operation, so core-tier selection failed deterministically. It stays resolvable via getCoreTool for the agent harness mounts.
Cleanup limitation documented: the facade stdio child (and its browser) belongs to the agent harness process tree; evals-side cleanup is best-effort and cannot reap it (Browserbase session TTL bounds the remote case).
Co-authored-by: Miguel Gonzalez [email protected]
Original source - Aug 28, 2026
- Date parsed from source:Aug 28, 2026
- First seen by Releasebot:Aug 29, 2026
Stagehand refactors local browser launching by replacing chrome-launcher with a custom implementation.
[refactor]: replace chrome-launcher with handrolled local browser l…
Original source - Aug 28, 2026
- Date parsed from source:Aug 28, 2026
- First seen by Releasebot:Aug 28, 2026
stagehand/server-v3 v3.7.6
Stagehand ships V3 fixes for iframe xpath coordinate building and dependency updates in v3.7.6.
What's Changed
- Version Packages by @github-actions[bot] in #2778
- [V3]: rm docs pkg by @seanmcguire12 in #2830
- [V3]: fix xpath building logic for coordinates inside of iframes by @seanmcguire12 in #2836
- [V3]: bump various transitive deps by @seanmcguire12 in #2842
- [V3]: bump non core transitive deps by @seanmcguire12 in #2845
Full Changelog: stagehand-server-v3/v3.7.5...stagehand-server-v3/v3.7.6
Original source - Aug 28, 2026
- Date parsed from source:Aug 28, 2026
- First seen by Releasebot:Aug 28, 2026
@browserbasehq/[email protected]
Stagehand improves iframe coordinate handling and updates the MCP SDK plus supporting dependencies.
Patch Changes
- #2842 f86e609 Thanks @seanmcguire12! - update the MCP SDK to v1.30 and refresh supporting dependency versions
- #2836 94a0ee4 Thanks @seanmcguire12! - fix cross-frame xpaths building logic for coordinates inside of iframes.
- Aug 27, 2026
- Date parsed from source:Aug 27, 2026
- First seen by Releasebot:Aug 28, 2026
Stagehand restores regression evals on pull requests, improving CI checks for code changes.
ci: restore regression evals on pull requests (#2826)
Original source - Aug 27, 2026
- Date parsed from source:Aug 27, 2026
- First seen by Releasebot:Aug 27, 2026
[email protected]: [fix]: align `browser.close` and `context.close` semantics (#2827)
Stagehand fixes browser and context closing so both now trigger the same explicit close flow, with local browsers, connected CDP sessions, and Browserbase sessions all terminated or released consistently. It also clarifies create-failure cleanup and removes the legacy context.close RPC.
why
browser.close() & browser.context.close() should both explicitly terminate the browser
before this PR, browser.close() only terminated launched browsers when keepAlive was false. keepalive browsers were disconnected, connected local browsers did not receive Browser.close, & connected Browserbase sessions were not released
browser.context.close() disposed worker state without terminating the browser. this was semantically weird, because it was never really clear what it was supposed to be "closing". it was not a full stagehand.close(), nor was it a full browser.close(). this method is being left in place so as to not break downstream callers, but it is now just an alias for browser.close()
after this PR:
browser.close() & browser.context.close() invoke the same close operation. context.close is also removed from the protocol
explicit close terminates launched local browsers for either keepAlive value;
explicit close sends CDP Browser.close to connected local browsers;
explicit close requests release of launched & connected Browserbase sessions; &
keepAlive only affects internal invalidation after initialization failure, not explicit close
what changed
stopped calling public browser.close() when Stagehand.create() fails; failed initialization now makes the SDK browser handle unusable & applies the existing keepalive cleanup behavior
changed ambiguous Stagehand.create() failure cleanup to invalidate the browser without overriding its keepalive policy
made explicit close invoke the local process termination callback for both keepalive values
added explicit Browserbase session release for launched & connected sessions
added root CDP Browser.close handling for connected local browsers
kept the host CDP transport open until the provider-specific termination request is dispatched
continued cleanup after termination or transport errors & preserved combined failures
changed each public context wrapper to call its owning browser's memoized close operation instead of sending context.close
removed the unused context.close operation from the protocol, extension, generated SDK models, & RPC timeout tables
test plan
TypeScript, Python, & Go tests verify explicit close terminates launched local browsers for both keepalive values.
TypeScript, Python, & Go tests verify connected local close sends CDP Browser.close.
TypeScript, Python, & Go tests verify launched & connected Browserbase close requests session release.
TypeScript, Python, & Go tests verify initialization failure uses internal invalidation instead of explicit termination.
TypeScript, Python, & Go tests verify browser & context close share one memoized operation.
TypeScript, Python, & Go tests verify context close no longer sends the legacy context.close RPC.
Original source - Aug 26, 2026
- Date parsed from source:Aug 26, 2026
- First seen by Releasebot:Aug 26, 2026
Stagehand fixes stagehand.close() to dispose Stagehand without closing the browser.
[fix]: make stagehand.close() dispose Stagehand without closing the…
Original source - Aug 25, 2026
- Date parsed from source:Aug 25, 2026
- First seen by Releasebot:Aug 25, 2026
Stagehand fixes CI by syncing the Python protocol for alpha releases.
fix(ci): sync Python protocol for alpha releases (#2817)
Original source - Aug 20, 2026
- Date parsed from source:Aug 20, 2026
- First seen by Releasebot:Aug 20, 2026
stagehand/server-v3 v3.7.5
Stagehand ships v3.7.5 with coordinate, structured output, and useTouch fixes plus release automation updates.
What's Changed
Contrib/2384 by @miguelg719 in #2385
chore(release): retarget release automation from main to v3 by @miguelg719 in #2660
fix(v3): normalize CUA coordinates to actual viewport by @miguelg719 in #2767
fix(v3): preserve provider for structured output by @miguelg719 in #2775
Version Packages by @github-actions[bot] in #2662
fix(server-v3): release useTouch parameter by @miguelg719 in #2711
Full Changelog: https://github.com/browserbase/stagehand/compare/[email protected]/v3.7.5
Original source
Curated by the Releasebot team
Releasebot is an aggregator of official product update announcements from hundreds of software vendors and thousands of sources.
Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.