Agent 开发框架

Stagehand|浏览器自动化与网页数据提取SDK

Stagehand

Stagehand 是面向浏览器代理的 SDK,可用自然语言执行点击、观察与结构化数据提取,支持 TypeScript、Python 和 Go。

获取与使用

需要部署

按官方资料自行安装或部署

使用难度待核验
国内可用性待核验

2026-11-09 更新 · 本站尚未实测

项目介绍

Agent 开发框架 · 2026-11-09 更新 · 本站尚未实测

Stagehand 自称是“SDK for browser agents”,目标是让程序像人一样使用浏览器:登录一次、保留会话,然后从页面中提取结构化数据。它提供 Playwright 风格的基础浏览器 API,同时把自然语言驱动的 act、observe、extract 组合进来,兼顾确定性脚本与模型理解能力。仓库同时提供 TypeScript、Python、Go 三种语言的 SDK,以及面向编码代理的 browse 命令行与技能包。

根据 README,Stagehand 可连接本地浏览器,也可连接 Browserbase 的云端浏览器服务;另有一个托管的 MCP 服务,用于在 MCP 客户端中直接使用 navigate、act、observe、extract。

核心能力

点击能力名称查看输入、输出和原文依据。

  • 自然语言动作:act 执行页面操作,README 称页面改版时会“self-heal”,重新适配动作执行方式。
  • 元素定位:observe 返回真实选择器,示例强调凭据不必传给模型,可先取选择器再用原生 API 填写。
  • 结构化提取:extract 按给定 schema 返回校验后的数据,示例使用 Zod 与 Pydantic 描述字段。
  • 熟悉 API:提供 goto、click、locator、screenshot 等 Playwright 风格方法。
  • 上下文与效率:README 称采用可访问性树混合裁剪来控制 token 消耗,并以浏览器旁的扩展方式降低每次动作的往返延迟。
  • 面向代理的扩展:WebMCP、剪贴板、批量命令、嵌套 iframe 与 closed Shadow DOM 的深层定位、OTel 追踪。
  • 无浏览器能力:Fetch 可将任意 URL 内容转为 Markdown,Search 提供网页搜索结果。

实际应用场景

适用场景

适合需要让代理完成多步网页操作并回收结构化结果的团队,例如表单登录后的信息读取、表格类数据抽取、需要会话保持的重复流程,以及在 TypeScript、Python、Go 项目中统一浏览器驱动。也适合已有 Playwright 脚本、希望增加自然语言容错层的情况,README 提供了自 Playwright 迁移的文档入口。

若只需本地浏览且不想配置模型密钥,README 建议改用 browse CLI;若希望完全不安装、由托管服务提供浏览器工具,则走托管 MCP。

安装与接入

TypeScript 安装命令:

pnpm add @browserbasehq/stagehand 'zod@~4.4.3'

Python:

pip install stagehand

Go:

go get github.com/browserbase/stagehand/packages/sdk-go/v4@v4.0.0

本地运行需要安装 Chrome。编码代理场景可安装 browse CLI 与技能:

npm install -g browse
npx skills add browserbase/stagehand --skill browse

README 说明该本地用法不需要 LLM 密钥或 Browserbase 账户。托管 MCP 的接入方式为 HTTP,地址是 https://mcp.browserbase.com/mcp,需配置 Authorization 头并携带 Browserbase API Key。使用 SDK 时,示例通过 model 配置模型名与 API Key,例如 openai/gpt-5.4-mini 与 OPENAI_API_KEY 环境变量;这是 README 示例,不代表唯一支持的模型。其余模型提供商与参数请查阅官方文档,资料未逐项列出,待核验。

使用条件与限制

是否需要部署
需自行准备运行环境,具体要求见正文
是否需要注册
账号和认证要求见正文;未明确说明的项目仍待核验
是否需要 API Key
待核验
费用与额度
费用边界见正文,项目许可不代表模型或托管服务免费
所需权限
待核验
许可证与服务条款
待核验

权限费用与限制

  • 本地模式需要本机 Chrome;使用模型驱动的 act、observe、extract 时,需要配置模型与 API Key,模型调用费用由对应提供商决定,资料未给出价格。
  • Browserbase 云端方式需要 BROWSERBASE_API_KEY。README 称可启用 Model Gateway 免去自行配置提供商,并使用服务端缓存减少重复调用的 token 消耗;这些属于托管服务能力,费用与配额需向官方核验。
  • 云端说明提到 Verified mode、住宅代理、持久上下文与会话回放随服务提供,具体权限与计费边界待核验。
  • 托管 MCP 需要 Browserbase API Key,不需要本地浏览器;其数据留存、地域与合规信息资料未说明,待核验。
  • 仓库代码采用 MIT 许可证,但这不代表 Browserbase 托管服务、模型或第三方云资源免费。

国内使用情况

网友核验 用户经验分享

与站长实测独立,不代表官方认证或本站已实测。

我要核验
0 位参与者0 份有效分项记录

最近核验:暂无有效核验。参与人数按当前项目有效身份去重;不同核验项分别统计,不合并成用户总结果。仅统计审核通过且未过期的记录。

分项统计、有效期与样本量
核验项目有效人数成功 / 部分 / 失败 / 无法判断成功率最近核验 / 有效期
官方网站访问00 / 0 / 0 / 0样本不足暂无 / 7 天
GitHub 仓库访问00 / 0 / 0 / 0样本不足暂无 / 7 天
安装与运行00 / 0 / 0 / 0样本不足暂无 / 30 天
官方服务国内连接 / MCP 连接00 / 0 / 0 / 0样本不足暂无 / 30 天
国内网络情况00 / 0 / 0 / 0样本不足暂无 / 7 天
国内模型兼容性00 / 0 / 0 / 0样本不足暂无 / 30 天
自定义 API00 / 0 / 0 / 0样本不足暂无 / 30 天
海外服务依赖
00 / 0 / 0 / 0样本不足暂无 / 30 天
海外账号要求
00 / 0 / 0 / 0样本不足暂无 / 30 天
中文界面
00 / 0 / 0 / 0样本不足暂无 / 30 天
客户端兼容性00 / 0 / 0 / 0样本不足暂无 / 30 天
账号及费用信息
00 / 0 / 0 / 0样本不足暂无 / 30 天

成功率 = 成功 ÷(成功 + 部分成功 + 失败);无法判断不计入分母。至少 5 份可判断结果才显示成功率。账号、费用、海外依赖与语言等事实项,成功表示核查结论与资料吻合,具体观察另行统计;不表示免费或没有海外依赖。不同网络、客户端和版本的结果不能直接等同。

最近有效核验

暂无审核通过且未过期的网友核验。欢迎提交真实使用记录。

查看全部有效核验 →

国内实测状态:国内可用性待核验。协议兼容和官方资料说明不等于国内网络可用。

官方网站访问
尚未实测 待核验
GitHub 仓库访问
尚未实测 待核验
官方服务国内连接
尚未实测 待核验
国内网络情况
尚未实测 待核验
国内模型兼容性
尚未实测 待核验
自定义 API
尚未实测 待核验
海外服务依赖
尚未实测 待核验
海外账号要求
尚未实测 待核验
中文界面
尚未实测 待核验
国内最后核验时间
尚未实测

许可与国内使用

仓库 LICENSE 文件为 MIT License,README 亦声明“Licensed under the MIT License”,并注明 Stagehand 是 Browserbase, Inc. 的商标。代码可用于商业与非商业用途,但需保留版权与许可声明。

托管 MCP、Browserbase 云浏览器、Model Gateway、代理与缓存等属于服务侧能力,其服务条款、计费、数据处理地域和可用区域均未在给定资料中说明,国内网络可达性与账号注册支持情况待核验。模型侧依赖各提供商自身的服务条款与地区限制,资料未列出国内模型支持情况。

项目资料与来源

官方网站 ↗

GitHub 仓库 ↗

官方文档 ↗

字段依据与待核验事项

access:来源确认 · pip install stagehand

project_type:来源确认 · Stagehand is the SDK for browser agents

原始 README(折叠技术参考)
<div id="toc" align="center" style="margin-bottom: 0;">
  <ul style="list-style: none; margin: 0; padding: 0;">
    <a href="https://stagehand.dev">
      <picture>
        <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/browserbase/stagehand/main/media/dark_logo.png" />
        <img alt="Stagehand" src="https://raw.githubusercontent.com/browserbase/stagehand/main/media/light_logo.png" width="200" style="margin-right: 30px;" />
      </picture>
    </a>
  </ul>
</div>
<p align="center">
  <strong>Stagehand is the SDK for browser agents</strong><br>
</p>

<p align="center">
  <a href="https://trendshift.io/repositories/12122" target="_blank"><img src="https://trendshift.io/api/badge/repositories/12122" alt="browserbase%2Fstagehand | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
</p>

<p align="center">
  <a href="https://docs.stagehand.dev"><strong>Docs</strong></a> ·
  <a href="https://docs.stagehand.dev/v4/first-steps/quickstart"><strong>Quickstart</strong></a> ·
  <a href="https://github.com/browserbase/stagehand"><strong>⭐ Star this repo</strong></a>
</p>

<p align="center">
  <a href="https://github.com/browserbase/stagehand/tree/main?tab=MIT-1-ov-file#MIT-1-ov-file">
    <picture>
      <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/browserbase/stagehand/main/media/dark_license.svg" />
      <img alt="MIT License" src="https://raw.githubusercontent.com/browserbase/stagehand/main/media/light_license.svg" />
    </picture>
  </a>
  <a href="https://discord.gg/stagehand">
    <picture>
      <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/browserbase/stagehand/main/media/dark_discord.svg" />
      <img alt="Discord Community" src="https://raw.githubusercontent.com/browserbase/stagehand/main/media/light_discord.svg" />
    </picture>
  </a>
  <a href="https://deepwiki.com/browserbase/stagehand">
    <img alt="Ask DeepWiki" src="https://raw.githubusercontent.com/browserbase/stagehand/main/media/deepwiki.svg" width="156" height="32" />
  </a>
</p>

<p align="center">
  <a href="https://stagehand.dev">
    <img src="https://raw.githubusercontent.com/browserbase/stagehand/main/media/stagehand-website-banner.png" alt="Stagehand homepage showing browser automation in TypeScript, Python, and Go and a speed comparison with Playwright" width="100%" />
  </a>
</p>

## AI that uses the browser like humans.

Sign in once, keep the session, and pull structured data out the other side.

```typescript
import { localBrowser, Stagehand } from "@browserbasehq/stagehand";
import { z } from "zod/v4";

// Cookies persist in ./browser-data, so the next run starts already signed in
const browser = await localBrowser.launch({ userDataDir: "./browser-data" });
const stagehand = await Stagehand.create({
  browser,
  model: { modelName: "openai/gpt-5.4-mini", apiKey: process.env.OPENAI_API_KEY },
});

const [page] = await browser.context.pages();
await page.goto("https://app.example.com/login");

// observe() returns real selectors, so credentials never reach the model
const { data: email } = await stagehand.observe("find the email input");
const { data: password } = await stagehand.observe("find the password input");
await page.locator(email[0].selector).fill(process.env.APP_EMAIL!);
await page.locator(password[0].selector).fill(process.env.APP_PASSWORD!);

// act() self-heals when the site redesigns its form
await stagehand.act("click the sign in button");
await stagehand.act("open the billing page");

// extract() returns schema-validated data
const { data } = await stagehand.extract(
  "extract every invoice in the table",
  z.object({
    invoices: z.array(z.object({ number: z.string(), amount: z.number(), paid: z.boolean() })),
  }),
);

console.log(data.invoices);

await stagehand.close();
await browser.close();
```

<details>
<summary><b>Python</b></summary>

```python
import asyncio
import os

from pydantic import BaseModel
from stagehand import Stagehand, local_browser


class Invoice(BaseModel):
    number: str
    amount: float
    paid: bool


class Invoices(BaseModel):
    invoices: list[Invoice]


async def main() -> None:
    # Cookies persist in ./browser-data, so the next run starts already signed in
    browser = await local_browser.launch(user_data_dir="./browser-data")
    try:
        stagehand = await Stagehand.create(
            browser=browser,
            model="openai/gpt-5.4-mini",
            model_api_key=os.environ["OPENAI_API_KEY"],
        )
        try:
            page = (await browser.context.pages())[0]
            await page.goto("https://app.example.com/login")

            # observe() returns real selectors, so credentials never reach the model
            email = await stagehand.observe("find the email input")
            password = await stagehand.observe("find the password input")
            await page.locator(email.data[0].selector).fill(os.environ["APP_EMAIL"])
            await page.locator(password.data[0].selector).fill(os.environ["APP_PASSWORD"])

            # act() self-heals when the site redesigns its form
            await stagehand.act("click the sign in button")
            await stagehand.act("open the billing page")

            # extract() returns schema-validated data
            result = await stagehand.extract(
                "extract every invoice in the table",
                Invoices,
            )
            print(result.data.invoices)
        finally:
            await stagehand.close()
    finally:
        await browser.close()


asyncio.run(main())
```

</details>

<details>
<summary><b>Go</b></summary>

```go
package main

import (
	"context"
	"errors"
	"fmt"
	"log"
	"os"

	stagehand "github.com/browserbase/stagehand/packages/sdk-go/v4"
)

type invoice struct {
	Number string  `json:"number"`
	Amount float64 `json:"amount"`
	Paid   bool    `json:"paid"`
}

type invoices struct {
	Invoices []invoice `json:"invoices"`
}

func main() {
	if err := run(context.Background()); err != nil {
		log.Fatal(err)
	}
}

func run(ctx context.Context) (err error) {
	// Cookies persist in ./browser-data, so the next run starts already signed in
	browser, err := stagehand.LaunchLocalBrowser(ctx, &stagehand.LocalBrowserLaunchOptions{
		UserDataDir: "./browser-data",
	})
	if err != nil {
		return err
	}
	defer func() { err = errors.Join(err, browser.Close(ctx)) }()

	modelAPIKey := os.Getenv("OPENAI_API_KEY")
	client, err := stagehand.Create(ctx, stagehand.CreateOptions{
		Browser: browser,
		Model: &stagehand.ModelConfig{
			ModelName: "openai/gpt-5.4-mini",
			APIKey:    &modelAPIKey,
		},
	})
	if err != nil {
		return err
	}
	defer func() { err = errors.Join(err, client.Close(ctx)) }()

	browserContext, err := browser.Context()
	if err != nil {
		return err
	}
	pages, err := browserContext.Pages(ctx)
	if err != nil {
		return err
	}
	page := pages[0]
	if _, err := page.Goto(ctx, "https://app.example.com/login", nil); err != nil {
		return err
	}

	// Observe returns real selectors, so credentials never reach the model
	emailInstruction := "find the email input"
	email, err := client.Observe(ctx, &emailInstruction, nil)
	if err != nil {
		return err
	}
	if err := page.Locator(email.Data[0].Selector).Fill(ctx, os.Getenv("APP_EMAIL")); err != nil {
		return err
	}

	passwordInstruction := "find the password input"
	password, err := client.Observe(ctx, &passwordInstruction, nil)
	if err != nil {
		return err
	}
	if err := page.Locator(password.Data[0].Selector).Fill(ctx, os.Getenv("APP_PASSWORD")); err != nil {
		return err
	}

	// Act self-heals when the site redesigns its form
	if _, err := client.Act(ctx, stagehand.ActInstruction("click the sign in button"), nil); err != nil {
		return err
	}
	if _, err := client.Act(ctx, stagehand.ActInstruction("open the billing page"), nil); err != nil {
		return err
	}

	// Extract returns data decoded into a Go type
	extracted, err := stagehand.Extract[invoices](
		ctx,
		client,
		"extract every invoice in the table",
		nil,
	)
	if err != nil {
		return err
	}
	fmt.Println(extracted.Data.Invoices)

	return nil
}
```

</details>

## Install

```bash
pnpm add @browserbasehq/stagehand 'zod@~4.4.3'
```

<details>
<summary><b>Python</b></summary>

```bash
pip install stagehand
```

</details>

<details>
<summary><b>Go</b></summary>

```bash
go get github.com/browserbase/stagehand/packages/sdk-go/v4@v4.0.0
```

</details>

Local runs need [Chrome](https://www.google.com/chrome/) installed. Full setup: [Quickstart](https://docs.stagehand.dev/v4/first-steps/quickstart).

<details>
<summary><b>Using a coding agent? (Claude Code, Cursor, Codex)</b></summary>

Install the `browse` CLI and skill instead of using the SDK directly:

```bash
npm install -g browse
npx skills add browserbase/stagehand --skill browse
browse open https://example.com --local
browse snapshot
browse get title
```

No LLM key or Browserbase account needed for local use. See [CLI vs SDK vs hosted MCP](https://docs.stagehand.dev/v4/first-steps/choosing-your-path) for when to use each.

</details>

## Why Stagehand

<table>
  <tr>
    <td><strong>Familiar APIs</strong></td>
    <td>The Playwright-style methods you and your agents already know: <code>goto</code>, <code>click</code>, <code>locator</code>, <code>screenshot</code>.</td>
  </tr>
  <tr>
    <td><strong>Token efficiency</strong></td>
    <td>Hybrid accessibility-tree trimming gives agents exactly the page context they need and nothing more.</td>
  </tr>
  <tr>
    <td><strong>Faster in production</strong></td>
    <td>Stagehand runs as an extension next to the browser, cutting round-trip latency on every action.</td>
  </tr>
  <tr>
    <td><strong>Self-healing</strong></td>
    <td><code>act</code>, <code>observe</code>, and <code>extract</code> refresh how an action happens when the site changes underneath it.</td>
  </tr>
  <tr>
    <td><strong>Built for agents</strong></td>
    <td>WebMCP, clipboard support, batch commands, deep locators for nested iframes and closed Shadow DOMs, OTel traces.</td>
  </tr>
  <tr>
    <td><strong>Three languages</strong></td>
    <td>One complete browser driver across TypeScript, Python, and Go.</td>
  </tr>
</table>

## Run it on Browserbase

Point the same script at [Browserbase](https://www.browserbase.com) and get 2x faster execution than Playwright cloud equivalent browsers. Configure the [Model Gateway](https://docs.stagehand.dev/v4/configuration/models#model-gateway) so you never wire up a provider, and enable [server-side caching](https://docs.stagehand.dev/v4/best-practices/caching) to cache repeated actions.

```typescript
import { browserbase, Stagehand } from "@browserbasehq/stagehand";

const browser = await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_KEY! });

// No model configuration: the Model Gateway picks the cheapest model for each action
// cache: true: identical calls come back from Browserbase, no tokens spent
const stagehand = await Stagehand.create({ browser, cache: true });
```

<details>
<summary><b>Python</b></summary>

```python
import os

from stagehand import Stagehand, browserbase

browser = await browserbase.launch(api_key=os.environ["BROWSERBASE_API_KEY"])

# No model configuration: the Model Gateway picks the cheapest model for each action
# cache=True: identical calls come back from Browserbase, no tokens spent
stagehand = await Stagehand.create(browser=browser, cache=True)
```

</details>

<details>
<summary><b>Go</b></summary>

```go
browser, err := stagehand.LaunchBrowserbase(ctx, stagehand.BrowserbaseLaunchOptions{
	APIKey: os.Getenv("BROWSERBASE_API_KEY"),
})
if err != nil {
	return err
}

// No model configuration: the Model Gateway picks the cheapest model for each action
// CacheEnabled(true): identical calls come back from Browserbase, no tokens spent
cache := stagehand.CacheEnabled(true)
client, err := stagehand.Create(ctx, stagehand.CreateOptions{
	Browser: browser,
	Cache:   &cache,
})
if err != nil {
	return err
}
```

</details>

[Verified mode](https://docs.browserbase.com/platform/identity/verified-customization), [residential proxies](https://docs.browserbase.com/platform/identity/proxies), [persistent contexts](https://docs.browserbase.com/platform/browser/core-features/contexts), and [session recordings](https://docs.browserbase.com/platform/browser/observability/session-replay) come with it. [Get an API key](https://www.browserbase.com/overview) and learn how to configure your browser [here](https://docs.stagehand.dev/v4/configuration/browser).

## Hosted MCP: browser tools without installing anything

The hosted Browserbase [MCP server](https://docs.stagehand.dev/integrations/mcp/setup) puts `navigate`, `act`, `observe`, and `extract` in any MCP client — no install, no local browser. Requires a [Browserbase API key](https://www.browserbase.com/overview).

```bash
claude mcp add --transport http browserbase https://mcp.browserbase.com/mcp \
  --header "Authorization: Bearer $BROWSERBASE_API_KEY"
```

<details>
<summary><b>Cursor, Codex, and other MCP clients</b></summary>

```json
{
  "mcpServers": {
    "browserbase": {
      "url": "https://mcp.browserbase.com/mcp",
      "headers": { "Authorization": "Bearer <API_KEY>" }
    }
  }
}
```

</details>

For local browsing without an API key, use the [`browse` CLI](./packages/cli#readme) instead.

## Search and fetch without a browser

[Fetch](https://docs.stagehand.dev/v4/add-ons/fetch) lets you grab the content of any URL as markdown. [Search](https://docs.stagehand.dev/v4/add-ons/search) provides fast, token-efficient web search results.
Both as a lightweight complement to browser sessions.

```typescript
import { browserbase } from "@browserbasehq/stagehand";

const { results } = await browserbase.search({
  apiKey: process.env.BROWSERBASE_API_KEY!,
  query: "browser agent frameworks",
  numResults: 5,
});

const fetched = await browserbase.fetch({
  apiKey: process.env.BROWSERBASE_API_KEY!,
  url: results[0].url,
  format: "markdown",
});

console.log(fetched.content);
```

## Docs and resources

<table>
  <tr>
    <td><a href="https://docs.stagehand.dev/v4/first-steps/quickstart">Quickstart</a></td>
    <td>Empty directory to working automation in three steps</td>
  </tr>
  <tr>
    <td><a href="https://docs.stagehand.dev/v4/reference/page">page</a> · <a href="https://docs.stagehand.dev/v4/reference/locator">locator</a></td>
    <td>Playwright-style browser and element APIs</td>
  </tr>
  <tr>
    <td><a href="https://docs.stagehand.dev/v4/basics/webmcp">WebMCP</a></td>
    <td>Discover and invoke WebMCP tools exposed by web pages</td>
  </tr>
  <tr>
    <td><a href="https://docs.stagehand.dev/v4/basics/act">act</a> · <a href="https://docs.stagehand.dev/v4/basics/extract">extract</a> · <a href="https://docs.stagehand.dev/v4/basics/observe">observe</a></td>
    <td>Browser actions and data extraction with natural language</td>
  </tr>
  <tr>
    <td><a href="https://docs.stagehand.dev/v4/add-ons/search">Search</a> · <a href="https://docs.stagehand.dev/v4/add-ons/fetch">Fetch</a></td>
    <td>Web search and page content without a browser</td>
  </tr>
  <tr>
    <td><a href="https://docs.stagehand.dev/v4/migrations/playwright">Migrate from Playwright</a></td>
    <td>Port an existing suite</td>
  </tr>
  <tr>
    <td><a href="https://docs.stagehand.dev/v4/integrations/overview">Integrations</a></td>
    <td>Mastra, Deep Agents, Vercel AI SDK, Claude Code, Codex</td>
  </tr>
  <tr>
    <td><a href="./packages/sdk-python/README.md">Python SDK</a> · <a href="https://github.com/browserbase/stagehand/blob/v4-go/packages/sdk-go/README.md">Go SDK</a></td>
    <td>Language-specific guides</td>
  </tr>
  <tr>
    <td><a href="https://deepwiki.com/browserbase/stagehand">Ask DeepWiki</a></td>
    <td>Ask questions about this codebase</td>
  </tr>
</table>

## Join the community

Stagehand is built in the open, and the fastest way to shape it is to show up.

- **[⭐ Star this repo](https://github.com/browserbase/stagehand)** — it is how most people find Stagehand
- **[💬 Join the Discord](https://discord.gg/stagehand)** — questions, support, and what we are building next
- **[🐛 Open an issue](https://github.com/browserbase/stagehand/issues)** — bug reports are the most useful contribution
- **[𝕏 Follow @stagehanddev](https://x.com/stagehanddev)** — releases and demos

### Contributing

We're focused on improving reliability, extensibility, speed, and cost, in that order. **Bug fixes and small improvements are the best way to get started.** For anything larger, reach out to [Miguel Gonzalez](https://x.com/miguel_gonzf) or [Paul Klein](https://x.com/pk_iv) on [Discord](https://discord.gg/stagehand) first so we can make sure it lands.

Stagehand is a TypeScript, Python, and Go monorepo driven by [`just`](https://github.com/casey/just):

```bash
git clone https://github.com/browserbase/stagehand.git
cd stagehand
just install
just generate
just build

export OPENAI_API_KEY="your-openai-api-key"
just example act # runs packages/sdk-ts/examples/act.ts
```

See [CONTRIBUTING.md](./CONTRIBUTING.md) for the full TypeScript, Python, and Go setup.

## Acknowledgements

We'd like to thank the following people for their major contributions to Stagehand:

- [Paul Klein](https://github.com/pkiv)
- [Sean McGuire](https://github.com/seanmcguire12)
- [Miguel Gonzalez](https://github.com/miguelg719)
- [Sameel Arif](https://github.com/sameelarif)
- [Thomas Katwan](https://github.com/tkattkat)
- [Filip Michalsky](https://github.com/filip-michalsky)
- [Anirudh Kamath](https://github.com/kamath)
- [Jeremy Press](https://x.com/jeremypress)
- [Navid Pour](https://github.com/navidpour)
- [Nick Sweeting](https://github.com/pirate)
- [Sam Finton](https://github.com/monadoid)
- [Shrey Pandya](https://github.com/shrey150)
- [Shriya Lolabattu](https://github.com/shriyatheunicorn)
- [Alyssa Maruyama](https://github.com/akeimach)
- [Amel Bajramovic](https://github.com/bosniankicks)

## License

Licensed under the MIT License.

Copyright 2026 Browserbase, Inc.

"Stagehand" is a trademark of Browserbase, Inc.
历史前置条件说明(补充参考)

本地模式需安装 Chrome;TypeScript 使用 pnpm 与 zod,Python 使用 pip,Go 使用 go get;模型驱动能力需配置模型名与对应 API Key(README 示例为 OPENAI_API_KEY,其他提供商待核验);Browserbase 云端与托管 MCP 需 BROWSERBASE_API_KEY;模型调用与托管服务费用待向官方核验;服务可用区域与国内网络兼容性待核验。

项目来源与清单版权许可

https://github.com/browserbase/stagehand

整理来源:https://github.com/slavakurilyak/awesome-ai-agents

清单版权与许可:

MIT License

Copyright (c) 2024 Slava Kurilyak

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.