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:
captureurlhostnamepathmethodstatustypejsonbeforeafterlimit
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:
autodirectmatched-tlscontextpage
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.
