Automation
Network Capture & Request Plans
Capture network traffic, infer request plans, and replay API calls
Capture Network Traffic
Enable network capture on navigation:
await os.goto({ url: "https://example.com/search?q=laptop", captureNetwork: "load" });
npx opensteer goto https://example.com/search?q=laptop --workspace demo --capture-network load
Query Captured Requests
const records = await os.queryNetwork({ capture: "load", includeBodies: true });
// records.records: NetworkRecord[]
// Each record has: recordId, url, method, status, headers, body, timing
npx opensteer network query --workspace demo --capture load
Tag and Filter
await os.tagNetwork({ recordId: "rec-123", tags: ["api", "search"] });
const filtered = await os.queryNetwork({ capture: "load", tag: "api" });
Request Plans
A request plan is a reusable API request template extracted from captured traffic.
Infer a plan from a captured request:
await os.inferRequestPlan({
recordId: "rec-123",
key: "api.search",
version: "v1",
});
npx opensteer request-plan infer --workspace demo --record-id rec-123 --key api.search --version v1
Execute a request plan:
const result = await os.request("api.search", {
query: { q: "laptops" },
});
// result.body contains the API response
npx opensteer request execute --workspace demo --key api.search --input-json '{"query":{"q":"laptops"}}'
Transports
| Transport | Description |
|---|---|
direct-http | Pure HTTP request. No browser needed. |
context-http | Uses browser session cookies/state. |
session-http | Request tied to a live browser session. |
page-http | Executes inside live page JavaScript. |
matched-tls | TLS-fingerprint-matched HTTP request. |
Request Plan Lifecycle
- Navigate with
captureNetwork: "load"to record traffic - Query captured records to find the target API call
- Infer a request plan from the captured record
- Validate and test the plan
- Execute the plan with parameters
Recipes
Recipes are deterministic multi-step workflows.
await os.writeRecipe({ key: "setup", version: "v1", payload: {
steps: [
{ kind: "goto", url: "https://example.com/login" },
{ kind: "evaluate", expression: "document.title" },
{ kind: "waitForNetwork", urlPattern: "**/api/auth" },
],
}});
await os.runRecipe({ key: "setup" });
Recipe step types: goto, directRequest, sessionRequest, request, readCookie, readStorage, evaluate, waitForNetwork, waitForCookie, solveCaptcha, hook.
Auth Recipes
Auth recipes handle authentication flows:
await os.writeAuthRecipe({ key: "login", version: "v1", payload: {
steps: [
{ kind: "goto", url: "https://example.com/login" },
{ kind: "sessionRequest", method: "POST", url: "/api/auth", body: { user: "test" } },
{ kind: "readCookie", name: "session_token" },
],
}});
await os.runAuthRecipe({ key: "login" });
