Browserbase Skill
Browserbase 一个 API Key 下挂着 Browsers/Stagehand/Agents/Search/Fetch 五种能力,选错一层不会报错,只会变得又贵又脆。这份 skill 最大的价值是把 Stagehand v4 从「继承 Playwright page」的旧记忆里掰过来——v4 是纯 CDP 架构,act/extract/observe 挂在 Stagehand 实例上、agent() 方法彻底消失;同时标出了三处文档自相矛盾(keepAlive 的「Hobby Plan」文案、免费版并发数 1 vs 3、Update Session 端点到底能不能改 status 以外的字段)。
安装
选你用的 Agent,复制命令。
npx -y skills add fxp/skillify --skill browserbase --agent claude-code --yes装到项目的 .claude/skills/;加 -g 装到全局。装完需要你手动执行 /reload-plugins,这一步 Agent 代劳不了。
npx -y skills add fxp/skillify --skill browserbase --agent codex --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill browserbase --agent cursor --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill browserbase --agent opencode --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill browserbase --agent gemini-cli --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill browserbase --agent github-copilot --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill browserbase --agent trae --yes装到项目的 .trae/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill browserbase --agent windsurf --yes装到项目的 .windsurf/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill browserbase --agent qwen-code --yes把 --agent 换成你用的 Agent 标识,可以一次写多个。skills CLI 1.5.25 共支持 79 个,例如 qwen-code、kimi-code-cli、trae-cn、qoder、lingma、cline、roo。
或者让 Agent 自己装
读 https://github.com/fxp/skillify/blob/main/skills/browserbase/prompt.md 并照它执行装对了的标志:references/ 下有 6 份文档。
装好后,可以这样问你的 Agent
这份 Skill 覆盖的典型任务。点一下复制。
6 类能力
每类能力对应一份 reference,Agent 按任务只打开需要的那份。
选型指南
该用原始 Sessions + 自己的自动化库、Stagehand,还是全托管 Browserbase Agents;以及 Search → Fetch → Browsers 的递进决策顺序
会话管理 REST API
建会话、用 connectUrl/seleniumRemoteUrl 连接 Playwright/Puppeteer/Selenium、Contexts 跨会话持久化登录态、视口/元数据/扩展
Stagehand v4
CDP 原生架构的自然语言浏览器框架,act/extract/observe 单步原语、三种浏览器工厂、Model Gateway、服务端缓存,及 v3→v4 迁移要点
反检测与代理身份
代理三种模式与地理定向、CAPTCHA 自动求解、Verified 反检测指纹、allowedDomains 域名限制、自定义 CA 证书与 ignoreCertificateErrors
生命周期、录像与成本
超时与 keepAlive、会话终止的四种场景、Live View/Replay/录像下载、用量查询、并发上限与创建速率上限、成本控制清单
错误处理与限流
官方没有统一错误码表,本文件按能力域收录已确认的具体报错(代理连接失败、录像下载状态码、Fetch 错误码)与 429 并发/创建速率限流的重试范式
当前事实
整理自官方文档(抓取于 2026-09-21),还没有用真实凭证验证。
| 项 | 值 |
|---|---|
| 两套域名/包 | 会话管理走 https://api.browserbase.com(@browserbasehq/sdk);Stagehand 是独立产品,走 docs.stagehand.dev(@browserbasehq/stagehand),当前 v4,文档站还挂着过期的 v2/v3 内容 |
| 鉴权 | 请求头 x-bb-api-key,没有 Bearer 前缀;SDK 不读 .env,必须显式 process.env.X / os.environ["X"] 传参 |
| 建会话 | POST /v1/sessions 返回 connectUrl(CDP,给 Playwright/Puppeteer)与 seleniumRemoteUrl(HTTP,给 Selenium);timeout 最小 60 秒、最大 21600 秒(6 小时) |
| 最容易漏的开关 | browserSettings.solveCaptchas 默认 true,proxies 默认 false——两个安全相关开关默认值不对称 |
| 计费下限 | 浏览器时间按分钟计费,每 session 最低 1 分钟;代理按 MB 计费,最低 1 MB;keepAlive: true 的会话不会自己停止计费,必须显式 POST /v1/sessions/{id} + {"status":"REQUEST_RELEASE"} |
| 该用浏览器吗 | 官方递进顺序:Search(找信息在哪)→ Fetch(便宜抓已知 URL,不渲染 JS)→ Browsers(需要交互/登录态/JS 渲染时才用) |
照通用经验写容易错的 7 件事
来自官方文档,还没有用真实凭证验证。
- Stagehand v4 不是你训练记忆里的 Stagehand,
agent()也没有替代品。v2/v3 靠继承 Playwrightpage对象、写stagehand.page.act(...);v4 是纯 CDP 架构,没有 Playwright/Puppeteer/Patchright 互操作层,act/extract/observe是Stagehand实例自己的方法。官方原文明确写「agent()is gone. Nothing in v4 replaces it one-for-one.」——想要自主循环只能用 Code mode 或自己写 tool-calling 循环,真正「给个目标就全自动跑完」的是完全独立的/v1/agents/runs产品。 - 会话不显式关闭会一直计费到 6 小时上限。
keepAlive: true的会话断线后不会自动结束,文档原文写着「stop your keep alive sessions explicitly...you may be charged for the unneeded browser minutes」——写代码必须有一条try/finally路径调bb.sessions.update(id, {status: "REQUEST_RELEASE"}),脚本正常退出不等于会话结束。 - Puppeteer 会用自己的
800x600默认视口覆盖你设置的browserSettings.viewport。连接时必须额外传defaultViewport: null,否则创建 session 时配置的自定义尺寸静默失效——这是 Puppeteer 客户端行为,不是 Browserbase 服务端问题。 - 开了
browserSettings.verified之后,自定义viewport完全不生效。Verified 会话一律用标准化视口配合完整指纹档案,即使请求体里传了width/height也会被忽略;需要自定义视口只能关掉 Verified。 - Contexts 和 keepAlive 是两个不相关的机制,别搞混。Context 解决「下次开新 session 还记得我登录过」(跨 session 持久化 cookie),keepAlive 解决「这一个 session 断线后还能接回来」(同一 session 断连重连)。要「登录态跨多次运行保留」必须用 Context +
persist: true,不是 keepAlive。 allowedDomains只挡顶层导航,不是网络沙箱。iframe、子 frame 跳转、图片/脚本/XHR 等资源请求完全不受限制,可以自由加载允许列表之外的域名;把它当成安全隔离/防数据泄漏的控制来设计是误用,官方文档也标注这是实验性功能。- Session Replay/Recording Downloads 的留存窗口一过期,就和「从没录过」报同一个错。非 BYOS 项目 31 天、BYOS 项目 24 小时之后,
GET /v1/sessions/{id}/replays一律返回404 {"message": "Replay not found"}——和设置了recordSession: false的会话报错完全一样,没法从错误本身分辨是过期了还是本来就没录。