/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.