Agent Runtime
Status: Connected
Parsing documentation...
Extracted api references
Generating type definitions...
opensteeropensteer
Y Combinator logoBacked by Y Combinator.

The most comprehensive browser automation framework for AI

Enterprise-grade automation at scale.

Custom plans, unlimited concurrent sessions, dedicated proxies, and advanced support for teams that need more.

+ self-service sso
+ unlimited concurrent sessions
+ custom audit logs
+ advanced captcha bypass
+ dedicated support
view pricing

Simple, transparent pricing.

Start for free, upgrade when you need to scale. Everything you need to build robust AI agents.

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

TransportDescription
direct-httpPure HTTP request. No browser needed.
context-httpUses browser session cookies/state.
session-httpRequest tied to a live browser session.
page-httpExecutes inside live page JavaScript.
matched-tlsTLS-fingerprint-matched HTTP request.

Request Plan Lifecycle

  1. Navigate with captureNetwork: "load" to record traffic
  2. Query captured records to find the target API call
  3. Infer a request plan from the captured record
  4. Validate and test the plan
  5. 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" });