Stagehand AI-browser-automation plugin for OpenBot.
Give the agent a natural-language task ("Go to news.ycombinator.com and grab the top 3 AI stories") and the plugin will spin up a browser, drive it with an LLM-powered agent, and return the result.
pluginregistry export compatible with OpenBotagent:invokehandler that runs a Stagehand agent (stagehand.agent().execute(...)) for the user's promptclient:ui:widget:responsehandler that captures missing API keys from the UI form and persists them via OpenBot storage- Per-step progress streaming back to the chat (one line per agent step)
npm install
npm run buildnpm install will also try to install the Playwright Chromium browser binary via the postinstall script. If that fails (e.g. firewall, headless server), run it manually:
npx playwright install chromiumThen load dist/index.js from your OpenBot plugin registry.
Set one of the following so Stagehand can drive the browser:
OPENAI_API_KEY— default; usesopenai/gpt-4o-miniANTHROPIC_API_KEY— usesanthropic/claude-sonnet-4-5-20250929GOOGLE_GENERATIVE_AI_API_KEY— usesgoogle/gemini-2.5-flashBROWSERBASE_API_KEY— enables Browserbase Model Gateway (only when running withenv: "BROWSERBASE")
If no key is set, the plugin will pop up a form widget to capture and persist one.
If both BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID are set (or you pass env: "BROWSERBASE" in plugin options), the plugin will run against Browserbase's cloud browsers instead of local Chromium.
{
apiKey?: string; // overrides env LLM key
provider?: "openai" | "anthropic" | "google"; // overrides auto-detect
model?: string; // full "provider/model" or short id, overrides default
env?: "LOCAL" | "BROWSERBASE"; // default: LOCAL
browserbaseApiKey?: string;
browserbaseProjectId?: string;
headless?: boolean; // default: true (LOCAL mode)
maxSteps?: number; // default: 25
mode?: "dom" | "hybrid" | "cua"; // default: auto
systemPrompt?: string; // optional system prompt override
storage?: { createVariable: (...) => Promise<unknown> };
}- The plugin starts a fresh browser for each invocation and closes it when done. This is the most stable mode — no leaked Chromium processes between turns.
- Local mode requires the Playwright Chromium binary (~150MB). Use Browserbase if you don't want to ship Chromium locally.
dist/index.jsis intentionally tiny — runtime deps (@browserbasehq/stagehand,playwright,zod) stay external and are resolved from the plugin's localnode_modules.