[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-browserbase-browser-trace":3,"mdc-gn27pl-key":34,"related-repo-browserbase-browser-trace":3717,"related-org-browserbase-browser-trace":3829},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"browser-trace","capture and debug browser automation traces","Capture a full DevTools-protocol trace of any browser automation — CDP firehose, screenshots, and DOM dumps — then bisect the stream into per-page searchable buckets. Use when the user wants to debug a failed run, audit network\u002Fconsole\u002FDOM activity, attach a trace to an in-progress session, or feed structured per-page summaries back into an agent loop so its next iteration learns from the last one.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"browserbase","Browserbase","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fbrowserbase.png",[12,16,17,20],{"name":13,"slug":14,"type":15},"Observability","observability","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Debugging","debugging",{"name":21,"slug":22,"type":15},"Browser Automation","browser-automation",3649,"https:\u002F\u002Fgithub.com\u002Fbrowserbase\u002Fskills","2026-04-28T05:41:33.024656","MIT",232,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Browserbase's official collection of agent skills to access the web.","https:\u002F\u002Fgithub.com\u002Fbrowserbase\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fbrowser-trace","---\nname: browser-trace\ndescription: Capture a full DevTools-protocol trace of any browser automation — CDP firehose, screenshots, and DOM dumps — then bisect the stream into per-page searchable buckets. Use when the user wants to debug a failed run, audit network\u002Fconsole\u002FDOM activity, attach a trace to an in-progress session, or feed structured per-page summaries back into an agent loop so its next iteration learns from the last one.\ncompatibility: \"Requires Node 18+, the browse CLI (`npm install -g browse`) with `browse cdp`, and optionally `jq` for ad-hoc querying of the bisected JSONL files. For remote Browserbase sessions, also requires `BROWSERBASE_API_KEY`. The skill scripts themselves use only the Node standard library — no `npm install` step.\"\nlicense: MIT\nallowed-tools: Bash, Read, Grep\n---\n\n# Browser Trace\n\nAttach a **second, read-only CDP client** to a browser session that is already being driven by your main automation. The trace records the full DevTools firehose to NDJSON, polls for screenshots and DOM dumps in parallel, and slices everything into a directory tree that bash tools can search.\n\nThis skill does **not** drive pages — it only listens. Pair it with the `browser` skill, `browse`, Stagehand, Playwright, or anything else that speaks CDP.\n\n## When to use\n\n- The user wants to debug a browser-automation run (failing form, missing element, hung navigation, JS exception).\n- The user has a running automation and wants to attach a trace mid-flight without restarting it.\n- The user wants to split a CDP firehose into network \u002F console \u002F DOM \u002F page buckets.\n- The user wants screenshots + DOM snapshots over time, joined to CDP events by timestamp.\n\nIf the user just wants to **drive** the browser, use the `browser` skill instead.\n\n## Setup check\n\n```bash\nnode --version                                  # require Node 18+\nwhich browse || npm install -g browse\nwhich jq     || true                                # optional — used only for ad-hoc querying\n```\n\nVerify `browse cdp` exists:\n\n```bash\nbrowse --help | grep -q \"^\\s*cdp \" || echo \"browse cdp not available — update browse\"\n```\n\n## How it works\n\nEvery Chrome DevTools target accepts **multiple concurrent CDP clients**. Your main automation is one client; this skill adds a second one that only enables observation domains (Network, Console, Runtime, Log, Page) and never sends action commands.\n\nThe tracer has three pieces:\n\n1. **Firehose**: `browse cdp \u003Ctarget>` streams every CDP event as one JSON object per line to `cdp\u002Fraw.ndjson`.\n2. **Sampler**: a polling loop calls `browse screenshot --cdp \u003Ctarget> --path \u003Cfile>` and `browse get html body --cdp \u003Ctarget>` on an interval (default 2s). The helper passes `--cdp` when it samples so it can attach to the traced target from its own process; once a browse daemon session is attached to a CDP target, follow-up commands in that session do not need to repeat `--cdp`.\n3. **Bisector**: after the run, `bisect-cdp.mjs` walks `raw.ndjson` once, slices it into per-bucket JSONL files keyed by CDP method, and additionally bisects per page using top-level `Page.frameNavigated` events as boundaries.\n\n## Quickstart\n\n### Local Chrome\n\n```bash\n# 1. Launch Chrome with a debugger port (any user-data-dir keeps it isolated).\n\"\u002FApplications\u002FGoogle Chrome.app\u002FContents\u002FMacOS\u002FGoogle Chrome\" \\\n  --remote-debugging-port=9222 \\\n  --user-data-dir=\u002Ftmp\u002Fchrome-o11y \\\n  about:blank &\n\n# 2. Start the tracer.\nnode scripts\u002Fstart-capture.mjs 9222 my-run\n\n# 3. Run your main automation against port 9222.\nbrowse open https:\u002F\u002Fexample.com --cdp 9222\n# ...whatever the run does...\n\n# 4. Stop and bisect.\nnode scripts\u002Fstop-capture.mjs my-run\nnode scripts\u002Fbisect-cdp.mjs my-run\n```\n\n### Browserbase remote\n\nTwo helpers wrap the platform-side bookkeeping: `bb-capture.mjs` creates or attaches to a session and starts the tracer; `bb-finalize.mjs` pulls platform artifacts (final session metadata, server logs, downloads) into the run dir at the end.\n\n> Browserbase ends a session as soon as its last CDP client disconnects. **Create with `--keep-alive`, then attach automation to the session's `connectUrl` before or together with the tracer.** `bb-capture.mjs --new` handles the keep-alive session and tracer setup; your automation still needs to attach.\n\n```bash\nexport BROWSERBASE_API_KEY=...\n\n# 1. Create a keep-alive session AND start the tracer in one step.\n#    Prints the session id, connectUrl prefix, and a live debugger URL you\n#    can open in a browser to watch the run interactively.\nnode scripts\u002Fbb-capture.mjs --new my-run\n\n# 2. Drive automation. bb-capture stamped the session id into the manifest.\nSID=$(jq -r .browserbase.session_id .o11y\u002Fmy-run\u002Fmanifest.json)\nCONNECT_URL=\"$(browse cloud sessions get \"$SID\" | jq -r .connectUrl)\"\nBROWSE_NAME=my-run-browser\nbrowse open https:\u002F\u002Fexample.com --cdp \"$CONNECT_URL\" --session \"$BROWSE_NAME\"\nbrowse open https:\u002F\u002Fnews.ycombinator.com --session \"$BROWSE_NAME\"\n\n# 3. Stop the tracer, bisect, then pull platform artifacts and release.\nnode scripts\u002Fstop-capture.mjs my-run\nnode scripts\u002Fbisect-cdp.mjs my-run\nnode scripts\u002Fbb-finalize.mjs my-run --release\n```\n\nAttaching to a session that's *already running* (e.g. one your production worker created) — `bb-capture.mjs` accepts a session id instead of `--new`:\n\n```bash\n# Pick a running session (filter client-side; browse cloud sessions list has no --status flag)\nbrowse cloud sessions list | jq -r '.[] | select(.status == \"RUNNING\") | .id'\n\nnode scripts\u002Fbb-capture.mjs \u003Csession-id> mid-flight-debug\n# ...tracer runs alongside the existing automation client; no disruption...\nnode scripts\u002Fstop-capture.mjs mid-flight-debug\nnode scripts\u002Fbisect-cdp.mjs mid-flight-debug\nnode scripts\u002Fbb-finalize.mjs mid-flight-debug   # without --release: leave the session running\n```\n\n#### What you get from the Browserbase platform\n\n`bb-capture.mjs` adds a `browserbase` block to `manifest.json` (session id, project, region, started_at, expires_at, debugger URL). `bb-finalize.mjs` writes:\n\n- `\u003Crun>\u002Fbrowserbase\u002Fsession.json` — final `browse cloud sessions get` snapshot (proxyBytes, status, ended_at, viewport, …)\n- `\u003Crun>\u002Fbrowserbase\u002Flogs.json` — `browse cloud sessions logs` output. **Often empty.** The CDP firehose in `cdp\u002Fraw.ndjson` is the source of truth; this is a side channel.\n- `\u003Crun>\u002Fbrowserbase\u002Fdownloads.zip` — files the session downloaded, if any (the script discards the empty 22-byte zip you get when there are none)\n\nSession replay artifact fetching is **deprecated** and isn't fetched. Use the screenshots + DOM dumps in `screenshots\u002F` and `dom\u002F` for visual ground truth.\n\nThe live `debugger_url` in the manifest opens an interactive Chrome DevTools view served by Browserbase — handy for *watching* a long-running automation while the tracer captures the firehose to disk.\n\n## Filesystem layout\n\n```\n.o11y\u002F\u003Crun-id>\u002F\n  manifest.json                 run metadata: target, domains, started_at, stopped_at\n  index.jsonl                   one line per sample: {ts, screenshot, dom, url}\n  cdp\u002F\n    raw.ndjson                  full CDP firehose (one JSON object per line)\n    summary.json                {sessionId, duration, totalEvents, pages[]} — see shape below\n    network\u002F{requests,responses,finished,failed,websocket}.jsonl   session-wide buckets (always written)\n    console\u002F{logs,exceptions}.jsonl\n    runtime\u002Fall.jsonl\n    log\u002Fentries.jsonl\n    page\u002F{navigations,lifecycle,frames,dialogs,all}.jsonl\n    dom\u002Fall.jsonl                                                  (only if O11Y_DOMAINS includes DOM)\n    target\u002F{attached,detached}.jsonl\n    pages\u002F                      per-page slices, indexed by top-level frameNavigated boundaries\n      000\u002F                      first concrete page\n        url.txt                 the URL for this page\n        summary.json            this page's domains\u002Fnetwork\u002Ftiming block (same shape as a pages[] entry)\n        raw.jsonl               firehose scoped to this page\n        network\u002F, console\u002F, page\u002F, runtime\u002F, log\u002F, target\u002F, dom\u002F    same buckets, only non-empty files\n  screenshots\u002F\u003Ciso-ts>.png      one PNG per sample interval\n  dom\u002F\u003Ciso-ts>.html             one HTML dump per sample interval\n  browserbase\u002F                  added by bb-finalize.mjs (Browserbase runs only)\n    session.json                final `browse cloud sessions get` snapshot (proxyBytes, status, ended_at, …)\n    logs.json                   `browse cloud sessions logs` output (often [])\n    downloads.zip               `browse cloud sessions downloads get` output (only if the session downloaded files)\n```\n\nWhen a run was started via `bb-capture.mjs`, `manifest.json` also carries a top-level `browserbase` block: `session_id`, `project_id`, `region`, `started_at`, `expires_at`, `keep_alive`, `debugger_url`.\n\n### Summary shape\n\n`cdp\u002Fsummary.json` is the entry point for any analysis: it has session-level totals and a `pages[]` array indexed by top-level `Page.frameNavigated`. Per-page entries are emitted in navigation order (page 0 = first concrete URL).\n\n```json\n{\n  \"sessionId\": \"45f28023-…\",\n  \"duration\": { \"startMs\": 1777312533000, \"endMs\": 1777312609000, \"totalMs\": 76000 },\n  \"totalEvents\": 420,\n  \"pages\": [\n    {\n      \"pageId\": 0,\n      \"url\": \"https:\u002F\u002Fexample.com\u002F\",\n      \"startMs\": 1777312533000, \"endMs\": 1777312538886, \"durationMs\": 5886,\n      \"eventCount\": 60,\n      \"domains\": {\n        \"Network\": { \"count\": 18, \"errors\": 1 },\n        \"Console\": { \"count\": 2 },\n        \"Page\":    { \"count\": 24 },\n        \"Runtime\": { \"count\": 13 }\n      },\n      \"network\": { \"requests\": 4, \"failed\": 1, \"byType\": { \"Document\": 2, \"Script\": 1, \"Other\": 1 } }\n    }\n  ]\n}\n```\n\n`startMs` \u002F `endMs` \u002F `durationMs` are wall-clock ms, derived from `manifest.started_at` plus the offset of each event's CDP monotonic timestamp. `domains[*]` only includes `errors`\u002F`warnings` keys when non-zero.\n\n### Drilling in with `query.mjs`\n\nFor interactive exploration, use `scripts\u002Fquery.mjs \u003Crun-id> \u003Ccommand>` instead of remembering paths:\n\n```bash\nnode scripts\u002Fquery.mjs my-run list                    # one-line table of pages\nnode scripts\u002Fquery.mjs my-run page 1                  # full summary for page 1\nnode scripts\u002Fquery.mjs my-run page 1 network\u002Ffailed   # cat failed.jsonl for page 1\nnode scripts\u002Fquery.mjs my-run errors                  # all errors across pages, attributed by pid\nnode scripts\u002Fquery.mjs my-run errors 2                # errors from page 2 only\nnode scripts\u002Fquery.mjs my-run hosts                   # top hosts by request count\nnode scripts\u002Fquery.mjs my-run host api.example.com    # all requests\u002Fresponses for a host\nnode scripts\u002Fquery.mjs my-run summary                 # full summary.json\n```\n\nBehind the scenes it just reads `cdp\u002Fsummary.json` and the `cdp\u002Fpages\u002F\u003Cpid>\u002F` tree — feel free to bypass it with raw `jq`\u002F`rg` once you know the shape.\n\n## Top traversal recipes\n\n```bash\n# All failed network requests (use jq -c to keep it line-delimited)\njq -c '.params' .o11y\u002F\u003Crun>\u002Fcdp\u002Fnetwork\u002Ffailed.jsonl\n\n# Find requests to a specific host\njq -c 'select(.params.request.url | test(\"api\\\\.example\\\\.com\"))' \\\n  .o11y\u002F\u003Crun>\u002Fcdp\u002Fnetwork\u002Frequests.jsonl\n\n# 4xx\u002F5xx responses\njq -c 'select(.params.response.status >= 400)\n       | {status: .params.response.status, url: .params.response.url}' \\\n  .o11y\u002F\u003Crun>\u002Fcdp\u002Fnetwork\u002Fresponses.jsonl\n\n# Console errors only\njq -c 'select(.params.type == \"error\")' .o11y\u002F\u003Crun>\u002Fcdp\u002Fconsole\u002Flogs.jsonl\n\n# Sequence of URLs visited\njq -r '.params.frame.url' .o11y\u002F\u003Crun>\u002Fcdp\u002Fpage\u002Fnavigations.jsonl\n\n# Find the screenshot taken closest to a timestamp (e.g., when an exception fired)\nls .o11y\u002F\u003Crun>\u002Fscreenshots\u002F | sort | awk -v t=20260427T1714123NZ '\n  $0 >= t { print; exit }'\n```\n\nSee **REFERENCE.md** for the full jq recipe library and a method-by-method bisect map. See **EXAMPLES.md** for end-to-end debug scenarios.\n\n## Best practices\n\n1. **Use `bb-capture.mjs` on Browserbase**: it enforces `--keep-alive`, fetches the connectUrl, captures the debugger URL, and stamps the manifest. Doing it manually invites mistakes.\n2. **Don't `--release` a session you don't own**: `bb-finalize.mjs --release` is for sessions *you* created with `--new`. When attaching to a production session via `bb-capture.mjs \u003Csession-id>`, run `bb-finalize.mjs` without `--release` so the original automation keeps running.\n3. **Order matters for remote**: on Browserbase, attach the main automation client before (or together with) the tracer, and create the session with `--keep-alive`. Otherwise the session ends as soon as the tracer's WS closes.\n4. **Don't poll faster than ~1s**: each sample runs browser CLI read commands and screenshots Chrome. 2s is a good default.\n5. **Pick domains deliberately**: defaults (`Network Console Runtime Log Page`) cover most debugging. Add `DOM` for DOM-tree mutations (very noisy) via `O11Y_DOMAINS=\"$O11Y_DOMAINS DOM\"`.\n6. **Reuse one Browserbase session for the automation client on remote** by attaching to that session's `connectUrl` with `browse open ... --cdp \"$CONNECT_URL\" --session \u003Cname>`. The `--session` flag names the local browse daemon; it is not a Browserbase session attach flag.\n7. **Always run `stop-capture.mjs`**, even after a crash, so background processes don't linger and the manifest gets `stopped_at`.\n8. **Bisect once per run**: `bisect-cdp.mjs` is idempotent — it overwrites the per-bucket files from `raw.ndjson` each time.\n\n## Troubleshooting\n\n- **`browse cdp exited immediately`**: usually means the target is unreachable (wrong port) or the Browserbase session has already ended. For remote, verify with `browse cloud sessions get \u003Cid>` — if `status` is `COMPLETED`, recreate with `--keep-alive` and attach automation first.\n- **Empty `raw.ndjson` even though processes are running**: confirm a CDP client is actually driving the page. The tracer only emits events that the browser generates, so an idle browser produces ~5 lines of attach\u002Fdiscover messages and nothing else.\n- **Screenshots all look identical**: check `index.jsonl` — if `url` doesn't change, the page hasn't navigated yet. The polling loop runs independently of the main automation's pace.\n- **Browserbase session ends mid-run**: it likely hit `--timeout`. Recreate with a higher timeout (`BB_SESSION_TIMEOUT=1800 node scripts\u002Fbb-capture.mjs --new ...`) or remove the timeout flag.\n- **`bb-capture.mjs \u003Cid>` says \"not RUNNING\"**: the session you tried to attach to ended. List candidates with `browse cloud sessions list | jq '.[] | select(.status == \"RUNNING\")'` and try again.\n- **`browserbase\u002Flogs.json` is empty `[]`**: expected — `browse cloud sessions logs` is sparse in practice. The CDP firehose in `cdp\u002Fraw.ndjson` is the source of truth.\n- **Where's the session recording (rrweb)?**: session replay artifact fetching is deprecated; this skill doesn't fetch it. Use the screenshot stream in `screenshots\u002F` and DOM dumps in `dom\u002F`.\n\nFor full reference, see [REFERENCE.md](REFERENCE.md).\nFor example debug runs, see [EXAMPLES.md](EXAMPLES.md).\n",{"data":35,"body":38},{"name":4,"description":6,"compatibility":36,"license":26,"allowed-tools":37},"Requires Node 18+, the browse CLI (`npm install -g browse`) with `browse cdp`, and optionally `jq` for ad-hoc querying of the bisected JSONL files. For remote Browserbase sessions, also requires `BROWSERBASE_API_KEY`. The skill scripts themselves use only the Node standard library — no `npm install` step.","Bash, Read, Grep",{"type":39,"children":40},"root",[41,49,63,92,99,124,143,149,253,266,338,344,356,361,465,471,478,694,700,721,761,1122,1150,1316,1323,1355,1421,1448,1468,1474,1484,1558,1564,1590,2449,2503,2515,2528,2755,2789,2795,3238,3257,3263,3490,3496,3694,3711],{"type":42,"tag":43,"props":44,"children":45},"element","h1",{"id":4},[46],{"type":47,"value":48},"text","Browser Trace",{"type":42,"tag":50,"props":51,"children":52},"p",{},[53,55,61],{"type":47,"value":54},"Attach a ",{"type":42,"tag":56,"props":57,"children":58},"strong",{},[59],{"type":47,"value":60},"second, read-only CDP client",{"type":47,"value":62}," to a browser session that is already being driven by your main automation. The trace records the full DevTools firehose to NDJSON, polls for screenshots and DOM dumps in parallel, and slices everything into a directory tree that bash tools can search.",{"type":42,"tag":50,"props":64,"children":65},{},[66,68,73,75,82,84,90],{"type":47,"value":67},"This skill does ",{"type":42,"tag":56,"props":69,"children":70},{},[71],{"type":47,"value":72},"not",{"type":47,"value":74}," drive pages — it only listens. Pair it with the ",{"type":42,"tag":76,"props":77,"children":79},"code",{"className":78},[],[80],{"type":47,"value":81},"browser",{"type":47,"value":83}," skill, ",{"type":42,"tag":76,"props":85,"children":87},{"className":86},[],[88],{"type":47,"value":89},"browse",{"type":47,"value":91},", Stagehand, Playwright, or anything else that speaks CDP.",{"type":42,"tag":93,"props":94,"children":96},"h2",{"id":95},"when-to-use",[97],{"type":47,"value":98},"When to use",{"type":42,"tag":100,"props":101,"children":102},"ul",{},[103,109,114,119],{"type":42,"tag":104,"props":105,"children":106},"li",{},[107],{"type":47,"value":108},"The user wants to debug a browser-automation run (failing form, missing element, hung navigation, JS exception).",{"type":42,"tag":104,"props":110,"children":111},{},[112],{"type":47,"value":113},"The user has a running automation and wants to attach a trace mid-flight without restarting it.",{"type":42,"tag":104,"props":115,"children":116},{},[117],{"type":47,"value":118},"The user wants to split a CDP firehose into network \u002F console \u002F DOM \u002F page buckets.",{"type":42,"tag":104,"props":120,"children":121},{},[122],{"type":47,"value":123},"The user wants screenshots + DOM snapshots over time, joined to CDP events by timestamp.",{"type":42,"tag":50,"props":125,"children":126},{},[127,129,134,136,141],{"type":47,"value":128},"If the user just wants to ",{"type":42,"tag":56,"props":130,"children":131},{},[132],{"type":47,"value":133},"drive",{"type":47,"value":135}," the browser, use the ",{"type":42,"tag":76,"props":137,"children":139},{"className":138},[],[140],{"type":47,"value":81},{"type":47,"value":142}," skill instead.",{"type":42,"tag":93,"props":144,"children":146},{"id":145},"setup-check",[147],{"type":47,"value":148},"Setup check",{"type":42,"tag":150,"props":151,"children":156},"pre",{"className":152,"code":153,"language":154,"meta":155,"style":155},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","node --version                                  # require Node 18+\nwhich browse || npm install -g browse\nwhich jq     || true                                # optional — used only for ad-hoc querying\n","bash","",[157],{"type":42,"tag":76,"props":158,"children":159},{"__ignoreMap":155},[160,184,225],{"type":42,"tag":161,"props":162,"children":165},"span",{"class":163,"line":164},"line",1,[166,172,178],{"type":42,"tag":161,"props":167,"children":169},{"style":168},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[170],{"type":47,"value":171},"node",{"type":42,"tag":161,"props":173,"children":175},{"style":174},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[176],{"type":47,"value":177}," --version",{"type":42,"tag":161,"props":179,"children":181},{"style":180},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[182],{"type":47,"value":183},"                                  # require Node 18+\n",{"type":42,"tag":161,"props":185,"children":187},{"class":163,"line":186},2,[188,194,199,205,210,215,220],{"type":42,"tag":161,"props":189,"children":191},{"style":190},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[192],{"type":47,"value":193},"which",{"type":42,"tag":161,"props":195,"children":196},{"style":174},[197],{"type":47,"value":198}," browse",{"type":42,"tag":161,"props":200,"children":202},{"style":201},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[203],{"type":47,"value":204}," ||",{"type":42,"tag":161,"props":206,"children":207},{"style":168},[208],{"type":47,"value":209}," npm",{"type":42,"tag":161,"props":211,"children":212},{"style":174},[213],{"type":47,"value":214}," install",{"type":42,"tag":161,"props":216,"children":217},{"style":174},[218],{"type":47,"value":219}," -g",{"type":42,"tag":161,"props":221,"children":222},{"style":174},[223],{"type":47,"value":224}," browse\n",{"type":42,"tag":161,"props":226,"children":228},{"class":163,"line":227},3,[229,233,238,243,248],{"type":42,"tag":161,"props":230,"children":231},{"style":190},[232],{"type":47,"value":193},{"type":42,"tag":161,"props":234,"children":235},{"style":174},[236],{"type":47,"value":237}," jq",{"type":42,"tag":161,"props":239,"children":240},{"style":201},[241],{"type":47,"value":242},"     ||",{"type":42,"tag":161,"props":244,"children":245},{"style":190},[246],{"type":47,"value":247}," true",{"type":42,"tag":161,"props":249,"children":250},{"style":180},[251],{"type":47,"value":252},"                                # optional — used only for ad-hoc querying\n",{"type":42,"tag":50,"props":254,"children":255},{},[256,258,264],{"type":47,"value":257},"Verify ",{"type":42,"tag":76,"props":259,"children":261},{"className":260},[],[262],{"type":47,"value":263},"browse cdp",{"type":47,"value":265}," exists:",{"type":42,"tag":150,"props":267,"children":269},{"className":152,"code":268,"language":154,"meta":155,"style":155},"browse --help | grep -q \"^\\s*cdp \" || echo \"browse cdp not available — update browse\"\n",[270],{"type":42,"tag":76,"props":271,"children":272},{"__ignoreMap":155},[273],{"type":42,"tag":161,"props":274,"children":275},{"class":163,"line":164},[276,280,285,290,295,300,305,310,315,319,324,328,333],{"type":42,"tag":161,"props":277,"children":278},{"style":168},[279],{"type":47,"value":89},{"type":42,"tag":161,"props":281,"children":282},{"style":174},[283],{"type":47,"value":284}," --help",{"type":42,"tag":161,"props":286,"children":287},{"style":201},[288],{"type":47,"value":289}," |",{"type":42,"tag":161,"props":291,"children":292},{"style":168},[293],{"type":47,"value":294}," grep",{"type":42,"tag":161,"props":296,"children":297},{"style":174},[298],{"type":47,"value":299}," -q",{"type":42,"tag":161,"props":301,"children":302},{"style":201},[303],{"type":47,"value":304}," \"",{"type":42,"tag":161,"props":306,"children":307},{"style":174},[308],{"type":47,"value":309},"^\\s*cdp ",{"type":42,"tag":161,"props":311,"children":312},{"style":201},[313],{"type":47,"value":314},"\"",{"type":42,"tag":161,"props":316,"children":317},{"style":201},[318],{"type":47,"value":204},{"type":42,"tag":161,"props":320,"children":321},{"style":190},[322],{"type":47,"value":323}," echo",{"type":42,"tag":161,"props":325,"children":326},{"style":201},[327],{"type":47,"value":304},{"type":42,"tag":161,"props":329,"children":330},{"style":174},[331],{"type":47,"value":332},"browse cdp not available — update browse",{"type":42,"tag":161,"props":334,"children":335},{"style":201},[336],{"type":47,"value":337},"\"\n",{"type":42,"tag":93,"props":339,"children":341},{"id":340},"how-it-works",[342],{"type":47,"value":343},"How it works",{"type":42,"tag":50,"props":345,"children":346},{},[347,349,354],{"type":47,"value":348},"Every Chrome DevTools target accepts ",{"type":42,"tag":56,"props":350,"children":351},{},[352],{"type":47,"value":353},"multiple concurrent CDP clients",{"type":47,"value":355},". Your main automation is one client; this skill adds a second one that only enables observation domains (Network, Console, Runtime, Log, Page) and never sends action commands.",{"type":42,"tag":50,"props":357,"children":358},{},[359],{"type":47,"value":360},"The tracer has three pieces:",{"type":42,"tag":362,"props":363,"children":364},"ol",{},[365,391,431],{"type":42,"tag":104,"props":366,"children":367},{},[368,373,375,381,383,389],{"type":42,"tag":56,"props":369,"children":370},{},[371],{"type":47,"value":372},"Firehose",{"type":47,"value":374},": ",{"type":42,"tag":76,"props":376,"children":378},{"className":377},[],[379],{"type":47,"value":380},"browse cdp \u003Ctarget>",{"type":47,"value":382}," streams every CDP event as one JSON object per line to ",{"type":42,"tag":76,"props":384,"children":386},{"className":385},[],[387],{"type":47,"value":388},"cdp\u002Fraw.ndjson",{"type":47,"value":390},".",{"type":42,"tag":104,"props":392,"children":393},{},[394,399,401,407,409,415,417,423,425,430],{"type":42,"tag":56,"props":395,"children":396},{},[397],{"type":47,"value":398},"Sampler",{"type":47,"value":400},": a polling loop calls ",{"type":42,"tag":76,"props":402,"children":404},{"className":403},[],[405],{"type":47,"value":406},"browse screenshot --cdp \u003Ctarget> --path \u003Cfile>",{"type":47,"value":408}," and ",{"type":42,"tag":76,"props":410,"children":412},{"className":411},[],[413],{"type":47,"value":414},"browse get html body --cdp \u003Ctarget>",{"type":47,"value":416}," on an interval (default 2s). The helper passes ",{"type":42,"tag":76,"props":418,"children":420},{"className":419},[],[421],{"type":47,"value":422},"--cdp",{"type":47,"value":424}," when it samples so it can attach to the traced target from its own process; once a browse daemon session is attached to a CDP target, follow-up commands in that session do not need to repeat ",{"type":42,"tag":76,"props":426,"children":428},{"className":427},[],[429],{"type":47,"value":422},{"type":47,"value":390},{"type":42,"tag":104,"props":432,"children":433},{},[434,439,441,447,449,455,457,463],{"type":42,"tag":56,"props":435,"children":436},{},[437],{"type":47,"value":438},"Bisector",{"type":47,"value":440},": after the run, ",{"type":42,"tag":76,"props":442,"children":444},{"className":443},[],[445],{"type":47,"value":446},"bisect-cdp.mjs",{"type":47,"value":448}," walks ",{"type":42,"tag":76,"props":450,"children":452},{"className":451},[],[453],{"type":47,"value":454},"raw.ndjson",{"type":47,"value":456}," once, slices it into per-bucket JSONL files keyed by CDP method, and additionally bisects per page using top-level ",{"type":42,"tag":76,"props":458,"children":460},{"className":459},[],[461],{"type":47,"value":462},"Page.frameNavigated",{"type":47,"value":464}," events as boundaries.",{"type":42,"tag":93,"props":466,"children":468},{"id":467},"quickstart",[469],{"type":47,"value":470},"Quickstart",{"type":42,"tag":472,"props":473,"children":475},"h3",{"id":474},"local-chrome",[476],{"type":47,"value":477},"Local Chrome",{"type":42,"tag":150,"props":479,"children":481},{"className":152,"code":480,"language":154,"meta":155,"style":155},"# 1. Launch Chrome with a debugger port (any user-data-dir keeps it isolated).\n\"\u002FApplications\u002FGoogle Chrome.app\u002FContents\u002FMacOS\u002FGoogle Chrome\" \\\n  --remote-debugging-port=9222 \\\n  --user-data-dir=\u002Ftmp\u002Fchrome-o11y \\\n  about:blank &\n\n# 2. Start the tracer.\nnode scripts\u002Fstart-capture.mjs 9222 my-run\n\n# 3. Run your main automation against port 9222.\nbrowse open https:\u002F\u002Fexample.com --cdp 9222\n# ...whatever the run does...\n\n# 4. Stop and bisect.\nnode scripts\u002Fstop-capture.mjs my-run\nnode scripts\u002Fbisect-cdp.mjs my-run\n",[482],{"type":42,"tag":76,"props":483,"children":484},{"__ignoreMap":155},[485,493,507,519,532,546,556,565,589,597,606,634,643,651,660,677],{"type":42,"tag":161,"props":486,"children":487},{"class":163,"line":164},[488],{"type":42,"tag":161,"props":489,"children":490},{"style":180},[491],{"type":47,"value":492},"# 1. Launch Chrome with a debugger port (any user-data-dir keeps it isolated).\n",{"type":42,"tag":161,"props":494,"children":495},{"class":163,"line":186},[496,501],{"type":42,"tag":161,"props":497,"children":498},{"style":168},[499],{"type":47,"value":500},"\"\u002FApplications\u002FGoogle Chrome.app\u002FContents\u002FMacOS\u002FGoogle Chrome\"",{"type":42,"tag":161,"props":502,"children":504},{"style":503},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[505],{"type":47,"value":506}," \\\n",{"type":42,"tag":161,"props":508,"children":509},{"class":163,"line":227},[510,515],{"type":42,"tag":161,"props":511,"children":512},{"style":174},[513],{"type":47,"value":514},"  --remote-debugging-port=9222",{"type":42,"tag":161,"props":516,"children":517},{"style":503},[518],{"type":47,"value":506},{"type":42,"tag":161,"props":520,"children":522},{"class":163,"line":521},4,[523,528],{"type":42,"tag":161,"props":524,"children":525},{"style":174},[526],{"type":47,"value":527},"  --user-data-dir=\u002Ftmp\u002Fchrome-o11y",{"type":42,"tag":161,"props":529,"children":530},{"style":503},[531],{"type":47,"value":506},{"type":42,"tag":161,"props":533,"children":535},{"class":163,"line":534},5,[536,541],{"type":42,"tag":161,"props":537,"children":538},{"style":174},[539],{"type":47,"value":540},"  about:blank",{"type":42,"tag":161,"props":542,"children":543},{"style":201},[544],{"type":47,"value":545}," &\n",{"type":42,"tag":161,"props":547,"children":549},{"class":163,"line":548},6,[550],{"type":42,"tag":161,"props":551,"children":553},{"emptyLinePlaceholder":552},true,[554],{"type":47,"value":555},"\n",{"type":42,"tag":161,"props":557,"children":559},{"class":163,"line":558},7,[560],{"type":42,"tag":161,"props":561,"children":562},{"style":180},[563],{"type":47,"value":564},"# 2. Start the tracer.\n",{"type":42,"tag":161,"props":566,"children":568},{"class":163,"line":567},8,[569,573,578,584],{"type":42,"tag":161,"props":570,"children":571},{"style":168},[572],{"type":47,"value":171},{"type":42,"tag":161,"props":574,"children":575},{"style":174},[576],{"type":47,"value":577}," scripts\u002Fstart-capture.mjs",{"type":42,"tag":161,"props":579,"children":581},{"style":580},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[582],{"type":47,"value":583}," 9222",{"type":42,"tag":161,"props":585,"children":586},{"style":174},[587],{"type":47,"value":588}," my-run\n",{"type":42,"tag":161,"props":590,"children":592},{"class":163,"line":591},9,[593],{"type":42,"tag":161,"props":594,"children":595},{"emptyLinePlaceholder":552},[596],{"type":47,"value":555},{"type":42,"tag":161,"props":598,"children":600},{"class":163,"line":599},10,[601],{"type":42,"tag":161,"props":602,"children":603},{"style":180},[604],{"type":47,"value":605},"# 3. Run your main automation against port 9222.\n",{"type":42,"tag":161,"props":607,"children":609},{"class":163,"line":608},11,[610,614,619,624,629],{"type":42,"tag":161,"props":611,"children":612},{"style":168},[613],{"type":47,"value":89},{"type":42,"tag":161,"props":615,"children":616},{"style":174},[617],{"type":47,"value":618}," open",{"type":42,"tag":161,"props":620,"children":621},{"style":174},[622],{"type":47,"value":623}," https:\u002F\u002Fexample.com",{"type":42,"tag":161,"props":625,"children":626},{"style":174},[627],{"type":47,"value":628}," --cdp",{"type":42,"tag":161,"props":630,"children":631},{"style":580},[632],{"type":47,"value":633}," 9222\n",{"type":42,"tag":161,"props":635,"children":637},{"class":163,"line":636},12,[638],{"type":42,"tag":161,"props":639,"children":640},{"style":180},[641],{"type":47,"value":642},"# ...whatever the run does...\n",{"type":42,"tag":161,"props":644,"children":646},{"class":163,"line":645},13,[647],{"type":42,"tag":161,"props":648,"children":649},{"emptyLinePlaceholder":552},[650],{"type":47,"value":555},{"type":42,"tag":161,"props":652,"children":654},{"class":163,"line":653},14,[655],{"type":42,"tag":161,"props":656,"children":657},{"style":180},[658],{"type":47,"value":659},"# 4. Stop and bisect.\n",{"type":42,"tag":161,"props":661,"children":663},{"class":163,"line":662},15,[664,668,673],{"type":42,"tag":161,"props":665,"children":666},{"style":168},[667],{"type":47,"value":171},{"type":42,"tag":161,"props":669,"children":670},{"style":174},[671],{"type":47,"value":672}," scripts\u002Fstop-capture.mjs",{"type":42,"tag":161,"props":674,"children":675},{"style":174},[676],{"type":47,"value":588},{"type":42,"tag":161,"props":678,"children":680},{"class":163,"line":679},16,[681,685,690],{"type":42,"tag":161,"props":682,"children":683},{"style":168},[684],{"type":47,"value":171},{"type":42,"tag":161,"props":686,"children":687},{"style":174},[688],{"type":47,"value":689}," scripts\u002Fbisect-cdp.mjs",{"type":42,"tag":161,"props":691,"children":692},{"style":174},[693],{"type":47,"value":588},{"type":42,"tag":472,"props":695,"children":697},{"id":696},"browserbase-remote",[698],{"type":47,"value":699},"Browserbase remote",{"type":42,"tag":50,"props":701,"children":702},{},[703,705,711,713,719],{"type":47,"value":704},"Two helpers wrap the platform-side bookkeeping: ",{"type":42,"tag":76,"props":706,"children":708},{"className":707},[],[709],{"type":47,"value":710},"bb-capture.mjs",{"type":47,"value":712}," creates or attaches to a session and starts the tracer; ",{"type":42,"tag":76,"props":714,"children":716},{"className":715},[],[717],{"type":47,"value":718},"bb-finalize.mjs",{"type":47,"value":720}," pulls platform artifacts (final session metadata, server logs, downloads) into the run dir at the end.",{"type":42,"tag":722,"props":723,"children":724},"blockquote",{},[725],{"type":42,"tag":50,"props":726,"children":727},{},[728,730,751,753,759],{"type":47,"value":729},"Browserbase ends a session as soon as its last CDP client disconnects. ",{"type":42,"tag":56,"props":731,"children":732},{},[733,735,741,743,749],{"type":47,"value":734},"Create with ",{"type":42,"tag":76,"props":736,"children":738},{"className":737},[],[739],{"type":47,"value":740},"--keep-alive",{"type":47,"value":742},", then attach automation to the session's ",{"type":42,"tag":76,"props":744,"children":746},{"className":745},[],[747],{"type":47,"value":748},"connectUrl",{"type":47,"value":750}," before or together with the tracer.",{"type":47,"value":752}," ",{"type":42,"tag":76,"props":754,"children":756},{"className":755},[],[757],{"type":47,"value":758},"bb-capture.mjs --new",{"type":47,"value":760}," handles the keep-alive session and tracer setup; your automation still needs to attach.",{"type":42,"tag":150,"props":762,"children":764},{"className":152,"code":763,"language":154,"meta":155,"style":155},"export BROWSERBASE_API_KEY=...\n\n# 1. Create a keep-alive session AND start the tracer in one step.\n#    Prints the session id, connectUrl prefix, and a live debugger URL you\n#    can open in a browser to watch the run interactively.\nnode scripts\u002Fbb-capture.mjs --new my-run\n\n# 2. Drive automation. bb-capture stamped the session id into the manifest.\nSID=$(jq -r .browserbase.session_id .o11y\u002Fmy-run\u002Fmanifest.json)\nCONNECT_URL=\"$(browse cloud sessions get \"$SID\" | jq -r .connectUrl)\"\nBROWSE_NAME=my-run-browser\nbrowse open https:\u002F\u002Fexample.com --cdp \"$CONNECT_URL\" --session \"$BROWSE_NAME\"\nbrowse open https:\u002F\u002Fnews.ycombinator.com --session \"$BROWSE_NAME\"\n\n# 3. Stop the tracer, bisect, then pull platform artifacts and release.\nnode scripts\u002Fstop-capture.mjs my-run\nnode scripts\u002Fbisect-cdp.mjs my-run\nnode scripts\u002Fbb-finalize.mjs my-run --release\n",[765],{"type":42,"tag":76,"props":766,"children":767},{"__ignoreMap":155},[768,792,799,807,815,823,844,851,859,897,954,971,1021,1053,1060,1068,1083,1099],{"type":42,"tag":161,"props":769,"children":770},{"class":163,"line":164},[771,777,782,787],{"type":42,"tag":161,"props":772,"children":774},{"style":773},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[775],{"type":47,"value":776},"export",{"type":42,"tag":161,"props":778,"children":779},{"style":503},[780],{"type":47,"value":781}," BROWSERBASE_API_KEY",{"type":42,"tag":161,"props":783,"children":784},{"style":201},[785],{"type":47,"value":786},"=",{"type":42,"tag":161,"props":788,"children":789},{"style":503},[790],{"type":47,"value":791},"...\n",{"type":42,"tag":161,"props":793,"children":794},{"class":163,"line":186},[795],{"type":42,"tag":161,"props":796,"children":797},{"emptyLinePlaceholder":552},[798],{"type":47,"value":555},{"type":42,"tag":161,"props":800,"children":801},{"class":163,"line":227},[802],{"type":42,"tag":161,"props":803,"children":804},{"style":180},[805],{"type":47,"value":806},"# 1. Create a keep-alive session AND start the tracer in one step.\n",{"type":42,"tag":161,"props":808,"children":809},{"class":163,"line":521},[810],{"type":42,"tag":161,"props":811,"children":812},{"style":180},[813],{"type":47,"value":814},"#    Prints the session id, connectUrl prefix, and a live debugger URL you\n",{"type":42,"tag":161,"props":816,"children":817},{"class":163,"line":534},[818],{"type":42,"tag":161,"props":819,"children":820},{"style":180},[821],{"type":47,"value":822},"#    can open in a browser to watch the run interactively.\n",{"type":42,"tag":161,"props":824,"children":825},{"class":163,"line":548},[826,830,835,840],{"type":42,"tag":161,"props":827,"children":828},{"style":168},[829],{"type":47,"value":171},{"type":42,"tag":161,"props":831,"children":832},{"style":174},[833],{"type":47,"value":834}," scripts\u002Fbb-capture.mjs",{"type":42,"tag":161,"props":836,"children":837},{"style":174},[838],{"type":47,"value":839}," --new",{"type":42,"tag":161,"props":841,"children":842},{"style":174},[843],{"type":47,"value":588},{"type":42,"tag":161,"props":845,"children":846},{"class":163,"line":558},[847],{"type":42,"tag":161,"props":848,"children":849},{"emptyLinePlaceholder":552},[850],{"type":47,"value":555},{"type":42,"tag":161,"props":852,"children":853},{"class":163,"line":567},[854],{"type":42,"tag":161,"props":855,"children":856},{"style":180},[857],{"type":47,"value":858},"# 2. Drive automation. bb-capture stamped the session id into the manifest.\n",{"type":42,"tag":161,"props":860,"children":861},{"class":163,"line":591},[862,867,872,877,882,887,892],{"type":42,"tag":161,"props":863,"children":864},{"style":503},[865],{"type":47,"value":866},"SID",{"type":42,"tag":161,"props":868,"children":869},{"style":201},[870],{"type":47,"value":871},"=$(",{"type":42,"tag":161,"props":873,"children":874},{"style":168},[875],{"type":47,"value":876},"jq",{"type":42,"tag":161,"props":878,"children":879},{"style":174},[880],{"type":47,"value":881}," -r",{"type":42,"tag":161,"props":883,"children":884},{"style":174},[885],{"type":47,"value":886}," .browserbase.session_id",{"type":42,"tag":161,"props":888,"children":889},{"style":174},[890],{"type":47,"value":891}," .o11y\u002Fmy-run\u002Fmanifest.json",{"type":42,"tag":161,"props":893,"children":894},{"style":201},[895],{"type":47,"value":896},")\n",{"type":42,"tag":161,"props":898,"children":899},{"class":163,"line":599},[900,905,909,914,918,923,927,932,936,940,944,949],{"type":42,"tag":161,"props":901,"children":902},{"style":503},[903],{"type":47,"value":904},"CONNECT_URL",{"type":42,"tag":161,"props":906,"children":907},{"style":201},[908],{"type":47,"value":786},{"type":42,"tag":161,"props":910,"children":911},{"style":201},[912],{"type":47,"value":913},"\"$(",{"type":42,"tag":161,"props":915,"children":916},{"style":168},[917],{"type":47,"value":89},{"type":42,"tag":161,"props":919,"children":920},{"style":174},[921],{"type":47,"value":922}," cloud sessions get ",{"type":42,"tag":161,"props":924,"children":925},{"style":201},[926],{"type":47,"value":314},{"type":42,"tag":161,"props":928,"children":929},{"style":503},[930],{"type":47,"value":931},"$SID",{"type":42,"tag":161,"props":933,"children":934},{"style":201},[935],{"type":47,"value":314},{"type":42,"tag":161,"props":937,"children":938},{"style":201},[939],{"type":47,"value":289},{"type":42,"tag":161,"props":941,"children":942},{"style":168},[943],{"type":47,"value":237},{"type":42,"tag":161,"props":945,"children":946},{"style":174},[947],{"type":47,"value":948}," -r .connectUrl",{"type":42,"tag":161,"props":950,"children":951},{"style":201},[952],{"type":47,"value":953},")\"\n",{"type":42,"tag":161,"props":955,"children":956},{"class":163,"line":608},[957,962,966],{"type":42,"tag":161,"props":958,"children":959},{"style":503},[960],{"type":47,"value":961},"BROWSE_NAME",{"type":42,"tag":161,"props":963,"children":964},{"style":201},[965],{"type":47,"value":786},{"type":42,"tag":161,"props":967,"children":968},{"style":174},[969],{"type":47,"value":970},"my-run-browser\n",{"type":42,"tag":161,"props":972,"children":973},{"class":163,"line":636},[974,978,982,986,990,994,999,1003,1008,1012,1017],{"type":42,"tag":161,"props":975,"children":976},{"style":168},[977],{"type":47,"value":89},{"type":42,"tag":161,"props":979,"children":980},{"style":174},[981],{"type":47,"value":618},{"type":42,"tag":161,"props":983,"children":984},{"style":174},[985],{"type":47,"value":623},{"type":42,"tag":161,"props":987,"children":988},{"style":174},[989],{"type":47,"value":628},{"type":42,"tag":161,"props":991,"children":992},{"style":201},[993],{"type":47,"value":304},{"type":42,"tag":161,"props":995,"children":996},{"style":503},[997],{"type":47,"value":998},"$CONNECT_URL",{"type":42,"tag":161,"props":1000,"children":1001},{"style":201},[1002],{"type":47,"value":314},{"type":42,"tag":161,"props":1004,"children":1005},{"style":174},[1006],{"type":47,"value":1007}," --session",{"type":42,"tag":161,"props":1009,"children":1010},{"style":201},[1011],{"type":47,"value":304},{"type":42,"tag":161,"props":1013,"children":1014},{"style":503},[1015],{"type":47,"value":1016},"$BROWSE_NAME",{"type":42,"tag":161,"props":1018,"children":1019},{"style":201},[1020],{"type":47,"value":337},{"type":42,"tag":161,"props":1022,"children":1023},{"class":163,"line":645},[1024,1028,1032,1037,1041,1045,1049],{"type":42,"tag":161,"props":1025,"children":1026},{"style":168},[1027],{"type":47,"value":89},{"type":42,"tag":161,"props":1029,"children":1030},{"style":174},[1031],{"type":47,"value":618},{"type":42,"tag":161,"props":1033,"children":1034},{"style":174},[1035],{"type":47,"value":1036}," https:\u002F\u002Fnews.ycombinator.com",{"type":42,"tag":161,"props":1038,"children":1039},{"style":174},[1040],{"type":47,"value":1007},{"type":42,"tag":161,"props":1042,"children":1043},{"style":201},[1044],{"type":47,"value":304},{"type":42,"tag":161,"props":1046,"children":1047},{"style":503},[1048],{"type":47,"value":1016},{"type":42,"tag":161,"props":1050,"children":1051},{"style":201},[1052],{"type":47,"value":337},{"type":42,"tag":161,"props":1054,"children":1055},{"class":163,"line":653},[1056],{"type":42,"tag":161,"props":1057,"children":1058},{"emptyLinePlaceholder":552},[1059],{"type":47,"value":555},{"type":42,"tag":161,"props":1061,"children":1062},{"class":163,"line":662},[1063],{"type":42,"tag":161,"props":1064,"children":1065},{"style":180},[1066],{"type":47,"value":1067},"# 3. Stop the tracer, bisect, then pull platform artifacts and release.\n",{"type":42,"tag":161,"props":1069,"children":1070},{"class":163,"line":679},[1071,1075,1079],{"type":42,"tag":161,"props":1072,"children":1073},{"style":168},[1074],{"type":47,"value":171},{"type":42,"tag":161,"props":1076,"children":1077},{"style":174},[1078],{"type":47,"value":672},{"type":42,"tag":161,"props":1080,"children":1081},{"style":174},[1082],{"type":47,"value":588},{"type":42,"tag":161,"props":1084,"children":1086},{"class":163,"line":1085},17,[1087,1091,1095],{"type":42,"tag":161,"props":1088,"children":1089},{"style":168},[1090],{"type":47,"value":171},{"type":42,"tag":161,"props":1092,"children":1093},{"style":174},[1094],{"type":47,"value":689},{"type":42,"tag":161,"props":1096,"children":1097},{"style":174},[1098],{"type":47,"value":588},{"type":42,"tag":161,"props":1100,"children":1102},{"class":163,"line":1101},18,[1103,1107,1112,1117],{"type":42,"tag":161,"props":1104,"children":1105},{"style":168},[1106],{"type":47,"value":171},{"type":42,"tag":161,"props":1108,"children":1109},{"style":174},[1110],{"type":47,"value":1111}," scripts\u002Fbb-finalize.mjs",{"type":42,"tag":161,"props":1113,"children":1114},{"style":174},[1115],{"type":47,"value":1116}," my-run",{"type":42,"tag":161,"props":1118,"children":1119},{"style":174},[1120],{"type":47,"value":1121}," --release\n",{"type":42,"tag":50,"props":1123,"children":1124},{},[1125,1127,1133,1135,1140,1142,1148],{"type":47,"value":1126},"Attaching to a session that's ",{"type":42,"tag":1128,"props":1129,"children":1130},"em",{},[1131],{"type":47,"value":1132},"already running",{"type":47,"value":1134}," (e.g. one your production worker created) — ",{"type":42,"tag":76,"props":1136,"children":1138},{"className":1137},[],[1139],{"type":47,"value":710},{"type":47,"value":1141}," accepts a session id instead of ",{"type":42,"tag":76,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":47,"value":1147},"--new",{"type":47,"value":1149},":",{"type":42,"tag":150,"props":1151,"children":1153},{"className":152,"code":1152,"language":154,"meta":155,"style":155},"# Pick a running session (filter client-side; browse cloud sessions list has no --status flag)\nbrowse cloud sessions list | jq -r '.[] | select(.status == \"RUNNING\") | .id'\n\nnode scripts\u002Fbb-capture.mjs \u003Csession-id> mid-flight-debug\n# ...tracer runs alongside the existing automation client; no disruption...\nnode scripts\u002Fstop-capture.mjs mid-flight-debug\nnode scripts\u002Fbisect-cdp.mjs mid-flight-debug\nnode scripts\u002Fbb-finalize.mjs mid-flight-debug   # without --release: leave the session running\n",[1154],{"type":42,"tag":76,"props":1155,"children":1156},{"__ignoreMap":155},[1157,1165,1214,1221,1257,1265,1280,1295],{"type":42,"tag":161,"props":1158,"children":1159},{"class":163,"line":164},[1160],{"type":42,"tag":161,"props":1161,"children":1162},{"style":180},[1163],{"type":47,"value":1164},"# Pick a running session (filter client-side; browse cloud sessions list has no --status flag)\n",{"type":42,"tag":161,"props":1166,"children":1167},{"class":163,"line":186},[1168,1172,1177,1182,1187,1191,1195,1199,1204,1209],{"type":42,"tag":161,"props":1169,"children":1170},{"style":168},[1171],{"type":47,"value":89},{"type":42,"tag":161,"props":1173,"children":1174},{"style":174},[1175],{"type":47,"value":1176}," cloud",{"type":42,"tag":161,"props":1178,"children":1179},{"style":174},[1180],{"type":47,"value":1181}," sessions",{"type":42,"tag":161,"props":1183,"children":1184},{"style":174},[1185],{"type":47,"value":1186}," list",{"type":42,"tag":161,"props":1188,"children":1189},{"style":201},[1190],{"type":47,"value":289},{"type":42,"tag":161,"props":1192,"children":1193},{"style":168},[1194],{"type":47,"value":237},{"type":42,"tag":161,"props":1196,"children":1197},{"style":174},[1198],{"type":47,"value":881},{"type":42,"tag":161,"props":1200,"children":1201},{"style":201},[1202],{"type":47,"value":1203}," '",{"type":42,"tag":161,"props":1205,"children":1206},{"style":174},[1207],{"type":47,"value":1208},".[] | select(.status == \"RUNNING\") | .id",{"type":42,"tag":161,"props":1210,"children":1211},{"style":201},[1212],{"type":47,"value":1213},"'\n",{"type":42,"tag":161,"props":1215,"children":1216},{"class":163,"line":227},[1217],{"type":42,"tag":161,"props":1218,"children":1219},{"emptyLinePlaceholder":552},[1220],{"type":47,"value":555},{"type":42,"tag":161,"props":1222,"children":1223},{"class":163,"line":521},[1224,1228,1232,1237,1242,1247,1252],{"type":42,"tag":161,"props":1225,"children":1226},{"style":168},[1227],{"type":47,"value":171},{"type":42,"tag":161,"props":1229,"children":1230},{"style":174},[1231],{"type":47,"value":834},{"type":42,"tag":161,"props":1233,"children":1234},{"style":201},[1235],{"type":47,"value":1236}," \u003C",{"type":42,"tag":161,"props":1238,"children":1239},{"style":174},[1240],{"type":47,"value":1241},"session-i",{"type":42,"tag":161,"props":1243,"children":1244},{"style":503},[1245],{"type":47,"value":1246},"d",{"type":42,"tag":161,"props":1248,"children":1249},{"style":201},[1250],{"type":47,"value":1251},">",{"type":42,"tag":161,"props":1253,"children":1254},{"style":174},[1255],{"type":47,"value":1256}," mid-flight-debug\n",{"type":42,"tag":161,"props":1258,"children":1259},{"class":163,"line":534},[1260],{"type":42,"tag":161,"props":1261,"children":1262},{"style":180},[1263],{"type":47,"value":1264},"# ...tracer runs alongside the existing automation client; no disruption...\n",{"type":42,"tag":161,"props":1266,"children":1267},{"class":163,"line":548},[1268,1272,1276],{"type":42,"tag":161,"props":1269,"children":1270},{"style":168},[1271],{"type":47,"value":171},{"type":42,"tag":161,"props":1273,"children":1274},{"style":174},[1275],{"type":47,"value":672},{"type":42,"tag":161,"props":1277,"children":1278},{"style":174},[1279],{"type":47,"value":1256},{"type":42,"tag":161,"props":1281,"children":1282},{"class":163,"line":558},[1283,1287,1291],{"type":42,"tag":161,"props":1284,"children":1285},{"style":168},[1286],{"type":47,"value":171},{"type":42,"tag":161,"props":1288,"children":1289},{"style":174},[1290],{"type":47,"value":689},{"type":42,"tag":161,"props":1292,"children":1293},{"style":174},[1294],{"type":47,"value":1256},{"type":42,"tag":161,"props":1296,"children":1297},{"class":163,"line":567},[1298,1302,1306,1311],{"type":42,"tag":161,"props":1299,"children":1300},{"style":168},[1301],{"type":47,"value":171},{"type":42,"tag":161,"props":1303,"children":1304},{"style":174},[1305],{"type":47,"value":1111},{"type":42,"tag":161,"props":1307,"children":1308},{"style":174},[1309],{"type":47,"value":1310}," mid-flight-debug",{"type":42,"tag":161,"props":1312,"children":1313},{"style":180},[1314],{"type":47,"value":1315},"   # without --release: leave the session running\n",{"type":42,"tag":1317,"props":1318,"children":1320},"h4",{"id":1319},"what-you-get-from-the-browserbase-platform",[1321],{"type":47,"value":1322},"What you get from the Browserbase platform",{"type":42,"tag":50,"props":1324,"children":1325},{},[1326,1331,1333,1338,1340,1346,1348,1353],{"type":42,"tag":76,"props":1327,"children":1329},{"className":1328},[],[1330],{"type":47,"value":710},{"type":47,"value":1332}," adds a ",{"type":42,"tag":76,"props":1334,"children":1336},{"className":1335},[],[1337],{"type":47,"value":8},{"type":47,"value":1339}," block to ",{"type":42,"tag":76,"props":1341,"children":1343},{"className":1342},[],[1344],{"type":47,"value":1345},"manifest.json",{"type":47,"value":1347}," (session id, project, region, started_at, expires_at, debugger URL). ",{"type":42,"tag":76,"props":1349,"children":1351},{"className":1350},[],[1352],{"type":47,"value":718},{"type":47,"value":1354}," writes:",{"type":42,"tag":100,"props":1356,"children":1357},{},[1358,1377,1410],{"type":42,"tag":104,"props":1359,"children":1360},{},[1361,1367,1369,1375],{"type":42,"tag":76,"props":1362,"children":1364},{"className":1363},[],[1365],{"type":47,"value":1366},"\u003Crun>\u002Fbrowserbase\u002Fsession.json",{"type":47,"value":1368}," — final ",{"type":42,"tag":76,"props":1370,"children":1372},{"className":1371},[],[1373],{"type":47,"value":1374},"browse cloud sessions get",{"type":47,"value":1376}," snapshot (proxyBytes, status, ended_at, viewport, …)",{"type":42,"tag":104,"props":1378,"children":1379},{},[1380,1386,1388,1394,1396,1401,1403,1408],{"type":42,"tag":76,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":47,"value":1385},"\u003Crun>\u002Fbrowserbase\u002Flogs.json",{"type":47,"value":1387}," — ",{"type":42,"tag":76,"props":1389,"children":1391},{"className":1390},[],[1392],{"type":47,"value":1393},"browse cloud sessions logs",{"type":47,"value":1395}," output. ",{"type":42,"tag":56,"props":1397,"children":1398},{},[1399],{"type":47,"value":1400},"Often empty.",{"type":47,"value":1402}," The CDP firehose in ",{"type":42,"tag":76,"props":1404,"children":1406},{"className":1405},[],[1407],{"type":47,"value":388},{"type":47,"value":1409}," is the source of truth; this is a side channel.",{"type":42,"tag":104,"props":1411,"children":1412},{},[1413,1419],{"type":42,"tag":76,"props":1414,"children":1416},{"className":1415},[],[1417],{"type":47,"value":1418},"\u003Crun>\u002Fbrowserbase\u002Fdownloads.zip",{"type":47,"value":1420}," — files the session downloaded, if any (the script discards the empty 22-byte zip you get when there are none)",{"type":42,"tag":50,"props":1422,"children":1423},{},[1424,1426,1431,1433,1439,1440,1446],{"type":47,"value":1425},"Session replay artifact fetching is ",{"type":42,"tag":56,"props":1427,"children":1428},{},[1429],{"type":47,"value":1430},"deprecated",{"type":47,"value":1432}," and isn't fetched. Use the screenshots + DOM dumps in ",{"type":42,"tag":76,"props":1434,"children":1436},{"className":1435},[],[1437],{"type":47,"value":1438},"screenshots\u002F",{"type":47,"value":408},{"type":42,"tag":76,"props":1441,"children":1443},{"className":1442},[],[1444],{"type":47,"value":1445},"dom\u002F",{"type":47,"value":1447}," for visual ground truth.",{"type":42,"tag":50,"props":1449,"children":1450},{},[1451,1453,1459,1461,1466],{"type":47,"value":1452},"The live ",{"type":42,"tag":76,"props":1454,"children":1456},{"className":1455},[],[1457],{"type":47,"value":1458},"debugger_url",{"type":47,"value":1460}," in the manifest opens an interactive Chrome DevTools view served by Browserbase — handy for ",{"type":42,"tag":1128,"props":1462,"children":1463},{},[1464],{"type":47,"value":1465},"watching",{"type":47,"value":1467}," a long-running automation while the tracer captures the firehose to disk.",{"type":42,"tag":93,"props":1469,"children":1471},{"id":1470},"filesystem-layout",[1472],{"type":47,"value":1473},"Filesystem layout",{"type":42,"tag":150,"props":1475,"children":1479},{"className":1476,"code":1478,"language":47},[1477],"language-text",".o11y\u002F\u003Crun-id>\u002F\n  manifest.json                 run metadata: target, domains, started_at, stopped_at\n  index.jsonl                   one line per sample: {ts, screenshot, dom, url}\n  cdp\u002F\n    raw.ndjson                  full CDP firehose (one JSON object per line)\n    summary.json                {sessionId, duration, totalEvents, pages[]} — see shape below\n    network\u002F{requests,responses,finished,failed,websocket}.jsonl   session-wide buckets (always written)\n    console\u002F{logs,exceptions}.jsonl\n    runtime\u002Fall.jsonl\n    log\u002Fentries.jsonl\n    page\u002F{navigations,lifecycle,frames,dialogs,all}.jsonl\n    dom\u002Fall.jsonl                                                  (only if O11Y_DOMAINS includes DOM)\n    target\u002F{attached,detached}.jsonl\n    pages\u002F                      per-page slices, indexed by top-level frameNavigated boundaries\n      000\u002F                      first concrete page\n        url.txt                 the URL for this page\n        summary.json            this page's domains\u002Fnetwork\u002Ftiming block (same shape as a pages[] entry)\n        raw.jsonl               firehose scoped to this page\n        network\u002F, console\u002F, page\u002F, runtime\u002F, log\u002F, target\u002F, dom\u002F    same buckets, only non-empty files\n  screenshots\u002F\u003Ciso-ts>.png      one PNG per sample interval\n  dom\u002F\u003Ciso-ts>.html             one HTML dump per sample interval\n  browserbase\u002F                  added by bb-finalize.mjs (Browserbase runs only)\n    session.json                final `browse cloud sessions get` snapshot (proxyBytes, status, ended_at, …)\n    logs.json                   `browse cloud sessions logs` output (often [])\n    downloads.zip               `browse cloud sessions downloads get` output (only if the session downloaded files)\n",[1480],{"type":42,"tag":76,"props":1481,"children":1482},{"__ignoreMap":155},[1483],{"type":47,"value":1478},{"type":42,"tag":50,"props":1485,"children":1486},{},[1487,1489,1494,1496,1501,1503,1508,1510,1516,1517,1523,1524,1530,1531,1537,1538,1544,1545,1551,1552,1557],{"type":47,"value":1488},"When a run was started via ",{"type":42,"tag":76,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":47,"value":710},{"type":47,"value":1495},", ",{"type":42,"tag":76,"props":1497,"children":1499},{"className":1498},[],[1500],{"type":47,"value":1345},{"type":47,"value":1502}," also carries a top-level ",{"type":42,"tag":76,"props":1504,"children":1506},{"className":1505},[],[1507],{"type":47,"value":8},{"type":47,"value":1509}," block: ",{"type":42,"tag":76,"props":1511,"children":1513},{"className":1512},[],[1514],{"type":47,"value":1515},"session_id",{"type":47,"value":1495},{"type":42,"tag":76,"props":1518,"children":1520},{"className":1519},[],[1521],{"type":47,"value":1522},"project_id",{"type":47,"value":1495},{"type":42,"tag":76,"props":1525,"children":1527},{"className":1526},[],[1528],{"type":47,"value":1529},"region",{"type":47,"value":1495},{"type":42,"tag":76,"props":1532,"children":1534},{"className":1533},[],[1535],{"type":47,"value":1536},"started_at",{"type":47,"value":1495},{"type":42,"tag":76,"props":1539,"children":1541},{"className":1540},[],[1542],{"type":47,"value":1543},"expires_at",{"type":47,"value":1495},{"type":42,"tag":76,"props":1546,"children":1548},{"className":1547},[],[1549],{"type":47,"value":1550},"keep_alive",{"type":47,"value":1495},{"type":42,"tag":76,"props":1553,"children":1555},{"className":1554},[],[1556],{"type":47,"value":1458},{"type":47,"value":390},{"type":42,"tag":472,"props":1559,"children":1561},{"id":1560},"summary-shape",[1562],{"type":47,"value":1563},"Summary shape",{"type":42,"tag":50,"props":1565,"children":1566},{},[1567,1573,1575,1581,1583,1588],{"type":42,"tag":76,"props":1568,"children":1570},{"className":1569},[],[1571],{"type":47,"value":1572},"cdp\u002Fsummary.json",{"type":47,"value":1574}," is the entry point for any analysis: it has session-level totals and a ",{"type":42,"tag":76,"props":1576,"children":1578},{"className":1577},[],[1579],{"type":47,"value":1580},"pages[]",{"type":47,"value":1582}," array indexed by top-level ",{"type":42,"tag":76,"props":1584,"children":1586},{"className":1585},[],[1587],{"type":47,"value":462},{"type":47,"value":1589},". Per-page entries are emitted in navigation order (page 0 = first concrete URL).",{"type":42,"tag":150,"props":1591,"children":1595},{"className":1592,"code":1593,"language":1594,"meta":155,"style":155},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"sessionId\": \"45f28023-…\",\n  \"duration\": { \"startMs\": 1777312533000, \"endMs\": 1777312609000, \"totalMs\": 76000 },\n  \"totalEvents\": 420,\n  \"pages\": [\n    {\n      \"pageId\": 0,\n      \"url\": \"https:\u002F\u002Fexample.com\u002F\",\n      \"startMs\": 1777312533000, \"endMs\": 1777312538886, \"durationMs\": 5886,\n      \"eventCount\": 60,\n      \"domains\": {\n        \"Network\": { \"count\": 18, \"errors\": 1 },\n        \"Console\": { \"count\": 2 },\n        \"Page\":    { \"count\": 24 },\n        \"Runtime\": { \"count\": 13 }\n      },\n      \"network\": { \"requests\": 4, \"failed\": 1, \"byType\": { \"Document\": 2, \"Script\": 1, \"Other\": 1 } }\n    }\n  ]\n}\n","json",[1596],{"type":42,"tag":76,"props":1597,"children":1598},{"__ignoreMap":155},[1599,1607,1646,1751,1780,1805,1813,1843,1880,1958,1987,2012,2090,2139,2189,2239,2247,2423,2431,2440],{"type":42,"tag":161,"props":1600,"children":1601},{"class":163,"line":164},[1602],{"type":42,"tag":161,"props":1603,"children":1604},{"style":201},[1605],{"type":47,"value":1606},"{\n",{"type":42,"tag":161,"props":1608,"children":1609},{"class":163,"line":186},[1610,1615,1620,1624,1628,1632,1637,1641],{"type":42,"tag":161,"props":1611,"children":1612},{"style":201},[1613],{"type":47,"value":1614},"  \"",{"type":42,"tag":161,"props":1616,"children":1617},{"style":773},[1618],{"type":47,"value":1619},"sessionId",{"type":42,"tag":161,"props":1621,"children":1622},{"style":201},[1623],{"type":47,"value":314},{"type":42,"tag":161,"props":1625,"children":1626},{"style":201},[1627],{"type":47,"value":1149},{"type":42,"tag":161,"props":1629,"children":1630},{"style":201},[1631],{"type":47,"value":304},{"type":42,"tag":161,"props":1633,"children":1634},{"style":174},[1635],{"type":47,"value":1636},"45f28023-…",{"type":42,"tag":161,"props":1638,"children":1639},{"style":201},[1640],{"type":47,"value":314},{"type":42,"tag":161,"props":1642,"children":1643},{"style":201},[1644],{"type":47,"value":1645},",\n",{"type":42,"tag":161,"props":1647,"children":1648},{"class":163,"line":227},[1649,1653,1658,1662,1666,1671,1675,1680,1684,1688,1693,1698,1702,1707,1711,1715,1720,1724,1728,1733,1737,1741,1746],{"type":42,"tag":161,"props":1650,"children":1651},{"style":201},[1652],{"type":47,"value":1614},{"type":42,"tag":161,"props":1654,"children":1655},{"style":773},[1656],{"type":47,"value":1657},"duration",{"type":42,"tag":161,"props":1659,"children":1660},{"style":201},[1661],{"type":47,"value":314},{"type":42,"tag":161,"props":1663,"children":1664},{"style":201},[1665],{"type":47,"value":1149},{"type":42,"tag":161,"props":1667,"children":1668},{"style":201},[1669],{"type":47,"value":1670}," {",{"type":42,"tag":161,"props":1672,"children":1673},{"style":201},[1674],{"type":47,"value":304},{"type":42,"tag":161,"props":1676,"children":1677},{"style":168},[1678],{"type":47,"value":1679},"startMs",{"type":42,"tag":161,"props":1681,"children":1682},{"style":201},[1683],{"type":47,"value":314},{"type":42,"tag":161,"props":1685,"children":1686},{"style":201},[1687],{"type":47,"value":1149},{"type":42,"tag":161,"props":1689,"children":1690},{"style":580},[1691],{"type":47,"value":1692}," 1777312533000",{"type":42,"tag":161,"props":1694,"children":1695},{"style":201},[1696],{"type":47,"value":1697},",",{"type":42,"tag":161,"props":1699,"children":1700},{"style":201},[1701],{"type":47,"value":304},{"type":42,"tag":161,"props":1703,"children":1704},{"style":168},[1705],{"type":47,"value":1706},"endMs",{"type":42,"tag":161,"props":1708,"children":1709},{"style":201},[1710],{"type":47,"value":314},{"type":42,"tag":161,"props":1712,"children":1713},{"style":201},[1714],{"type":47,"value":1149},{"type":42,"tag":161,"props":1716,"children":1717},{"style":580},[1718],{"type":47,"value":1719}," 1777312609000",{"type":42,"tag":161,"props":1721,"children":1722},{"style":201},[1723],{"type":47,"value":1697},{"type":42,"tag":161,"props":1725,"children":1726},{"style":201},[1727],{"type":47,"value":304},{"type":42,"tag":161,"props":1729,"children":1730},{"style":168},[1731],{"type":47,"value":1732},"totalMs",{"type":42,"tag":161,"props":1734,"children":1735},{"style":201},[1736],{"type":47,"value":314},{"type":42,"tag":161,"props":1738,"children":1739},{"style":201},[1740],{"type":47,"value":1149},{"type":42,"tag":161,"props":1742,"children":1743},{"style":580},[1744],{"type":47,"value":1745}," 76000",{"type":42,"tag":161,"props":1747,"children":1748},{"style":201},[1749],{"type":47,"value":1750}," },\n",{"type":42,"tag":161,"props":1752,"children":1753},{"class":163,"line":521},[1754,1758,1763,1767,1771,1776],{"type":42,"tag":161,"props":1755,"children":1756},{"style":201},[1757],{"type":47,"value":1614},{"type":42,"tag":161,"props":1759,"children":1760},{"style":773},[1761],{"type":47,"value":1762},"totalEvents",{"type":42,"tag":161,"props":1764,"children":1765},{"style":201},[1766],{"type":47,"value":314},{"type":42,"tag":161,"props":1768,"children":1769},{"style":201},[1770],{"type":47,"value":1149},{"type":42,"tag":161,"props":1772,"children":1773},{"style":580},[1774],{"type":47,"value":1775}," 420",{"type":42,"tag":161,"props":1777,"children":1778},{"style":201},[1779],{"type":47,"value":1645},{"type":42,"tag":161,"props":1781,"children":1782},{"class":163,"line":534},[1783,1787,1792,1796,1800],{"type":42,"tag":161,"props":1784,"children":1785},{"style":201},[1786],{"type":47,"value":1614},{"type":42,"tag":161,"props":1788,"children":1789},{"style":773},[1790],{"type":47,"value":1791},"pages",{"type":42,"tag":161,"props":1793,"children":1794},{"style":201},[1795],{"type":47,"value":314},{"type":42,"tag":161,"props":1797,"children":1798},{"style":201},[1799],{"type":47,"value":1149},{"type":42,"tag":161,"props":1801,"children":1802},{"style":201},[1803],{"type":47,"value":1804}," [\n",{"type":42,"tag":161,"props":1806,"children":1807},{"class":163,"line":548},[1808],{"type":42,"tag":161,"props":1809,"children":1810},{"style":201},[1811],{"type":47,"value":1812},"    {\n",{"type":42,"tag":161,"props":1814,"children":1815},{"class":163,"line":558},[1816,1821,1826,1830,1834,1839],{"type":42,"tag":161,"props":1817,"children":1818},{"style":201},[1819],{"type":47,"value":1820},"      \"",{"type":42,"tag":161,"props":1822,"children":1823},{"style":168},[1824],{"type":47,"value":1825},"pageId",{"type":42,"tag":161,"props":1827,"children":1828},{"style":201},[1829],{"type":47,"value":314},{"type":42,"tag":161,"props":1831,"children":1832},{"style":201},[1833],{"type":47,"value":1149},{"type":42,"tag":161,"props":1835,"children":1836},{"style":580},[1837],{"type":47,"value":1838}," 0",{"type":42,"tag":161,"props":1840,"children":1841},{"style":201},[1842],{"type":47,"value":1645},{"type":42,"tag":161,"props":1844,"children":1845},{"class":163,"line":567},[1846,1850,1855,1859,1863,1867,1872,1876],{"type":42,"tag":161,"props":1847,"children":1848},{"style":201},[1849],{"type":47,"value":1820},{"type":42,"tag":161,"props":1851,"children":1852},{"style":168},[1853],{"type":47,"value":1854},"url",{"type":42,"tag":161,"props":1856,"children":1857},{"style":201},[1858],{"type":47,"value":314},{"type":42,"tag":161,"props":1860,"children":1861},{"style":201},[1862],{"type":47,"value":1149},{"type":42,"tag":161,"props":1864,"children":1865},{"style":201},[1866],{"type":47,"value":304},{"type":42,"tag":161,"props":1868,"children":1869},{"style":174},[1870],{"type":47,"value":1871},"https:\u002F\u002Fexample.com\u002F",{"type":42,"tag":161,"props":1873,"children":1874},{"style":201},[1875],{"type":47,"value":314},{"type":42,"tag":161,"props":1877,"children":1878},{"style":201},[1879],{"type":47,"value":1645},{"type":42,"tag":161,"props":1881,"children":1882},{"class":163,"line":591},[1883,1887,1891,1895,1899,1903,1907,1911,1915,1919,1923,1928,1932,1936,1941,1945,1949,1954],{"type":42,"tag":161,"props":1884,"children":1885},{"style":201},[1886],{"type":47,"value":1820},{"type":42,"tag":161,"props":1888,"children":1889},{"style":168},[1890],{"type":47,"value":1679},{"type":42,"tag":161,"props":1892,"children":1893},{"style":201},[1894],{"type":47,"value":314},{"type":42,"tag":161,"props":1896,"children":1897},{"style":201},[1898],{"type":47,"value":1149},{"type":42,"tag":161,"props":1900,"children":1901},{"style":580},[1902],{"type":47,"value":1692},{"type":42,"tag":161,"props":1904,"children":1905},{"style":201},[1906],{"type":47,"value":1697},{"type":42,"tag":161,"props":1908,"children":1909},{"style":201},[1910],{"type":47,"value":304},{"type":42,"tag":161,"props":1912,"children":1913},{"style":168},[1914],{"type":47,"value":1706},{"type":42,"tag":161,"props":1916,"children":1917},{"style":201},[1918],{"type":47,"value":314},{"type":42,"tag":161,"props":1920,"children":1921},{"style":201},[1922],{"type":47,"value":1149},{"type":42,"tag":161,"props":1924,"children":1925},{"style":580},[1926],{"type":47,"value":1927}," 1777312538886",{"type":42,"tag":161,"props":1929,"children":1930},{"style":201},[1931],{"type":47,"value":1697},{"type":42,"tag":161,"props":1933,"children":1934},{"style":201},[1935],{"type":47,"value":304},{"type":42,"tag":161,"props":1937,"children":1938},{"style":168},[1939],{"type":47,"value":1940},"durationMs",{"type":42,"tag":161,"props":1942,"children":1943},{"style":201},[1944],{"type":47,"value":314},{"type":42,"tag":161,"props":1946,"children":1947},{"style":201},[1948],{"type":47,"value":1149},{"type":42,"tag":161,"props":1950,"children":1951},{"style":580},[1952],{"type":47,"value":1953}," 5886",{"type":42,"tag":161,"props":1955,"children":1956},{"style":201},[1957],{"type":47,"value":1645},{"type":42,"tag":161,"props":1959,"children":1960},{"class":163,"line":599},[1961,1965,1970,1974,1978,1983],{"type":42,"tag":161,"props":1962,"children":1963},{"style":201},[1964],{"type":47,"value":1820},{"type":42,"tag":161,"props":1966,"children":1967},{"style":168},[1968],{"type":47,"value":1969},"eventCount",{"type":42,"tag":161,"props":1971,"children":1972},{"style":201},[1973],{"type":47,"value":314},{"type":42,"tag":161,"props":1975,"children":1976},{"style":201},[1977],{"type":47,"value":1149},{"type":42,"tag":161,"props":1979,"children":1980},{"style":580},[1981],{"type":47,"value":1982}," 60",{"type":42,"tag":161,"props":1984,"children":1985},{"style":201},[1986],{"type":47,"value":1645},{"type":42,"tag":161,"props":1988,"children":1989},{"class":163,"line":608},[1990,1994,1999,2003,2007],{"type":42,"tag":161,"props":1991,"children":1992},{"style":201},[1993],{"type":47,"value":1820},{"type":42,"tag":161,"props":1995,"children":1996},{"style":168},[1997],{"type":47,"value":1998},"domains",{"type":42,"tag":161,"props":2000,"children":2001},{"style":201},[2002],{"type":47,"value":314},{"type":42,"tag":161,"props":2004,"children":2005},{"style":201},[2006],{"type":47,"value":1149},{"type":42,"tag":161,"props":2008,"children":2009},{"style":201},[2010],{"type":47,"value":2011}," {\n",{"type":42,"tag":161,"props":2013,"children":2014},{"class":163,"line":636},[2015,2020,2025,2029,2033,2037,2041,2047,2051,2055,2060,2064,2068,2073,2077,2081,2086],{"type":42,"tag":161,"props":2016,"children":2017},{"style":201},[2018],{"type":47,"value":2019},"        \"",{"type":42,"tag":161,"props":2021,"children":2022},{"style":580},[2023],{"type":47,"value":2024},"Network",{"type":42,"tag":161,"props":2026,"children":2027},{"style":201},[2028],{"type":47,"value":314},{"type":42,"tag":161,"props":2030,"children":2031},{"style":201},[2032],{"type":47,"value":1149},{"type":42,"tag":161,"props":2034,"children":2035},{"style":201},[2036],{"type":47,"value":1670},{"type":42,"tag":161,"props":2038,"children":2039},{"style":201},[2040],{"type":47,"value":304},{"type":42,"tag":161,"props":2042,"children":2044},{"style":2043},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[2045],{"type":47,"value":2046},"count",{"type":42,"tag":161,"props":2048,"children":2049},{"style":201},[2050],{"type":47,"value":314},{"type":42,"tag":161,"props":2052,"children":2053},{"style":201},[2054],{"type":47,"value":1149},{"type":42,"tag":161,"props":2056,"children":2057},{"style":580},[2058],{"type":47,"value":2059}," 18",{"type":42,"tag":161,"props":2061,"children":2062},{"style":201},[2063],{"type":47,"value":1697},{"type":42,"tag":161,"props":2065,"children":2066},{"style":201},[2067],{"type":47,"value":304},{"type":42,"tag":161,"props":2069,"children":2070},{"style":2043},[2071],{"type":47,"value":2072},"errors",{"type":42,"tag":161,"props":2074,"children":2075},{"style":201},[2076],{"type":47,"value":314},{"type":42,"tag":161,"props":2078,"children":2079},{"style":201},[2080],{"type":47,"value":1149},{"type":42,"tag":161,"props":2082,"children":2083},{"style":580},[2084],{"type":47,"value":2085}," 1",{"type":42,"tag":161,"props":2087,"children":2088},{"style":201},[2089],{"type":47,"value":1750},{"type":42,"tag":161,"props":2091,"children":2092},{"class":163,"line":645},[2093,2097,2102,2106,2110,2114,2118,2122,2126,2130,2135],{"type":42,"tag":161,"props":2094,"children":2095},{"style":201},[2096],{"type":47,"value":2019},{"type":42,"tag":161,"props":2098,"children":2099},{"style":580},[2100],{"type":47,"value":2101},"Console",{"type":42,"tag":161,"props":2103,"children":2104},{"style":201},[2105],{"type":47,"value":314},{"type":42,"tag":161,"props":2107,"children":2108},{"style":201},[2109],{"type":47,"value":1149},{"type":42,"tag":161,"props":2111,"children":2112},{"style":201},[2113],{"type":47,"value":1670},{"type":42,"tag":161,"props":2115,"children":2116},{"style":201},[2117],{"type":47,"value":304},{"type":42,"tag":161,"props":2119,"children":2120},{"style":2043},[2121],{"type":47,"value":2046},{"type":42,"tag":161,"props":2123,"children":2124},{"style":201},[2125],{"type":47,"value":314},{"type":42,"tag":161,"props":2127,"children":2128},{"style":201},[2129],{"type":47,"value":1149},{"type":42,"tag":161,"props":2131,"children":2132},{"style":580},[2133],{"type":47,"value":2134}," 2",{"type":42,"tag":161,"props":2136,"children":2137},{"style":201},[2138],{"type":47,"value":1750},{"type":42,"tag":161,"props":2140,"children":2141},{"class":163,"line":653},[2142,2146,2151,2155,2159,2164,2168,2172,2176,2180,2185],{"type":42,"tag":161,"props":2143,"children":2144},{"style":201},[2145],{"type":47,"value":2019},{"type":42,"tag":161,"props":2147,"children":2148},{"style":580},[2149],{"type":47,"value":2150},"Page",{"type":42,"tag":161,"props":2152,"children":2153},{"style":201},[2154],{"type":47,"value":314},{"type":42,"tag":161,"props":2156,"children":2157},{"style":201},[2158],{"type":47,"value":1149},{"type":42,"tag":161,"props":2160,"children":2161},{"style":201},[2162],{"type":47,"value":2163},"    {",{"type":42,"tag":161,"props":2165,"children":2166},{"style":201},[2167],{"type":47,"value":304},{"type":42,"tag":161,"props":2169,"children":2170},{"style":2043},[2171],{"type":47,"value":2046},{"type":42,"tag":161,"props":2173,"children":2174},{"style":201},[2175],{"type":47,"value":314},{"type":42,"tag":161,"props":2177,"children":2178},{"style":201},[2179],{"type":47,"value":1149},{"type":42,"tag":161,"props":2181,"children":2182},{"style":580},[2183],{"type":47,"value":2184}," 24",{"type":42,"tag":161,"props":2186,"children":2187},{"style":201},[2188],{"type":47,"value":1750},{"type":42,"tag":161,"props":2190,"children":2191},{"class":163,"line":662},[2192,2196,2201,2205,2209,2213,2217,2221,2225,2229,2234],{"type":42,"tag":161,"props":2193,"children":2194},{"style":201},[2195],{"type":47,"value":2019},{"type":42,"tag":161,"props":2197,"children":2198},{"style":580},[2199],{"type":47,"value":2200},"Runtime",{"type":42,"tag":161,"props":2202,"children":2203},{"style":201},[2204],{"type":47,"value":314},{"type":42,"tag":161,"props":2206,"children":2207},{"style":201},[2208],{"type":47,"value":1149},{"type":42,"tag":161,"props":2210,"children":2211},{"style":201},[2212],{"type":47,"value":1670},{"type":42,"tag":161,"props":2214,"children":2215},{"style":201},[2216],{"type":47,"value":304},{"type":42,"tag":161,"props":2218,"children":2219},{"style":2043},[2220],{"type":47,"value":2046},{"type":42,"tag":161,"props":2222,"children":2223},{"style":201},[2224],{"type":47,"value":314},{"type":42,"tag":161,"props":2226,"children":2227},{"style":201},[2228],{"type":47,"value":1149},{"type":42,"tag":161,"props":2230,"children":2231},{"style":580},[2232],{"type":47,"value":2233}," 13",{"type":42,"tag":161,"props":2235,"children":2236},{"style":201},[2237],{"type":47,"value":2238}," }\n",{"type":42,"tag":161,"props":2240,"children":2241},{"class":163,"line":679},[2242],{"type":42,"tag":161,"props":2243,"children":2244},{"style":201},[2245],{"type":47,"value":2246},"      },\n",{"type":42,"tag":161,"props":2248,"children":2249},{"class":163,"line":1085},[2250,2254,2259,2263,2267,2271,2275,2280,2284,2288,2293,2297,2301,2306,2310,2314,2318,2322,2326,2331,2335,2339,2343,2347,2352,2356,2360,2364,2368,2372,2377,2381,2385,2389,2393,2397,2402,2406,2410,2414,2419],{"type":42,"tag":161,"props":2251,"children":2252},{"style":201},[2253],{"type":47,"value":1820},{"type":42,"tag":161,"props":2255,"children":2256},{"style":168},[2257],{"type":47,"value":2258},"network",{"type":42,"tag":161,"props":2260,"children":2261},{"style":201},[2262],{"type":47,"value":314},{"type":42,"tag":161,"props":2264,"children":2265},{"style":201},[2266],{"type":47,"value":1149},{"type":42,"tag":161,"props":2268,"children":2269},{"style":201},[2270],{"type":47,"value":1670},{"type":42,"tag":161,"props":2272,"children":2273},{"style":201},[2274],{"type":47,"value":304},{"type":42,"tag":161,"props":2276,"children":2277},{"style":580},[2278],{"type":47,"value":2279},"requests",{"type":42,"tag":161,"props":2281,"children":2282},{"style":201},[2283],{"type":47,"value":314},{"type":42,"tag":161,"props":2285,"children":2286},{"style":201},[2287],{"type":47,"value":1149},{"type":42,"tag":161,"props":2289,"children":2290},{"style":580},[2291],{"type":47,"value":2292}," 4",{"type":42,"tag":161,"props":2294,"children":2295},{"style":201},[2296],{"type":47,"value":1697},{"type":42,"tag":161,"props":2298,"children":2299},{"style":201},[2300],{"type":47,"value":304},{"type":42,"tag":161,"props":2302,"children":2303},{"style":580},[2304],{"type":47,"value":2305},"failed",{"type":42,"tag":161,"props":2307,"children":2308},{"style":201},[2309],{"type":47,"value":314},{"type":42,"tag":161,"props":2311,"children":2312},{"style":201},[2313],{"type":47,"value":1149},{"type":42,"tag":161,"props":2315,"children":2316},{"style":580},[2317],{"type":47,"value":2085},{"type":42,"tag":161,"props":2319,"children":2320},{"style":201},[2321],{"type":47,"value":1697},{"type":42,"tag":161,"props":2323,"children":2324},{"style":201},[2325],{"type":47,"value":304},{"type":42,"tag":161,"props":2327,"children":2328},{"style":580},[2329],{"type":47,"value":2330},"byType",{"type":42,"tag":161,"props":2332,"children":2333},{"style":201},[2334],{"type":47,"value":314},{"type":42,"tag":161,"props":2336,"children":2337},{"style":201},[2338],{"type":47,"value":1149},{"type":42,"tag":161,"props":2340,"children":2341},{"style":201},[2342],{"type":47,"value":1670},{"type":42,"tag":161,"props":2344,"children":2345},{"style":201},[2346],{"type":47,"value":304},{"type":42,"tag":161,"props":2348,"children":2349},{"style":2043},[2350],{"type":47,"value":2351},"Document",{"type":42,"tag":161,"props":2353,"children":2354},{"style":201},[2355],{"type":47,"value":314},{"type":42,"tag":161,"props":2357,"children":2358},{"style":201},[2359],{"type":47,"value":1149},{"type":42,"tag":161,"props":2361,"children":2362},{"style":580},[2363],{"type":47,"value":2134},{"type":42,"tag":161,"props":2365,"children":2366},{"style":201},[2367],{"type":47,"value":1697},{"type":42,"tag":161,"props":2369,"children":2370},{"style":201},[2371],{"type":47,"value":304},{"type":42,"tag":161,"props":2373,"children":2374},{"style":2043},[2375],{"type":47,"value":2376},"Script",{"type":42,"tag":161,"props":2378,"children":2379},{"style":201},[2380],{"type":47,"value":314},{"type":42,"tag":161,"props":2382,"children":2383},{"style":201},[2384],{"type":47,"value":1149},{"type":42,"tag":161,"props":2386,"children":2387},{"style":580},[2388],{"type":47,"value":2085},{"type":42,"tag":161,"props":2390,"children":2391},{"style":201},[2392],{"type":47,"value":1697},{"type":42,"tag":161,"props":2394,"children":2395},{"style":201},[2396],{"type":47,"value":304},{"type":42,"tag":161,"props":2398,"children":2399},{"style":2043},[2400],{"type":47,"value":2401},"Other",{"type":42,"tag":161,"props":2403,"children":2404},{"style":201},[2405],{"type":47,"value":314},{"type":42,"tag":161,"props":2407,"children":2408},{"style":201},[2409],{"type":47,"value":1149},{"type":42,"tag":161,"props":2411,"children":2412},{"style":580},[2413],{"type":47,"value":2085},{"type":42,"tag":161,"props":2415,"children":2416},{"style":201},[2417],{"type":47,"value":2418}," }",{"type":42,"tag":161,"props":2420,"children":2421},{"style":201},[2422],{"type":47,"value":2238},{"type":42,"tag":161,"props":2424,"children":2425},{"class":163,"line":1101},[2426],{"type":42,"tag":161,"props":2427,"children":2428},{"style":201},[2429],{"type":47,"value":2430},"    }\n",{"type":42,"tag":161,"props":2432,"children":2434},{"class":163,"line":2433},19,[2435],{"type":42,"tag":161,"props":2436,"children":2437},{"style":201},[2438],{"type":47,"value":2439},"  ]\n",{"type":42,"tag":161,"props":2441,"children":2443},{"class":163,"line":2442},20,[2444],{"type":42,"tag":161,"props":2445,"children":2446},{"style":201},[2447],{"type":47,"value":2448},"}\n",{"type":42,"tag":50,"props":2450,"children":2451},{},[2452,2457,2459,2464,2465,2470,2472,2478,2480,2486,2488,2493,2495,2501],{"type":42,"tag":76,"props":2453,"children":2455},{"className":2454},[],[2456],{"type":47,"value":1679},{"type":47,"value":2458}," \u002F ",{"type":42,"tag":76,"props":2460,"children":2462},{"className":2461},[],[2463],{"type":47,"value":1706},{"type":47,"value":2458},{"type":42,"tag":76,"props":2466,"children":2468},{"className":2467},[],[2469],{"type":47,"value":1940},{"type":47,"value":2471}," are wall-clock ms, derived from ",{"type":42,"tag":76,"props":2473,"children":2475},{"className":2474},[],[2476],{"type":47,"value":2477},"manifest.started_at",{"type":47,"value":2479}," plus the offset of each event's CDP monotonic timestamp. ",{"type":42,"tag":76,"props":2481,"children":2483},{"className":2482},[],[2484],{"type":47,"value":2485},"domains[*]",{"type":47,"value":2487}," only includes ",{"type":42,"tag":76,"props":2489,"children":2491},{"className":2490},[],[2492],{"type":47,"value":2072},{"type":47,"value":2494},"\u002F",{"type":42,"tag":76,"props":2496,"children":2498},{"className":2497},[],[2499],{"type":47,"value":2500},"warnings",{"type":47,"value":2502}," keys when non-zero.",{"type":42,"tag":472,"props":2504,"children":2506},{"id":2505},"drilling-in-with-querymjs",[2507,2509],{"type":47,"value":2508},"Drilling in with ",{"type":42,"tag":76,"props":2510,"children":2512},{"className":2511},[],[2513],{"type":47,"value":2514},"query.mjs",{"type":42,"tag":50,"props":2516,"children":2517},{},[2518,2520,2526],{"type":47,"value":2519},"For interactive exploration, use ",{"type":42,"tag":76,"props":2521,"children":2523},{"className":2522},[],[2524],{"type":47,"value":2525},"scripts\u002Fquery.mjs \u003Crun-id> \u003Ccommand>",{"type":47,"value":2527}," instead of remembering paths:",{"type":42,"tag":150,"props":2529,"children":2531},{"className":152,"code":2530,"language":154,"meta":155,"style":155},"node scripts\u002Fquery.mjs my-run list                    # one-line table of pages\nnode scripts\u002Fquery.mjs my-run page 1                  # full summary for page 1\nnode scripts\u002Fquery.mjs my-run page 1 network\u002Ffailed   # cat failed.jsonl for page 1\nnode scripts\u002Fquery.mjs my-run errors                  # all errors across pages, attributed by pid\nnode scripts\u002Fquery.mjs my-run errors 2                # errors from page 2 only\nnode scripts\u002Fquery.mjs my-run hosts                   # top hosts by request count\nnode scripts\u002Fquery.mjs my-run host api.example.com    # all requests\u002Fresponses for a host\nnode scripts\u002Fquery.mjs my-run summary                 # full summary.json\n",[2532],{"type":42,"tag":76,"props":2533,"children":2534},{"__ignoreMap":155},[2535,2560,2589,2622,2647,2675,2700,2730],{"type":42,"tag":161,"props":2536,"children":2537},{"class":163,"line":164},[2538,2542,2547,2551,2555],{"type":42,"tag":161,"props":2539,"children":2540},{"style":168},[2541],{"type":47,"value":171},{"type":42,"tag":161,"props":2543,"children":2544},{"style":174},[2545],{"type":47,"value":2546}," scripts\u002Fquery.mjs",{"type":42,"tag":161,"props":2548,"children":2549},{"style":174},[2550],{"type":47,"value":1116},{"type":42,"tag":161,"props":2552,"children":2553},{"style":174},[2554],{"type":47,"value":1186},{"type":42,"tag":161,"props":2556,"children":2557},{"style":180},[2558],{"type":47,"value":2559},"                    # one-line table of pages\n",{"type":42,"tag":161,"props":2561,"children":2562},{"class":163,"line":186},[2563,2567,2571,2575,2580,2584],{"type":42,"tag":161,"props":2564,"children":2565},{"style":168},[2566],{"type":47,"value":171},{"type":42,"tag":161,"props":2568,"children":2569},{"style":174},[2570],{"type":47,"value":2546},{"type":42,"tag":161,"props":2572,"children":2573},{"style":174},[2574],{"type":47,"value":1116},{"type":42,"tag":161,"props":2576,"children":2577},{"style":174},[2578],{"type":47,"value":2579}," page",{"type":42,"tag":161,"props":2581,"children":2582},{"style":580},[2583],{"type":47,"value":2085},{"type":42,"tag":161,"props":2585,"children":2586},{"style":180},[2587],{"type":47,"value":2588},"                  # full summary for page 1\n",{"type":42,"tag":161,"props":2590,"children":2591},{"class":163,"line":227},[2592,2596,2600,2604,2608,2612,2617],{"type":42,"tag":161,"props":2593,"children":2594},{"style":168},[2595],{"type":47,"value":171},{"type":42,"tag":161,"props":2597,"children":2598},{"style":174},[2599],{"type":47,"value":2546},{"type":42,"tag":161,"props":2601,"children":2602},{"style":174},[2603],{"type":47,"value":1116},{"type":42,"tag":161,"props":2605,"children":2606},{"style":174},[2607],{"type":47,"value":2579},{"type":42,"tag":161,"props":2609,"children":2610},{"style":580},[2611],{"type":47,"value":2085},{"type":42,"tag":161,"props":2613,"children":2614},{"style":174},[2615],{"type":47,"value":2616}," network\u002Ffailed",{"type":42,"tag":161,"props":2618,"children":2619},{"style":180},[2620],{"type":47,"value":2621},"   # cat failed.jsonl for page 1\n",{"type":42,"tag":161,"props":2623,"children":2624},{"class":163,"line":521},[2625,2629,2633,2637,2642],{"type":42,"tag":161,"props":2626,"children":2627},{"style":168},[2628],{"type":47,"value":171},{"type":42,"tag":161,"props":2630,"children":2631},{"style":174},[2632],{"type":47,"value":2546},{"type":42,"tag":161,"props":2634,"children":2635},{"style":174},[2636],{"type":47,"value":1116},{"type":42,"tag":161,"props":2638,"children":2639},{"style":174},[2640],{"type":47,"value":2641}," errors",{"type":42,"tag":161,"props":2643,"children":2644},{"style":180},[2645],{"type":47,"value":2646},"                  # all errors across pages, attributed by pid\n",{"type":42,"tag":161,"props":2648,"children":2649},{"class":163,"line":534},[2650,2654,2658,2662,2666,2670],{"type":42,"tag":161,"props":2651,"children":2652},{"style":168},[2653],{"type":47,"value":171},{"type":42,"tag":161,"props":2655,"children":2656},{"style":174},[2657],{"type":47,"value":2546},{"type":42,"tag":161,"props":2659,"children":2660},{"style":174},[2661],{"type":47,"value":1116},{"type":42,"tag":161,"props":2663,"children":2664},{"style":174},[2665],{"type":47,"value":2641},{"type":42,"tag":161,"props":2667,"children":2668},{"style":580},[2669],{"type":47,"value":2134},{"type":42,"tag":161,"props":2671,"children":2672},{"style":180},[2673],{"type":47,"value":2674},"                # errors from page 2 only\n",{"type":42,"tag":161,"props":2676,"children":2677},{"class":163,"line":548},[2678,2682,2686,2690,2695],{"type":42,"tag":161,"props":2679,"children":2680},{"style":168},[2681],{"type":47,"value":171},{"type":42,"tag":161,"props":2683,"children":2684},{"style":174},[2685],{"type":47,"value":2546},{"type":42,"tag":161,"props":2687,"children":2688},{"style":174},[2689],{"type":47,"value":1116},{"type":42,"tag":161,"props":2691,"children":2692},{"style":174},[2693],{"type":47,"value":2694}," hosts",{"type":42,"tag":161,"props":2696,"children":2697},{"style":180},[2698],{"type":47,"value":2699},"                   # top hosts by request count\n",{"type":42,"tag":161,"props":2701,"children":2702},{"class":163,"line":558},[2703,2707,2711,2715,2720,2725],{"type":42,"tag":161,"props":2704,"children":2705},{"style":168},[2706],{"type":47,"value":171},{"type":42,"tag":161,"props":2708,"children":2709},{"style":174},[2710],{"type":47,"value":2546},{"type":42,"tag":161,"props":2712,"children":2713},{"style":174},[2714],{"type":47,"value":1116},{"type":42,"tag":161,"props":2716,"children":2717},{"style":174},[2718],{"type":47,"value":2719}," host",{"type":42,"tag":161,"props":2721,"children":2722},{"style":174},[2723],{"type":47,"value":2724}," api.example.com",{"type":42,"tag":161,"props":2726,"children":2727},{"style":180},[2728],{"type":47,"value":2729},"    # all requests\u002Fresponses for a host\n",{"type":42,"tag":161,"props":2731,"children":2732},{"class":163,"line":567},[2733,2737,2741,2745,2750],{"type":42,"tag":161,"props":2734,"children":2735},{"style":168},[2736],{"type":47,"value":171},{"type":42,"tag":161,"props":2738,"children":2739},{"style":174},[2740],{"type":47,"value":2546},{"type":42,"tag":161,"props":2742,"children":2743},{"style":174},[2744],{"type":47,"value":1116},{"type":42,"tag":161,"props":2746,"children":2747},{"style":174},[2748],{"type":47,"value":2749}," summary",{"type":42,"tag":161,"props":2751,"children":2752},{"style":180},[2753],{"type":47,"value":2754},"                 # full summary.json\n",{"type":42,"tag":50,"props":2756,"children":2757},{},[2758,2760,2765,2767,2773,2775,2780,2781,2787],{"type":47,"value":2759},"Behind the scenes it just reads ",{"type":42,"tag":76,"props":2761,"children":2763},{"className":2762},[],[2764],{"type":47,"value":1572},{"type":47,"value":2766}," and the ",{"type":42,"tag":76,"props":2768,"children":2770},{"className":2769},[],[2771],{"type":47,"value":2772},"cdp\u002Fpages\u002F\u003Cpid>\u002F",{"type":47,"value":2774}," tree — feel free to bypass it with raw ",{"type":42,"tag":76,"props":2776,"children":2778},{"className":2777},[],[2779],{"type":47,"value":876},{"type":47,"value":2494},{"type":42,"tag":76,"props":2782,"children":2784},{"className":2783},[],[2785],{"type":47,"value":2786},"rg",{"type":47,"value":2788}," once you know the shape.",{"type":42,"tag":93,"props":2790,"children":2792},{"id":2791},"top-traversal-recipes",[2793],{"type":47,"value":2794},"Top traversal recipes",{"type":42,"tag":150,"props":2796,"children":2798},{"className":152,"code":2797,"language":154,"meta":155,"style":155},"# All failed network requests (use jq -c to keep it line-delimited)\njq -c '.params' .o11y\u002F\u003Crun>\u002Fcdp\u002Fnetwork\u002Ffailed.jsonl\n\n# Find requests to a specific host\njq -c 'select(.params.request.url | test(\"api\\\\.example\\\\.com\"))' \\\n  .o11y\u002F\u003Crun>\u002Fcdp\u002Fnetwork\u002Frequests.jsonl\n\n# 4xx\u002F5xx responses\njq -c 'select(.params.response.status >= 400)\n       | {status: .params.response.status, url: .params.response.url}' \\\n  .o11y\u002F\u003Crun>\u002Fcdp\u002Fnetwork\u002Fresponses.jsonl\n\n# Console errors only\njq -c 'select(.params.type == \"error\")' .o11y\u002F\u003Crun>\u002Fcdp\u002Fconsole\u002Flogs.jsonl\n\n# Sequence of URLs visited\njq -r '.params.frame.url' .o11y\u002F\u003Crun>\u002Fcdp\u002Fpage\u002Fnavigations.jsonl\n\n# Find the screenshot taken closest to a timestamp (e.g., when an exception fired)\nls .o11y\u002F\u003Crun>\u002Fscreenshots\u002F | sort | awk -v t=20260427T1714123NZ '\n  $0 >= t { print; exit }'\n",[2799],{"type":42,"tag":76,"props":2800,"children":2801},{"__ignoreMap":155},[2802,2810,2865,2872,2880,2908,2937,2944,2952,2972,2988,3016,3023,3031,3080,3087,3095,3144,3151,3159,3225],{"type":42,"tag":161,"props":2803,"children":2804},{"class":163,"line":164},[2805],{"type":42,"tag":161,"props":2806,"children":2807},{"style":180},[2808],{"type":47,"value":2809},"# All failed network requests (use jq -c to keep it line-delimited)\n",{"type":42,"tag":161,"props":2811,"children":2812},{"class":163,"line":186},[2813,2817,2822,2826,2831,2836,2841,2846,2851,2856,2860],{"type":42,"tag":161,"props":2814,"children":2815},{"style":168},[2816],{"type":47,"value":876},{"type":42,"tag":161,"props":2818,"children":2819},{"style":174},[2820],{"type":47,"value":2821}," -c",{"type":42,"tag":161,"props":2823,"children":2824},{"style":201},[2825],{"type":47,"value":1203},{"type":42,"tag":161,"props":2827,"children":2828},{"style":174},[2829],{"type":47,"value":2830},".params",{"type":42,"tag":161,"props":2832,"children":2833},{"style":201},[2834],{"type":47,"value":2835},"'",{"type":42,"tag":161,"props":2837,"children":2838},{"style":174},[2839],{"type":47,"value":2840}," .o11y\u002F",{"type":42,"tag":161,"props":2842,"children":2843},{"style":201},[2844],{"type":47,"value":2845},"\u003C",{"type":42,"tag":161,"props":2847,"children":2848},{"style":174},[2849],{"type":47,"value":2850},"ru",{"type":42,"tag":161,"props":2852,"children":2853},{"style":503},[2854],{"type":47,"value":2855},"n",{"type":42,"tag":161,"props":2857,"children":2858},{"style":201},[2859],{"type":47,"value":1251},{"type":42,"tag":161,"props":2861,"children":2862},{"style":174},[2863],{"type":47,"value":2864},"\u002Fcdp\u002Fnetwork\u002Ffailed.jsonl\n",{"type":42,"tag":161,"props":2866,"children":2867},{"class":163,"line":227},[2868],{"type":42,"tag":161,"props":2869,"children":2870},{"emptyLinePlaceholder":552},[2871],{"type":47,"value":555},{"type":42,"tag":161,"props":2873,"children":2874},{"class":163,"line":521},[2875],{"type":42,"tag":161,"props":2876,"children":2877},{"style":180},[2878],{"type":47,"value":2879},"# Find requests to a specific host\n",{"type":42,"tag":161,"props":2881,"children":2882},{"class":163,"line":534},[2883,2887,2891,2895,2900,2904],{"type":42,"tag":161,"props":2884,"children":2885},{"style":168},[2886],{"type":47,"value":876},{"type":42,"tag":161,"props":2888,"children":2889},{"style":174},[2890],{"type":47,"value":2821},{"type":42,"tag":161,"props":2892,"children":2893},{"style":201},[2894],{"type":47,"value":1203},{"type":42,"tag":161,"props":2896,"children":2897},{"style":174},[2898],{"type":47,"value":2899},"select(.params.request.url | test(\"api\\\\.example\\\\.com\"))",{"type":42,"tag":161,"props":2901,"children":2902},{"style":201},[2903],{"type":47,"value":2835},{"type":42,"tag":161,"props":2905,"children":2906},{"style":503},[2907],{"type":47,"value":506},{"type":42,"tag":161,"props":2909,"children":2910},{"class":163,"line":548},[2911,2916,2920,2924,2928,2932],{"type":42,"tag":161,"props":2912,"children":2913},{"style":174},[2914],{"type":47,"value":2915},"  .o11y\u002F",{"type":42,"tag":161,"props":2917,"children":2918},{"style":201},[2919],{"type":47,"value":2845},{"type":42,"tag":161,"props":2921,"children":2922},{"style":174},[2923],{"type":47,"value":2850},{"type":42,"tag":161,"props":2925,"children":2926},{"style":503},[2927],{"type":47,"value":2855},{"type":42,"tag":161,"props":2929,"children":2930},{"style":201},[2931],{"type":47,"value":1251},{"type":42,"tag":161,"props":2933,"children":2934},{"style":174},[2935],{"type":47,"value":2936},"\u002Fcdp\u002Fnetwork\u002Frequests.jsonl\n",{"type":42,"tag":161,"props":2938,"children":2939},{"class":163,"line":558},[2940],{"type":42,"tag":161,"props":2941,"children":2942},{"emptyLinePlaceholder":552},[2943],{"type":47,"value":555},{"type":42,"tag":161,"props":2945,"children":2946},{"class":163,"line":567},[2947],{"type":42,"tag":161,"props":2948,"children":2949},{"style":180},[2950],{"type":47,"value":2951},"# 4xx\u002F5xx responses\n",{"type":42,"tag":161,"props":2953,"children":2954},{"class":163,"line":591},[2955,2959,2963,2967],{"type":42,"tag":161,"props":2956,"children":2957},{"style":168},[2958],{"type":47,"value":876},{"type":42,"tag":161,"props":2960,"children":2961},{"style":174},[2962],{"type":47,"value":2821},{"type":42,"tag":161,"props":2964,"children":2965},{"style":201},[2966],{"type":47,"value":1203},{"type":42,"tag":161,"props":2968,"children":2969},{"style":174},[2970],{"type":47,"value":2971},"select(.params.response.status >= 400)\n",{"type":42,"tag":161,"props":2973,"children":2974},{"class":163,"line":599},[2975,2980,2984],{"type":42,"tag":161,"props":2976,"children":2977},{"style":174},[2978],{"type":47,"value":2979},"       | {status: .params.response.status, url: .params.response.url}",{"type":42,"tag":161,"props":2981,"children":2982},{"style":201},[2983],{"type":47,"value":2835},{"type":42,"tag":161,"props":2985,"children":2986},{"style":503},[2987],{"type":47,"value":506},{"type":42,"tag":161,"props":2989,"children":2990},{"class":163,"line":608},[2991,2995,2999,3003,3007,3011],{"type":42,"tag":161,"props":2992,"children":2993},{"style":174},[2994],{"type":47,"value":2915},{"type":42,"tag":161,"props":2996,"children":2997},{"style":201},[2998],{"type":47,"value":2845},{"type":42,"tag":161,"props":3000,"children":3001},{"style":174},[3002],{"type":47,"value":2850},{"type":42,"tag":161,"props":3004,"children":3005},{"style":503},[3006],{"type":47,"value":2855},{"type":42,"tag":161,"props":3008,"children":3009},{"style":201},[3010],{"type":47,"value":1251},{"type":42,"tag":161,"props":3012,"children":3013},{"style":174},[3014],{"type":47,"value":3015},"\u002Fcdp\u002Fnetwork\u002Fresponses.jsonl\n",{"type":42,"tag":161,"props":3017,"children":3018},{"class":163,"line":636},[3019],{"type":42,"tag":161,"props":3020,"children":3021},{"emptyLinePlaceholder":552},[3022],{"type":47,"value":555},{"type":42,"tag":161,"props":3024,"children":3025},{"class":163,"line":645},[3026],{"type":42,"tag":161,"props":3027,"children":3028},{"style":180},[3029],{"type":47,"value":3030},"# Console errors only\n",{"type":42,"tag":161,"props":3032,"children":3033},{"class":163,"line":653},[3034,3038,3042,3046,3051,3055,3059,3063,3067,3071,3075],{"type":42,"tag":161,"props":3035,"children":3036},{"style":168},[3037],{"type":47,"value":876},{"type":42,"tag":161,"props":3039,"children":3040},{"style":174},[3041],{"type":47,"value":2821},{"type":42,"tag":161,"props":3043,"children":3044},{"style":201},[3045],{"type":47,"value":1203},{"type":42,"tag":161,"props":3047,"children":3048},{"style":174},[3049],{"type":47,"value":3050},"select(.params.type == \"error\")",{"type":42,"tag":161,"props":3052,"children":3053},{"style":201},[3054],{"type":47,"value":2835},{"type":42,"tag":161,"props":3056,"children":3057},{"style":174},[3058],{"type":47,"value":2840},{"type":42,"tag":161,"props":3060,"children":3061},{"style":201},[3062],{"type":47,"value":2845},{"type":42,"tag":161,"props":3064,"children":3065},{"style":174},[3066],{"type":47,"value":2850},{"type":42,"tag":161,"props":3068,"children":3069},{"style":503},[3070],{"type":47,"value":2855},{"type":42,"tag":161,"props":3072,"children":3073},{"style":201},[3074],{"type":47,"value":1251},{"type":42,"tag":161,"props":3076,"children":3077},{"style":174},[3078],{"type":47,"value":3079},"\u002Fcdp\u002Fconsole\u002Flogs.jsonl\n",{"type":42,"tag":161,"props":3081,"children":3082},{"class":163,"line":662},[3083],{"type":42,"tag":161,"props":3084,"children":3085},{"emptyLinePlaceholder":552},[3086],{"type":47,"value":555},{"type":42,"tag":161,"props":3088,"children":3089},{"class":163,"line":679},[3090],{"type":42,"tag":161,"props":3091,"children":3092},{"style":180},[3093],{"type":47,"value":3094},"# Sequence of URLs visited\n",{"type":42,"tag":161,"props":3096,"children":3097},{"class":163,"line":1085},[3098,3102,3106,3110,3115,3119,3123,3127,3131,3135,3139],{"type":42,"tag":161,"props":3099,"children":3100},{"style":168},[3101],{"type":47,"value":876},{"type":42,"tag":161,"props":3103,"children":3104},{"style":174},[3105],{"type":47,"value":881},{"type":42,"tag":161,"props":3107,"children":3108},{"style":201},[3109],{"type":47,"value":1203},{"type":42,"tag":161,"props":3111,"children":3112},{"style":174},[3113],{"type":47,"value":3114},".params.frame.url",{"type":42,"tag":161,"props":3116,"children":3117},{"style":201},[3118],{"type":47,"value":2835},{"type":42,"tag":161,"props":3120,"children":3121},{"style":174},[3122],{"type":47,"value":2840},{"type":42,"tag":161,"props":3124,"children":3125},{"style":201},[3126],{"type":47,"value":2845},{"type":42,"tag":161,"props":3128,"children":3129},{"style":174},[3130],{"type":47,"value":2850},{"type":42,"tag":161,"props":3132,"children":3133},{"style":503},[3134],{"type":47,"value":2855},{"type":42,"tag":161,"props":3136,"children":3137},{"style":201},[3138],{"type":47,"value":1251},{"type":42,"tag":161,"props":3140,"children":3141},{"style":174},[3142],{"type":47,"value":3143},"\u002Fcdp\u002Fpage\u002Fnavigations.jsonl\n",{"type":42,"tag":161,"props":3145,"children":3146},{"class":163,"line":1101},[3147],{"type":42,"tag":161,"props":3148,"children":3149},{"emptyLinePlaceholder":552},[3150],{"type":47,"value":555},{"type":42,"tag":161,"props":3152,"children":3153},{"class":163,"line":2433},[3154],{"type":42,"tag":161,"props":3155,"children":3156},{"style":180},[3157],{"type":47,"value":3158},"# Find the screenshot taken closest to a timestamp (e.g., when an exception fired)\n",{"type":42,"tag":161,"props":3160,"children":3161},{"class":163,"line":2442},[3162,3167,3171,3175,3179,3183,3187,3192,3196,3201,3205,3210,3215,3220],{"type":42,"tag":161,"props":3163,"children":3164},{"style":168},[3165],{"type":47,"value":3166},"ls",{"type":42,"tag":161,"props":3168,"children":3169},{"style":174},[3170],{"type":47,"value":2840},{"type":42,"tag":161,"props":3172,"children":3173},{"style":201},[3174],{"type":47,"value":2845},{"type":42,"tag":161,"props":3176,"children":3177},{"style":174},[3178],{"type":47,"value":2850},{"type":42,"tag":161,"props":3180,"children":3181},{"style":503},[3182],{"type":47,"value":2855},{"type":42,"tag":161,"props":3184,"children":3185},{"style":201},[3186],{"type":47,"value":1251},{"type":42,"tag":161,"props":3188,"children":3189},{"style":174},[3190],{"type":47,"value":3191},"\u002Fscreenshots\u002F",{"type":42,"tag":161,"props":3193,"children":3194},{"style":201},[3195],{"type":47,"value":289},{"type":42,"tag":161,"props":3197,"children":3198},{"style":168},[3199],{"type":47,"value":3200}," sort",{"type":42,"tag":161,"props":3202,"children":3203},{"style":201},[3204],{"type":47,"value":289},{"type":42,"tag":161,"props":3206,"children":3207},{"style":168},[3208],{"type":47,"value":3209}," awk",{"type":42,"tag":161,"props":3211,"children":3212},{"style":174},[3213],{"type":47,"value":3214}," -v",{"type":42,"tag":161,"props":3216,"children":3217},{"style":174},[3218],{"type":47,"value":3219}," t=20260427T1714123NZ",{"type":42,"tag":161,"props":3221,"children":3222},{"style":201},[3223],{"type":47,"value":3224}," '\n",{"type":42,"tag":161,"props":3226,"children":3228},{"class":163,"line":3227},21,[3229,3234],{"type":42,"tag":161,"props":3230,"children":3231},{"style":174},[3232],{"type":47,"value":3233},"  $0 >= t { print; exit }",{"type":42,"tag":161,"props":3235,"children":3236},{"style":201},[3237],{"type":47,"value":1213},{"type":42,"tag":50,"props":3239,"children":3240},{},[3241,3243,3248,3250,3255],{"type":47,"value":3242},"See ",{"type":42,"tag":56,"props":3244,"children":3245},{},[3246],{"type":47,"value":3247},"REFERENCE.md",{"type":47,"value":3249}," for the full jq recipe library and a method-by-method bisect map. See ",{"type":42,"tag":56,"props":3251,"children":3252},{},[3253],{"type":47,"value":3254},"EXAMPLES.md",{"type":47,"value":3256}," for end-to-end debug scenarios.",{"type":42,"tag":93,"props":3258,"children":3260},{"id":3259},"best-practices",[3261],{"type":47,"value":3262},"Best practices",{"type":42,"tag":362,"props":3264,"children":3265},{},[3266,3290,3351,3368,3378,3411,3444,3467],{"type":42,"tag":104,"props":3267,"children":3268},{},[3269,3281,3283,3288],{"type":42,"tag":56,"props":3270,"children":3271},{},[3272,3274,3279],{"type":47,"value":3273},"Use ",{"type":42,"tag":76,"props":3275,"children":3277},{"className":3276},[],[3278],{"type":47,"value":710},{"type":47,"value":3280}," on Browserbase",{"type":47,"value":3282},": it enforces ",{"type":42,"tag":76,"props":3284,"children":3286},{"className":3285},[],[3287],{"type":47,"value":740},{"type":47,"value":3289},", fetches the connectUrl, captures the debugger URL, and stamps the manifest. Doing it manually invites mistakes.",{"type":42,"tag":104,"props":3291,"children":3292},{},[3293,3306,3307,3313,3315,3320,3322,3327,3329,3335,3337,3342,3344,3349],{"type":42,"tag":56,"props":3294,"children":3295},{},[3296,3298,3304],{"type":47,"value":3297},"Don't ",{"type":42,"tag":76,"props":3299,"children":3301},{"className":3300},[],[3302],{"type":47,"value":3303},"--release",{"type":47,"value":3305}," a session you don't own",{"type":47,"value":374},{"type":42,"tag":76,"props":3308,"children":3310},{"className":3309},[],[3311],{"type":47,"value":3312},"bb-finalize.mjs --release",{"type":47,"value":3314}," is for sessions ",{"type":42,"tag":1128,"props":3316,"children":3317},{},[3318],{"type":47,"value":3319},"you",{"type":47,"value":3321}," created with ",{"type":42,"tag":76,"props":3323,"children":3325},{"className":3324},[],[3326],{"type":47,"value":1147},{"type":47,"value":3328},". When attaching to a production session via ",{"type":42,"tag":76,"props":3330,"children":3332},{"className":3331},[],[3333],{"type":47,"value":3334},"bb-capture.mjs \u003Csession-id>",{"type":47,"value":3336},", run ",{"type":42,"tag":76,"props":3338,"children":3340},{"className":3339},[],[3341],{"type":47,"value":718},{"type":47,"value":3343}," without ",{"type":42,"tag":76,"props":3345,"children":3347},{"className":3346},[],[3348],{"type":47,"value":3303},{"type":47,"value":3350}," so the original automation keeps running.",{"type":42,"tag":104,"props":3352,"children":3353},{},[3354,3359,3361,3366],{"type":42,"tag":56,"props":3355,"children":3356},{},[3357],{"type":47,"value":3358},"Order matters for remote",{"type":47,"value":3360},": on Browserbase, attach the main automation client before (or together with) the tracer, and create the session with ",{"type":42,"tag":76,"props":3362,"children":3364},{"className":3363},[],[3365],{"type":47,"value":740},{"type":47,"value":3367},". Otherwise the session ends as soon as the tracer's WS closes.",{"type":42,"tag":104,"props":3369,"children":3370},{},[3371,3376],{"type":42,"tag":56,"props":3372,"children":3373},{},[3374],{"type":47,"value":3375},"Don't poll faster than ~1s",{"type":47,"value":3377},": each sample runs browser CLI read commands and screenshots Chrome. 2s is a good default.",{"type":42,"tag":104,"props":3379,"children":3380},{},[3381,3386,3388,3394,3396,3402,3404,3410],{"type":42,"tag":56,"props":3382,"children":3383},{},[3384],{"type":47,"value":3385},"Pick domains deliberately",{"type":47,"value":3387},": defaults (",{"type":42,"tag":76,"props":3389,"children":3391},{"className":3390},[],[3392],{"type":47,"value":3393},"Network Console Runtime Log Page",{"type":47,"value":3395},") cover most debugging. Add ",{"type":42,"tag":76,"props":3397,"children":3399},{"className":3398},[],[3400],{"type":47,"value":3401},"DOM",{"type":47,"value":3403}," for DOM-tree mutations (very noisy) via ",{"type":42,"tag":76,"props":3405,"children":3407},{"className":3406},[],[3408],{"type":47,"value":3409},"O11Y_DOMAINS=\"$O11Y_DOMAINS DOM\"",{"type":47,"value":390},{"type":42,"tag":104,"props":3412,"children":3413},{},[3414,3419,3421,3426,3428,3434,3436,3442],{"type":42,"tag":56,"props":3415,"children":3416},{},[3417],{"type":47,"value":3418},"Reuse one Browserbase session for the automation client on remote",{"type":47,"value":3420}," by attaching to that session's ",{"type":42,"tag":76,"props":3422,"children":3424},{"className":3423},[],[3425],{"type":47,"value":748},{"type":47,"value":3427}," with ",{"type":42,"tag":76,"props":3429,"children":3431},{"className":3430},[],[3432],{"type":47,"value":3433},"browse open ... --cdp \"$CONNECT_URL\" --session \u003Cname>",{"type":47,"value":3435},". The ",{"type":42,"tag":76,"props":3437,"children":3439},{"className":3438},[],[3440],{"type":47,"value":3441},"--session",{"type":47,"value":3443}," flag names the local browse daemon; it is not a Browserbase session attach flag.",{"type":42,"tag":104,"props":3445,"children":3446},{},[3447,3458,3460,3466],{"type":42,"tag":56,"props":3448,"children":3449},{},[3450,3452],{"type":47,"value":3451},"Always run ",{"type":42,"tag":76,"props":3453,"children":3455},{"className":3454},[],[3456],{"type":47,"value":3457},"stop-capture.mjs",{"type":47,"value":3459},", even after a crash, so background processes don't linger and the manifest gets ",{"type":42,"tag":76,"props":3461,"children":3463},{"className":3462},[],[3464],{"type":47,"value":3465},"stopped_at",{"type":47,"value":390},{"type":42,"tag":104,"props":3468,"children":3469},{},[3470,3475,3476,3481,3483,3488],{"type":42,"tag":56,"props":3471,"children":3472},{},[3473],{"type":47,"value":3474},"Bisect once per run",{"type":47,"value":374},{"type":42,"tag":76,"props":3477,"children":3479},{"className":3478},[],[3480],{"type":47,"value":446},{"type":47,"value":3482}," is idempotent — it overwrites the per-bucket files from ",{"type":42,"tag":76,"props":3484,"children":3486},{"className":3485},[],[3487],{"type":47,"value":454},{"type":47,"value":3489}," each time.",{"type":42,"tag":93,"props":3491,"children":3493},{"id":3492},"troubleshooting",[3494],{"type":47,"value":3495},"Troubleshooting",{"type":42,"tag":100,"props":3497,"children":3498},{},[3499,3544,3561,3585,3611,3635,3671],{"type":42,"tag":104,"props":3500,"children":3501},{},[3502,3511,3513,3519,3521,3527,3529,3535,3537,3542],{"type":42,"tag":56,"props":3503,"children":3504},{},[3505],{"type":42,"tag":76,"props":3506,"children":3508},{"className":3507},[],[3509],{"type":47,"value":3510},"browse cdp exited immediately",{"type":47,"value":3512},": usually means the target is unreachable (wrong port) or the Browserbase session has already ended. For remote, verify with ",{"type":42,"tag":76,"props":3514,"children":3516},{"className":3515},[],[3517],{"type":47,"value":3518},"browse cloud sessions get \u003Cid>",{"type":47,"value":3520}," — if ",{"type":42,"tag":76,"props":3522,"children":3524},{"className":3523},[],[3525],{"type":47,"value":3526},"status",{"type":47,"value":3528}," is ",{"type":42,"tag":76,"props":3530,"children":3532},{"className":3531},[],[3533],{"type":47,"value":3534},"COMPLETED",{"type":47,"value":3536},", recreate with ",{"type":42,"tag":76,"props":3538,"children":3540},{"className":3539},[],[3541],{"type":47,"value":740},{"type":47,"value":3543}," and attach automation first.",{"type":42,"tag":104,"props":3545,"children":3546},{},[3547,3559],{"type":42,"tag":56,"props":3548,"children":3549},{},[3550,3552,3557],{"type":47,"value":3551},"Empty ",{"type":42,"tag":76,"props":3553,"children":3555},{"className":3554},[],[3556],{"type":47,"value":454},{"type":47,"value":3558}," even though processes are running",{"type":47,"value":3560},": confirm a CDP client is actually driving the page. The tracer only emits events that the browser generates, so an idle browser produces ~5 lines of attach\u002Fdiscover messages and nothing else.",{"type":42,"tag":104,"props":3562,"children":3563},{},[3564,3569,3571,3577,3578,3583],{"type":42,"tag":56,"props":3565,"children":3566},{},[3567],{"type":47,"value":3568},"Screenshots all look identical",{"type":47,"value":3570},": check ",{"type":42,"tag":76,"props":3572,"children":3574},{"className":3573},[],[3575],{"type":47,"value":3576},"index.jsonl",{"type":47,"value":3520},{"type":42,"tag":76,"props":3579,"children":3581},{"className":3580},[],[3582],{"type":47,"value":1854},{"type":47,"value":3584}," doesn't change, the page hasn't navigated yet. The polling loop runs independently of the main automation's pace.",{"type":42,"tag":104,"props":3586,"children":3587},{},[3588,3593,3595,3601,3603,3609],{"type":42,"tag":56,"props":3589,"children":3590},{},[3591],{"type":47,"value":3592},"Browserbase session ends mid-run",{"type":47,"value":3594},": it likely hit ",{"type":42,"tag":76,"props":3596,"children":3598},{"className":3597},[],[3599],{"type":47,"value":3600},"--timeout",{"type":47,"value":3602},". Recreate with a higher timeout (",{"type":42,"tag":76,"props":3604,"children":3606},{"className":3605},[],[3607],{"type":47,"value":3608},"BB_SESSION_TIMEOUT=1800 node scripts\u002Fbb-capture.mjs --new ...",{"type":47,"value":3610},") or remove the timeout flag.",{"type":42,"tag":104,"props":3612,"children":3613},{},[3614,3625,3627,3633],{"type":42,"tag":56,"props":3615,"children":3616},{},[3617,3623],{"type":42,"tag":76,"props":3618,"children":3620},{"className":3619},[],[3621],{"type":47,"value":3622},"bb-capture.mjs \u003Cid>",{"type":47,"value":3624}," says \"not RUNNING\"",{"type":47,"value":3626},": the session you tried to attach to ended. List candidates with ",{"type":42,"tag":76,"props":3628,"children":3630},{"className":3629},[],[3631],{"type":47,"value":3632},"browse cloud sessions list | jq '.[] | select(.status == \"RUNNING\")'",{"type":47,"value":3634}," and try again.",{"type":42,"tag":104,"props":3636,"children":3637},{},[3638,3655,3657,3662,3664,3669],{"type":42,"tag":56,"props":3639,"children":3640},{},[3641,3647,3649],{"type":42,"tag":76,"props":3642,"children":3644},{"className":3643},[],[3645],{"type":47,"value":3646},"browserbase\u002Flogs.json",{"type":47,"value":3648}," is empty ",{"type":42,"tag":76,"props":3650,"children":3652},{"className":3651},[],[3653],{"type":47,"value":3654},"[]",{"type":47,"value":3656},": expected — ",{"type":42,"tag":76,"props":3658,"children":3660},{"className":3659},[],[3661],{"type":47,"value":1393},{"type":47,"value":3663}," is sparse in practice. The CDP firehose in ",{"type":42,"tag":76,"props":3665,"children":3667},{"className":3666},[],[3668],{"type":47,"value":388},{"type":47,"value":3670}," is the source of truth.",{"type":42,"tag":104,"props":3672,"children":3673},{},[3674,3679,3681,3686,3688,3693],{"type":42,"tag":56,"props":3675,"children":3676},{},[3677],{"type":47,"value":3678},"Where's the session recording (rrweb)?",{"type":47,"value":3680},": session replay artifact fetching is deprecated; this skill doesn't fetch it. Use the screenshot stream in ",{"type":42,"tag":76,"props":3682,"children":3684},{"className":3683},[],[3685],{"type":47,"value":1438},{"type":47,"value":3687}," and DOM dumps in ",{"type":42,"tag":76,"props":3689,"children":3691},{"className":3690},[],[3692],{"type":47,"value":1445},{"type":47,"value":390},{"type":42,"tag":50,"props":3695,"children":3696},{},[3697,3699,3704,3706,3710],{"type":47,"value":3698},"For full reference, see ",{"type":42,"tag":3700,"props":3701,"children":3702},"a",{"href":3247},[3703],{"type":47,"value":3247},{"type":47,"value":3705},".\nFor example debug runs, see ",{"type":42,"tag":3700,"props":3707,"children":3708},{"href":3254},[3709],{"type":47,"value":3254},{"type":47,"value":390},{"type":42,"tag":3712,"props":3713,"children":3714},"style",{},[3715],{"type":47,"value":3716},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3718,"total":679},[3719,3742,3755,3766,3784,3791,3809],{"slug":3720,"name":3720,"fn":3721,"description":3722,"org":3723,"tags":3724,"stars":23,"repoUrl":24,"updatedAt":3741},"agent-experience","audit developer experience with AI agents","Audit the developer experience of a product, SDK, docs site, or SKILL.md by dropping multiple Claude subagents at it with only a tiny task prompt and real tools (WebFetch, Bash, Write). Agents must discover the docs themselves, install deps, ask for credentials if needed, and attempt real execution. The skill captures each agent's trace — tool calls, retries, wall time, errors — and scores on Setup Friction, Speed, Efficiency, Error Recovery, and Doc Quality, then emits an HTML report with an A–F grade and concrete fixes. Use when the user asks to audit agent experience, test a skill, audit docs for agents, check if a SDK is agent-friendly, validate a SKILL.md, measure agent DX, or benchmark how painful onboarding is for an AI agent. Triggers: 'audit agent experience', 'test this skill', 'audit docs for agents', 'is my SDK agent-friendly', 'run a DX audit', 'agent experience test', 'test my docs', 'how do agents do with my product'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3725,3728,3731,3732,3735,3738],{"name":3726,"slug":3727,"type":15},"Agents","agents",{"name":3729,"slug":3730,"type":15},"Audit","audit",{"name":9,"slug":8,"type":15},{"name":3733,"slug":3734,"type":15},"Engineering","engineering",{"name":3736,"slug":3737,"type":15},"Multi-Agent","multi-agent",{"name":3739,"slug":3740,"type":15},"QA","qa","2026-05-29T06:58:56.259807",{"slug":3743,"name":3743,"fn":3744,"description":3745,"org":3746,"tags":3747,"stars":23,"repoUrl":24,"updatedAt":3754},"autobrowse","run self-improving browser automation","Self-improving browser automation via the auto-research loop. Iteratively runs a browsing task, reads the trace, and improves the navigation skill (strategy.md) until it reliably passes. Supports parallel runs across multiple tasks using sub-agents. Use when you want to build or improve browser automation skills for specific website tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3748,3749,3752,3753],{"name":3726,"slug":3727,"type":15},{"name":3750,"slug":3751,"type":15},"Automation","automation",{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},"2026-04-23T05:00:30.528336",{"slug":81,"name":81,"fn":3756,"description":3757,"org":3758,"tags":3759,"stars":23,"repoUrl":24,"updatedAt":3765},"automate browser interactions via CLI","Automate web browser interactions using natural language via CLI commands. Use when the user asks to browse websites, navigate web pages, extract data from websites, take screenshots, fill forms, click buttons, or interact with web applications. Supports remote Browserbase sessions with Browserbase Identity, Verified browsers, automatic CAPTCHA solving, and residential proxies — ideal for protected websites and JavaScript-heavy pages.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3760,3761,3762],{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":3763,"slug":3764,"type":15},"CLI","cli","2026-04-06T18:06:22.005051",{"slug":3767,"name":3767,"fn":3768,"description":3769,"org":3770,"tags":3771,"stars":23,"repoUrl":24,"updatedAt":3783},"browser-to-api","generate OpenAPI specs from browser traffic","Turn a website's observable HTTP traffic into a best-effort OpenAPI 3.1 spec by analyzing a `browser-trace` capture. Use when the user wants to discover\u002Fextract API endpoints from a browser session, build an OpenAPI doc from network traffic, or document a third-party site's XHR\u002Ffetch surface for client integration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3772,3775,3776,3777,3780],{"name":3773,"slug":3774,"type":15},"API Development","api-development",{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":3778,"slug":3779,"type":15},"HTTP","http",{"name":3781,"slug":3782,"type":15},"OpenAPI","openapi","2026-05-14T06:07:27.298495",{"slug":4,"name":4,"fn":5,"description":6,"org":3785,"tags":3786,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3787,3788,3789,3790],{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":13,"slug":14,"type":15},{"slug":3792,"name":3792,"fn":3793,"description":3794,"org":3795,"tags":3796,"stars":23,"repoUrl":24,"updatedAt":3808},"browser-use-to-stagehand","migrate browser-use scripts to Stagehand","Migrate browser-use (Python) browser-automation scripts to Stagehand v3 (TypeScript) on Browserbase. Use when the user wants to convert, port, rewrite, or migrate a browser-use Agent script to Stagehand, map browser-use features\u002FAPIs to Stagehand primitives (act\u002Fextract\u002Fobserve\u002Fagent), or move agentic browser automation onto Browserbase with more determinism. Triggers on \"browser-use\", \"browser_use\", or \"Agent(task=...)\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3797,3798,3799,3802,3805],{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":3800,"slug":3801,"type":15},"Migration","migration",{"name":3803,"slug":3804,"type":15},"Python","python",{"name":3806,"slug":3807,"type":15},"TypeScript","typescript","2026-06-26T07:57:47.428249",{"slug":3810,"name":3810,"fn":3811,"description":3812,"org":3813,"tags":3814,"stars":23,"repoUrl":24,"updatedAt":3828},"company-research","conduct deep company and product research","Company discovery and deep research skill. Researches a company's product and ICP,\ndiscovers target companies to sell to using Browserbase Search API, deeply researches\neach using a Plan→Research→Synthesize pattern, and scores ICP fit — compiled into\na scored research report and CSV. Supports depth modes (quick\u002Fdeep\u002Fdeeper) for\nbalancing scale vs intelligence.\nUse when the user wants to: (1) find companies to sell to, (2) research potential\ncustomers, (3) discover companies matching an ICP, (4) build a target company list,\n(5) do market research on prospects. Triggers: \"find companies to sell to\",\n\"company research\", \"find prospects\", \"ICP research\", \"target companies\",\n\"who should we sell to\", \"market research\", \"lead research\", \"prospect list\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3815,3816,3819,3822,3825],{"name":9,"slug":8,"type":15},{"name":3817,"slug":3818,"type":15},"Competitive Intelligence","competitive-intelligence",{"name":3820,"slug":3821,"type":15},"Marketing","marketing",{"name":3823,"slug":3824,"type":15},"Research","research",{"name":3826,"slug":3827,"type":15},"Sales","sales","2026-04-27T05:34:56.172569",{"items":3830,"total":1085},[3831,3842,3851,3858,3864,3872,3879,3887,3895,3909,3921,3934],{"slug":89,"name":89,"fn":3832,"description":3833,"org":3834,"tags":3835,"stars":3839,"repoUrl":3840,"updatedAt":3841},"run Browserbase browser automation","Use the browse CLI for Browserbase browser automation, Browserbase cloud APIs, Browserbase Functions, templates, web fetch\u002Fsearch, diagnostics, and Browse.sh skill discovery\u002Finstallation. Use when the user asks to navigate pages, inspect browser state, run local or remote browser sessions, manage Browserbase resources, call Browserbase Functions, browse or scaffold Browserbase templates, fetch or search web content, diagnose browse setup, find or install a skill for a website task, discover site-specific Browse.sh skills, or install\u002Frefresh this browse skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3836,3837,3838],{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":3763,"slug":3764,"type":15},23676,"https:\u002F\u002Fgithub.com\u002Fbrowserbase\u002Fstagehand","2026-06-06T07:11:24.95733",{"slug":3720,"name":3720,"fn":3721,"description":3722,"org":3843,"tags":3844,"stars":23,"repoUrl":24,"updatedAt":3741},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3845,3846,3847,3848,3849,3850],{"name":3726,"slug":3727,"type":15},{"name":3729,"slug":3730,"type":15},{"name":9,"slug":8,"type":15},{"name":3733,"slug":3734,"type":15},{"name":3736,"slug":3737,"type":15},{"name":3739,"slug":3740,"type":15},{"slug":3743,"name":3743,"fn":3744,"description":3745,"org":3852,"tags":3853,"stars":23,"repoUrl":24,"updatedAt":3754},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3854,3855,3856,3857],{"name":3726,"slug":3727,"type":15},{"name":3750,"slug":3751,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"slug":81,"name":81,"fn":3756,"description":3757,"org":3859,"tags":3860,"stars":23,"repoUrl":24,"updatedAt":3765},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3861,3862,3863],{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":3763,"slug":3764,"type":15},{"slug":3767,"name":3767,"fn":3768,"description":3769,"org":3865,"tags":3866,"stars":23,"repoUrl":24,"updatedAt":3783},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3867,3868,3869,3870,3871],{"name":3773,"slug":3774,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":3778,"slug":3779,"type":15},{"name":3781,"slug":3782,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":3873,"tags":3874,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3875,3876,3877,3878],{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":13,"slug":14,"type":15},{"slug":3792,"name":3792,"fn":3793,"description":3794,"org":3880,"tags":3881,"stars":23,"repoUrl":24,"updatedAt":3808},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3882,3883,3884,3885,3886],{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":3800,"slug":3801,"type":15},{"name":3803,"slug":3804,"type":15},{"name":3806,"slug":3807,"type":15},{"slug":3810,"name":3810,"fn":3811,"description":3812,"org":3888,"tags":3889,"stars":23,"repoUrl":24,"updatedAt":3828},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3890,3891,3892,3893,3894],{"name":9,"slug":8,"type":15},{"name":3817,"slug":3818,"type":15},{"name":3820,"slug":3821,"type":15},{"name":3823,"slug":3824,"type":15},{"name":3826,"slug":3827,"type":15},{"slug":3896,"name":3896,"fn":3897,"description":3898,"org":3899,"tags":3900,"stars":23,"repoUrl":24,"updatedAt":3908},"competitor-analysis","analyze competitors across features and pricing","Competitor research and intelligence skill. Takes a user's company (with optional\nseed competitor URLs), auto-discovers additional competitors via Browserbase Search API,\ndeeply researches each using a 4-lane pattern (marketing surface, external signal,\npublic benchmarks, strategic diff vs the user's company), and compiles the results\ninto an HTML report with four views: overview, per-competitor deep dive, side-by-side\nfeature\u002Fpricing matrix, and a chronological mentions feed (news, reviews,\nsocial, comparison pages, and public benchmarks).\nUse when the user wants to: (1) analyze competitors, (2) build a competitive matrix,\n(3) extract competitor pricing \u002F features, (4) find comparison pages and online\nmentions of competitors, (5) surface public benchmarks. Triggers: \"competitor analysis\",\n\"analyze competitors\", \"competitive intel\", \"competitor research\", \"competitor pricing\",\n\"feature comparison\", \"price comparison\", \"find comparisons\", \"who's comparing us\",\n\"competitor mentions\", \"competitor benchmarks\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3901,3902,3903,3904,3905],{"name":9,"slug":8,"type":15},{"name":3817,"slug":3818,"type":15},{"name":3820,"slug":3821,"type":15},{"name":3823,"slug":3824,"type":15},{"name":3906,"slug":3907,"type":15},"Strategy","strategy","2026-06-19T09:41:33.392499",{"slug":3910,"name":3910,"fn":3911,"description":3912,"org":3913,"tags":3914,"stars":23,"repoUrl":24,"updatedAt":3920},"cookie-sync","sync Chrome cookies to a Browserbase context","Sync cookies from local Chrome to a Browserbase persistent context so the browse CLI can access authenticated sites. Use when the user wants to browse as themselves, sync cookies, or log into sites via Browserbase.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3915,3918,3919],{"name":3916,"slug":3917,"type":15},"Auth","auth",{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:06:23.3251",{"slug":3922,"name":3922,"fn":3923,"description":3924,"org":3925,"tags":3926,"stars":23,"repoUrl":24,"updatedAt":3933},"event-prospecting","research event speakers for sales prospecting","Event prospecting skill. Takes a conference \u002F event speakers URL,\nextracts the people, filters their companies against the user's\nICP, then deep-researches only the speakers at ICP-fit companies.\nOutputs a person-first HTML report where each card answers \"why\nshould the AE talk to this person?\" with all public links and a\none-click DM opener.\nUse when the user wants to: (1) find leads at a specific\nconference, (2) prep for an event, (3) research event speakers,\n(4) build a target list from a sponsor\u002Fexhibitor page,\n(5) scrape conference speakers and rank by ICP fit.\nTriggers: \"find leads at {event}\", \"research speakers at\",\n\"prospect this conference\", \"stripe sessions leads\",\n\"ai engineer summit prospects\", \"event prospecting\",\n\"scrape conference speakers\", \"who should I meet at\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3927,3928,3931,3932],{"name":9,"slug":8,"type":15},{"name":3929,"slug":3930,"type":15},"Prospecting","prospecting",{"name":3823,"slug":3824,"type":15},{"name":3826,"slug":3827,"type":15},"2026-04-28T05:41:31.770467",{"slug":3935,"name":3935,"fn":3936,"description":3937,"org":3938,"tags":3939,"stars":23,"repoUrl":24,"updatedAt":3944},"fetch","fetch URLs without a browser session","Use this skill when the user wants to retrieve a URL without a full browser session: fetch HTML or JSON from static pages, inspect status codes or headers, follow redirects, or get page source for simple scraping. Prefer it over a browser when JavaScript rendering and page interaction are not needed. Supports proxies and redirect control.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3940,3941],{"name":3778,"slug":3779,"type":15},{"name":3942,"slug":3943,"type":15},"Web Scraping","web-scraping","2026-04-06T18:06:19.462477"]