{"owner":"browserbase","repo":"stagehand","hasSkills":true,"totalSkillsCount":30,"totalTokensCount":16237,"categories":["anthropic-skill","plugin-manifest"],"hasMcp":true,"mcpConfig":{"mcpServers":{"stagehand":{"command":"npx","args":["-y","@modelcontextprotocol/server-stagehand"]}}},"found":["packages/evals/package.json","packages/evals/README.md","packages/evals/tsconfig.json","packages/docs/docs.json","packages/docs/package.json","packages/docs/README.md","packages/evals/evals.config.json","packages/core/CHANGELOG.md","packages/core/package.json","packages/core/README.md","packages/core/tsconfig.json","packages/cli/CHANGELOG.md","packages/cli/package.json","packages/cli/README.md","packages/cli/tsconfig.json","packages/server-v3/CHANGELOG.md","packages/server-v3/openapi.v3.yaml","packages/server-v3/package.json","packages/server-v3/README.md","packages/server-v3/SDK_RELEASE_WORKFLOW.md","packages/server-v3/tsconfig.json","packages/server-v3/tsconfig.tests.json","packages/server-v4/CHANGELOG.md","packages/server-v4/openapi.v4.yaml","packages/server-v4/package.json","packages/server-v4/README.md","packages/server-v4/tsconfig.json","packages/core/lib/CHANGELOG.md","packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json","packages/core/lib/v3/agent/tools/README.md"],"skills":{"packages/evals/package.json":"{\n  \"name\": \"@browserbasehq/stagehand-evals\",\n  \"version\": \"4.0.0\",\n  \"private\": true,\n  \"description\": \"Evaluation suite for Stagehand\",\n  \"bin\": {\n    \"evals\": \"./dist/cli/cli.js\"\n  },\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"pnpm run --parallel \\\"/^build:(esm|cli)$/\\\"\",\n    \"build:esm\": \"tsx scripts/build-esm.ts\",\n    \"build:cli\": \"tsx scripts/build-cli.ts\",\n    \"test\": \"vitest run --config packages/evals/vitest.config.ts --root ../.. packages/evals/tests\",\n    \"test:unit\": \"pnpm run test\",\n    \"typecheck\": \"tsc --noEmit -p tsconfig.json\",\n    \"test:evals\": \"tsx scripts/test-evals.ts --cli packages/evals/dist/cli/cli.js\",\n    \"eval\": \"tsx cli.ts\",\n    \"report:core\": \"tsx scripts/render-braintrust-core-report.ts\",\n    \"task:record\": \"tsx tasks/cli.ts\"\n  },\n  \"dependencies\": {\n    \"@ai-sdk/provider\": \"^2.0.0\",\n    \"@anthropic-ai/claude-agent-sdk\": \"catalog:\",\n    \"@braintrust/otel\": \"^0.2.1\",\n    \"@browserbasehq/sdk\": \"catalog:\",\n    \"@browserbasehq/stagehand\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-claude-agent-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-claude-cua-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-codex-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-cursor-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-deepagents-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-eve-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-fx-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-gemini-cua-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-mastra-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-pi-sdk\": \"workspace:*\",\n    \"@clack/prompts\": \"^1.3.0\",\n    \"@modelcontextprotocol/sdk\": \"catalog:\",\n    \"@opentelemetry/api\": \"catalog:\",\n    \"@opentelemetry/exporter-trace-otlp-proto\": \"^0.220.0\",\n    \"@opentelemetry/sdk-trace-base\": \"^2.9.0\",\n    \"@opentelemetry/sdk-trace-node\": \"^2.9.0\",\n    \"ai\": \"^5.0.133\",\n    \"braintrust\": \"^3.21.0\",\n    \"browse\": \"workspace:*\",\n    \"dotenv\": \"^17.3.1\",\n    \"langsmith\": \"^0.6.0\",\n    \"openai\": \"^4.104.0\",\n    \"playwright\": \">=1.55.1 <1.57.0\",\n    \"sharp\": \"^0.35.4\",\n    \"stagehand-v3\": \"npm:@browserbasehq/stagehand@3.7.1\",\n    \"tsx\": \"catalog:\",\n    \"ws\": \"^8.21.0\",\n    \"zod\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"chalk\": \"^5.4.1\",\n    \"esbuild\": \"catalog:\",\n    \"gray-matter\": \"^4.0.3\",\n    \"string-comparison\": \"^1.3.0\",\n    \"vite\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"engines\": {\n    \"node\": \">=24.0.0\"\n  }\n}\n","packages/evals/README.md":"# Stagehand Evals\n\nAgent benchmarks for Stagehand — `act`, `extract`, `observe`, `agent`, plus dataset-backed suites (WebVoyager, OnlineMind2Web, WebTailBench, Odysseys, HardBench).\n\nDriven by an interactive TUI (`evals`) or single-shot CLI (`evals run …`). Tasks are auto-discovered from `tasks/bench/<category>/` — no registration step.\n\n## Quickstart\n\nFrom the stagehand repo root:\n\n```bash\npnpm install\npnpm build:cli   # also: pnpm build, if you haven't built the workspace yet\n```\n\nThis links an `evals` binary on your `PATH`. Launch the REPL:\n\n```bash\nevals\n```\n\n![REPL with help output](./assets/readme/help.png)\n\nOr run a single target:\n\n```bash\nevals run extract -t 3 -c 5\nevals run b:webvoyager -l 10\n```\n\nA `.env` in `packages/evals/` is loaded automatically. Provide whichever provider keys (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_GENERATIVE_AI_API_KEY`, …) and `BROWSERBASE_API_KEY` / `BROWSERBASE_PROJECT_ID` you need.\n\n## TUI commands\n\nInside the REPL (or as `evals <command>` from your shell):\n\n| Command                        | What it does                                                             |\n| ------------------------------ | ------------------------------------------------------------------------ |\n| `run [target] [options]`       | Run evals. Target can be a tier, category, task, or benchmark shorthand. |\n| `list [tier] [--detailed]`     | List discovered tasks and categories.                                    |\n| `new <tier> <category> <name>` | Scaffold a new task file.                                                |\n| `config [set\\|reset\\|path]`    | Read or write defaults (env, trials, concurrency, model, …).             |\n| `experiments`                  | Inspect and compare Braintrust experiment runs.                          |\n| `help`                         | Show command help. Append `--help` to any command for details.           |\n\nUse `Esc` to abort an in-flight run without exiting the REPL.\n\n### Onboarding\n\n`evals welcome` runs a guided first-run flow built on the agent benchmarks: an animated intro (the Stagehand mark, what evals measures, EVALS), then a deterministic replay of a real WebVoyager task — three models in lanes, named generically (Opus, Grok, Sol — the fastest and cheapest fails on a wrong condition filter; timings and costs are illustrative), a podium by accuracy · speed · cost, and a chat-style look inside the winning run. It ends on a real `run b:webvoyager -l 3 --harness claude_code -e local` (`--harness codex` when the key is OpenAI's; `-e browserbase` when that's the available browser) when an Anthropic or OpenAI key and a browser exist, or hands off to `evals setup`, a guided flow that asks only for what's missing (Anthropic/OpenAI key, browser), writes `packages/evals/.env`, and offers the first real run.\n\nSet `EVALS_WELCOME_WIZARD=1` to auto-run the flow on the first REPL launch; `EVALS_NO_WELCOME=1` suppresses the first-run welcome. Any key advances the intro, Esc skips ahead, Ctrl+C cancels.\n\n## Run targets\n\n`evals run` accepts any of these shapes:\n\n| Target                                                 | Meaning                        |\n| ------------------------------------------------------ | ------------------------------ |\n| _(none)_ / `all`                                       | All bench tasks                |\n| `bench`                                                | Entire bench tier              |\n| `act` / `extract` / `observe` / `agent`                | A category                     |\n| `extract/extract_text`                                 | A specific task                |\n| `b:webvoyager` / `b:onlineMind2Web` / `b:webtailbench` | Dataset-backed benchmark suite |\n\n`evals list` shows everything that's been discovered:\n\n![evals list output](./assets/readme/list.png)\n\n## Common options\n\n| Flag                                                              | Purpose                                                                                 |\n| ----------------------------------------------------------------- | --------------------------------------------------------------------------------------- |\n| `-e, --env <local\\|browserbase>`                                  | Where the browser runs                                                                  |\n| `-t, --trials <n>`                                                | Trials per task                                                                         |\n| `-c, --concurrency <n>`                                           | Max parallel sessions                                                                   |\n| `-m, --model <id>`                                                | Override the model matrix                                                               |\n| `--api`                                                           | Run via the Stagehand API instead of the SDK                                            |\n| `--harness <name>`                                                | Which agent harness drives the bench task (`evals run --help` lists them)               |\n| `--tool <surface>`                                                | Tool surface the harness mounts; `stagehand_facade` is the Playwright-batch MCP surface |\n| `-l, --limit <n>` / `-s, --sample <n>` / `-f, --filter key=value` | Suite shaping for benchmark targets                                                     |\n| `--preview`                                                       | Print the resolved plan and exit — no browser, no LLM calls                             |\n| `-v, --verbose` / `--follow <id>`                                 | Stream every case's log lines (or one case's) above the live board                      |\n| `--json`                                                          | Print the end-of-run summary as JSON on stdout; the board and logs go to stderr         |\n\nConcurrency is capped per model provider under the global `-c` value (default 3 per provider); tune with `EVAL_PROVIDER_CONCURRENCY=openai=6,anthropic=4` or `evals config providers set openai concurrency 6`. The cap applies within one `evals run`: separately launched runs don't share it. When the agent's own provider call hits a 429 or connect timeout, that provider's width is halved for 60 s and the row is retried once; a Browserbase session-create 429 is retried once after 20 s. Retried rows carry `provider_throttled` in Braintrust. A rate-limited judge never re-runs the agent.\n\nTeam defaults live in the tracked `evals.config.json` (schema v2: `defaults`, `benchmarks`, `harnesses`, `providers`, `verifier`, `campaign`). `evals config set …` writes your personal overrides to the gitignored `evals.config.local.json` beside it; add `--shared` to change the team file. Flags always win. Most `defaults` then come from the local file, the tracked file and the `EVAL_*` env vars in that order; `EVAL_SUCCESS_MODE` and `STAGEHAND_BROWSER_TARGET` are the exceptions and beat the config, as does the env twin of every other section. `.env` loads from the cwd first (it wins), then `packages/evals/.env` (where `evals setup` saves keys), and shell exports always win — `evals doctor` reports which file supplied each provider key.\n\n`--preview` is useful for sanity-checking the plan before paying for a run:\n\n![evals run --preview output](./assets/readme/preview.png)\n\nA live run draws one row per case in flight: case id and site, the task, the phase it's in (`session` → `agent` → `verify`) and how long it has been running. Elapsed time turns yellow once a row outlasts three quarters of the finished ones. Rows waiting for a provider slot are counted in the queue line rather than shown; the `↓` marks a provider whose width was halved after a 429. The last few finishes show their outcome, and failures their session URL:\n\n![Live bench run](./assets/readme/run-live.png)\n\nEvery case that logs anything gets its own file under `.trajectories/<run>/logs/` (with the provider in the name), whether or not you're watching. `-v` streams those lines above the board, attributed by case id; `--follow <id>` streams one case. While a run is going, `v` cycles the stream off → all → one (the oldest running case) → off, `?` shows the keys, and `esc` stops the run:\n\n![Live bench run with -v](./assets/readme/run-verbose.png)\n\nThe end-of-run summary has one line per cell (harness × tool × model) with the pass rate, the failure kinds that aren't the agent's fault or aren't what they look like (`max_turns`, `sdk_error`, `gated`: the judge passed it, a deterministic check such as \"never used the browser\" failed it, and `ungraded`), and `retried`: rows retried after a provider 429, which may still have passed. Infra failures are listed with their reason and session URL; rubric fails by case id. `--json` emits the same as an object:\n\n![Run summary](./assets/readme/run-summary.png)\n\nWhen the judge grades nothing (a retired model, a bad key), every row fails closed, so the pass rate says nothing about the agent. The run says so and exits 1:\n\n![Dead-judge banner](./assets/readme/run-dead-judge.png)\n\n`evals doctor --harness a,b [--probe]` probes each harness (binary, key, key validity, extras like heap or `CODEX_HOME`), the judge and Browserbase, and prints the fix command for each failure that has one:\n\n![evals doctor](./assets/readme/doctor.png)\n\n## Shared harness behavior\n\nSee [the harness contract](docs/harness-contract.md) for tool surfaces, prompt policy,\nbudget units, session diagnostics, verification, and usage accounting.\nSee [HardBench](datasets/hardbenchmark/README.md) for corpus selection and rubric v1.2.\n\n## Adding a bench task\n\n```bash\nevals new bench extract my_new_task\n```\n\nThis drops a `defineBenchTask`-based file into `tasks/bench/extract/`. It will show up in `evals list` on next launch — no config edit needed.\n\n```ts\n// tasks/bench/extract/my_new_task.ts\nimport { defineBenchTask } from \"../../../framework/defineTask.js\";\n\nexport default defineBenchTask({\n  name: \"my_new_task\",\n  tags: [\"regression\"],\n  run: async ({ stagehand, logger }) => {\n    // ... drive stagehand, return { _success: boolean, ... }\n  },\n});\n```\n\n## Tracing / Observability\n\nRuns stream into Braintrust when `BRAINTRUST_API_KEY` is set; otherwise a local summary prints to stdout. Use `evals experiments` to inspect and diff past Braintrust runs.\n\n### Recording observation tasks\n\nUse the [observation task recorder](tasks/README.md) to capture a rendered\npage for a static `extract()` or `observe()` regression. It provides a standalone\nHTML artifact and provenance metadata; dynamic application replay is outside its\nscope.\n","packages/evals/tsconfig.json":"{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"noImplicitAny\": true,\n    \"skipLibCheck\": true,\n    \"strict\": false,\n    \"target\": \"ES2022\",\n    \"types\": [\"node\"],\n    \"useUnknownInCatchVariables\": false\n  },\n  \"include\": [\"**/*.ts\"],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n","packages/docs/docs.json":"{\n  \"$schema\": \"https://mintlify.com/docs.json\",\n  \"theme\": \"maple\",\n  \"name\": \"Stagehand\",\n  \"colors\": {\n    \"primary\": \"#00C851\",\n    \"light\": \"#00C851\",\n    \"dark\": \"#00C851\"\n  },\n  \"favicon\": \"/images/favicon.svg\",\n  \"seo\": {\n    \"indexing\": \"all\",\n    \"metatags\": {\n      \"og:type\": \"website\",\n      \"og:site_name\": \"Stagehand Docs\"\n    }\n  },\n  \"api\": {\n    \"openapi\": \"v3/openapi.json\"\n  },\n  \"navigation\": {\n    \"versions\": [\n      {\n        \"version\": \"v4\",\n        \"groups\": [\n          {\n            \"group\": \"First steps\",\n            \"pages\": [\n              \"v4/first-steps/introduction\",\n              \"v4/first-steps/quickstart\",\n              \"v4/first-steps/installation\",\n              \"v4/first-steps/ai-rules\"\n            ]\n          },\n          {\n            \"group\": \"The basics\",\n            \"pages\": [\"v4/basics/act\", \"v4/basics/extract\", \"v4/basics/observe\", \"v4/basics/webmcp\"]\n          },\n          {\n            \"group\": \"Configuration\",\n            \"pages\": [\"v4/configuration/browser\", \"v4/configuration/logging\"]\n          },\n          {\n            \"group\": \"Add-ons\",\n            \"pages\": [\n              \"v4/add-ons/search\",\n              \"v4/add-ons/fetch\",\n              \"v4/configuration/models\",\n              \"v4/configuration/observability\"\n            ]\n          },\n          {\n            \"group\": \"Integrations\",\n            \"pages\": [\n              \"v4/integrations/overview\",\n              {\n                \"group\": \"Agent Frameworks\",\n                \"pages\": [\n                  \"v4/integrations/agent-frameworks/overview\",\n                  \"v4/integrations/agent-frameworks/claude-cua-toolset-quickstart\",\n                  \"v4/integrations/agent-frameworks/openai-cua-toolset-quickstart\",\n                  \"v4/integrations/agent-frameworks/eve\",\n                  \"v4/integrations/agent-frameworks/deep-agents\",\n                  \"v4/integrations/agent-frameworks/crewai\",\n                  \"v4/integrations/agent-frameworks/mastra\",\n                  \"v4/integrations/agent-frameworks/vercel-ai-sdk\"\n                ]\n              },\n              {\n                \"group\": \"CLI Agents\",\n                \"pages\": [\n                  \"v4/integrations/cli-agents/overview\",\n                  \"v4/integrations/cli-agents/claude-code\",\n                  \"v4/integrations/cli-agents/codex\",\n                  \"v4/integrations/cli-agents/cursor\",\n                  \"v4/integrations/cli-agents/fx\",\n                  \"v4/integrations/cli-agents/pi\"\n                ]\n              },\n              {\n                \"group\": \"Applications\",\n                \"pages\": [\"v4/integrations/applications/stripe\"]\n              }\n            ]\n          },\n          {\n            \"group\": \"Best practices\",\n            \"pages\": [\n              \"v4/best-practices/prompting-best-practices\",\n              \"v4/best-practices/usecase-observe\",\n              \"v4/best-practices/caching\",\n              \"v4/best-practices/using-multiple-tabs\",\n              \"v4/best-practices/user-data\",\n              \"v4/best-practices/speed-optimization\",\n              \"v4/best-practices/cost-optimization\",\n              \"v4/best-practices/deployments\"\n            ]\n          },\n          {\n            \"group\": \"Cookbooks\",\n            \"pages\": [\n              \"v4/cookbooks/overview\",\n              \"v4/cookbooks/persisted-login\",\n              \"v4/cookbooks/paginated-catalog\",\n              \"v4/cookbooks/files-to-bucket\",\n              \"v4/cookbooks/approve-form-submission\",\n              \"v4/cookbooks/ai-sdk-research-agent\"\n            ]\n          },\n          {\n            \"group\": \"Migration guide\",\n            \"pages\": [\"v4/migrations/v3\", \"v4/migrations/playwright\"]\n          },\n          {\n            \"group\": \"SDK reference\",\n            \"pages\": [\n              \"v4/reference/stagehand\",\n              \"v4/reference/context\",\n              \"v4/reference/clipboard\",\n              \"v4/reference/page\",\n              \"v4/reference/webmcp\",\n              \"v4/reference/response\",\n              \"v4/reference/locator\"\n            ]\n          }\n        ]\n      },\n      {\n        \"version\": \"v3\",\n        \"dropdowns\": [\n          {\n            \"dropdown\": \"TypeScript\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/first-steps/introduction\"],\n            \"groups\": [\n              {\n                \"group\": \"First Steps\",\n                \"pages\": [\n                  \"v3/first-steps/introduction\",\n                  \"v3/first-steps/quickstart\",\n                  \"v3/first-steps/installation\",\n                  \"v3/first-steps/ai-rules\"\n                ]\n              },\n              {\n                \"group\": \"The Basics\",\n                \"pages\": [\n                  \"v3/basics/agent\",\n                  \"v3/basics/act\",\n                  \"v3/basics/extract\",\n                  \"v3/basics/observe\",\n                  \"v3/basics/webmcp\",\n                  \"v3/basics/evals\"\n                ]\n              },\n              {\n                \"group\": \"Configuration\",\n                \"pages\": [\n                  \"v3/configuration/browser\",\n                  \"v3/configuration/observability\",\n                  \"v3/configuration/logging\",\n                  \"v3/configuration/models\"\n                ]\n              },\n              {\n                \"group\": \"Best Practices\",\n                \"pages\": [\n                  \"v3/best-practices/caching\",\n                  \"v3/best-practices/cost-optimization\",\n                  \"v3/best-practices/deterministic-agent\",\n                  \"v3/best-practices/using-multiple-tabs\",\n                  \"v3/best-practices/deployments\",\n                  \"v3/best-practices/history\",\n                  \"v3/best-practices/computer-use\",\n                  \"v3/best-practices/agent-fallbacks\",\n                  \"v3/best-practices/prompting-best-practices\",\n                  \"v3/best-practices/mcp-integrations\",\n                  \"v3/best-practices/speed-optimization\"\n                ]\n              },\n              {\n                \"group\": \"Integrations\",\n                \"pages\": [\n                  {\n                    \"group\": \"MCP Server\",\n                    \"pages\": [\n                      \"v3/integrations/mcp/introduction\",\n                      \"v3/integrations/mcp/setup\",\n                      \"v3/integrations/mcp/tools\",\n                      \"v3/integrations/mcp/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"CrewAI\",\n                    \"pages\": [\n                      \"v3/integrations/crew-ai/introduction\",\n                      \"v3/integrations/crew-ai/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Langchain\",\n                    \"pages\": [\n                      \"v3/integrations/langchain/introduction\",\n                      \"v3/integrations/langchain/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Next.js + Vercel\",\n                    \"pages\": [\n                      \"v3/integrations/vercel/introduction\",\n                      \"v3/integrations/vercel/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Convex\",\n                    \"pages\": [\n                      \"v3/integrations/convex/introduction\",\n                      \"v3/integrations/convex/configuration\"\n                    ]\n                  },\n                  \"v3/integrations/playwright\",\n                  \"v3/integrations/puppeteer\",\n                  \"v3/integrations/selenium\"\n                ]\n              },\n              {\n                \"group\": \"Reference\",\n                \"pages\": [\n                  \"v3/references/stagehand\",\n                  \"v3/references/agent\",\n                  \"v3/references/act\",\n                  \"v3/references/extract\",\n                  \"v3/references/observe\",\n                  \"v3/references/context\",\n                  \"v3/references/clipboard\",\n                  \"v3/references/page\",\n                  \"v3/references/locator\",\n                  \"v3/references/deeplocator\",\n                  \"v3/references/response\"\n                ]\n              },\n              {\n                \"group\": \"Migration Guides\",\n                \"pages\": [\"v3/migrations/v2\", \"v3/migrations/python\"]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Python\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/python\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/python\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/python\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Java\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/java\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/java\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/java\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Go\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/go\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/go\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/go\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Ruby\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/ruby\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/ruby\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/ruby\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      {\n        \"version\": \"v2\",\n        \"groups\": [\n          {\n            \"group\": \"First Steps\",\n            \"pages\": [\n              \"v2/first-steps/introduction\",\n              \"v2/first-steps/quickstart\",\n              \"v2/first-steps/installation\",\n              \"v2/first-steps/ai-rules\"\n            ]\n          },\n          {\n            \"group\": \"The Basics\",\n            \"pages\": [\"v2/basics/agent\", \"v2/basics/act\", \"v2/basics/extract\", \"v2/basics/observe\"]\n          },\n          {\n            \"group\": \"Configuration\",\n            \"pages\": [\n              \"v2/configuration/browser\",\n              \"v2/configuration/observability\",\n              \"v2/configuration/logging\",\n              \"v2/configuration/models\",\n              \"v2/configuration/evals\"\n            ]\n          },\n          {\n            \"group\": \"Best Practices\",\n            \"pages\": [\n              \"v2/best-practices/caching\",\n              \"v2/best-practices/cost-optimization\",\n              \"v2/best-practices/using-multiple-tabs\",\n              \"v2/best-practices/working-with-iframes\",\n              \"v2/best-practices/deployments\",\n              \"v2/best-practices/computer-use\",\n              \"v2/best-practices/contributing\",\n              \"v2/best-practices/playwright-interop\",\n              \"v2/best-practices/build-agent\",\n              \"v2/best-practices/agent-fallbacks\",\n              \"v2/best-practices/prompting-best-practices\",\n              \"v2/best-practices/mcp-integrations\",\n              \"v2/best-practices/speed-optimization\"\n            ]\n          },\n          {\n            \"group\": \"Integrations\",\n            \"pages\": [\n              {\n                \"group\": \"MCP Server\",\n                \"pages\": [\n                  \"v2/integrations/mcp/introduction\",\n                  \"v2/integrations/mcp/setup\",\n                  \"v2/integrations/mcp/tools\",\n                  \"v2/integrations/mcp/configuration\"\n                ]\n              },\n              {\n                \"group\": \"CrewAI\",\n                \"pages\": [\n                  \"v2/integrations/crew-ai/introduction\",\n                  \"v2/integrations/crew-ai/configuration\"\n                ]\n              },\n              {\n                \"group\": \"Langchain\",\n                \"pages\": [\n                  \"v2/integrations/langchain/introduction\",\n                  \"v2/integrations/langchain/configuration\"\n                ]\n              },\n              {\n                \"group\": \"Next.js + Vercel\",\n                \"pages\": [\n                  \"v2/integrations/vercel/introduction\",\n                  \"v2/integrations/vercel/configuration\"\n                ]\n              }\n            ]\n          },\n          {\n            \"group\": \"Reference\",\n            \"pages\": [\n              \"v2/references/stagehand\",\n              \"v2/references/act\",\n              \"v2/references/extract\",\n              \"v2/references/observe\",\n              \"v2/references/agent\"\n            ]\n          }\n        ]\n      }\n    ],\n    \"global\": {\n      \"anchors\": [\n        {\n          \"anchor\": \"Discord\",\n          \"href\": \"https://discord.gg/stagehand\",\n          \"icon\": \"discord\"\n        },\n        {\n          \"anchor\": \"GitHub\",\n          \"href\": \"https://github.com/browserbase/stagehand\",\n          \"icon\": \"github\"\n        },\n        {\n          \"anchor\": \"Changelog\",\n          \"href\": \"https://github.com/browserbase/stagehand/releases\",\n          \"icon\": \"scroll\"\n        }\n      ]\n    }\n  },\n  \"logo\": {\n    \"light\": \"/logo/light_logo.png\",\n    \"dark\": \"/logo/dark_logo.png\",\n    \"href\": \"https://stagehand.dev\"\n  },\n  \"navbar\": {\n    \"links\": [\n      {\n        \"label\": \"Discord\",\n        \"href\": \"https://discord.gg/stagehand\"\n      },\n      {\n        \"label\": \"Support\",\n        \"href\": \"mailto:support@browserbase.com\"\n      }\n    ]\n  },\n  \"footer\": {\n    \"socials\": {\n      \"discord\": \"https://discord.gg/stagehand\",\n      \"x\": \"https://x.com/stagehanddev\",\n      \"github\": \"https://github.com/browserbase/stagehand\",\n      \"linkedin\": \"https://linkedin.com/company/browserbasehq\"\n    }\n  },\n  \"integrations\": {\n    \"posthog\": {\n      \"apiKey\": \"phc_hmwkFrlc9UVrdE1jyG8AEKoCQCSr8dScjsRpKoLBEiV\",\n      \"apiHost\": \"https://us.i.posthog.com\"\n    }\n  },\n  \"contextual\": {\n    \"options\": [\"copy\", \"chatgpt\", \"claude\", \"view\"]\n  },\n  \"redirects\": [\n    {\n      \"source\": \"/first-steps/:slug*\",\n      \"destination\": \"/v4/first-steps/:slug*\"\n    },\n    {\n      \"source\": \"/basics/act\",\n      \"destination\": \"/v4/basics/act\"\n    },\n    {\n      \"source\": \"/basics/extract\",\n      \"destination\": \"/v4/basics/extract\"\n    },\n    {\n      \"source\": \"/basics/observe\",\n      \"destination\": \"/v4/basics/observe\"\n    },\n    {\n      \"source\": \"/basics/webmcp\",\n      \"destination\": \"/v4/basics/webmcp\"\n    },\n    {\n      \"source\": \"/basics/:slug*\",\n      \"destination\": \"/v3/basics/:slug*\"\n    },\n    {\n      \"source\": \"/configuration/:slug*\",\n      \"destination\": \"/v4/configuration/:slug*\"\n    },\n    {\n      \"source\": \"/best-practices/caching\",\n      \"destination\": \"/v4/best-practices/caching\"\n    },\n    {\n      \"source\": \"/best-practices/cost-optimization\",\n      \"destination\": \"/v4/best-practices/cost-optimization\"\n    },\n    {\n      \"source\": \"/best-practices/deployments\",\n      \"destination\": \"/v4/best-practices/deployments\"\n    },\n    {\n      \"source\": \"/best-practices/mcp-integrations\",\n      \"destination\": \"/v4/integrations/cli-agents/overview\"\n    },\n    {\n      \"source\": \"/best-practices/prompting-best-practices\",\n      \"destination\": \"/v4/best-practices/prompting-best-practices\"\n    },\n    {\n      \"source\": \"/best-practices/speed-optimization\",\n      \"destination\": \"/v4/best-practices/speed-optimization\"\n    },\n    {\n      \"source\": \"/best-practices/usecase-observe\",\n      \"destination\": \"/v4/best-practices/usecase-observe\"\n    },\n    {\n      \"source\": \"/best-practices/user-data\",\n      \"destination\": \"/v4/best-practices/user-data\"\n    },\n    {\n      \"source\": \"/best-practices/using-multiple-tabs\",\n      \"destination\": \"/v4/best-practices/using-multiple-tabs\"\n    },\n    {\n      \"source\": \"/best-practices/:slug*\",\n      \"destination\": \"/v3/best-practices/:slug*\"\n    },\n    {\n      \"source\": \"/v4/integrations/agents\",\n      \"destination\": \"/v4/integrations/agent-frameworks/overview\"\n    },\n    {\n      \"source\": \"/v4/integrations/eve\",\n      \"destination\": \"/v4/integrations/agent-frameworks/eve\"\n    },\n    {\n      \"source\": \"/v4/integrations/deep-agents\",\n      \"destination\": \"/v4/integrations/agent-frameworks/deep-agents\"\n    },\n    {\n      \"source\": \"/v4/integrations/crewai\",\n      \"destination\": \"/v4/integrations/agent-frameworks/crewai\"\n    },\n    {\n      \"source\": \"/v4/integrations/mastra\",\n      \"destination\": \"/v4/integrations/agent-frameworks/mastra\"\n    },\n    {\n      \"source\": \"/v4/integrations/vercel-ai-sdk\",\n      \"destination\": \"/v4/integrations/agent-frameworks/vercel-ai-sdk\"\n    },\n    {\n      \"source\": \"/v4/integrations/cli-agents\",\n      \"destination\": \"/v4/integrations/cli-agents/overview\"\n    },\n    {\n      \"source\": \"/v4/integrations/claude-code\",\n      \"destination\": \"/v4/integrations/cli-agents/claude-code\"\n    },\n    {\n      \"source\": \"/v4/integrations/codex\",\n      \"destination\": \"/v4/integrations/cli-agents/codex\"\n    },\n    {\n      \"source\": \"/v4/integrations/fx\",\n      \"destination\": \"/v4/integrations/cli-agents/fx\"\n    },\n    {\n      \"source\": \"/v4/integrations/pi\",\n      \"destination\": \"/v4/integrations/cli-agents/pi\"\n    },\n    {\n      \"source\": \"/v4/integrations/stripe\",\n      \"destination\": \"/v4/integrations/applications/stripe\"\n    },\n    {\n      \"source\": \"/integrations/mcp/:slug*\",\n      \"destination\": \"/v3/integrations/mcp/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/crew-ai/:slug*\",\n      \"destination\": \"/v3/integrations/crew-ai/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/langchain/:slug*\",\n      \"destination\": \"/v3/integrations/langchain/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/vercel/:slug*\",\n      \"destination\": \"/v3/integrations/vercel/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/convex/:slug*\",\n      \"destination\": \"/v3/integrations/convex/:slug*\"\n    },\n    {\n      \"source\": \"/references/:slug*\",\n      \"destination\": \"/v3/references/:slug*\"\n    },\n    {\n      \"source\": \"/reference/:slug*\",\n      \"destination\": \"/v4/reference/:slug*\"\n    },\n    {\n      \"source\": \"/migrations/playwright\",\n      \"destination\": \"/v4/migrations/playwright\"\n    },\n    {\n      \"source\": \"/migrations/v3\",\n      \"destination\": \"/v4/migrations/v3\"\n    },\n    {\n      \"source\": \"/migrations/:slug*\",\n      \"destination\": \"/v3/migrations/:slug*\"\n    },\n    {\n      \"source\": \"/v4/examples/compare-pages-in-parallel\",\n      \"destination\": \"/v4/best-practices/using-multiple-tabs\"\n    },\n    {\n      \"source\": \"/v4/examples/model-gateway-extract\",\n      \"destination\": \"/v4/configuration/models#model-gateway\"\n    },\n    {\n      \"source\": \"/v4/examples/observe-then-act\",\n      \"destination\": \"/v4/cookbooks/paginated-catalog\"\n    },\n    {\n      \"source\": \"/v4/examples/tanstack-ai-extraction-tool\",\n      \"destination\": \"/v4/cookbooks/overview\"\n    },\n    {\n      \"source\": \"/v4/examples/overview\",\n      \"destination\": \"/v4/cookbooks/overview\"\n    },\n    {\n      \"source\": \"/v4/examples/approve-form-submission\",\n      \"destination\": \"/v4/cookbooks/approve-form-submission\"\n    },\n    {\n      \"source\": \"/v4/examples/paginated-catalog\",\n      \"destination\": \"/v4/cookbooks/paginated-catalog\"\n    },\n    {\n      \"source\": \"/v4/examples/files-to-bucket\",\n      \"destination\": \"/v4/cookbooks/files-to-bucket\"\n    },\n    {\n      \"source\": \"/v4/examples/ai-sdk-research-agent\",\n      \"destination\": \"/v4/cookbooks/ai-sdk-research-agent\"\n    }\n  ]\n}\n","packages/docs/package.json":"{\n  \"name\": \"@browserbasehq/stagehand-docs\",\n  \"version\": \"4.0.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"check\": \"mint validate && mint broken-links --check-anchors --check-redirects --check-snippets && mint a11y --skip-contrast\",\n    \"typecheck\": \"pnpm run check\",\n    \"test:unit\": \"vitest run --root ../.. packages/docs/tests\",\n    \"dev\": \"mint dev\",\n    \"sync-sdk\": \"node scripts/sync-sdk-docs.js\"\n  },\n  \"devDependencies\": {\n    \"@mdx-js/mdx\": \"catalog:\",\n    \"mint\": \"catalog:\"\n  }\n}\n","packages/docs/README.md":"# Stagehand docs\n\nThis site contains the Stagehand v2, v3, and v4 documentation. V4 is the default version.\n\n## Local development\n\nFrom the repository root:\n\n```sh\njust install\njust docs\n```\n\n`just docs` starts the repository-pinned Mint development server. No globally installed Mint or\nMintlify CLI is required.\n\n## Validation\n\nFrom the repository root:\n\n```sh\njust check\n```\n\nThis validates the Mint configuration and OpenAPI definitions, checks links and redirects, and runs\nthe documentation accessibility checks.\n\n## V3 API reference source\n\nThe v3 API reference uses the checked-in `v3/openapi.json`, not a live Stainless URL.\nThe former source,\n`https://app.stainless.com/api/spec/documented/stagehand/openapi.documented.yml`,\nreturned HTTP 404 and prevented Mint validation from completing.\n\nThe snapshot was recovered on September 15, 2026 from the OpenAPI YAML blocks in the\npublished `https://docs.stagehand.dev/v3/api-reference/{language}/{page}.md` pages.\nAll 32 pages (eight endpoints each for Python, Java, Go, and Ruby) were compared.\nTheir common metadata, operations, and shared components agreed. The snapshot\ncombines those fragments without changing descriptions, schemas, authentication,\nservers, or code samples: eight endpoints, 67 schemas, and two security schemes.\nThe four language sections retain their existing navigation and generated page paths.\n\nTreat this as the versioned v3 documentation source. Future spec updates must be\nreviewed as content changes, including endpoint titles/URLs, request and response\nschemas, authentication, and code samples. Do not replace it with a different\nserver-generated spec just to make validation pass. Run the docs checks and\n`pnpm --filter @browserbasehq/stagehand-docs test:unit` after updates.\n\n## Publishing\n\nDocumentation is deployed through the Mintlify GitHub integration after changes reach the\nrepository's default branch.\n","packages/evals/evals.config.json":"{\n  \"version\": 2,\n  \"defaults\": {\n    \"env\": \"local\",\n    \"trials\": 3,\n    \"concurrency\": 3,\n    \"model\": null,\n    \"api\": false,\n    \"verbose\": false,\n    \"harness\": null,\n    \"successMode\": null\n  },\n  \"benchmarks\": {\n    \"webvoyager\": {\n      \"limit\": 25\n    },\n    \"onlineMind2Web\": {\n      \"limit\": 25\n    },\n    \"webtailbench\": {\n      \"limit\": 25\n    },\n    \"odysseysbench\": {\n      \"limit\": 25\n    }\n  },\n  \"harnesses\": {},\n  \"providers\": {},\n  \"verifier\": {},\n  \"campaign\": {}\n}\n","packages/core/CHANGELOG.md":"# Core Skill\n\nPath: `packages/core/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/CHANGELOG.md)","packages/core/package.json":"# Core Skill\n\nPath: `packages/core/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/package.json)","packages/core/README.md":"# core Documentation\n\nPath: `packages/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/README.md)","packages/core/tsconfig.json":"# Core Skill\n\nPath: `packages/core/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/tsconfig.json)","packages/cli/CHANGELOG.md":"# Cli Skill\n\nPath: `packages/cli/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/CHANGELOG.md)","packages/cli/package.json":"# Cli Skill\n\nPath: `packages/cli/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/package.json)","packages/cli/README.md":"# cli Documentation\n\nPath: `packages/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/README.md)","packages/cli/tsconfig.json":"# Cli Skill\n\nPath: `packages/cli/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/tsconfig.json)","packages/server-v3/CHANGELOG.md":"# Server-v3 Skill\n\nPath: `packages/server-v3/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/CHANGELOG.md)","packages/server-v3/openapi.v3.yaml":"# Server-v3 Skill\n\nPath: `packages/server-v3/openapi.v3.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/openapi.v3.yaml)","packages/server-v3/package.json":"# Server-v3 Skill\n\nPath: `packages/server-v3/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/package.json)","packages/server-v3/README.md":"# server-v3 Documentation\n\nPath: `packages/server-v3/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/README.md)","packages/server-v3/SDK_RELEASE_WORKFLOW.md":"# Server-v3 Skill\n\nPath: `packages/server-v3/SDK_RELEASE_WORKFLOW.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/SDK_RELEASE_WORKFLOW.md)","packages/server-v3/tsconfig.json":"# Server-v3 Skill\n\nPath: `packages/server-v3/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/tsconfig.json)","packages/server-v3/tsconfig.tests.json":"# Server-v3 Skill\n\nPath: `packages/server-v3/tsconfig.tests.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/tsconfig.tests.json)","packages/server-v4/CHANGELOG.md":"# Server-v4 Skill\n\nPath: `packages/server-v4/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/CHANGELOG.md)","packages/server-v4/openapi.v4.yaml":"# Server-v4 Skill\n\nPath: `packages/server-v4/openapi.v4.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/openapi.v4.yaml)","packages/server-v4/package.json":"# Server-v4 Skill\n\nPath: `packages/server-v4/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/package.json)","packages/server-v4/README.md":"# server-v4 Documentation\n\nPath: `packages/server-v4/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/README.md)","packages/server-v4/tsconfig.json":"# Server-v4 Skill\n\nPath: `packages/server-v4/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/tsconfig.json)","packages/core/lib/CHANGELOG.md":"# Lib Skill\n\nPath: `packages/core/lib/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/lib/CHANGELOG.md)","packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json":"# 20260327165733_fast_living_mummy Skill\n\nPath: `packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json)","packages/core/lib/v3/agent/tools/README.md":"# tools Documentation\n\nPath: `packages/core/lib/v3/agent/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/lib/v3/agent/tools/README.md)"},"files":{"packages/evals/package.json":"{\n  \"name\": \"@browserbasehq/stagehand-evals\",\n  \"version\": \"4.0.0\",\n  \"private\": true,\n  \"description\": \"Evaluation suite for Stagehand\",\n  \"bin\": {\n    \"evals\": \"./dist/cli/cli.js\"\n  },\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"pnpm run --parallel \\\"/^build:(esm|cli)$/\\\"\",\n    \"build:esm\": \"tsx scripts/build-esm.ts\",\n    \"build:cli\": \"tsx scripts/build-cli.ts\",\n    \"test\": \"vitest run --config packages/evals/vitest.config.ts --root ../.. packages/evals/tests\",\n    \"test:unit\": \"pnpm run test\",\n    \"typecheck\": \"tsc --noEmit -p tsconfig.json\",\n    \"test:evals\": \"tsx scripts/test-evals.ts --cli packages/evals/dist/cli/cli.js\",\n    \"eval\": \"tsx cli.ts\",\n    \"report:core\": \"tsx scripts/render-braintrust-core-report.ts\",\n    \"task:record\": \"tsx tasks/cli.ts\"\n  },\n  \"dependencies\": {\n    \"@ai-sdk/provider\": \"^2.0.0\",\n    \"@anthropic-ai/claude-agent-sdk\": \"catalog:\",\n    \"@braintrust/otel\": \"^0.2.1\",\n    \"@browserbasehq/sdk\": \"catalog:\",\n    \"@browserbasehq/stagehand\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-claude-agent-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-claude-cua-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-codex-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-cursor-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-deepagents-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-eve-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-fx-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-gemini-cua-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-mastra-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-pi-sdk\": \"workspace:*\",\n    \"@clack/prompts\": \"^1.3.0\",\n    \"@modelcontextprotocol/sdk\": \"catalog:\",\n    \"@opentelemetry/api\": \"catalog:\",\n    \"@opentelemetry/exporter-trace-otlp-proto\": \"^0.220.0\",\n    \"@opentelemetry/sdk-trace-base\": \"^2.9.0\",\n    \"@opentelemetry/sdk-trace-node\": \"^2.9.0\",\n    \"ai\": \"^5.0.133\",\n    \"braintrust\": \"^3.21.0\",\n    \"browse\": \"workspace:*\",\n    \"dotenv\": \"^17.3.1\",\n    \"langsmith\": \"^0.6.0\",\n    \"openai\": \"^4.104.0\",\n    \"playwright\": \">=1.55.1 <1.57.0\",\n    \"sharp\": \"^0.35.4\",\n    \"stagehand-v3\": \"npm:@browserbasehq/stagehand@3.7.1\",\n    \"tsx\": \"catalog:\",\n    \"ws\": \"^8.21.0\",\n    \"zod\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"chalk\": \"^5.4.1\",\n    \"esbuild\": \"catalog:\",\n    \"gray-matter\": \"^4.0.3\",\n    \"string-comparison\": \"^1.3.0\",\n    \"vite\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"engines\": {\n    \"node\": \">=24.0.0\"\n  }\n}\n","packages/evals/README.md":"# Stagehand Evals\n\nAgent benchmarks for Stagehand — `act`, `extract`, `observe`, `agent`, plus dataset-backed suites (WebVoyager, OnlineMind2Web, WebTailBench, Odysseys, HardBench).\n\nDriven by an interactive TUI (`evals`) or single-shot CLI (`evals run …`). Tasks are auto-discovered from `tasks/bench/<category>/` — no registration step.\n\n## Quickstart\n\nFrom the stagehand repo root:\n\n```bash\npnpm install\npnpm build:cli   # also: pnpm build, if you haven't built the workspace yet\n```\n\nThis links an `evals` binary on your `PATH`. Launch the REPL:\n\n```bash\nevals\n```\n\n![REPL with help output](./assets/readme/help.png)\n\nOr run a single target:\n\n```bash\nevals run extract -t 3 -c 5\nevals run b:webvoyager -l 10\n```\n\nA `.env` in `packages/evals/` is loaded automatically. Provide whichever provider keys (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_GENERATIVE_AI_API_KEY`, …) and `BROWSERBASE_API_KEY` / `BROWSERBASE_PROJECT_ID` you need.\n\n## TUI commands\n\nInside the REPL (or as `evals <command>` from your shell):\n\n| Command                        | What it does                                                             |\n| ------------------------------ | ------------------------------------------------------------------------ |\n| `run [target] [options]`       | Run evals. Target can be a tier, category, task, or benchmark shorthand. |\n| `list [tier] [--detailed]`     | List discovered tasks and categories.                                    |\n| `new <tier> <category> <name>` | Scaffold a new task file.                                                |\n| `config [set\\|reset\\|path]`    | Read or write defaults (env, trials, concurrency, model, …).             |\n| `experiments`                  | Inspect and compare Braintrust experiment runs.                          |\n| `help`                         | Show command help. Append `--help` to any command for details.           |\n\nUse `Esc` to abort an in-flight run without exiting the REPL.\n\n### Onboarding\n\n`evals welcome` runs a guided first-run flow built on the agent benchmarks: an animated intro (the Stagehand mark, what evals measures, EVALS), then a deterministic replay of a real WebVoyager task — three models in lanes, named generically (Opus, Grok, Sol — the fastest and cheapest fails on a wrong condition filter; timings and costs are illustrative), a podium by accuracy · speed · cost, and a chat-style look inside the winning run. It ends on a real `run b:webvoyager -l 3 --harness claude_code -e local` (`--harness codex` when the key is OpenAI's; `-e browserbase` when that's the available browser) when an Anthropic or OpenAI key and a browser exist, or hands off to `evals setup`, a guided flow that asks only for what's missing (Anthropic/OpenAI key, browser), writes `packages/evals/.env`, and offers the first real run.\n\nSet `EVALS_WELCOME_WIZARD=1` to auto-run the flow on the first REPL launch; `EVALS_NO_WELCOME=1` suppresses the first-run welcome. Any key advances the intro, Esc skips ahead, Ctrl+C cancels.\n\n## Run targets\n\n`evals run` accepts any of these shapes:\n\n| Target                                                 | Meaning                        |\n| ------------------------------------------------------ | ------------------------------ |\n| _(none)_ / `all`                                       | All bench tasks                |\n| `bench`                                                | Entire bench tier              |\n| `act` / `extract` / `observe` / `agent`                | A category                     |\n| `extract/extract_text`                                 | A specific task                |\n| `b:webvoyager` / `b:onlineMind2Web` / `b:webtailbench` | Dataset-backed benchmark suite |\n\n`evals list` shows everything that's been discovered:\n\n![evals list output](./assets/readme/list.png)\n\n## Common options\n\n| Flag                                                              | Purpose                                                                                 |\n| ----------------------------------------------------------------- | --------------------------------------------------------------------------------------- |\n| `-e, --env <local\\|browserbase>`                                  | Where the browser runs                                                                  |\n| `-t, --trials <n>`                                                | Trials per task                                                                         |\n| `-c, --concurrency <n>`                                           | Max parallel sessions                                                                   |\n| `-m, --model <id>`                                                | Override the model matrix                                                               |\n| `--api`                                                           | Run via the Stagehand API instead of the SDK                                            |\n| `--harness <name>`                                                | Which agent harness drives the bench task (`evals run --help` lists them)               |\n| `--tool <surface>`                                                | Tool surface the harness mounts; `stagehand_facade` is the Playwright-batch MCP surface |\n| `-l, --limit <n>` / `-s, --sample <n>` / `-f, --filter key=value` | Suite shaping for benchmark targets                                                     |\n| `--preview`                                                       | Print the resolved plan and exit — no browser, no LLM calls                             |\n| `-v, --verbose` / `--follow <id>`                                 | Stream every case's log lines (or one case's) above the live board                      |\n| `--json`                                                          | Print the end-of-run summary as JSON on stdout; the board and logs go to stderr         |\n\nConcurrency is capped per model provider under the global `-c` value (default 3 per provider); tune with `EVAL_PROVIDER_CONCURRENCY=openai=6,anthropic=4` or `evals config providers set openai concurrency 6`. The cap applies within one `evals run`: separately launched runs don't share it. When the agent's own provider call hits a 429 or connect timeout, that provider's width is halved for 60 s and the row is retried once; a Browserbase session-create 429 is retried once after 20 s. Retried rows carry `provider_throttled` in Braintrust. A rate-limited judge never re-runs the agent.\n\nTeam defaults live in the tracked `evals.config.json` (schema v2: `defaults`, `benchmarks`, `harnesses`, `providers`, `verifier`, `campaign`). `evals config set …` writes your personal overrides to the gitignored `evals.config.local.json` beside it; add `--shared` to change the team file. Flags always win. Most `defaults` then come from the local file, the tracked file and the `EVAL_*` env vars in that order; `EVAL_SUCCESS_MODE` and `STAGEHAND_BROWSER_TARGET` are the exceptions and beat the config, as does the env twin of every other section. `.env` loads from the cwd first (it wins), then `packages/evals/.env` (where `evals setup` saves keys), and shell exports always win — `evals doctor` reports which file supplied each provider key.\n\n`--preview` is useful for sanity-checking the plan before paying for a run:\n\n![evals run --preview output](./assets/readme/preview.png)\n\nA live run draws one row per case in flight: case id and site, the task, the phase it's in (`session` → `agent` → `verify`) and how long it has been running. Elapsed time turns yellow once a row outlasts three quarters of the finished ones. Rows waiting for a provider slot are counted in the queue line rather than shown; the `↓` marks a provider whose width was halved after a 429. The last few finishes show their outcome, and failures their session URL:\n\n![Live bench run](./assets/readme/run-live.png)\n\nEvery case that logs anything gets its own file under `.trajectories/<run>/logs/` (with the provider in the name), whether or not you're watching. `-v` streams those lines above the board, attributed by case id; `--follow <id>` streams one case. While a run is going, `v` cycles the stream off → all → one (the oldest running case) → off, `?` shows the keys, and `esc` stops the run:\n\n![Live bench run with -v](./assets/readme/run-verbose.png)\n\nThe end-of-run summary has one line per cell (harness × tool × model) with the pass rate, the failure kinds that aren't the agent's fault or aren't what they look like (`max_turns`, `sdk_error`, `gated`: the judge passed it, a deterministic check such as \"never used the browser\" failed it, and `ungraded`), and `retried`: rows retried after a provider 429, which may still have passed. Infra failures are listed with their reason and session URL; rubric fails by case id. `--json` emits the same as an object:\n\n![Run summary](./assets/readme/run-summary.png)\n\nWhen the judge grades nothing (a retired model, a bad key), every row fails closed, so the pass rate says nothing about the agent. The run says so and exits 1:\n\n![Dead-judge banner](./assets/readme/run-dead-judge.png)\n\n`evals doctor --harness a,b [--probe]` probes each harness (binary, key, key validity, extras like heap or `CODEX_HOME`), the judge and Browserbase, and prints the fix command for each failure that has one:\n\n![evals doctor](./assets/readme/doctor.png)\n\n## Shared harness behavior\n\nSee [the harness contract](docs/harness-contract.md) for tool surfaces, prompt policy,\nbudget units, session diagnostics, verification, and usage accounting.\nSee [HardBench](datasets/hardbenchmark/README.md) for corpus selection and rubric v1.2.\n\n## Adding a bench task\n\n```bash\nevals new bench extract my_new_task\n```\n\nThis drops a `defineBenchTask`-based file into `tasks/bench/extract/`. It will show up in `evals list` on next launch — no config edit needed.\n\n```ts\n// tasks/bench/extract/my_new_task.ts\nimport { defineBenchTask } from \"../../../framework/defineTask.js\";\n\nexport default defineBenchTask({\n  name: \"my_new_task\",\n  tags: [\"regression\"],\n  run: async ({ stagehand, logger }) => {\n    // ... drive stagehand, return { _success: boolean, ... }\n  },\n});\n```\n\n## Tracing / Observability\n\nRuns stream into Braintrust when `BRAINTRUST_API_KEY` is set; otherwise a local summary prints to stdout. Use `evals experiments` to inspect and diff past Braintrust runs.\n\n### Recording observation tasks\n\nUse the [observation task recorder](tasks/README.md) to capture a rendered\npage for a static `extract()` or `observe()` regression. It provides a standalone\nHTML artifact and provenance metadata; dynamic application replay is outside its\nscope.\n","packages/evals/tsconfig.json":"{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"noImplicitAny\": true,\n    \"skipLibCheck\": true,\n    \"strict\": false,\n    \"target\": \"ES2022\",\n    \"types\": [\"node\"],\n    \"useUnknownInCatchVariables\": false\n  },\n  \"include\": [\"**/*.ts\"],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n","packages/docs/docs.json":"{\n  \"$schema\": \"https://mintlify.com/docs.json\",\n  \"theme\": \"maple\",\n  \"name\": \"Stagehand\",\n  \"colors\": {\n    \"primary\": \"#00C851\",\n    \"light\": \"#00C851\",\n    \"dark\": \"#00C851\"\n  },\n  \"favicon\": \"/images/favicon.svg\",\n  \"seo\": {\n    \"indexing\": \"all\",\n    \"metatags\": {\n      \"og:type\": \"website\",\n      \"og:site_name\": \"Stagehand Docs\"\n    }\n  },\n  \"api\": {\n    \"openapi\": \"v3/openapi.json\"\n  },\n  \"navigation\": {\n    \"versions\": [\n      {\n        \"version\": \"v4\",\n        \"groups\": [\n          {\n            \"group\": \"First steps\",\n            \"pages\": [\n              \"v4/first-steps/introduction\",\n              \"v4/first-steps/quickstart\",\n              \"v4/first-steps/installation\",\n              \"v4/first-steps/ai-rules\"\n            ]\n          },\n          {\n            \"group\": \"The basics\",\n            \"pages\": [\"v4/basics/act\", \"v4/basics/extract\", \"v4/basics/observe\", \"v4/basics/webmcp\"]\n          },\n          {\n            \"group\": \"Configuration\",\n            \"pages\": [\"v4/configuration/browser\", \"v4/configuration/logging\"]\n          },\n          {\n            \"group\": \"Add-ons\",\n            \"pages\": [\n              \"v4/add-ons/search\",\n              \"v4/add-ons/fetch\",\n              \"v4/configuration/models\",\n              \"v4/configuration/observability\"\n            ]\n          },\n          {\n            \"group\": \"Integrations\",\n            \"pages\": [\n              \"v4/integrations/overview\",\n              {\n                \"group\": \"Agent Frameworks\",\n                \"pages\": [\n                  \"v4/integrations/agent-frameworks/overview\",\n                  \"v4/integrations/agent-frameworks/claude-cua-toolset-quickstart\",\n                  \"v4/integrations/agent-frameworks/openai-cua-toolset-quickstart\",\n                  \"v4/integrations/agent-frameworks/eve\",\n                  \"v4/integrations/agent-frameworks/deep-agents\",\n                  \"v4/integrations/agent-frameworks/crewai\",\n                  \"v4/integrations/agent-frameworks/mastra\",\n                  \"v4/integrations/agent-frameworks/vercel-ai-sdk\"\n                ]\n              },\n              {\n                \"group\": \"CLI Agents\",\n                \"pages\": [\n                  \"v4/integrations/cli-agents/overview\",\n                  \"v4/integrations/cli-agents/claude-code\",\n                  \"v4/integrations/cli-agents/codex\",\n                  \"v4/integrations/cli-agents/cursor\",\n                  \"v4/integrations/cli-agents/fx\",\n                  \"v4/integrations/cli-agents/pi\"\n                ]\n              },\n              {\n                \"group\": \"Applications\",\n                \"pages\": [\"v4/integrations/applications/stripe\"]\n              }\n            ]\n          },\n          {\n            \"group\": \"Best practices\",\n            \"pages\": [\n              \"v4/best-practices/prompting-best-practices\",\n              \"v4/best-practices/usecase-observe\",\n              \"v4/best-practices/caching\",\n              \"v4/best-practices/using-multiple-tabs\",\n              \"v4/best-practices/user-data\",\n              \"v4/best-practices/speed-optimization\",\n              \"v4/best-practices/cost-optimization\",\n              \"v4/best-practices/deployments\"\n            ]\n          },\n          {\n            \"group\": \"Cookbooks\",\n            \"pages\": [\n              \"v4/cookbooks/overview\",\n              \"v4/cookbooks/persisted-login\",\n              \"v4/cookbooks/paginated-catalog\",\n              \"v4/cookbooks/files-to-bucket\",\n              \"v4/cookbooks/approve-form-submission\",\n              \"v4/cookbooks/ai-sdk-research-agent\"\n            ]\n          },\n          {\n            \"group\": \"Migration guide\",\n            \"pages\": [\"v4/migrations/v3\", \"v4/migrations/playwright\"]\n          },\n          {\n            \"group\": \"SDK reference\",\n            \"pages\": [\n              \"v4/reference/stagehand\",\n              \"v4/reference/context\",\n              \"v4/reference/clipboard\",\n              \"v4/reference/page\",\n              \"v4/reference/webmcp\",\n              \"v4/reference/response\",\n              \"v4/reference/locator\"\n            ]\n          }\n        ]\n      },\n      {\n        \"version\": \"v3\",\n        \"dropdowns\": [\n          {\n            \"dropdown\": \"TypeScript\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/first-steps/introduction\"],\n            \"groups\": [\n              {\n                \"group\": \"First Steps\",\n                \"pages\": [\n                  \"v3/first-steps/introduction\",\n                  \"v3/first-steps/quickstart\",\n                  \"v3/first-steps/installation\",\n                  \"v3/first-steps/ai-rules\"\n                ]\n              },\n              {\n                \"group\": \"The Basics\",\n                \"pages\": [\n                  \"v3/basics/agent\",\n                  \"v3/basics/act\",\n                  \"v3/basics/extract\",\n                  \"v3/basics/observe\",\n                  \"v3/basics/webmcp\",\n                  \"v3/basics/evals\"\n                ]\n              },\n              {\n                \"group\": \"Configuration\",\n                \"pages\": [\n                  \"v3/configuration/browser\",\n                  \"v3/configuration/observability\",\n                  \"v3/configuration/logging\",\n                  \"v3/configuration/models\"\n                ]\n              },\n              {\n                \"group\": \"Best Practices\",\n                \"pages\": [\n                  \"v3/best-practices/caching\",\n                  \"v3/best-practices/cost-optimization\",\n                  \"v3/best-practices/deterministic-agent\",\n                  \"v3/best-practices/using-multiple-tabs\",\n                  \"v3/best-practices/deployments\",\n                  \"v3/best-practices/history\",\n                  \"v3/best-practices/computer-use\",\n                  \"v3/best-practices/agent-fallbacks\",\n                  \"v3/best-practices/prompting-best-practices\",\n                  \"v3/best-practices/mcp-integrations\",\n                  \"v3/best-practices/speed-optimization\"\n                ]\n              },\n              {\n                \"group\": \"Integrations\",\n                \"pages\": [\n                  {\n                    \"group\": \"MCP Server\",\n                    \"pages\": [\n                      \"v3/integrations/mcp/introduction\",\n                      \"v3/integrations/mcp/setup\",\n                      \"v3/integrations/mcp/tools\",\n                      \"v3/integrations/mcp/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"CrewAI\",\n                    \"pages\": [\n                      \"v3/integrations/crew-ai/introduction\",\n                      \"v3/integrations/crew-ai/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Langchain\",\n                    \"pages\": [\n                      \"v3/integrations/langchain/introduction\",\n                      \"v3/integrations/langchain/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Next.js + Vercel\",\n                    \"pages\": [\n                      \"v3/integrations/vercel/introduction\",\n                      \"v3/integrations/vercel/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Convex\",\n                    \"pages\": [\n                      \"v3/integrations/convex/introduction\",\n                      \"v3/integrations/convex/configuration\"\n                    ]\n                  },\n                  \"v3/integrations/playwright\",\n                  \"v3/integrations/puppeteer\",\n                  \"v3/integrations/selenium\"\n                ]\n              },\n              {\n                \"group\": \"Reference\",\n                \"pages\": [\n                  \"v3/references/stagehand\",\n                  \"v3/references/agent\",\n                  \"v3/references/act\",\n                  \"v3/references/extract\",\n                  \"v3/references/observe\",\n                  \"v3/references/context\",\n                  \"v3/references/clipboard\",\n                  \"v3/references/page\",\n                  \"v3/references/locator\",\n                  \"v3/references/deeplocator\",\n                  \"v3/references/response\"\n                ]\n              },\n              {\n                \"group\": \"Migration Guides\",\n                \"pages\": [\"v3/migrations/v2\", \"v3/migrations/python\"]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Python\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/python\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/python\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/python\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Java\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/java\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/java\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/java\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Go\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/go\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/go\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/go\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Ruby\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/ruby\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/ruby\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/ruby\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      {\n        \"version\": \"v2\",\n        \"groups\": [\n          {\n            \"group\": \"First Steps\",\n            \"pages\": [\n              \"v2/first-steps/introduction\",\n              \"v2/first-steps/quickstart\",\n              \"v2/first-steps/installation\",\n              \"v2/first-steps/ai-rules\"\n            ]\n          },\n          {\n            \"group\": \"The Basics\",\n            \"pages\": [\"v2/basics/agent\", \"v2/basics/act\", \"v2/basics/extract\", \"v2/basics/observe\"]\n          },\n          {\n            \"group\": \"Configuration\",\n            \"pages\": [\n              \"v2/configuration/browser\",\n              \"v2/configuration/observability\",\n              \"v2/configuration/logging\",\n              \"v2/configuration/models\",\n              \"v2/configuration/evals\"\n            ]\n          },\n          {\n            \"group\": \"Best Practices\",\n            \"pages\": [\n              \"v2/best-practices/caching\",\n              \"v2/best-practices/cost-optimization\",\n              \"v2/best-practices/using-multiple-tabs\",\n              \"v2/best-practices/working-with-iframes\",\n              \"v2/best-practices/deployments\",\n              \"v2/best-practices/computer-use\",\n              \"v2/best-practices/contributing\",\n              \"v2/best-practices/playwright-interop\",\n              \"v2/best-practices/build-agent\",\n              \"v2/best-practices/agent-fallbacks\",\n              \"v2/best-practices/prompting-best-practices\",\n              \"v2/best-practices/mcp-integrations\",\n              \"v2/best-practices/speed-optimization\"\n            ]\n          },\n          {\n            \"group\": \"Integrations\",\n            \"pages\": [\n              {\n                \"group\": \"MCP Server\",\n                \"pages\": [\n                  \"v2/integrations/mcp/introduction\",\n                  \"v2/integrations/mcp/setup\",\n                  \"v2/integrations/mcp/tools\",\n                  \"v2/integrations/mcp/configuration\"\n                ]\n              },\n              {\n                \"group\": \"CrewAI\",\n                \"pages\": [\n                  \"v2/integrations/crew-ai/introduction\",\n                  \"v2/integrations/crew-ai/configuration\"\n                ]\n              },\n              {\n                \"group\": \"Langchain\",\n                \"pages\": [\n                  \"v2/integrations/langchain/introduction\",\n                  \"v2/integrations/langchain/configuration\"\n                ]\n              },\n              {\n                \"group\": \"Next.js + Vercel\",\n                \"pages\": [\n                  \"v2/integrations/vercel/introduction\",\n                  \"v2/integrations/vercel/configuration\"\n                ]\n              }\n            ]\n          },\n          {\n            \"group\": \"Reference\",\n            \"pages\": [\n              \"v2/references/stagehand\",\n              \"v2/references/act\",\n              \"v2/references/extract\",\n              \"v2/references/observe\",\n              \"v2/references/agent\"\n            ]\n          }\n        ]\n      }\n    ],\n    \"global\": {\n      \"anchors\": [\n        {\n          \"anchor\": \"Discord\",\n          \"href\": \"https://discord.gg/stagehand\",\n          \"icon\": \"discord\"\n        },\n        {\n          \"anchor\": \"GitHub\",\n          \"href\": \"https://github.com/browserbase/stagehand\",\n          \"icon\": \"github\"\n        },\n        {\n          \"anchor\": \"Changelog\",\n          \"href\": \"https://github.com/browserbase/stagehand/releases\",\n          \"icon\": \"scroll\"\n        }\n      ]\n    }\n  },\n  \"logo\": {\n    \"light\": \"/logo/light_logo.png\",\n    \"dark\": \"/logo/dark_logo.png\",\n    \"href\": \"https://stagehand.dev\"\n  },\n  \"navbar\": {\n    \"links\": [\n      {\n        \"label\": \"Discord\",\n        \"href\": \"https://discord.gg/stagehand\"\n      },\n      {\n        \"label\": \"Support\",\n        \"href\": \"mailto:support@browserbase.com\"\n      }\n    ]\n  },\n  \"footer\": {\n    \"socials\": {\n      \"discord\": \"https://discord.gg/stagehand\",\n      \"x\": \"https://x.com/stagehanddev\",\n      \"github\": \"https://github.com/browserbase/stagehand\",\n      \"linkedin\": \"https://linkedin.com/company/browserbasehq\"\n    }\n  },\n  \"integrations\": {\n    \"posthog\": {\n      \"apiKey\": \"phc_hmwkFrlc9UVrdE1jyG8AEKoCQCSr8dScjsRpKoLBEiV\",\n      \"apiHost\": \"https://us.i.posthog.com\"\n    }\n  },\n  \"contextual\": {\n    \"options\": [\"copy\", \"chatgpt\", \"claude\", \"view\"]\n  },\n  \"redirects\": [\n    {\n      \"source\": \"/first-steps/:slug*\",\n      \"destination\": \"/v4/first-steps/:slug*\"\n    },\n    {\n      \"source\": \"/basics/act\",\n      \"destination\": \"/v4/basics/act\"\n    },\n    {\n      \"source\": \"/basics/extract\",\n      \"destination\": \"/v4/basics/extract\"\n    },\n    {\n      \"source\": \"/basics/observe\",\n      \"destination\": \"/v4/basics/observe\"\n    },\n    {\n      \"source\": \"/basics/webmcp\",\n      \"destination\": \"/v4/basics/webmcp\"\n    },\n    {\n      \"source\": \"/basics/:slug*\",\n      \"destination\": \"/v3/basics/:slug*\"\n    },\n    {\n      \"source\": \"/configuration/:slug*\",\n      \"destination\": \"/v4/configuration/:slug*\"\n    },\n    {\n      \"source\": \"/best-practices/caching\",\n      \"destination\": \"/v4/best-practices/caching\"\n    },\n    {\n      \"source\": \"/best-practices/cost-optimization\",\n      \"destination\": \"/v4/best-practices/cost-optimization\"\n    },\n    {\n      \"source\": \"/best-practices/deployments\",\n      \"destination\": \"/v4/best-practices/deployments\"\n    },\n    {\n      \"source\": \"/best-practices/mcp-integrations\",\n      \"destination\": \"/v4/integrations/cli-agents/overview\"\n    },\n    {\n      \"source\": \"/best-practices/prompting-best-practices\",\n      \"destination\": \"/v4/best-practices/prompting-best-practices\"\n    },\n    {\n      \"source\": \"/best-practices/speed-optimization\",\n      \"destination\": \"/v4/best-practices/speed-optimization\"\n    },\n    {\n      \"source\": \"/best-practices/usecase-observe\",\n      \"destination\": \"/v4/best-practices/usecase-observe\"\n    },\n    {\n      \"source\": \"/best-practices/user-data\",\n      \"destination\": \"/v4/best-practices/user-data\"\n    },\n    {\n      \"source\": \"/best-practices/using-multiple-tabs\",\n      \"destination\": \"/v4/best-practices/using-multiple-tabs\"\n    },\n    {\n      \"source\": \"/best-practices/:slug*\",\n      \"destination\": \"/v3/best-practices/:slug*\"\n    },\n    {\n      \"source\": \"/v4/integrations/agents\",\n      \"destination\": \"/v4/integrations/agent-frameworks/overview\"\n    },\n    {\n      \"source\": \"/v4/integrations/eve\",\n      \"destination\": \"/v4/integrations/agent-frameworks/eve\"\n    },\n    {\n      \"source\": \"/v4/integrations/deep-agents\",\n      \"destination\": \"/v4/integrations/agent-frameworks/deep-agents\"\n    },\n    {\n      \"source\": \"/v4/integrations/crewai\",\n      \"destination\": \"/v4/integrations/agent-frameworks/crewai\"\n    },\n    {\n      \"source\": \"/v4/integrations/mastra\",\n      \"destination\": \"/v4/integrations/agent-frameworks/mastra\"\n    },\n    {\n      \"source\": \"/v4/integrations/vercel-ai-sdk\",\n      \"destination\": \"/v4/integrations/agent-frameworks/vercel-ai-sdk\"\n    },\n    {\n      \"source\": \"/v4/integrations/cli-agents\",\n      \"destination\": \"/v4/integrations/cli-agents/overview\"\n    },\n    {\n      \"source\": \"/v4/integrations/claude-code\",\n      \"destination\": \"/v4/integrations/cli-agents/claude-code\"\n    },\n    {\n      \"source\": \"/v4/integrations/codex\",\n      \"destination\": \"/v4/integrations/cli-agents/codex\"\n    },\n    {\n      \"source\": \"/v4/integrations/fx\",\n      \"destination\": \"/v4/integrations/cli-agents/fx\"\n    },\n    {\n      \"source\": \"/v4/integrations/pi\",\n      \"destination\": \"/v4/integrations/cli-agents/pi\"\n    },\n    {\n      \"source\": \"/v4/integrations/stripe\",\n      \"destination\": \"/v4/integrations/applications/stripe\"\n    },\n    {\n      \"source\": \"/integrations/mcp/:slug*\",\n      \"destination\": \"/v3/integrations/mcp/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/crew-ai/:slug*\",\n      \"destination\": \"/v3/integrations/crew-ai/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/langchain/:slug*\",\n      \"destination\": \"/v3/integrations/langchain/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/vercel/:slug*\",\n      \"destination\": \"/v3/integrations/vercel/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/convex/:slug*\",\n      \"destination\": \"/v3/integrations/convex/:slug*\"\n    },\n    {\n      \"source\": \"/references/:slug*\",\n      \"destination\": \"/v3/references/:slug*\"\n    },\n    {\n      \"source\": \"/reference/:slug*\",\n      \"destination\": \"/v4/reference/:slug*\"\n    },\n    {\n      \"source\": \"/migrations/playwright\",\n      \"destination\": \"/v4/migrations/playwright\"\n    },\n    {\n      \"source\": \"/migrations/v3\",\n      \"destination\": \"/v4/migrations/v3\"\n    },\n    {\n      \"source\": \"/migrations/:slug*\",\n      \"destination\": \"/v3/migrations/:slug*\"\n    },\n    {\n      \"source\": \"/v4/examples/compare-pages-in-parallel\",\n      \"destination\": \"/v4/best-practices/using-multiple-tabs\"\n    },\n    {\n      \"source\": \"/v4/examples/model-gateway-extract\",\n      \"destination\": \"/v4/configuration/models#model-gateway\"\n    },\n    {\n      \"source\": \"/v4/examples/observe-then-act\",\n      \"destination\": \"/v4/cookbooks/paginated-catalog\"\n    },\n    {\n      \"source\": \"/v4/examples/tanstack-ai-extraction-tool\",\n      \"destination\": \"/v4/cookbooks/overview\"\n    },\n    {\n      \"source\": \"/v4/examples/overview\",\n      \"destination\": \"/v4/cookbooks/overview\"\n    },\n    {\n      \"source\": \"/v4/examples/approve-form-submission\",\n      \"destination\": \"/v4/cookbooks/approve-form-submission\"\n    },\n    {\n      \"source\": \"/v4/examples/paginated-catalog\",\n      \"destination\": \"/v4/cookbooks/paginated-catalog\"\n    },\n    {\n      \"source\": \"/v4/examples/files-to-bucket\",\n      \"destination\": \"/v4/cookbooks/files-to-bucket\"\n    },\n    {\n      \"source\": \"/v4/examples/ai-sdk-research-agent\",\n      \"destination\": \"/v4/cookbooks/ai-sdk-research-agent\"\n    }\n  ]\n}\n","packages/docs/package.json":"{\n  \"name\": \"@browserbasehq/stagehand-docs\",\n  \"version\": \"4.0.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"check\": \"mint validate && mint broken-links --check-anchors --check-redirects --check-snippets && mint a11y --skip-contrast\",\n    \"typecheck\": \"pnpm run check\",\n    \"test:unit\": \"vitest run --root ../.. packages/docs/tests\",\n    \"dev\": \"mint dev\",\n    \"sync-sdk\": \"node scripts/sync-sdk-docs.js\"\n  },\n  \"devDependencies\": {\n    \"@mdx-js/mdx\": \"catalog:\",\n    \"mint\": \"catalog:\"\n  }\n}\n","packages/docs/README.md":"# Stagehand docs\n\nThis site contains the Stagehand v2, v3, and v4 documentation. V4 is the default version.\n\n## Local development\n\nFrom the repository root:\n\n```sh\njust install\njust docs\n```\n\n`just docs` starts the repository-pinned Mint development server. No globally installed Mint or\nMintlify CLI is required.\n\n## Validation\n\nFrom the repository root:\n\n```sh\njust check\n```\n\nThis validates the Mint configuration and OpenAPI definitions, checks links and redirects, and runs\nthe documentation accessibility checks.\n\n## V3 API reference source\n\nThe v3 API reference uses the checked-in `v3/openapi.json`, not a live Stainless URL.\nThe former source,\n`https://app.stainless.com/api/spec/documented/stagehand/openapi.documented.yml`,\nreturned HTTP 404 and prevented Mint validation from completing.\n\nThe snapshot was recovered on September 15, 2026 from the OpenAPI YAML blocks in the\npublished `https://docs.stagehand.dev/v3/api-reference/{language}/{page}.md` pages.\nAll 32 pages (eight endpoints each for Python, Java, Go, and Ruby) were compared.\nTheir common metadata, operations, and shared components agreed. The snapshot\ncombines those fragments without changing descriptions, schemas, authentication,\nservers, or code samples: eight endpoints, 67 schemas, and two security schemes.\nThe four language sections retain their existing navigation and generated page paths.\n\nTreat this as the versioned v3 documentation source. Future spec updates must be\nreviewed as content changes, including endpoint titles/URLs, request and response\nschemas, authentication, and code samples. Do not replace it with a different\nserver-generated spec just to make validation pass. Run the docs checks and\n`pnpm --filter @browserbasehq/stagehand-docs test:unit` after updates.\n\n## Publishing\n\nDocumentation is deployed through the Mintlify GitHub integration after changes reach the\nrepository's default branch.\n","packages/evals/evals.config.json":"{\n  \"version\": 2,\n  \"defaults\": {\n    \"env\": \"local\",\n    \"trials\": 3,\n    \"concurrency\": 3,\n    \"model\": null,\n    \"api\": false,\n    \"verbose\": false,\n    \"harness\": null,\n    \"successMode\": null\n  },\n  \"benchmarks\": {\n    \"webvoyager\": {\n      \"limit\": 25\n    },\n    \"onlineMind2Web\": {\n      \"limit\": 25\n    },\n    \"webtailbench\": {\n      \"limit\": 25\n    },\n    \"odysseysbench\": {\n      \"limit\": 25\n    }\n  },\n  \"harnesses\": {},\n  \"providers\": {},\n  \"verifier\": {},\n  \"campaign\": {}\n}\n","packages/core/CHANGELOG.md":"# Core Skill\n\nPath: `packages/core/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/CHANGELOG.md)","packages/core/package.json":"# Core Skill\n\nPath: `packages/core/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/package.json)","packages/core/README.md":"# core Documentation\n\nPath: `packages/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/README.md)","packages/core/tsconfig.json":"# Core Skill\n\nPath: `packages/core/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/tsconfig.json)","packages/cli/CHANGELOG.md":"# Cli Skill\n\nPath: `packages/cli/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/CHANGELOG.md)","packages/cli/package.json":"# Cli Skill\n\nPath: `packages/cli/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/package.json)","packages/cli/README.md":"# cli Documentation\n\nPath: `packages/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/README.md)","packages/cli/tsconfig.json":"# Cli Skill\n\nPath: `packages/cli/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/tsconfig.json)","packages/server-v3/CHANGELOG.md":"# Server-v3 Skill\n\nPath: `packages/server-v3/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/CHANGELOG.md)","packages/server-v3/openapi.v3.yaml":"# Server-v3 Skill\n\nPath: `packages/server-v3/openapi.v3.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/openapi.v3.yaml)","packages/server-v3/package.json":"# Server-v3 Skill\n\nPath: `packages/server-v3/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/package.json)","packages/server-v3/README.md":"# server-v3 Documentation\n\nPath: `packages/server-v3/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/README.md)","packages/server-v3/SDK_RELEASE_WORKFLOW.md":"# Server-v3 Skill\n\nPath: `packages/server-v3/SDK_RELEASE_WORKFLOW.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/SDK_RELEASE_WORKFLOW.md)","packages/server-v3/tsconfig.json":"# Server-v3 Skill\n\nPath: `packages/server-v3/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/tsconfig.json)","packages/server-v3/tsconfig.tests.json":"# Server-v3 Skill\n\nPath: `packages/server-v3/tsconfig.tests.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/tsconfig.tests.json)","packages/server-v4/CHANGELOG.md":"# Server-v4 Skill\n\nPath: `packages/server-v4/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/CHANGELOG.md)","packages/server-v4/openapi.v4.yaml":"# Server-v4 Skill\n\nPath: `packages/server-v4/openapi.v4.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/openapi.v4.yaml)","packages/server-v4/package.json":"# Server-v4 Skill\n\nPath: `packages/server-v4/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/package.json)","packages/server-v4/README.md":"# server-v4 Documentation\n\nPath: `packages/server-v4/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/README.md)","packages/server-v4/tsconfig.json":"# Server-v4 Skill\n\nPath: `packages/server-v4/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/tsconfig.json)","packages/core/lib/CHANGELOG.md":"# Lib Skill\n\nPath: `packages/core/lib/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/lib/CHANGELOG.md)","packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json":"# 20260327165733_fast_living_mummy Skill\n\nPath: `packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json)","packages/core/lib/v3/agent/tools/README.md":"# tools Documentation\n\nPath: `packages/core/lib/v3/agent/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/lib/v3/agent/tools/README.md)"},"items":[{"name":"CHANGELOG.md","path":"packages/cli/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/CHANGELOG.md","title":"Cli Skill","category":"anthropic-skill","format":"markdown","content":"# Cli Skill\n\nPath: `packages/cli/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/CHANGELOG.md)","tokens":300,"sizeBytes":164},{"name":"package.json","path":"packages/cli/package.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/package.json","title":"Cli Skill","category":"anthropic-skill","format":"json","content":"# Cli Skill\n\nPath: `packages/cli/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/package.json)","tokens":300,"sizeBytes":164},{"name":"tsconfig.json","path":"packages/cli/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/tsconfig.json","title":"Cli Skill","category":"anthropic-skill","format":"json","content":"# Cli Skill\n\nPath: `packages/cli/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/tsconfig.json)","tokens":300,"sizeBytes":166},{"name":"CHANGELOG.md","path":"packages/core/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/CHANGELOG.md","title":"Core Skill","category":"anthropic-skill","format":"markdown","content":"# Core Skill\n\nPath: `packages/core/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/CHANGELOG.md)","tokens":300,"sizeBytes":167},{"name":"CHANGELOG.md","path":"packages/core/lib/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/lib/CHANGELOG.md","title":"Lib Skill","category":"anthropic-skill","format":"markdown","content":"# Lib Skill\n\nPath: `packages/core/lib/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/lib/CHANGELOG.md)","tokens":300,"sizeBytes":174},{"name":"package.json","path":"packages/core/package.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/package.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `packages/core/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/package.json)","tokens":300,"sizeBytes":167},{"name":"tsconfig.json","path":"packages/core/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/tsconfig.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `packages/core/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/tsconfig.json)","tokens":300,"sizeBytes":169},{"name":"docs.json","path":"packages/docs/docs.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/docs/docs.json","title":"Stagehand","category":"anthropic-skill","format":"json","content":"{\n  \"$schema\": \"https://mintlify.com/docs.json\",\n  \"theme\": \"maple\",\n  \"name\": \"Stagehand\",\n  \"colors\": {\n    \"primary\": \"#00C851\",\n    \"light\": \"#00C851\",\n    \"dark\": \"#00C851\"\n  },\n  \"favicon\": \"/images/favicon.svg\",\n  \"seo\": {\n    \"indexing\": \"all\",\n    \"metatags\": {\n      \"og:type\": \"website\",\n      \"og:site_name\": \"Stagehand Docs\"\n    }\n  },\n  \"api\": {\n    \"openapi\": \"v3/openapi.json\"\n  },\n  \"navigation\": {\n    \"versions\": [\n      {\n        \"version\": \"v4\",\n        \"groups\": [\n          {\n            \"group\": \"First steps\",\n            \"pages\": [\n              \"v4/first-steps/introduction\",\n              \"v4/first-steps/quickstart\",\n              \"v4/first-steps/installation\",\n              \"v4/first-steps/ai-rules\"\n            ]\n          },\n          {\n            \"group\": \"The basics\",\n            \"pages\": [\"v4/basics/act\", \"v4/basics/extract\", \"v4/basics/observe\", \"v4/basics/webmcp\"]\n          },\n          {\n            \"group\": \"Configuration\",\n            \"pages\": [\"v4/configuration/browser\", \"v4/configuration/logging\"]\n          },\n          {\n            \"group\": \"Add-ons\",\n            \"pages\": [\n              \"v4/add-ons/search\",\n              \"v4/add-ons/fetch\",\n              \"v4/configuration/models\",\n              \"v4/configuration/observability\"\n            ]\n          },\n          {\n            \"group\": \"Integrations\",\n            \"pages\": [\n              \"v4/integrations/overview\",\n              {\n                \"group\": \"Agent Frameworks\",\n                \"pages\": [\n                  \"v4/integrations/agent-frameworks/overview\",\n                  \"v4/integrations/agent-frameworks/claude-cua-toolset-quickstart\",\n                  \"v4/integrations/agent-frameworks/openai-cua-toolset-quickstart\",\n                  \"v4/integrations/agent-frameworks/eve\",\n                  \"v4/integrations/agent-frameworks/deep-agents\",\n                  \"v4/integrations/agent-frameworks/crewai\",\n                  \"v4/integrations/agent-frameworks/mastra\",\n                  \"v4/integrations/agent-frameworks/vercel-ai-sdk\"\n                ]\n              },\n              {\n                \"group\": \"CLI Agents\",\n                \"pages\": [\n                  \"v4/integrations/cli-agents/overview\",\n                  \"v4/integrations/cli-agents/claude-code\",\n                  \"v4/integrations/cli-agents/codex\",\n                  \"v4/integrations/cli-agents/cursor\",\n                  \"v4/integrations/cli-agents/fx\",\n                  \"v4/integrations/cli-agents/pi\"\n                ]\n              },\n              {\n                \"group\": \"Applications\",\n                \"pages\": [\"v4/integrations/applications/stripe\"]\n              }\n            ]\n          },\n          {\n            \"group\": \"Best practices\",\n            \"pages\": [\n              \"v4/best-practices/prompting-best-practices\",\n              \"v4/best-practices/usecase-observe\",\n              \"v4/best-practices/caching\",\n              \"v4/best-practices/using-multiple-tabs\",\n              \"v4/best-practices/user-data\",\n              \"v4/best-practices/speed-optimization\",\n              \"v4/best-practices/cost-optimization\",\n              \"v4/best-practices/deployments\"\n            ]\n          },\n          {\n            \"group\": \"Cookbooks\",\n            \"pages\": [\n              \"v4/cookbooks/overview\",\n              \"v4/cookbooks/persisted-login\",\n              \"v4/cookbooks/paginated-catalog\",\n              \"v4/cookbooks/files-to-bucket\",\n              \"v4/cookbooks/approve-form-submission\",\n              \"v4/cookbooks/ai-sdk-research-agent\"\n            ]\n          },\n          {\n            \"group\": \"Migration guide\",\n            \"pages\": [\"v4/migrations/v3\", \"v4/migrations/playwright\"]\n          },\n          {\n            \"group\": \"SDK reference\",\n            \"pages\": [\n              \"v4/reference/stagehand\",\n              \"v4/reference/context\",\n              \"v4/reference/clipboard\",\n              \"v4/reference/page\",\n              \"v4/reference/webmcp\",\n              \"v4/reference/response\",\n              \"v4/reference/locator\"\n            ]\n          }\n        ]\n      },\n      {\n        \"version\": \"v3\",\n        \"dropdowns\": [\n          {\n            \"dropdown\": \"TypeScript\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/first-steps/introduction\"],\n            \"groups\": [\n              {\n                \"group\": \"First Steps\",\n                \"pages\": [\n                  \"v3/first-steps/introduction\",\n                  \"v3/first-steps/quickstart\",\n                  \"v3/first-steps/installation\",\n                  \"v3/first-steps/ai-rules\"\n                ]\n              },\n              {\n                \"group\": \"The Basics\",\n                \"pages\": [\n                  \"v3/basics/agent\",\n                  \"v3/basics/act\",\n                  \"v3/basics/extract\",\n                  \"v3/basics/observe\",\n                  \"v3/basics/webmcp\",\n                  \"v3/basics/evals\"\n                ]\n              },\n              {\n                \"group\": \"Configuration\",\n                \"pages\": [\n                  \"v3/configuration/browser\",\n                  \"v3/configuration/observability\",\n                  \"v3/configuration/logging\",\n                  \"v3/configuration/models\"\n                ]\n              },\n              {\n                \"group\": \"Best Practices\",\n                \"pages\": [\n                  \"v3/best-practices/caching\",\n                  \"v3/best-practices/cost-optimization\",\n                  \"v3/best-practices/deterministic-agent\",\n                  \"v3/best-practices/using-multiple-tabs\",\n                  \"v3/best-practices/deployments\",\n                  \"v3/best-practices/history\",\n                  \"v3/best-practices/computer-use\",\n                  \"v3/best-practices/agent-fallbacks\",\n                  \"v3/best-practices/prompting-best-practices\",\n                  \"v3/best-practices/mcp-integrations\",\n                  \"v3/best-practices/speed-optimization\"\n                ]\n              },\n              {\n                \"group\": \"Integrations\",\n                \"pages\": [\n                  {\n                    \"group\": \"MCP Server\",\n                    \"pages\": [\n                      \"v3/integrations/mcp/introduction\",\n                      \"v3/integrations/mcp/setup\",\n                      \"v3/integrations/mcp/tools\",\n                      \"v3/integrations/mcp/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"CrewAI\",\n                    \"pages\": [\n                      \"v3/integrations/crew-ai/introduction\",\n                      \"v3/integrations/crew-ai/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Langchain\",\n                    \"pages\": [\n                      \"v3/integrations/langchain/introduction\",\n                      \"v3/integrations/langchain/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Next.js + Vercel\",\n                    \"pages\": [\n                      \"v3/integrations/vercel/introduction\",\n                      \"v3/integrations/vercel/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Convex\",\n                    \"pages\": [\n                      \"v3/integrations/convex/introduction\",\n                      \"v3/integrations/convex/configuration\"\n                    ]\n                  },\n                  \"v3/integrations/playwright\",\n                  \"v3/integrations/puppeteer\",\n                  \"v3/integrations/selenium\"\n                ]\n              },\n              {\n                \"group\": \"Reference\",\n                \"pages\": [\n                  \"v3/references/stagehand\",\n                  \"v3/references/agent\",\n                  \"v3/references/act\",\n                  \"v3/references/extract\",\n                  \"v3/references/observe\",\n                  \"v3/references/context\",\n                  \"v3/references/clipboard\",\n                  \"v3/references/page\",\n                  \"v3/references/locator\",\n                  \"v3/references/deeplocator\",\n                  \"v3/references/response\"\n                ]\n              },\n              {\n                \"group\": \"Migration Guides\",\n                \"pages\": [\"v3/migrations/v2\", \"v3/migrations/python\"]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Python\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/python\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/python\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/python\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Java\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/java\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/java\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/java\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Go\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/go\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/go\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/go\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Ruby\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/ruby\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/ruby\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/ruby\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      {\n        \"version\": \"v2\",\n        \"groups\": [\n          {\n            \"group\": \"First Steps\",\n            \"pages\": [\n              \"v2/first-steps/introduction\",\n              \"v2/first-steps/quickstart\",\n              \"v2/first-steps/installation\",\n              \"v2/first-steps/ai-rules\"\n            ]\n          },\n          {\n            \"group\": \"The Basics\",\n            \"pages\": [\"v2/basics/agent\", \"v2/basics/act\", \"v2/basics/extract\", \"v2/basics/observe\"]\n          },\n          {\n            \"group\": \"Configuration\",\n            \"pages\": [\n              \"v2/configuration/browser\",\n              \"v2/configuration/observability\",\n              \"v2/configuration/logging\",\n              \"v2/configuration/models\",\n              \"v2/configuration/evals\"\n            ]\n          },\n          {\n            \"group\": \"Best Practices\",\n            \"pages\": [\n              \"v2/best-practices/caching\",\n              \"v2/best-practices/cost-optimization\",\n              \"v2/best-practices/using-multiple-tabs\",\n              \"v2/best-practices/working-with-iframes\",\n              \"v2/best-practices/deployments\",\n              \"v2/best-practices/computer-use\",\n              \"v2/best-practices/contributing\",\n              \"v2/best-practices/playwright-interop\",\n              \"v2/best-practices/build-agent\",\n              \"v2/best-practices/agent-fallbacks\",\n              \"v2/best-practices/prompting-best-practices\",\n              \"v2/best-practices/mcp-integrations\",\n              \"v2/best-practices/speed-optimization\"\n            ]\n          },\n          {\n            \"group\": \"Integrations\",\n            \"pages\": [\n              {\n                \"group\": \"MCP Server\",\n                \"pages\": [\n                  \"v2/integrations/mcp/introduction\",\n                  \"v2/integrations/mcp/setup\",\n                  \"v2/integrations/mcp/tools\",\n                  \"v2/integrations/mcp/configuration\"\n                ]\n              },\n              {\n                \"group\": \"CrewAI\",\n                \"pages\": [\n                  \"v2/integrations/crew-ai/introduction\",\n                  \"v2/integrations/crew-ai/configuration\"\n                ]\n              },\n              {\n                \"group\": \"Langchain\",\n                \"pages\": [\n                  \"v2/integrations/langchain/introduction\",\n                  \"v2/integrations/langchain/configuration\"\n                ]\n              },\n              {\n                \"group\": \"Next.js + Vercel\",\n                \"pages\": [\n                  \"v2/integrations/vercel/introduction\",\n                  \"v2/integrations/vercel/configuration\"\n                ]\n              }\n            ]\n          },\n          {\n            \"group\": \"Reference\",\n            \"pages\": [\n              \"v2/references/stagehand\",\n              \"v2/references/act\",\n              \"v2/references/extract\",\n              \"v2/references/observe\",\n              \"v2/references/agent\"\n            ]\n          }\n        ]\n      }\n    ],\n    \"global\": {\n      \"anchors\": [\n        {\n          \"anchor\": \"Discord\",\n          \"href\": \"https://discord.gg/stagehand\",\n          \"icon\": \"discord\"\n        },\n        {\n          \"anchor\": \"GitHub\",\n          \"href\": \"https://github.com/browserbase/stagehand\",\n          \"icon\": \"github\"\n        },\n        {\n          \"anchor\": \"Changelog\",\n          \"href\": \"https://github.com/browserbase/stagehand/releases\",\n          \"icon\": \"scroll\"\n        }\n      ]\n    }\n  },\n  \"logo\": {\n    \"light\": \"/logo/light_logo.png\",\n    \"dark\": \"/logo/dark_logo.png\",\n    \"href\": \"https://stagehand.dev\"\n  },\n  \"navbar\": {\n    \"links\": [\n      {\n        \"label\": \"Discord\",\n        \"href\": \"https://discord.gg/stagehand\"\n      },\n      {\n        \"label\": \"Support\",\n        \"href\": \"mailto:support@browserbase.com\"\n      }\n    ]\n  },\n  \"footer\": {\n    \"socials\": {\n      \"discord\": \"https://discord.gg/stagehand\",\n      \"x\": \"https://x.com/stagehanddev\",\n      \"github\": \"https://github.com/browserbase/stagehand\",\n      \"linkedin\": \"https://linkedin.com/company/browserbasehq\"\n    }\n  },\n  \"integrations\": {\n    \"posthog\": {\n      \"apiKey\": \"phc_hmwkFrlc9UVrdE1jyG8AEKoCQCSr8dScjsRpKoLBEiV\",\n      \"apiHost\": \"https://us.i.posthog.com\"\n    }\n  },\n  \"contextual\": {\n    \"options\": [\"copy\", \"chatgpt\", \"claude\", \"view\"]\n  },\n  \"redirects\": [\n    {\n      \"source\": \"/first-steps/:slug*\",\n      \"destination\": \"/v4/first-steps/:slug*\"\n    },\n    {\n      \"source\": \"/basics/act\",\n      \"destination\": \"/v4/basics/act\"\n    },\n    {\n      \"source\": \"/basics/extract\",\n      \"destination\": \"/v4/basics/extract\"\n    },\n    {\n      \"source\": \"/basics/observe\",\n      \"destination\": \"/v4/basics/observe\"\n    },\n    {\n      \"source\": \"/basics/webmcp\",\n      \"destination\": \"/v4/basics/webmcp\"\n    },\n    {\n      \"source\": \"/basics/:slug*\",\n      \"destination\": \"/v3/basics/:slug*\"\n    },\n    {\n      \"source\": \"/configuration/:slug*\",\n      \"destination\": \"/v4/configuration/:slug*\"\n    },\n    {\n      \"source\": \"/best-practices/caching\",\n      \"destination\": \"/v4/best-practices/caching\"\n    },\n    {\n      \"source\": \"/best-practices/cost-optimization\",\n      \"destination\": \"/v4/best-practices/cost-optimization\"\n    },\n    {\n      \"source\": \"/best-practices/deployments\",\n      \"destination\": \"/v4/best-practices/deployments\"\n    },\n    {\n      \"source\": \"/best-practices/mcp-integrations\",\n      \"destination\": \"/v4/integrations/cli-agents/overview\"\n    },\n    {\n      \"source\": \"/best-practices/prompting-best-practices\",\n      \"destination\": \"/v4/best-practices/prompting-best-practices\"\n    },\n    {\n      \"source\": \"/best-practices/speed-optimization\",\n      \"destination\": \"/v4/best-practices/speed-optimization\"\n    },\n    {\n      \"source\": \"/best-practices/usecase-observe\",\n      \"destination\": \"/v4/best-practices/usecase-observe\"\n    },\n    {\n      \"source\": \"/best-practices/user-data\",\n      \"destination\": \"/v4/best-practices/user-data\"\n    },\n    {\n      \"source\": \"/best-practices/using-multiple-tabs\",\n      \"destination\": \"/v4/best-practices/using-multiple-tabs\"\n    },\n    {\n      \"source\": \"/best-practices/:slug*\",\n      \"destination\": \"/v3/best-practices/:slug*\"\n    },\n    {\n      \"source\": \"/v4/integrations/agents\",\n      \"destination\": \"/v4/integrations/agent-frameworks/overview\"\n    },\n    {\n      \"source\": \"/v4/integrations/eve\",\n      \"destination\": \"/v4/integrations/agent-frameworks/eve\"\n    },\n    {\n      \"source\": \"/v4/integrations/deep-agents\",\n      \"destination\": \"/v4/integrations/agent-frameworks/deep-agents\"\n    },\n    {\n      \"source\": \"/v4/integrations/crewai\",\n      \"destination\": \"/v4/integrations/agent-frameworks/crewai\"\n    },\n    {\n      \"source\": \"/v4/integrations/mastra\",\n      \"destination\": \"/v4/integrations/agent-frameworks/mastra\"\n    },\n    {\n      \"source\": \"/v4/integrations/vercel-ai-sdk\",\n      \"destination\": \"/v4/integrations/agent-frameworks/vercel-ai-sdk\"\n    },\n    {\n      \"source\": \"/v4/integrations/cli-agents\",\n      \"destination\": \"/v4/integrations/cli-agents/overview\"\n    },\n    {\n      \"source\": \"/v4/integrations/claude-code\",\n      \"destination\": \"/v4/integrations/cli-agents/claude-code\"\n    },\n    {\n      \"source\": \"/v4/integrations/codex\",\n      \"destination\": \"/v4/integrations/cli-agents/codex\"\n    },\n    {\n      \"source\": \"/v4/integrations/fx\",\n      \"destination\": \"/v4/integrations/cli-agents/fx\"\n    },\n    {\n      \"source\": \"/v4/integrations/pi\",\n      \"destination\": \"/v4/integrations/cli-agents/pi\"\n    },\n    {\n      \"source\": \"/v4/integrations/stripe\",\n      \"destination\": \"/v4/integrations/applications/stripe\"\n    },\n    {\n      \"source\": \"/integrations/mcp/:slug*\",\n      \"destination\": \"/v3/integrations/mcp/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/crew-ai/:slug*\",\n      \"destination\": \"/v3/integrations/crew-ai/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/langchain/:slug*\",\n      \"destination\": \"/v3/integrations/langchain/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/vercel/:slug*\",\n      \"destination\": \"/v3/integrations/vercel/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/convex/:slug*\",\n      \"destination\": \"/v3/integrations/convex/:slug*\"\n    },\n    {\n      \"source\": \"/references/:slug*\",\n      \"destination\": \"/v3/references/:slug*\"\n    },\n    {\n      \"source\": \"/reference/:slug*\",\n      \"destination\": \"/v4/reference/:slug*\"\n    },\n    {\n      \"source\": \"/migrations/playwright\",\n      \"destination\": \"/v4/migrations/playwright\"\n    },\n    {\n      \"source\": \"/migrations/v3\",\n      \"destination\": \"/v4/migrations/v3\"\n    },\n    {\n      \"source\": \"/migrations/:slug*\",\n      \"destination\": \"/v3/migrations/:slug*\"\n    },\n    {\n      \"source\": \"/v4/examples/compare-pages-in-parallel\",\n      \"destination\": \"/v4/best-practices/using-multiple-tabs\"\n    },\n    {\n      \"source\": \"/v4/examples/model-gateway-extract\",\n      \"destination\": \"/v4/configuration/models#model-gateway\"\n    },\n    {\n      \"source\": \"/v4/examples/observe-then-act\",\n      \"destination\": \"/v4/cookbooks/paginated-catalog\"\n    },\n    {\n      \"source\": \"/v4/examples/tanstack-ai-extraction-tool\",\n      \"destination\": \"/v4/cookbooks/overview\"\n    },\n    {\n      \"source\": \"/v4/examples/overview\",\n      \"destination\": \"/v4/cookbooks/overview\"\n    },\n    {\n      \"source\": \"/v4/examples/approve-form-submission\",\n      \"destination\": \"/v4/cookbooks/approve-form-submission\"\n    },\n    {\n      \"source\": \"/v4/examples/paginated-catalog\",\n      \"destination\": \"/v4/cookbooks/paginated-catalog\"\n    },\n    {\n      \"source\": \"/v4/examples/files-to-bucket\",\n      \"destination\": \"/v4/cookbooks/files-to-bucket\"\n    },\n    {\n      \"source\": \"/v4/examples/ai-sdk-research-agent\",\n      \"destination\": \"/v4/cookbooks/ai-sdk-research-agent\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://mintlify.com/docs.json","theme":"maple","name":"Stagehand","colors":{"primary":"#00C851","light":"#00C851","dark":"#00C851"},"favicon":"/images/favicon.svg","seo":{"indexing":"all","metatags":{"og:type":"website","og:site_name":"Stagehand Docs"}},"api":{"openapi":"v3/openapi.json"},"navigation":{"versions":[{"version":"v4","groups":[{"group":"First steps","pages":["v4/first-steps/introduction","v4/first-steps/quickstart","v4/first-steps/installation","v4/first-steps/ai-rules"]},{"group":"The basics","pages":["v4/basics/act","v4/basics/extract","v4/basics/observe","v4/basics/webmcp"]},{"group":"Configuration","pages":["v4/configuration/browser","v4/configuration/logging"]},{"group":"Add-ons","pages":["v4/add-ons/search","v4/add-ons/fetch","v4/configuration/models","v4/configuration/observability"]},{"group":"Integrations","pages":["v4/integrations/overview",{"group":"Agent Frameworks","pages":["v4/integrations/agent-frameworks/overview","v4/integrations/agent-frameworks/claude-cua-toolset-quickstart","v4/integrations/agent-frameworks/openai-cua-toolset-quickstart","v4/integrations/agent-frameworks/eve","v4/integrations/agent-frameworks/deep-agents","v4/integrations/agent-frameworks/crewai","v4/integrations/agent-frameworks/mastra","v4/integrations/agent-frameworks/vercel-ai-sdk"]},{"group":"CLI Agents","pages":["v4/integrations/cli-agents/overview","v4/integrations/cli-agents/claude-code","v4/integrations/cli-agents/codex","v4/integrations/cli-agents/cursor","v4/integrations/cli-agents/fx","v4/integrations/cli-agents/pi"]},{"group":"Applications","pages":["v4/integrations/applications/stripe"]}]},{"group":"Best practices","pages":["v4/best-practices/prompting-best-practices","v4/best-practices/usecase-observe","v4/best-practices/caching","v4/best-practices/using-multiple-tabs","v4/best-practices/user-data","v4/best-practices/speed-optimization","v4/best-practices/cost-optimization","v4/best-practices/deployments"]},{"group":"Cookbooks","pages":["v4/cookbooks/overview","v4/cookbooks/persisted-login","v4/cookbooks/paginated-catalog","v4/cookbooks/files-to-bucket","v4/cookbooks/approve-form-submission","v4/cookbooks/ai-sdk-research-agent"]},{"group":"Migration guide","pages":["v4/migrations/v3","v4/migrations/playwright"]},{"group":"SDK reference","pages":["v4/reference/stagehand","v4/reference/context","v4/reference/clipboard","v4/reference/page","v4/reference/webmcp","v4/reference/response","v4/reference/locator"]}]},{"version":"v3","dropdowns":[{"dropdown":"TypeScript","icon":"code","pages":["v3/first-steps/introduction"],"groups":[{"group":"First Steps","pages":["v3/first-steps/introduction","v3/first-steps/quickstart","v3/first-steps/installation","v3/first-steps/ai-rules"]},{"group":"The Basics","pages":["v3/basics/agent","v3/basics/act","v3/basics/extract","v3/basics/observe","v3/basics/webmcp","v3/basics/evals"]},{"group":"Configuration","pages":["v3/configuration/browser","v3/configuration/observability","v3/configuration/logging","v3/configuration/models"]},{"group":"Best Practices","pages":["v3/best-practices/caching","v3/best-practices/cost-optimization","v3/best-practices/deterministic-agent","v3/best-practices/using-multiple-tabs","v3/best-practices/deployments","v3/best-practices/history","v3/best-practices/computer-use","v3/best-practices/agent-fallbacks","v3/best-practices/prompting-best-practices","v3/best-practices/mcp-integrations","v3/best-practices/speed-optimization"]},{"group":"Integrations","pages":[{"group":"MCP Server","pages":["v3/integrations/mcp/introduction","v3/integrations/mcp/setup","v3/integrations/mcp/tools","v3/integrations/mcp/configuration"]},{"group":"CrewAI","pages":["v3/integrations/crew-ai/introduction","v3/integrations/crew-ai/configuration"]},{"group":"Langchain","pages":["v3/integrations/langchain/introduction","v3/integrations/langchain/configuration"]},{"group":"Next.js + Vercel","pages":["v3/integrations/vercel/introduction","v3/integrations/vercel/configuration"]},{"group":"Convex","pages":["v3/integrations/convex/introduction","v3/integrations/convex/configuration"]},"v3/integrations/playwright","v3/integrations/puppeteer","v3/integrations/selenium"]},{"group":"Reference","pages":["v3/references/stagehand","v3/references/agent","v3/references/act","v3/references/extract","v3/references/observe","v3/references/context","v3/references/clipboard","v3/references/page","v3/references/locator","v3/references/deeplocator","v3/references/response"]},{"group":"Migration Guides","pages":["v3/migrations/v2","v3/migrations/python"]}]},{"dropdown":"Python","icon":"code","pages":["v3/sdk/python"],"groups":[{"group":"SDK Reference","pages":["v3/sdk/python"]},{"group":"API Reference","openapi":{"source":"v3/openapi.json","directory":"v3/api-reference/python"},"pages":["POST /v1/sessions/start","POST /v1/sessions/{id}/navigate","POST /v1/sessions/{id}/act","POST /v1/sessions/{id}/observe","POST /v1/sessions/{id}/extract","POST /v1/sessions/{id}/agentExecute","POST /v1/sessions/{id}/end","GET /v1/sessions/{id}/replay"]}]},{"dropdown":"Java","icon":"code","pages":["v3/sdk/java"],"groups":[{"group":"SDK Reference","pages":["v3/sdk/java"]},{"group":"API Reference","openapi":{"source":"v3/openapi.json","directory":"v3/api-reference/java"},"pages":["POST /v1/sessions/start","POST /v1/sessions/{id}/navigate","POST /v1/sessions/{id}/act","POST /v1/sessions/{id}/observe","POST /v1/sessions/{id}/extract","POST /v1/sessions/{id}/agentExecute","POST /v1/sessions/{id}/end","GET /v1/sessions/{id}/replay"]}]},{"dropdown":"Go","icon":"code","pages":["v3/sdk/go"],"groups":[{"group":"SDK Reference","pages":["v3/sdk/go"]},{"group":"API Reference","openapi":{"source":"v3/openapi.json","directory":"v3/api-reference/go"},"pages":["POST /v1/sessions/start","POST /v1/sessions/{id}/navigate","POST /v1/sessions/{id}/act","POST /v1/sessions/{id}/observe","POST /v1/sessions/{id}/extract","POST /v1/sessions/{id}/agentExecute","POST /v1/sessions/{id}/end","GET /v1/sessions/{id}/replay"]}]},{"dropdown":"Ruby","icon":"code","pages":["v3/sdk/ruby"],"groups":[{"group":"SDK Reference","pages":["v3/sdk/ruby"]},{"group":"API Reference","openapi":{"source":"v3/openapi.json","directory":"v3/api-reference/ruby"},"pages":["POST /v1/sessions/start","POST /v1/sessions/{id}/navigate","POST /v1/sessions/{id}/act","POST /v1/sessions/{id}/observe","POST /v1/sessions/{id}/extract","POST /v1/sessions/{id}/agentExecute","POST /v1/sessions/{id}/end","GET /v1/sessions/{id}/replay"]}]}]},{"version":"v2","groups":[{"group":"First Steps","pages":["v2/first-steps/introduction","v2/first-steps/quickstart","v2/first-steps/installation","v2/first-steps/ai-rules"]},{"group":"The Basics","pages":["v2/basics/agent","v2/basics/act","v2/basics/extract","v2/basics/observe"]},{"group":"Configuration","pages":["v2/configuration/browser","v2/configuration/observability","v2/configuration/logging","v2/configuration/models","v2/configuration/evals"]},{"group":"Best Practices","pages":["v2/best-practices/caching","v2/best-practices/cost-optimization","v2/best-practices/using-multiple-tabs","v2/best-practices/working-with-iframes","v2/best-practices/deployments","v2/best-practices/computer-use","v2/best-practices/contributing","v2/best-practices/playwright-interop","v2/best-practices/build-agent","v2/best-practices/agent-fallbacks","v2/best-practices/prompting-best-practices","v2/best-practices/mcp-integrations","v2/best-practices/speed-optimization"]},{"group":"Integrations","pages":[{"group":"MCP Server","pages":["v2/integrations/mcp/introduction","v2/integrations/mcp/setup","v2/integrations/mcp/tools","v2/integrations/mcp/configuration"]},{"group":"CrewAI","pages":["v2/integrations/crew-ai/introduction","v2/integrations/crew-ai/configuration"]},{"group":"Langchain","pages":["v2/integrations/langchain/introduction","v2/integrations/langchain/configuration"]},{"group":"Next.js + Vercel","pages":["v2/integrations/vercel/introduction","v2/integrations/vercel/configuration"]}]},{"group":"Reference","pages":["v2/references/stagehand","v2/references/act","v2/references/extract","v2/references/observe","v2/references/agent"]}]}],"global":{"anchors":[{"anchor":"Discord","href":"https://discord.gg/stagehand","icon":"discord"},{"anchor":"GitHub","href":"https://github.com/browserbase/stagehand","icon":"github"},{"anchor":"Changelog","href":"https://github.com/browserbase/stagehand/releases","icon":"scroll"}]}},"logo":{"light":"/logo/light_logo.png","dark":"/logo/dark_logo.png","href":"https://stagehand.dev"},"navbar":{"links":[{"label":"Discord","href":"https://discord.gg/stagehand"},{"label":"Support","href":"mailto:support@browserbase.com"}]},"footer":{"socials":{"discord":"https://discord.gg/stagehand","x":"https://x.com/stagehanddev","github":"https://github.com/browserbase/stagehand","linkedin":"https://linkedin.com/company/browserbasehq"}},"integrations":{"posthog":{"apiKey":"phc_hmwkFrlc9UVrdE1jyG8AEKoCQCSr8dScjsRpKoLBEiV","apiHost":"https://us.i.posthog.com"}},"contextual":{"options":["copy","chatgpt","claude","view"]},"redirects":[{"source":"/first-steps/:slug*","destination":"/v4/first-steps/:slug*"},{"source":"/basics/act","destination":"/v4/basics/act"},{"source":"/basics/extract","destination":"/v4/basics/extract"},{"source":"/basics/observe","destination":"/v4/basics/observe"},{"source":"/basics/webmcp","destination":"/v4/basics/webmcp"},{"source":"/basics/:slug*","destination":"/v3/basics/:slug*"},{"source":"/configuration/:slug*","destination":"/v4/configuration/:slug*"},{"source":"/best-practices/caching","destination":"/v4/best-practices/caching"},{"source":"/best-practices/cost-optimization","destination":"/v4/best-practices/cost-optimization"},{"source":"/best-practices/deployments","destination":"/v4/best-practices/deployments"},{"source":"/best-practices/mcp-integrations","destination":"/v4/integrations/cli-agents/overview"},{"source":"/best-practices/prompting-best-practices","destination":"/v4/best-practices/prompting-best-practices"},{"source":"/best-practices/speed-optimization","destination":"/v4/best-practices/speed-optimization"},{"source":"/best-practices/usecase-observe","destination":"/v4/best-practices/usecase-observe"},{"source":"/best-practices/user-data","destination":"/v4/best-practices/user-data"},{"source":"/best-practices/using-multiple-tabs","destination":"/v4/best-practices/using-multiple-tabs"},{"source":"/best-practices/:slug*","destination":"/v3/best-practices/:slug*"},{"source":"/v4/integrations/agents","destination":"/v4/integrations/agent-frameworks/overview"},{"source":"/v4/integrations/eve","destination":"/v4/integrations/agent-frameworks/eve"},{"source":"/v4/integrations/deep-agents","destination":"/v4/integrations/agent-frameworks/deep-agents"},{"source":"/v4/integrations/crewai","destination":"/v4/integrations/agent-frameworks/crewai"},{"source":"/v4/integrations/mastra","destination":"/v4/integrations/agent-frameworks/mastra"},{"source":"/v4/integrations/vercel-ai-sdk","destination":"/v4/integrations/agent-frameworks/vercel-ai-sdk"},{"source":"/v4/integrations/cli-agents","destination":"/v4/integrations/cli-agents/overview"},{"source":"/v4/integrations/claude-code","destination":"/v4/integrations/cli-agents/claude-code"},{"source":"/v4/integrations/codex","destination":"/v4/integrations/cli-agents/codex"},{"source":"/v4/integrations/fx","destination":"/v4/integrations/cli-agents/fx"},{"source":"/v4/integrations/pi","destination":"/v4/integrations/cli-agents/pi"},{"source":"/v4/integrations/stripe","destination":"/v4/integrations/applications/stripe"},{"source":"/integrations/mcp/:slug*","destination":"/v3/integrations/mcp/:slug*"},{"source":"/integrations/crew-ai/:slug*","destination":"/v3/integrations/crew-ai/:slug*"},{"source":"/integrations/langchain/:slug*","destination":"/v3/integrations/langchain/:slug*"},{"source":"/integrations/vercel/:slug*","destination":"/v3/integrations/vercel/:slug*"},{"source":"/integrations/convex/:slug*","destination":"/v3/integrations/convex/:slug*"},{"source":"/references/:slug*","destination":"/v3/references/:slug*"},{"source":"/reference/:slug*","destination":"/v4/reference/:slug*"},{"source":"/migrations/playwright","destination":"/v4/migrations/playwright"},{"source":"/migrations/v3","destination":"/v4/migrations/v3"},{"source":"/migrations/:slug*","destination":"/v3/migrations/:slug*"},{"source":"/v4/examples/compare-pages-in-parallel","destination":"/v4/best-practices/using-multiple-tabs"},{"source":"/v4/examples/model-gateway-extract","destination":"/v4/configuration/models#model-gateway"},{"source":"/v4/examples/observe-then-act","destination":"/v4/cookbooks/paginated-catalog"},{"source":"/v4/examples/tanstack-ai-extraction-tool","destination":"/v4/cookbooks/overview"},{"source":"/v4/examples/overview","destination":"/v4/cookbooks/overview"},{"source":"/v4/examples/approve-form-submission","destination":"/v4/cookbooks/approve-form-submission"},{"source":"/v4/examples/paginated-catalog","destination":"/v4/cookbooks/paginated-catalog"},{"source":"/v4/examples/files-to-bucket","destination":"/v4/cookbooks/files-to-bucket"},{"source":"/v4/examples/ai-sdk-research-agent","destination":"/v4/cookbooks/ai-sdk-research-agent"}]},"isInternal":false,"tokens":5297,"sizeBytes":21969},{"name":"package.json","path":"packages/docs/package.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/docs/package.json","title":"@browserbasehq/stagehand-docs","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"@browserbasehq/stagehand-docs\",\n  \"version\": \"4.0.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"check\": \"mint validate && mint broken-links --check-anchors --check-redirects --check-snippets && mint a11y --skip-contrast\",\n    \"typecheck\": \"pnpm run check\",\n    \"test:unit\": \"vitest run --root ../.. packages/docs/tests\",\n    \"dev\": \"mint dev\",\n    \"sync-sdk\": \"node scripts/sync-sdk-docs.js\"\n  },\n  \"devDependencies\": {\n    \"@mdx-js/mdx\": \"catalog:\",\n    \"mint\": \"catalog:\"\n  }\n}\n","frontmatter":{"name":"@browserbasehq/stagehand-docs","version":"4.0.0","private":true,"type":"module","scripts":{"check":"mint validate && mint broken-links --check-anchors --check-redirects --check-snippets && mint a11y --skip-contrast","typecheck":"pnpm run check","test:unit":"vitest run --root ../.. packages/docs/tests","dev":"mint dev","sync-sdk":"node scripts/sync-sdk-docs.js"},"devDependencies":{"@mdx-js/mdx":"catalog:","mint":"catalog:"}},"isInternal":false,"tokens":159,"sizeBytes":510},{"name":"evals.config.json","path":"packages/evals/evals.config.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/evals/evals.config.json","title":"Evals Skill","category":"anthropic-skill","format":"json","content":"{\n  \"version\": 2,\n  \"defaults\": {\n    \"env\": \"local\",\n    \"trials\": 3,\n    \"concurrency\": 3,\n    \"model\": null,\n    \"api\": false,\n    \"verbose\": false,\n    \"harness\": null,\n    \"successMode\": null\n  },\n  \"benchmarks\": {\n    \"webvoyager\": {\n      \"limit\": 25\n    },\n    \"onlineMind2Web\": {\n      \"limit\": 25\n    },\n    \"webtailbench\": {\n      \"limit\": 25\n    },\n    \"odysseysbench\": {\n      \"limit\": 25\n    }\n  },\n  \"harnesses\": {},\n  \"providers\": {},\n  \"verifier\": {},\n  \"campaign\": {}\n}\n","frontmatter":{"version":2,"defaults":{"env":"local","trials":3,"concurrency":3,"model":null,"api":false,"verbose":false,"harness":null,"successMode":null},"benchmarks":{"webvoyager":{"limit":25},"onlineMind2Web":{"limit":25},"webtailbench":{"limit":25},"odysseysbench":{"limit":25}},"harnesses":{},"providers":{},"verifier":{},"campaign":{}},"isInternal":false,"tokens":168,"sizeBytes":488},{"name":"package.json","path":"packages/evals/package.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/evals/package.json","title":"@browserbasehq/stagehand-evals","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"@browserbasehq/stagehand-evals\",\n  \"version\": \"4.0.0\",\n  \"private\": true,\n  \"description\": \"Evaluation suite for Stagehand\",\n  \"bin\": {\n    \"evals\": \"./dist/cli/cli.js\"\n  },\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"pnpm run --parallel \\\"/^build:(esm|cli)$/\\\"\",\n    \"build:esm\": \"tsx scripts/build-esm.ts\",\n    \"build:cli\": \"tsx scripts/build-cli.ts\",\n    \"test\": \"vitest run --config packages/evals/vitest.config.ts --root ../.. packages/evals/tests\",\n    \"test:unit\": \"pnpm run test\",\n    \"typecheck\": \"tsc --noEmit -p tsconfig.json\",\n    \"test:evals\": \"tsx scripts/test-evals.ts --cli packages/evals/dist/cli/cli.js\",\n    \"eval\": \"tsx cli.ts\",\n    \"report:core\": \"tsx scripts/render-braintrust-core-report.ts\",\n    \"task:record\": \"tsx tasks/cli.ts\"\n  },\n  \"dependencies\": {\n    \"@ai-sdk/provider\": \"^2.0.0\",\n    \"@anthropic-ai/claude-agent-sdk\": \"catalog:\",\n    \"@braintrust/otel\": \"^0.2.1\",\n    \"@browserbasehq/sdk\": \"catalog:\",\n    \"@browserbasehq/stagehand\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-claude-agent-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-claude-cua-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-codex-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-cursor-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-deepagents-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-eve-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-fx-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-gemini-cua-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-mastra-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-pi-sdk\": \"workspace:*\",\n    \"@clack/prompts\": \"^1.3.0\",\n    \"@modelcontextprotocol/sdk\": \"catalog:\",\n    \"@opentelemetry/api\": \"catalog:\",\n    \"@opentelemetry/exporter-trace-otlp-proto\": \"^0.220.0\",\n    \"@opentelemetry/sdk-trace-base\": \"^2.9.0\",\n    \"@opentelemetry/sdk-trace-node\": \"^2.9.0\",\n    \"ai\": \"^5.0.133\",\n    \"braintrust\": \"^3.21.0\",\n    \"browse\": \"workspace:*\",\n    \"dotenv\": \"^17.3.1\",\n    \"langsmith\": \"^0.6.0\",\n    \"openai\": \"^4.104.0\",\n    \"playwright\": \">=1.55.1 <1.57.0\",\n    \"sharp\": \"^0.35.4\",\n    \"stagehand-v3\": \"npm:@browserbasehq/stagehand@3.7.1\",\n    \"tsx\": \"catalog:\",\n    \"ws\": \"^8.21.0\",\n    \"zod\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"chalk\": \"^5.4.1\",\n    \"esbuild\": \"catalog:\",\n    \"gray-matter\": \"^4.0.3\",\n    \"string-comparison\": \"^1.3.0\",\n    \"vite\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"engines\": {\n    \"node\": \">=24.0.0\"\n  }\n}\n","frontmatter":{"name":"@browserbasehq/stagehand-evals","version":"4.0.0","private":true,"description":"Evaluation suite for Stagehand","bin":{"evals":"./dist/cli/cli.js"},"type":"module","scripts":{"build":"pnpm run --parallel \"/^build:(esm|cli)$/\"","build:esm":"tsx scripts/build-esm.ts","build:cli":"tsx scripts/build-cli.ts","test":"vitest run --config packages/evals/vitest.config.ts --root ../.. packages/evals/tests","test:unit":"pnpm run test","typecheck":"tsc --noEmit -p tsconfig.json","test:evals":"tsx scripts/test-evals.ts --cli packages/evals/dist/cli/cli.js","eval":"tsx cli.ts","report:core":"tsx scripts/render-braintrust-core-report.ts","task:record":"tsx tasks/cli.ts"},"dependencies":{"@ai-sdk/provider":"^2.0.0","@anthropic-ai/claude-agent-sdk":"catalog:","@braintrust/otel":"^0.2.1","@browserbasehq/sdk":"catalog:","@browserbasehq/stagehand":"workspace:*","@browserbasehq/stagehand-integrations":"workspace:*","@browserbasehq/stagehand-integrations-claude-agent-sdk":"workspace:*","@browserbasehq/stagehand-integrations-claude-cua-sdk":"workspace:*","@browserbasehq/stagehand-integrations-codex-sdk":"workspace:*","@browserbasehq/stagehand-integrations-cursor-sdk":"workspace:*","@browserbasehq/stagehand-integrations-deepagents-sdk":"workspace:*","@browserbasehq/stagehand-integrations-eve-sdk":"workspace:*","@browserbasehq/stagehand-integrations-fx-sdk":"workspace:*","@browserbasehq/stagehand-integrations-gemini-cua-sdk":"workspace:*","@browserbasehq/stagehand-integrations-mastra-sdk":"workspace:*","@browserbasehq/stagehand-integrations-pi-sdk":"workspace:*","@clack/prompts":"^1.3.0","@modelcontextprotocol/sdk":"catalog:","@opentelemetry/api":"catalog:","@opentelemetry/exporter-trace-otlp-proto":"^0.220.0","@opentelemetry/sdk-trace-base":"^2.9.0","@opentelemetry/sdk-trace-node":"^2.9.0","ai":"^5.0.133","braintrust":"^3.21.0","browse":"workspace:*","dotenv":"^17.3.1","langsmith":"^0.6.0","openai":"^4.104.0","playwright":">=1.55.1 <1.57.0","sharp":"^0.35.4","stagehand-v3":"npm:@browserbasehq/stagehand@3.7.1","tsx":"catalog:","ws":"^8.21.0","zod":"catalog:"},"devDependencies":{"@types/node":"catalog:","chalk":"^5.4.1","esbuild":"catalog:","gray-matter":"^4.0.3","string-comparison":"^1.3.0","vite":"catalog:","vitest":"catalog:"},"engines":{"node":">=24.0.0"}},"isInternal":false,"tokens":867,"sizeBytes":2660},{"name":"tsconfig.json","path":"packages/evals/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/evals/tsconfig.json","title":"Evals Skill","category":"anthropic-skill","format":"json","content":"{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"noImplicitAny\": true,\n    \"skipLibCheck\": true,\n    \"strict\": false,\n    \"target\": \"ES2022\",\n    \"types\": [\"node\"],\n    \"useUnknownInCatchVariables\": false\n  },\n  \"include\": [\"**/*.ts\"],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n","frontmatter":{"extends":"../../tsconfig.json","compilerOptions":{"noImplicitAny":true,"skipLibCheck":true,"strict":false,"target":"ES2022","types":["node"],"useUnknownInCatchVariables":false},"include":["**/*.ts"],"exclude":["node_modules","dist"]},"isInternal":false,"tokens":87,"sizeBytes":293},{"name":"CHANGELOG.md","path":"packages/server-v3/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/CHANGELOG.md","title":"Server-v3 Skill","category":"anthropic-skill","format":"markdown","content":"# Server-v3 Skill\n\nPath: `packages/server-v3/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/CHANGELOG.md)","tokens":300,"sizeBytes":182},{"name":"openapi.v3.yaml","path":"packages/server-v3/openapi.v3.yaml","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/openapi.v3.yaml","title":"Server-v3 Skill","category":"anthropic-skill","format":"yaml","content":"# Server-v3 Skill\n\nPath: `packages/server-v3/openapi.v3.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/openapi.v3.yaml)","tokens":300,"sizeBytes":188},{"name":"package.json","path":"packages/server-v3/package.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/package.json","title":"Server-v3 Skill","category":"anthropic-skill","format":"json","content":"# Server-v3 Skill\n\nPath: `packages/server-v3/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/package.json)","tokens":300,"sizeBytes":182},{"name":"SDK_RELEASE_WORKFLOW.md","path":"packages/server-v3/SDK_RELEASE_WORKFLOW.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/SDK_RELEASE_WORKFLOW.md","title":"Server-v3 Skill","category":"anthropic-skill","format":"markdown","content":"# Server-v3 Skill\n\nPath: `packages/server-v3/SDK_RELEASE_WORKFLOW.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/SDK_RELEASE_WORKFLOW.md)","tokens":300,"sizeBytes":204},{"name":"tsconfig.json","path":"packages/server-v3/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/tsconfig.json","title":"Server-v3 Skill","category":"anthropic-skill","format":"json","content":"# Server-v3 Skill\n\nPath: `packages/server-v3/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/tsconfig.json)","tokens":300,"sizeBytes":184},{"name":"tsconfig.tests.json","path":"packages/server-v3/tsconfig.tests.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/tsconfig.tests.json","title":"Server-v3 Skill","category":"anthropic-skill","format":"json","content":"# Server-v3 Skill\n\nPath: `packages/server-v3/tsconfig.tests.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/tsconfig.tests.json)","tokens":300,"sizeBytes":196},{"name":"CHANGELOG.md","path":"packages/server-v4/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/CHANGELOG.md","title":"Server-v4 Skill","category":"anthropic-skill","format":"markdown","content":"# Server-v4 Skill\n\nPath: `packages/server-v4/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/CHANGELOG.md)","tokens":300,"sizeBytes":182},{"name":"snapshot.json","path":"packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json","title":"20260327165733_fast_living_mummy Skill","category":"anthropic-skill","format":"json","content":"# 20260327165733_fast_living_mummy Skill\n\nPath: `packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json)","tokens":300,"sizeBytes":289},{"name":"openapi.v4.yaml","path":"packages/server-v4/openapi.v4.yaml","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/openapi.v4.yaml","title":"Server-v4 Skill","category":"anthropic-skill","format":"yaml","content":"# Server-v4 Skill\n\nPath: `packages/server-v4/openapi.v4.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/openapi.v4.yaml)","tokens":300,"sizeBytes":188},{"name":"package.json","path":"packages/server-v4/package.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/package.json","title":"Server-v4 Skill","category":"anthropic-skill","format":"json","content":"# Server-v4 Skill\n\nPath: `packages/server-v4/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/package.json)","tokens":300,"sizeBytes":182},{"name":"tsconfig.json","path":"packages/server-v4/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/tsconfig.json","title":"Server-v4 Skill","category":"anthropic-skill","format":"json","content":"# Server-v4 Skill\n\nPath: `packages/server-v4/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/tsconfig.json)","tokens":300,"sizeBytes":184},{"name":"README.md","path":"packages/cli/README.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/README.md","title":"cli Documentation","category":"plugin-manifest","format":"markdown","content":"# cli Documentation\n\nPath: `packages/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/README.md)","tokens":300,"sizeBytes":166},{"name":"README.md","path":"packages/core/lib/v3/agent/tools/README.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/lib/v3/agent/tools/README.md","title":"tools Documentation","category":"plugin-manifest","format":"markdown","content":"# tools Documentation\n\nPath: `packages/core/lib/v3/agent/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/lib/v3/agent/tools/README.md)","tokens":300,"sizeBytes":208},{"name":"README.md","path":"packages/core/README.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/README.md","title":"core Documentation","category":"plugin-manifest","format":"markdown","content":"# core Documentation\n\nPath: `packages/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/README.md)","tokens":300,"sizeBytes":169},{"name":"README.md","path":"packages/docs/README.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/docs/README.md","title":"docs Documentation","category":"plugin-manifest","format":"markdown","content":"# Stagehand docs\n\nThis site contains the Stagehand v2, v3, and v4 documentation. V4 is the default version.\n\n## Local development\n\nFrom the repository root:\n\n```sh\njust install\njust docs\n```\n\n`just docs` starts the repository-pinned Mint development server. No globally installed Mint or\nMintlify CLI is required.\n\n## Validation\n\nFrom the repository root:\n\n```sh\njust check\n```\n\nThis validates the Mint configuration and OpenAPI definitions, checks links and redirects, and runs\nthe documentation accessibility checks.\n\n## V3 API reference source\n\nThe v3 API reference uses the checked-in `v3/openapi.json`, not a live Stainless URL.\nThe former source,\n`https://app.stainless.com/api/spec/documented/stagehand/openapi.documented.yml`,\nreturned HTTP 404 and prevented Mint validation from completing.\n\nThe snapshot was recovered on September 15, 2026 from the OpenAPI YAML blocks in the\npublished `https://docs.stagehand.dev/v3/api-reference/{language}/{page}.md` pages.\nAll 32 pages (eight endpoints each for Python, Java, Go, and Ruby) were compared.\nTheir common metadata, operations, and shared components agreed. The snapshot\ncombines those fragments without changing descriptions, schemas, authentication,\nservers, or code samples: eight endpoints, 67 schemas, and two security schemes.\nThe four language sections retain their existing navigation and generated page paths.\n\nTreat this as the versioned v3 documentation source. Future spec updates must be\nreviewed as content changes, including endpoint titles/URLs, request and response\nschemas, authentication, and code samples. Do not replace it with a different\nserver-generated spec just to make validation pass. Run the docs checks and\n`pnpm --filter @browserbasehq/stagehand-docs test:unit` after updates.\n\n## Publishing\n\nDocumentation is deployed through the Mintlify GitHub integration after changes reach the\nrepository's default branch.\n","isInternal":false,"tokens":407,"sizeBytes":1902},{"name":"README.md","path":"packages/evals/README.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/evals/README.md","title":"evals Documentation","category":"plugin-manifest","format":"markdown","content":"# Stagehand Evals\n\nAgent benchmarks for Stagehand — `act`, `extract`, `observe`, `agent`, plus dataset-backed suites (WebVoyager, OnlineMind2Web, WebTailBench, Odysseys, HardBench).\n\nDriven by an interactive TUI (`evals`) or single-shot CLI (`evals run …`). Tasks are auto-discovered from `tasks/bench/<category>/` — no registration step.\n\n## Quickstart\n\nFrom the stagehand repo root:\n\n```bash\npnpm install\npnpm build:cli   # also: pnpm build, if you haven't built the workspace yet\n```\n\nThis links an `evals` binary on your `PATH`. Launch the REPL:\n\n```bash\nevals\n```\n\n![REPL with help output](./assets/readme/help.png)\n\nOr run a single target:\n\n```bash\nevals run extract -t 3 -c 5\nevals run b:webvoyager -l 10\n```\n\nA `.env` in `packages/evals/` is loaded automatically. Provide whichever provider keys (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_GENERATIVE_AI_API_KEY`, …) and `BROWSERBASE_API_KEY` / `BROWSERBASE_PROJECT_ID` you need.\n\n## TUI commands\n\nInside the REPL (or as `evals <command>` from your shell):\n\n| Command                        | What it does                                                             |\n| ------------------------------ | ------------------------------------------------------------------------ |\n| `run [target] [options]`       | Run evals. Target can be a tier, category, task, or benchmark shorthand. |\n| `list [tier] [--detailed]`     | List discovered tasks and categories.                                    |\n| `new <tier> <category> <name>` | Scaffold a new task file.                                                |\n| `config [set\\|reset\\|path]`    | Read or write defaults (env, trials, concurrency, model, …).             |\n| `experiments`                  | Inspect and compare Braintrust experiment runs.                          |\n| `help`                         | Show command help. Append `--help` to any command for details.           |\n\nUse `Esc` to abort an in-flight run without exiting the REPL.\n\n### Onboarding\n\n`evals welcome` runs a guided first-run flow built on the agent benchmarks: an animated intro (the Stagehand mark, what evals measures, EVALS), then a deterministic replay of a real WebVoyager task — three models in lanes, named generically (Opus, Grok, Sol — the fastest and cheapest fails on a wrong condition filter; timings and costs are illustrative), a podium by accuracy · speed · cost, and a chat-style look inside the winning run. It ends on a real `run b:webvoyager -l 3 --harness claude_code -e local` (`--harness codex` when the key is OpenAI's; `-e browserbase` when that's the available browser) when an Anthropic or OpenAI key and a browser exist, or hands off to `evals setup`, a guided flow that asks only for what's missing (Anthropic/OpenAI key, browser), writes `packages/evals/.env`, and offers the first real run.\n\nSet `EVALS_WELCOME_WIZARD=1` to auto-run the flow on the first REPL launch; `EVALS_NO_WELCOME=1` suppresses the first-run welcome. Any key advances the intro, Esc skips ahead, Ctrl+C cancels.\n\n## Run targets\n\n`evals run` accepts any of these shapes:\n\n| Target                                                 | Meaning                        |\n| ------------------------------------------------------ | ------------------------------ |\n| _(none)_ / `all`                                       | All bench tasks                |\n| `bench`                                                | Entire bench tier              |\n| `act` / `extract` / `observe` / `agent`                | A category                     |\n| `extract/extract_text`                                 | A specific task                |\n| `b:webvoyager` / `b:onlineMind2Web` / `b:webtailbench` | Dataset-backed benchmark suite |\n\n`evals list` shows everything that's been discovered:\n\n![evals list output](./assets/readme/list.png)\n\n## Common options\n\n| Flag                                                              | Purpose                                                                                 |\n| ----------------------------------------------------------------- | --------------------------------------------------------------------------------------- |\n| `-e, --env <local\\|browserbase>`                                  | Where the browser runs                                                                  |\n| `-t, --trials <n>`                                                | Trials per task                                                                         |\n| `-c, --concurrency <n>`                                           | Max parallel sessions                                                                   |\n| `-m, --model <id>`                                                | Override the model matrix                                                               |\n| `--api`                                                           | Run via the Stagehand API instead of the SDK                                            |\n| `--harness <name>`                                                | Which agent harness drives the bench task (`evals run --help` lists them)               |\n| `--tool <surface>`                                                | Tool surface the harness mounts; `stagehand_facade` is the Playwright-batch MCP surface |\n| `-l, --limit <n>` / `-s, --sample <n>` / `-f, --filter key=value` | Suite shaping for benchmark targets                                                     |\n| `--preview`                                                       | Print the resolved plan and exit — no browser, no LLM calls                             |\n| `-v, --verbose` / `--follow <id>`                                 | Stream every case's log lines (or one case's) above the live board                      |\n| `--json`                                                          | Print the end-of-run summary as JSON on stdout; the board and logs go to stderr         |\n\nConcurrency is capped per model provider under the global `-c` value (default 3 per provider); tune with `EVAL_PROVIDER_CONCURRENCY=openai=6,anthropic=4` or `evals config providers set openai concurrency 6`. The cap applies within one `evals run`: separately launched runs don't share it. When the agent's own provider call hits a 429 or connect timeout, that provider's width is halved for 60 s and the row is retried once; a Browserbase session-create 429 is retried once after 20 s. Retried rows carry `provider_throttled` in Braintrust. A rate-limited judge never re-runs the agent.\n\nTeam defaults live in the tracked `evals.config.json` (schema v2: `defaults`, `benchmarks`, `harnesses`, `providers`, `verifier`, `campaign`). `evals config set …` writes your personal overrides to the gitignored `evals.config.local.json` beside it; add `--shared` to change the team file. Flags always win. Most `defaults` then come from the local file, the tracked file and the `EVAL_*` env vars in that order; `EVAL_SUCCESS_MODE` and `STAGEHAND_BROWSER_TARGET` are the exceptions and beat the config, as does the env twin of every other section. `.env` loads from the cwd first (it wins), then `packages/evals/.env` (where `evals setup` saves keys), and shell exports always win — `evals doctor` reports which file supplied each provider key.\n\n`--preview` is useful for sanity-checking the plan before paying for a run:\n\n![evals run --preview output](./assets/readme/preview.png)\n\nA live run draws one row per case in flight: case id and site, the task, the phase it's in (`session` → `agent` → `verify`) and how long it has been running. Elapsed time turns yellow once a row outlasts three quarters of the finished ones. Rows waiting for a provider slot are counted in the queue line rather than shown; the `↓` marks a provider whose width was halved after a 429. The last few finishes show their outcome, and failures their session URL:\n\n![Live bench run](./assets/readme/run-live.png)\n\nEvery case that logs anything gets its own file under `.trajectories/<run>/logs/` (with the provider in the name), whether or not you're watching. `-v` streams those lines above the board, attributed by case id; `--follow <id>` streams one case. While a run is going, `v` cycles the stream off → all → one (the oldest running case) → off, `?` shows the keys, and `esc` stops the run:\n\n![Live bench run with -v](./assets/readme/run-verbose.png)\n\nThe end-of-run summary has one line per cell (harness × tool × model) with the pass rate, the failure kinds that aren't the agent's fault or aren't what they look like (`max_turns`, `sdk_error`, `gated`: the judge passed it, a deterministic check such as \"never used the browser\" failed it, and `ungraded`), and `retried`: rows retried after a provider 429, which may still have passed. Infra failures are listed with their reason and session URL; rubric fails by case id. `--json` emits the same as an object:\n\n![Run summary](./assets/readme/run-summary.png)\n\nWhen the judge grades nothing (a retired model, a bad key), every row fails closed, so the pass rate says nothing about the agent. The run says so and exits 1:\n\n![Dead-judge banner](./assets/readme/run-dead-judge.png)\n\n`evals doctor --harness a,b [--probe]` probes each harness (binary, key, key validity, extras like heap or `CODEX_HOME`), the judge and Browserbase, and prints the fix command for each failure that has one:\n\n![evals doctor](./assets/readme/doctor.png)\n\n## Shared harness behavior\n\nSee [the harness contract](docs/harness-contract.md) for tool surfaces, prompt policy,\nbudget units, session diagnostics, verification, and usage accounting.\nSee [HardBench](datasets/hardbenchmark/README.md) for corpus selection and rubric v1.2.\n\n## Adding a bench task\n\n```bash\nevals new bench extract my_new_task\n```\n\nThis drops a `defineBenchTask`-based file into `tasks/bench/extract/`. It will show up in `evals list` on next launch — no config edit needed.\n\n```ts\n// tasks/bench/extract/my_new_task.ts\nimport { defineBenchTask } from \"../../../framework/defineTask.js\";\n\nexport default defineBenchTask({\n  name: \"my_new_task\",\n  tags: [\"regression\"],\n  run: async ({ stagehand, logger }) => {\n    // ... drive stagehand, return { _success: boolean, ... }\n  },\n});\n```\n\n## Tracing / Observability\n\nRuns stream into Braintrust when `BRAINTRUST_API_KEY` is set; otherwise a local summary prints to stdout. Use `evals experiments` to inspect and diff past Braintrust runs.\n\n### Recording observation tasks\n\nUse the [observation task recorder](tasks/README.md) to capture a rendered\npage for a static `extract()` or `observe()` regression. It provides a standalone\nHTML artifact and provenance metadata; dynamic application replay is outside its\nscope.\n","isInternal":false,"tokens":2352,"sizeBytes":10694},{"name":"README.md","path":"packages/server-v3/README.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/README.md","title":"server-v3 Documentation","category":"plugin-manifest","format":"markdown","content":"# server-v3 Documentation\n\nPath: `packages/server-v3/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/README.md)","tokens":300,"sizeBytes":184},{"name":"README.md","path":"packages/server-v4/README.md","rawUrl":"https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/README.md","title":"server-v4 Documentation","category":"plugin-manifest","format":"markdown","content":"# server-v4 Documentation\n\nPath: `packages/server-v4/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/README.md)","tokens":300,"sizeBytes":184}],"systemPromptSnippet":"<yakaai_skills repo=\"browserbase/stagehand\">\n<!-- File: packages/cli/CHANGELOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Cli Skill\n\nPath: `packages/cli/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/CHANGELOG.md)\n\n<!-- File: packages/cli/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Cli Skill\n\nPath: `packages/cli/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/package.json)\n\n<!-- File: packages/cli/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Cli Skill\n\nPath: `packages/cli/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/tsconfig.json)\n\n<!-- File: packages/core/CHANGELOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Core Skill\n\nPath: `packages/core/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/CHANGELOG.md)\n\n<!-- File: packages/core/lib/CHANGELOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Lib Skill\n\nPath: `packages/core/lib/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/lib/CHANGELOG.md)\n\n<!-- File: packages/core/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Core Skill\n\nPath: `packages/core/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/package.json)\n\n<!-- File: packages/core/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Core Skill\n\nPath: `packages/core/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/tsconfig.json)\n\n<!-- File: packages/docs/docs.json (Tokens: ~5297 | Category: anthropic-skill) -->\n{\n  \"$schema\": \"https://mintlify.com/docs.json\",\n  \"theme\": \"maple\",\n  \"name\": \"Stagehand\",\n  \"colors\": {\n    \"primary\": \"#00C851\",\n    \"light\": \"#00C851\",\n    \"dark\": \"#00C851\"\n  },\n  \"favicon\": \"/images/favicon.svg\",\n  \"seo\": {\n    \"indexing\": \"all\",\n    \"metatags\": {\n      \"og:type\": \"website\",\n      \"og:site_name\": \"Stagehand Docs\"\n    }\n  },\n  \"api\": {\n    \"openapi\": \"v3/openapi.json\"\n  },\n  \"navigation\": {\n    \"versions\": [\n      {\n        \"version\": \"v4\",\n        \"groups\": [\n          {\n            \"group\": \"First steps\",\n            \"pages\": [\n              \"v4/first-steps/introduction\",\n              \"v4/first-steps/quickstart\",\n              \"v4/first-steps/installation\",\n              \"v4/first-steps/ai-rules\"\n            ]\n          },\n          {\n            \"group\": \"The basics\",\n            \"pages\": [\"v4/basics/act\", \"v4/basics/extract\", \"v4/basics/observe\", \"v4/basics/webmcp\"]\n          },\n          {\n            \"group\": \"Configuration\",\n            \"pages\": [\"v4/configuration/browser\", \"v4/configuration/logging\"]\n          },\n          {\n            \"group\": \"Add-ons\",\n            \"pages\": [\n              \"v4/add-ons/search\",\n              \"v4/add-ons/fetch\",\n              \"v4/configuration/models\",\n              \"v4/configuration/observability\"\n            ]\n          },\n          {\n            \"group\": \"Integrations\",\n            \"pages\": [\n              \"v4/integrations/overview\",\n              {\n                \"group\": \"Agent Frameworks\",\n                \"pages\": [\n                  \"v4/integrations/agent-frameworks/overview\",\n                  \"v4/integrations/agent-frameworks/claude-cua-toolset-quickstart\",\n                  \"v4/integrations/agent-frameworks/openai-cua-toolset-quickstart\",\n                  \"v4/integrations/agent-frameworks/eve\",\n                  \"v4/integrations/agent-frameworks/deep-agents\",\n                  \"v4/integrations/agent-frameworks/crewai\",\n                  \"v4/integrations/agent-frameworks/mastra\",\n                  \"v4/integrations/agent-frameworks/vercel-ai-sdk\"\n                ]\n              },\n              {\n                \"group\": \"CLI Agents\",\n                \"pages\": [\n                  \"v4/integrations/cli-agents/overview\",\n                  \"v4/integrations/cli-agents/claude-code\",\n                  \"v4/integrations/cli-agents/codex\",\n                  \"v4/integrations/cli-agents/cursor\",\n                  \"v4/integrations/cli-agents/fx\",\n                  \"v4/integrations/cli-agents/pi\"\n                ]\n              },\n              {\n                \"group\": \"Applications\",\n                \"pages\": [\"v4/integrations/applications/stripe\"]\n              }\n            ]\n          },\n          {\n            \"group\": \"Best practices\",\n            \"pages\": [\n              \"v4/best-practices/prompting-best-practices\",\n              \"v4/best-practices/usecase-observe\",\n              \"v4/best-practices/caching\",\n              \"v4/best-practices/using-multiple-tabs\",\n              \"v4/best-practices/user-data\",\n              \"v4/best-practices/speed-optimization\",\n              \"v4/best-practices/cost-optimization\",\n              \"v4/best-practices/deployments\"\n            ]\n          },\n          {\n            \"group\": \"Cookbooks\",\n            \"pages\": [\n              \"v4/cookbooks/overview\",\n              \"v4/cookbooks/persisted-login\",\n              \"v4/cookbooks/paginated-catalog\",\n              \"v4/cookbooks/files-to-bucket\",\n              \"v4/cookbooks/approve-form-submission\",\n              \"v4/cookbooks/ai-sdk-research-agent\"\n            ]\n          },\n          {\n            \"group\": \"Migration guide\",\n            \"pages\": [\"v4/migrations/v3\", \"v4/migrations/playwright\"]\n          },\n          {\n            \"group\": \"SDK reference\",\n            \"pages\": [\n              \"v4/reference/stagehand\",\n              \"v4/reference/context\",\n              \"v4/reference/clipboard\",\n              \"v4/reference/page\",\n              \"v4/reference/webmcp\",\n              \"v4/reference/response\",\n              \"v4/reference/locator\"\n            ]\n          }\n        ]\n      },\n      {\n        \"version\": \"v3\",\n        \"dropdowns\": [\n          {\n            \"dropdown\": \"TypeScript\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/first-steps/introduction\"],\n            \"groups\": [\n              {\n                \"group\": \"First Steps\",\n                \"pages\": [\n                  \"v3/first-steps/introduction\",\n                  \"v3/first-steps/quickstart\",\n                  \"v3/first-steps/installation\",\n                  \"v3/first-steps/ai-rules\"\n                ]\n              },\n              {\n                \"group\": \"The Basics\",\n                \"pages\": [\n                  \"v3/basics/agent\",\n                  \"v3/basics/act\",\n                  \"v3/basics/extract\",\n                  \"v3/basics/observe\",\n                  \"v3/basics/webmcp\",\n                  \"v3/basics/evals\"\n                ]\n              },\n              {\n                \"group\": \"Configuration\",\n                \"pages\": [\n                  \"v3/configuration/browser\",\n                  \"v3/configuration/observability\",\n                  \"v3/configuration/logging\",\n                  \"v3/configuration/models\"\n                ]\n              },\n              {\n                \"group\": \"Best Practices\",\n                \"pages\": [\n                  \"v3/best-practices/caching\",\n                  \"v3/best-practices/cost-optimization\",\n                  \"v3/best-practices/deterministic-agent\",\n                  \"v3/best-practices/using-multiple-tabs\",\n                  \"v3/best-practices/deployments\",\n                  \"v3/best-practices/history\",\n                  \"v3/best-practices/computer-use\",\n                  \"v3/best-practices/agent-fallbacks\",\n                  \"v3/best-practices/prompting-best-practices\",\n                  \"v3/best-practices/mcp-integrations\",\n                  \"v3/best-practices/speed-optimization\"\n                ]\n              },\n              {\n                \"group\": \"Integrations\",\n                \"pages\": [\n                  {\n                    \"group\": \"MCP Server\",\n                    \"pages\": [\n                      \"v3/integrations/mcp/introduction\",\n                      \"v3/integrations/mcp/setup\",\n                      \"v3/integrations/mcp/tools\",\n                      \"v3/integrations/mcp/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"CrewAI\",\n                    \"pages\": [\n                      \"v3/integrations/crew-ai/introduction\",\n                      \"v3/integrations/crew-ai/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Langchain\",\n                    \"pages\": [\n                      \"v3/integrations/langchain/introduction\",\n                      \"v3/integrations/langchain/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Next.js + Vercel\",\n                    \"pages\": [\n                      \"v3/integrations/vercel/introduction\",\n                      \"v3/integrations/vercel/configuration\"\n                    ]\n                  },\n                  {\n                    \"group\": \"Convex\",\n                    \"pages\": [\n                      \"v3/integrations/convex/introduction\",\n                      \"v3/integrations/convex/configuration\"\n                    ]\n                  },\n                  \"v3/integrations/playwright\",\n                  \"v3/integrations/puppeteer\",\n                  \"v3/integrations/selenium\"\n                ]\n              },\n              {\n                \"group\": \"Reference\",\n                \"pages\": [\n                  \"v3/references/stagehand\",\n                  \"v3/references/agent\",\n                  \"v3/references/act\",\n                  \"v3/references/extract\",\n                  \"v3/references/observe\",\n                  \"v3/references/context\",\n                  \"v3/references/clipboard\",\n                  \"v3/references/page\",\n                  \"v3/references/locator\",\n                  \"v3/references/deeplocator\",\n                  \"v3/references/response\"\n                ]\n              },\n              {\n                \"group\": \"Migration Guides\",\n                \"pages\": [\"v3/migrations/v2\", \"v3/migrations/python\"]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Python\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/python\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/python\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/python\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Java\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/java\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/java\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/java\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Go\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/go\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/go\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/go\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          },\n          {\n            \"dropdown\": \"Ruby\",\n            \"icon\": \"code\",\n            \"pages\": [\"v3/sdk/ruby\"],\n            \"groups\": [\n              {\n                \"group\": \"SDK Reference\",\n                \"pages\": [\"v3/sdk/ruby\"]\n              },\n              {\n                \"group\": \"API Reference\",\n                \"openapi\": {\n                  \"source\": \"v3/openapi.json\",\n                  \"directory\": \"v3/api-reference/ruby\"\n                },\n                \"pages\": [\n                  \"POST /v1/sessions/start\",\n                  \"POST /v1/sessions/{id}/navigate\",\n                  \"POST /v1/sessions/{id}/act\",\n                  \"POST /v1/sessions/{id}/observe\",\n                  \"POST /v1/sessions/{id}/extract\",\n                  \"POST /v1/sessions/{id}/agentExecute\",\n                  \"POST /v1/sessions/{id}/end\",\n                  \"GET /v1/sessions/{id}/replay\"\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      {\n        \"version\": \"v2\",\n        \"groups\": [\n          {\n            \"group\": \"First Steps\",\n            \"pages\": [\n              \"v2/first-steps/introduction\",\n              \"v2/first-steps/quickstart\",\n              \"v2/first-steps/installation\",\n              \"v2/first-steps/ai-rules\"\n            ]\n          },\n          {\n            \"group\": \"The Basics\",\n            \"pages\": [\"v2/basics/agent\", \"v2/basics/act\", \"v2/basics/extract\", \"v2/basics/observe\"]\n          },\n          {\n            \"group\": \"Configuration\",\n            \"pages\": [\n              \"v2/configuration/browser\",\n              \"v2/configuration/observability\",\n              \"v2/configuration/logging\",\n              \"v2/configuration/models\",\n              \"v2/configuration/evals\"\n            ]\n          },\n          {\n            \"group\": \"Best Practices\",\n            \"pages\": [\n              \"v2/best-practices/caching\",\n              \"v2/best-practices/cost-optimization\",\n              \"v2/best-practices/using-multiple-tabs\",\n              \"v2/best-practices/working-with-iframes\",\n              \"v2/best-practices/deployments\",\n              \"v2/best-practices/computer-use\",\n              \"v2/best-practices/contributing\",\n              \"v2/best-practices/playwright-interop\",\n              \"v2/best-practices/build-agent\",\n              \"v2/best-practices/agent-fallbacks\",\n              \"v2/best-practices/prompting-best-practices\",\n              \"v2/best-practices/mcp-integrations\",\n              \"v2/best-practices/speed-optimization\"\n            ]\n          },\n          {\n            \"group\": \"Integrations\",\n            \"pages\": [\n              {\n                \"group\": \"MCP Server\",\n                \"pages\": [\n                  \"v2/integrations/mcp/introduction\",\n                  \"v2/integrations/mcp/setup\",\n                  \"v2/integrations/mcp/tools\",\n                  \"v2/integrations/mcp/configuration\"\n                ]\n              },\n              {\n                \"group\": \"CrewAI\",\n                \"pages\": [\n                  \"v2/integrations/crew-ai/introduction\",\n                  \"v2/integrations/crew-ai/configuration\"\n                ]\n              },\n              {\n                \"group\": \"Langchain\",\n                \"pages\": [\n                  \"v2/integrations/langchain/introduction\",\n                  \"v2/integrations/langchain/configuration\"\n                ]\n              },\n              {\n                \"group\": \"Next.js + Vercel\",\n                \"pages\": [\n                  \"v2/integrations/vercel/introduction\",\n                  \"v2/integrations/vercel/configuration\"\n                ]\n              }\n            ]\n          },\n          {\n            \"group\": \"Reference\",\n            \"pages\": [\n              \"v2/references/stagehand\",\n              \"v2/references/act\",\n              \"v2/references/extract\",\n              \"v2/references/observe\",\n              \"v2/references/agent\"\n            ]\n          }\n        ]\n      }\n    ],\n    \"global\": {\n      \"anchors\": [\n        {\n          \"anchor\": \"Discord\",\n          \"href\": \"https://discord.gg/stagehand\",\n          \"icon\": \"discord\"\n        },\n        {\n          \"anchor\": \"GitHub\",\n          \"href\": \"https://github.com/browserbase/stagehand\",\n          \"icon\": \"github\"\n        },\n        {\n          \"anchor\": \"Changelog\",\n          \"href\": \"https://github.com/browserbase/stagehand/releases\",\n          \"icon\": \"scroll\"\n        }\n      ]\n    }\n  },\n  \"logo\": {\n    \"light\": \"/logo/light_logo.png\",\n    \"dark\": \"/logo/dark_logo.png\",\n    \"href\": \"https://stagehand.dev\"\n  },\n  \"navbar\": {\n    \"links\": [\n      {\n        \"label\": \"Discord\",\n        \"href\": \"https://discord.gg/stagehand\"\n      },\n      {\n        \"label\": \"Support\",\n        \"href\": \"mailto:support@browserbase.com\"\n      }\n    ]\n  },\n  \"footer\": {\n    \"socials\": {\n      \"discord\": \"https://discord.gg/stagehand\",\n      \"x\": \"https://x.com/stagehanddev\",\n      \"github\": \"https://github.com/browserbase/stagehand\",\n      \"linkedin\": \"https://linkedin.com/company/browserbasehq\"\n    }\n  },\n  \"integrations\": {\n    \"posthog\": {\n      \"apiKey\": \"phc_hmwkFrlc9UVrdE1jyG8AEKoCQCSr8dScjsRpKoLBEiV\",\n      \"apiHost\": \"https://us.i.posthog.com\"\n    }\n  },\n  \"contextual\": {\n    \"options\": [\"copy\", \"chatgpt\", \"claude\", \"view\"]\n  },\n  \"redirects\": [\n    {\n      \"source\": \"/first-steps/:slug*\",\n      \"destination\": \"/v4/first-steps/:slug*\"\n    },\n    {\n      \"source\": \"/basics/act\",\n      \"destination\": \"/v4/basics/act\"\n    },\n    {\n      \"source\": \"/basics/extract\",\n      \"destination\": \"/v4/basics/extract\"\n    },\n    {\n      \"source\": \"/basics/observe\",\n      \"destination\": \"/v4/basics/observe\"\n    },\n    {\n      \"source\": \"/basics/webmcp\",\n      \"destination\": \"/v4/basics/webmcp\"\n    },\n    {\n      \"source\": \"/basics/:slug*\",\n      \"destination\": \"/v3/basics/:slug*\"\n    },\n    {\n      \"source\": \"/configuration/:slug*\",\n      \"destination\": \"/v4/configuration/:slug*\"\n    },\n    {\n      \"source\": \"/best-practices/caching\",\n      \"destination\": \"/v4/best-practices/caching\"\n    },\n    {\n      \"source\": \"/best-practices/cost-optimization\",\n      \"destination\": \"/v4/best-practices/cost-optimization\"\n    },\n    {\n      \"source\": \"/best-practices/deployments\",\n      \"destination\": \"/v4/best-practices/deployments\"\n    },\n    {\n      \"source\": \"/best-practices/mcp-integrations\",\n      \"destination\": \"/v4/integrations/cli-agents/overview\"\n    },\n    {\n      \"source\": \"/best-practices/prompting-best-practices\",\n      \"destination\": \"/v4/best-practices/prompting-best-practices\"\n    },\n    {\n      \"source\": \"/best-practices/speed-optimization\",\n      \"destination\": \"/v4/best-practices/speed-optimization\"\n    },\n    {\n      \"source\": \"/best-practices/usecase-observe\",\n      \"destination\": \"/v4/best-practices/usecase-observe\"\n    },\n    {\n      \"source\": \"/best-practices/user-data\",\n      \"destination\": \"/v4/best-practices/user-data\"\n    },\n    {\n      \"source\": \"/best-practices/using-multiple-tabs\",\n      \"destination\": \"/v4/best-practices/using-multiple-tabs\"\n    },\n    {\n      \"source\": \"/best-practices/:slug*\",\n      \"destination\": \"/v3/best-practices/:slug*\"\n    },\n    {\n      \"source\": \"/v4/integrations/agents\",\n      \"destination\": \"/v4/integrations/agent-frameworks/overview\"\n    },\n    {\n      \"source\": \"/v4/integrations/eve\",\n      \"destination\": \"/v4/integrations/agent-frameworks/eve\"\n    },\n    {\n      \"source\": \"/v4/integrations/deep-agents\",\n      \"destination\": \"/v4/integrations/agent-frameworks/deep-agents\"\n    },\n    {\n      \"source\": \"/v4/integrations/crewai\",\n      \"destination\": \"/v4/integrations/agent-frameworks/crewai\"\n    },\n    {\n      \"source\": \"/v4/integrations/mastra\",\n      \"destination\": \"/v4/integrations/agent-frameworks/mastra\"\n    },\n    {\n      \"source\": \"/v4/integrations/vercel-ai-sdk\",\n      \"destination\": \"/v4/integrations/agent-frameworks/vercel-ai-sdk\"\n    },\n    {\n      \"source\": \"/v4/integrations/cli-agents\",\n      \"destination\": \"/v4/integrations/cli-agents/overview\"\n    },\n    {\n      \"source\": \"/v4/integrations/claude-code\",\n      \"destination\": \"/v4/integrations/cli-agents/claude-code\"\n    },\n    {\n      \"source\": \"/v4/integrations/codex\",\n      \"destination\": \"/v4/integrations/cli-agents/codex\"\n    },\n    {\n      \"source\": \"/v4/integrations/fx\",\n      \"destination\": \"/v4/integrations/cli-agents/fx\"\n    },\n    {\n      \"source\": \"/v4/integrations/pi\",\n      \"destination\": \"/v4/integrations/cli-agents/pi\"\n    },\n    {\n      \"source\": \"/v4/integrations/stripe\",\n      \"destination\": \"/v4/integrations/applications/stripe\"\n    },\n    {\n      \"source\": \"/integrations/mcp/:slug*\",\n      \"destination\": \"/v3/integrations/mcp/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/crew-ai/:slug*\",\n      \"destination\": \"/v3/integrations/crew-ai/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/langchain/:slug*\",\n      \"destination\": \"/v3/integrations/langchain/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/vercel/:slug*\",\n      \"destination\": \"/v3/integrations/vercel/:slug*\"\n    },\n    {\n      \"source\": \"/integrations/convex/:slug*\",\n      \"destination\": \"/v3/integrations/convex/:slug*\"\n    },\n    {\n      \"source\": \"/references/:slug*\",\n      \"destination\": \"/v3/references/:slug*\"\n    },\n    {\n      \"source\": \"/reference/:slug*\",\n      \"destination\": \"/v4/reference/:slug*\"\n    },\n    {\n      \"source\": \"/migrations/playwright\",\n      \"destination\": \"/v4/migrations/playwright\"\n    },\n    {\n      \"source\": \"/migrations/v3\",\n      \"destination\": \"/v4/migrations/v3\"\n    },\n    {\n      \"source\": \"/migrations/:slug*\",\n      \"destination\": \"/v3/migrations/:slug*\"\n    },\n    {\n      \"source\": \"/v4/examples/compare-pages-in-parallel\",\n      \"destination\": \"/v4/best-practices/using-multiple-tabs\"\n    },\n    {\n      \"source\": \"/v4/examples/model-gateway-extract\",\n      \"destination\": \"/v4/configuration/models#model-gateway\"\n    },\n    {\n      \"source\": \"/v4/examples/observe-then-act\",\n      \"destination\": \"/v4/cookbooks/paginated-catalog\"\n    },\n    {\n      \"source\": \"/v4/examples/tanstack-ai-extraction-tool\",\n      \"destination\": \"/v4/cookbooks/overview\"\n    },\n    {\n      \"source\": \"/v4/examples/overview\",\n      \"destination\": \"/v4/cookbooks/overview\"\n    },\n    {\n      \"source\": \"/v4/examples/approve-form-submission\",\n      \"destination\": \"/v4/cookbooks/approve-form-submission\"\n    },\n    {\n      \"source\": \"/v4/examples/paginated-catalog\",\n      \"destination\": \"/v4/cookbooks/paginated-catalog\"\n    },\n    {\n      \"source\": \"/v4/examples/files-to-bucket\",\n      \"destination\": \"/v4/cookbooks/files-to-bucket\"\n    },\n    {\n      \"source\": \"/v4/examples/ai-sdk-research-agent\",\n      \"destination\": \"/v4/cookbooks/ai-sdk-research-agent\"\n    }\n  ]\n}\n\n<!-- File: packages/docs/package.json (Tokens: ~159 | Category: anthropic-skill) -->\n{\n  \"name\": \"@browserbasehq/stagehand-docs\",\n  \"version\": \"4.0.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"check\": \"mint validate && mint broken-links --check-anchors --check-redirects --check-snippets && mint a11y --skip-contrast\",\n    \"typecheck\": \"pnpm run check\",\n    \"test:unit\": \"vitest run --root ../.. packages/docs/tests\",\n    \"dev\": \"mint dev\",\n    \"sync-sdk\": \"node scripts/sync-sdk-docs.js\"\n  },\n  \"devDependencies\": {\n    \"@mdx-js/mdx\": \"catalog:\",\n    \"mint\": \"catalog:\"\n  }\n}\n\n<!-- File: packages/evals/evals.config.json (Tokens: ~168 | Category: anthropic-skill) -->\n{\n  \"version\": 2,\n  \"defaults\": {\n    \"env\": \"local\",\n    \"trials\": 3,\n    \"concurrency\": 3,\n    \"model\": null,\n    \"api\": false,\n    \"verbose\": false,\n    \"harness\": null,\n    \"successMode\": null\n  },\n  \"benchmarks\": {\n    \"webvoyager\": {\n      \"limit\": 25\n    },\n    \"onlineMind2Web\": {\n      \"limit\": 25\n    },\n    \"webtailbench\": {\n      \"limit\": 25\n    },\n    \"odysseysbench\": {\n      \"limit\": 25\n    }\n  },\n  \"harnesses\": {},\n  \"providers\": {},\n  \"verifier\": {},\n  \"campaign\": {}\n}\n\n<!-- File: packages/evals/package.json (Tokens: ~867 | Category: anthropic-skill) -->\n{\n  \"name\": \"@browserbasehq/stagehand-evals\",\n  \"version\": \"4.0.0\",\n  \"private\": true,\n  \"description\": \"Evaluation suite for Stagehand\",\n  \"bin\": {\n    \"evals\": \"./dist/cli/cli.js\"\n  },\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"pnpm run --parallel \\\"/^build:(esm|cli)$/\\\"\",\n    \"build:esm\": \"tsx scripts/build-esm.ts\",\n    \"build:cli\": \"tsx scripts/build-cli.ts\",\n    \"test\": \"vitest run --config packages/evals/vitest.config.ts --root ../.. packages/evals/tests\",\n    \"test:unit\": \"pnpm run test\",\n    \"typecheck\": \"tsc --noEmit -p tsconfig.json\",\n    \"test:evals\": \"tsx scripts/test-evals.ts --cli packages/evals/dist/cli/cli.js\",\n    \"eval\": \"tsx cli.ts\",\n    \"report:core\": \"tsx scripts/render-braintrust-core-report.ts\",\n    \"task:record\": \"tsx tasks/cli.ts\"\n  },\n  \"dependencies\": {\n    \"@ai-sdk/provider\": \"^2.0.0\",\n    \"@anthropic-ai/claude-agent-sdk\": \"catalog:\",\n    \"@braintrust/otel\": \"^0.2.1\",\n    \"@browserbasehq/sdk\": \"catalog:\",\n    \"@browserbasehq/stagehand\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-claude-agent-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-claude-cua-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-codex-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-cursor-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-deepagents-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-eve-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-fx-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-gemini-cua-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-mastra-sdk\": \"workspace:*\",\n    \"@browserbasehq/stagehand-integrations-pi-sdk\": \"workspace:*\",\n    \"@clack/prompts\": \"^1.3.0\",\n    \"@modelcontextprotocol/sdk\": \"catalog:\",\n    \"@opentelemetry/api\": \"catalog:\",\n    \"@opentelemetry/exporter-trace-otlp-proto\": \"^0.220.0\",\n    \"@opentelemetry/sdk-trace-base\": \"^2.9.0\",\n    \"@opentelemetry/sdk-trace-node\": \"^2.9.0\",\n    \"ai\": \"^5.0.133\",\n    \"braintrust\": \"^3.21.0\",\n    \"browse\": \"workspace:*\",\n    \"dotenv\": \"^17.3.1\",\n    \"langsmith\": \"^0.6.0\",\n    \"openai\": \"^4.104.0\",\n    \"playwright\": \">=1.55.1 <1.57.0\",\n    \"sharp\": \"^0.35.4\",\n    \"stagehand-v3\": \"npm:@browserbasehq/stagehand@3.7.1\",\n    \"tsx\": \"catalog:\",\n    \"ws\": \"^8.21.0\",\n    \"zod\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"chalk\": \"^5.4.1\",\n    \"esbuild\": \"catalog:\",\n    \"gray-matter\": \"^4.0.3\",\n    \"string-comparison\": \"^1.3.0\",\n    \"vite\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"engines\": {\n    \"node\": \">=24.0.0\"\n  }\n}\n\n<!-- File: packages/evals/tsconfig.json (Tokens: ~87 | Category: anthropic-skill) -->\n{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"noImplicitAny\": true,\n    \"skipLibCheck\": true,\n    \"strict\": false,\n    \"target\": \"ES2022\",\n    \"types\": [\"node\"],\n    \"useUnknownInCatchVariables\": false\n  },\n  \"include\": [\"**/*.ts\"],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n\n<!-- File: packages/server-v3/CHANGELOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Server-v3 Skill\n\nPath: `packages/server-v3/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/CHANGELOG.md)\n\n<!-- File: packages/server-v3/openapi.v3.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Server-v3 Skill\n\nPath: `packages/server-v3/openapi.v3.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/openapi.v3.yaml)\n\n<!-- File: packages/server-v3/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Server-v3 Skill\n\nPath: `packages/server-v3/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/package.json)\n\n<!-- File: packages/server-v3/SDK_RELEASE_WORKFLOW.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Server-v3 Skill\n\nPath: `packages/server-v3/SDK_RELEASE_WORKFLOW.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/SDK_RELEASE_WORKFLOW.md)\n\n<!-- File: packages/server-v3/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Server-v3 Skill\n\nPath: `packages/server-v3/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/tsconfig.json)\n\n<!-- File: packages/server-v3/tsconfig.tests.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Server-v3 Skill\n\nPath: `packages/server-v3/tsconfig.tests.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/tsconfig.tests.json)\n\n<!-- File: packages/server-v4/CHANGELOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Server-v4 Skill\n\nPath: `packages/server-v4/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/CHANGELOG.md)\n\n<!-- File: packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json (Tokens: ~300 | Category: anthropic-skill) -->\n# 20260327165733_fast_living_mummy Skill\n\nPath: `packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/drizzle/20260327165733_fast_living_mummy/snapshot.json)\n\n<!-- File: packages/server-v4/openapi.v4.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Server-v4 Skill\n\nPath: `packages/server-v4/openapi.v4.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/openapi.v4.yaml)\n\n<!-- File: packages/server-v4/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Server-v4 Skill\n\nPath: `packages/server-v4/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/package.json)\n\n<!-- File: packages/server-v4/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Server-v4 Skill\n\nPath: `packages/server-v4/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/tsconfig.json)\n\n<!-- File: packages/cli/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# cli Documentation\n\nPath: `packages/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/cli/README.md)\n\n<!-- File: packages/core/lib/v3/agent/tools/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# tools Documentation\n\nPath: `packages/core/lib/v3/agent/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/lib/v3/agent/tools/README.md)\n\n<!-- File: packages/core/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# core Documentation\n\nPath: `packages/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/core/README.md)\n\n<!-- File: packages/docs/README.md (Tokens: ~407 | Category: plugin-manifest) -->\n# Stagehand docs\n\nThis site contains the Stagehand v2, v3, and v4 documentation. V4 is the default version.\n\n## Local development\n\nFrom the repository root:\n\n```sh\njust install\njust docs\n```\n\n`just docs` starts the repository-pinned Mint development server. No globally installed Mint or\nMintlify CLI is required.\n\n## Validation\n\nFrom the repository root:\n\n```sh\njust check\n```\n\nThis validates the Mint configuration and OpenAPI definitions, checks links and redirects, and runs\nthe documentation accessibility checks.\n\n## V3 API reference source\n\nThe v3 API reference uses the checked-in `v3/openapi.json`, not a live Stainless URL.\nThe former source,\n`https://app.stainless.com/api/spec/documented/stagehand/openapi.documented.yml`,\nreturned HTTP 404 and prevented Mint validation from completing.\n\nThe snapshot was recovered on September 15, 2026 from the OpenAPI YAML blocks in the\npublished `https://docs.stagehand.dev/v3/api-reference/{language}/{page}.md` pages.\nAll 32 pages (eight endpoints each for Python, Java, Go, and Ruby) were compared.\nTheir common metadata, operations, and shared components agreed. The snapshot\ncombines those fragments without changing descriptions, schemas, authentication,\nservers, or code samples: eight endpoints, 67 schemas, and two security schemes.\nThe four language sections retain their existing navigation and generated page paths.\n\nTreat this as the versioned v3 documentation source. Future spec updates must be\nreviewed as content changes, including endpoint titles/URLs, request and response\nschemas, authentication, and code samples. Do not replace it with a different\nserver-generated spec just to make validation pass. Run the docs checks and\n`pnpm --filter @browserbasehq/stagehand-docs test:unit` after updates.\n\n## Publishing\n\nDocumentation is deployed through the Mintlify GitHub integration after changes reach the\nrepository's default branch.\n\n<!-- File: packages/evals/README.md (Tokens: ~2352 | Category: plugin-manifest) -->\n# Stagehand Evals\n\nAgent benchmarks for Stagehand — `act`, `extract`, `observe`, `agent`, plus dataset-backed suites (WebVoyager, OnlineMind2Web, WebTailBench, Odysseys, HardBench).\n\nDriven by an interactive TUI (`evals`) or single-shot CLI (`evals run …`). Tasks are auto-discovered from `tasks/bench/<category>/` — no registration step.\n\n## Quickstart\n\nFrom the stagehand repo root:\n\n```bash\npnpm install\npnpm build:cli   # also: pnpm build, if you haven't built the workspace yet\n```\n\nThis links an `evals` binary on your `PATH`. Launch the REPL:\n\n```bash\nevals\n```\n\n![REPL with help output](./assets/readme/help.png)\n\nOr run a single target:\n\n```bash\nevals run extract -t 3 -c 5\nevals run b:webvoyager -l 10\n```\n\nA `.env` in `packages/evals/` is loaded automatically. Provide whichever provider keys (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_GENERATIVE_AI_API_KEY`, …) and `BROWSERBASE_API_KEY` / `BROWSERBASE_PROJECT_ID` you need.\n\n## TUI commands\n\nInside the REPL (or as `evals <command>` from your shell):\n\n| Command                        | What it does                                                             |\n| ------------------------------ | ------------------------------------------------------------------------ |\n| `run [target] [options]`       | Run evals. Target can be a tier, category, task, or benchmark shorthand. |\n| `list [tier] [--detailed]`     | List discovered tasks and categories.                                    |\n| `new <tier> <category> <name>` | Scaffold a new task file.                                                |\n| `config [set\\|reset\\|path]`    | Read or write defaults (env, trials, concurrency, model, …).             |\n| `experiments`                  | Inspect and compare Braintrust experiment runs.                          |\n| `help`                         | Show command help. Append `--help` to any command for details.           |\n\nUse `Esc` to abort an in-flight run without exiting the REPL.\n\n### Onboarding\n\n`evals welcome` runs a guided first-run flow built on the agent benchmarks: an animated intro (the Stagehand mark, what evals measures, EVALS), then a deterministic replay of a real WebVoyager task — three models in lanes, named generically (Opus, Grok, Sol — the fastest and cheapest fails on a wrong condition filter; timings and costs are illustrative), a podium by accuracy · speed · cost, and a chat-style look inside the winning run. It ends on a real `run b:webvoyager -l 3 --harness claude_code -e local` (`--harness codex` when the key is OpenAI's; `-e browserbase` when that's the available browser) when an Anthropic or OpenAI key and a browser exist, or hands off to `evals setup`, a guided flow that asks only for what's missing (Anthropic/OpenAI key, browser), writes `packages/evals/.env`, and offers the first real run.\n\nSet `EVALS_WELCOME_WIZARD=1` to auto-run the flow on the first REPL launch; `EVALS_NO_WELCOME=1` suppresses the first-run welcome. Any key advances the intro, Esc skips ahead, Ctrl+C cancels.\n\n## Run targets\n\n`evals run` accepts any of these shapes:\n\n| Target                                                 | Meaning                        |\n| ------------------------------------------------------ | ------------------------------ |\n| _(none)_ / `all`                                       | All bench tasks                |\n| `bench`                                                | Entire bench tier              |\n| `act` / `extract` / `observe` / `agent`                | A category                     |\n| `extract/extract_text`                                 | A specific task                |\n| `b:webvoyager` / `b:onlineMind2Web` / `b:webtailbench` | Dataset-backed benchmark suite |\n\n`evals list` shows everything that's been discovered:\n\n![evals list output](./assets/readme/list.png)\n\n## Common options\n\n| Flag                                                              | Purpose                                                                                 |\n| ----------------------------------------------------------------- | --------------------------------------------------------------------------------------- |\n| `-e, --env <local\\|browserbase>`                                  | Where the browser runs                                                                  |\n| `-t, --trials <n>`                                                | Trials per task                                                                         |\n| `-c, --concurrency <n>`                                           | Max parallel sessions                                                                   |\n| `-m, --model <id>`                                                | Override the model matrix                                                               |\n| `--api`                                                           | Run via the Stagehand API instead of the SDK                                            |\n| `--harness <name>`                                                | Which agent harness drives the bench task (`evals run --help` lists them)               |\n| `--tool <surface>`                                                | Tool surface the harness mounts; `stagehand_facade` is the Playwright-batch MCP surface |\n| `-l, --limit <n>` / `-s, --sample <n>` / `-f, --filter key=value` | Suite shaping for benchmark targets                                                     |\n| `--preview`                                                       | Print the resolved plan and exit — no browser, no LLM calls                             |\n| `-v, --verbose` / `--follow <id>`                                 | Stream every case's log lines (or one case's) above the live board                      |\n| `--json`                                                          | Print the end-of-run summary as JSON on stdout; the board and logs go to stderr         |\n\nConcurrency is capped per model provider under the global `-c` value (default 3 per provider); tune with `EVAL_PROVIDER_CONCURRENCY=openai=6,anthropic=4` or `evals config providers set openai concurrency 6`. The cap applies within one `evals run`: separately launched runs don't share it. When the agent's own provider call hits a 429 or connect timeout, that provider's width is halved for 60 s and the row is retried once; a Browserbase session-create 429 is retried once after 20 s. Retried rows carry `provider_throttled` in Braintrust. A rate-limited judge never re-runs the agent.\n\nTeam defaults live in the tracked `evals.config.json` (schema v2: `defaults`, `benchmarks`, `harnesses`, `providers`, `verifier`, `campaign`). `evals config set …` writes your personal overrides to the gitignored `evals.config.local.json` beside it; add `--shared` to change the team file. Flags always win. Most `defaults` then come from the local file, the tracked file and the `EVAL_*` env vars in that order; `EVAL_SUCCESS_MODE` and `STAGEHAND_BROWSER_TARGET` are the exceptions and beat the config, as does the env twin of every other section. `.env` loads from the cwd first (it wins), then `packages/evals/.env` (where `evals setup` saves keys), and shell exports always win — `evals doctor` reports which file supplied each provider key.\n\n`--preview` is useful for sanity-checking the plan before paying for a run:\n\n![evals run --preview output](./assets/readme/preview.png)\n\nA live run draws one row per case in flight: case id and site, the task, the phase it's in (`session` → `agent` → `verify`) and how long it has been running. Elapsed time turns yellow once a row outlasts three quarters of the finished ones. Rows waiting for a provider slot are counted in the queue line rather than shown; the `↓` marks a provider whose width was halved after a 429. The last few finishes show their outcome, and failures their session URL:\n\n![Live bench run](./assets/readme/run-live.png)\n\nEvery case that logs anything gets its own file under `.trajectories/<run>/logs/` (with the provider in the name), whether or not you're watching. `-v` streams those lines above the board, attributed by case id; `--follow <id>` streams one case. While a run is going, `v` cycles the stream off → all → one (the oldest running case) → off, `?` shows the keys, and `esc` stops the run:\n\n![Live bench run with -v](./assets/readme/run-verbose.png)\n\nThe end-of-run summary has one line per cell (harness × tool × model) with the pass rate, the failure kinds that aren't the agent's fault or aren't what they look like (`max_turns`, `sdk_error`, `gated`: the judge passed it, a deterministic check such as \"never used the browser\" failed it, and `ungraded`), and `retried`: rows retried after a provider 429, which may still have passed. Infra failures are listed with their reason and session URL; rubric fails by case id. `--json` emits the same as an object:\n\n![Run summary](./assets/readme/run-summary.png)\n\nWhen the judge grades nothing (a retired model, a bad key), every row fails closed, so the pass rate says nothing about the agent. The run says so and exits 1:\n\n![Dead-judge banner](./assets/readme/run-dead-judge.png)\n\n`evals doctor --harness a,b [--probe]` probes each harness (binary, key, key validity, extras like heap or `CODEX_HOME`), the judge and Browserbase, and prints the fix command for each failure that has one:\n\n![evals doctor](./assets/readme/doctor.png)\n\n## Shared harness behavior\n\nSee [the harness contract](docs/harness-contract.md) for tool surfaces, prompt policy,\nbudget units, session diagnostics, verification, and usage accounting.\nSee [HardBench](datasets/hardbenchmark/README.md) for corpus selection and rubric v1.2.\n\n## Adding a bench task\n\n```bash\nevals new bench extract my_new_task\n```\n\nThis drops a `defineBenchTask`-based file into `tasks/bench/extract/`. It will show up in `evals list` on next launch — no config edit needed.\n\n```ts\n// tasks/bench/extract/my_new_task.ts\nimport { defineBenchTask } from \"../../../framework/defineTask.js\";\n\nexport default defineBenchTask({\n  name: \"my_new_task\",\n  tags: [\"regression\"],\n  run: async ({ stagehand, logger }) => {\n    // ... drive stagehand, return { _success: boolean, ... }\n  },\n});\n```\n\n## Tracing / Observability\n\nRuns stream into Braintrust when `BRAINTRUST_API_KEY` is set; otherwise a local summary prints to stdout. Use `evals experiments` to inspect and diff past Braintrust runs.\n\n### Recording observation tasks\n\nUse the [observation task recorder](tasks/README.md) to capture a rendered\npage for a static `extract()` or `observe()` regression. It provides a standalone\nHTML artifact and provenance metadata; dynamic application replay is outside its\nscope.\n\n<!-- File: packages/server-v3/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# server-v3 Documentation\n\nPath: `packages/server-v3/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v3/README.md)\n\n<!-- File: packages/server-v4/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# server-v4 Documentation\n\nPath: `packages/server-v4/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/browserbase/stagehand/HEAD/packages/server-v4/README.md)\n</yakaai_skills>"}