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.

Core Concepts

Snapshots

Snapshot modes, counter semantics, and best practices.

Pipeline

Snapshots follow a four-stage pipeline:

  1. Mark elements in the live DOM.
  2. Serialize the HTML.
  3. Clean with a mode-specific cleaner.
  4. Assign counters.

Modes

ModeUseIncludes
actionBefore click/input/select/scrollInteractive elements with counters
extractionBefore extractData-bearing elements with counters
clickableIdentify clickable targetsOnly clickable elements
scrollableIdentify scrollable regionsOnly scrollable containers
fullComplete page structureAll elements
await opensteer.snapshot({ mode: 'action' })
await opensteer.snapshot({ mode: 'extraction' })

Counter semantics

Counter values (c) follow these rules:

  • Assigned fresh on every snapshot() call.
  • Snapshot HTML and live DOM share the same c values.
  • Action lookup: strict unique match. No match returns not found; multiple matches return ambiguous.
  • Extraction lookup: tolerant. No match returns null; multiple matches fail as ambiguous.
  • Boundary wrappers (os-iframe-root, os-shadow-root) may be unnumbered.
  • Inaccessible iframes and closed shadow roots are not counter-addressable.

Best practices

  • Re-snapshot before counter-based actions after page navigation or significant DOM changes.
  • Use action mode before interactions, extraction mode before data extraction.
  • The full mode returns the largest payload. Use it only when you need complete page structure.