/docs/computer-use/browser

Browser sessions

Trace Playwright or Puppeteer-style browser agents by wrapping actions in obsrv steps and attaching screenshots.

Playwright pattern

import { chromium } from "playwright";
import { TraceClient } from "@theta-lab/obsrv";

const client = new TraceClient();
const browser = await chromium.launch();
const page = await browser.newPage();

await client.trace({ name: "checkout-flow", runType: "browser" }, async (t) => {
  await t.step({ name: "open_homepage", type: "tool" }, async (s) => {
    await page.goto("https://example.com");
    s.logToolCall({ name: "page.goto", arguments: { url: "https://example.com" } });
    await s.attachImage(await page.screenshot());
  });

  await t.step({ name: "submit_checkout", type: "tool" }, async (s) => {
    await page.click("#checkout");
    s.logToolCall({ name: "page.click", arguments: { selector: "#checkout" } });
    await s.attachImage(await page.screenshot());
  });
});

await client.shutdown();

What you get

  • One trace per browser flow.
  • One step per meaningful action.
  • Tool-call arguments and results for selectors, URLs, and returned values.
  • Screenshots as regular step attachments in the trace detail view.