Automation

Network

Capture real browser traffic, inspect saved requests, probe a record, and write final code with `fetch()`.

Network

OpenSteer is strong at network discovery. Use the browser to generate real traffic, inspect the saved records, probe the interesting ones, then ship final code with fetch().

Capture traffic

Capture while navigating:

await opensteer.goto("https://example.com/search?q=laptop", {
  captureNetwork: "search",
});

Capture while acting:

await opensteer.click({
  persist: "search button",
  captureNetwork: "search",
});

CLI:

opensteer goto https://example.com/search?q=laptop --workspace demo --capture-network search
opensteer click 7 --workspace demo --capture-network search

Query saved records

SDK:

const records = await opensteer.network.query({
  capture: "search",
  json: true,
  limit: 20,
});

CLI:

opensteer network query --workspace demo --capture search --json
opensteer network query --workspace demo --hostname api.example.com --method POST

Useful filters include:

  • capture
  • url
  • hostname
  • path
  • method
  • status
  • type
  • json
  • before
  • after
  • limit

Inspect one record

SDK:

const detail = await opensteer.network.detail("rec_123");
console.log(detail.summary.url);

CLI:

opensteer network detail rec_123 --workspace demo

network detail is where you inspect request headers, response headers, body previews, cookies sent, redirect chains, and GraphQL metadata.

Probe one record

SDK:

const detail = await opensteer.network.detail("rec_123", {
  probe: true,
});

console.log(detail.summary.url);
console.log(detail.transportProbe?.recommended);

CLI:

opensteer network detail rec_123 --workspace demo --probe

Transport probing is useful during discovery because it tells you which runtime transport is most likely to work before you codify the request with fetch().

Final code usually uses fetch()

Once you know the request you want, production code is often just:

const response = await opensteer.fetch("https://api.example.com/search", {
  method: "GET",
  query: {
    keyword: "laptop",
    count: 24,
  },
  cookies: true,
  followRedirects: true,
});

const json = await response.json();

Available transports are:

  • auto
  • direct
  • matched-tls
  • context
  • page

auto is the normal default.

Public API

The public network API is:

  • opensteer.network.query(...)
  • opensteer.network.detail(recordId, { probe })
  • opensteer.fetch(...)

waitForNetwork() and waitForResponse() are not part of Opensteer.

Where records are stored

Saved records live in:

.opensteer/workspaces/<workspace>/registry/saved-network.sqlite

That store requires a Node runtime with built-in node:sqlite support.

In managed cloud mode, raw discovery traffic stays in runtime-local scratch storage instead of being durably copied into Convex. In local-cloud development, the runtime uses the same local workspace root, so the saved-network SQLite file still backs network query and network detail.