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.

CLI

CLI Command Reference

Complete command and flag reference for OpenSteer CLI.

Commands

  • open <url>
  • navigate <url>
  • back
  • forward
  • reload
  • close
  • close --all
  • sessions
  • status

Observation

  • snapshot [--mode action|extraction|clickable|scrollable|full]
  • state
  • cursor [on|off|status]
  • screenshot [file]

Actions

  • click [element]
  • dblclick [element]
  • rightclick [element]
  • hover [element]
  • input [element] <text>
  • select [element]
  • scroll [element]

Keyboard

  • press <key>
  • type <text>

Element Info

  • get-text [element]
  • get-value [element]
  • get-attrs [element]
  • get-html [selector]

Tabs

  • tabs
  • tab-new [url]
  • tab-switch <index>
  • tab-close [index]

Cookies

  • cookies [--url <url>]
  • cookie-set --name <name> --value <value> [--url ...]
  • cookies-clear
  • cookies-export <file>
  • cookies-import <file>

Utility

  • eval <expression>
  • wait-for <text>
  • wait-selector <selector>
  • extract <schema-json>

API Reverse Engineering

  • api capture start
  • api capture stop
  • api capture status
  • api span list
  • api span start --label <label>
  • api span stop
  • api request list [--span <@span1>] [--kind candidates|all] [--limit <n>]
  • api request inspect <@request1> [--body summary|full] [--raw true|false]
  • api slot list [--request <@request1>] [--span <@span1>]
  • api slot inspect <@slot1>
  • api evidence inspect <@slot1|@evidence1>
  • api value trace <literal|@value1> [--span <@span1>]
  • api probe run --span <@span1> --values <json-array|csv>
  • api plan infer --task <task> [--span <@span1>] [--request <@request1>]
  • api plan inspect <@plan1>
  • api plan validate <@plan1> [--dry-run] [--inputs <json>]
  • api plan codegen <@plan1> --lang <ts|py>
  • api plan render <@plan1> --format <ir|exec|curl-trace>
  • api plan export <@plan1> --format <ir|exec|curl-trace>

Capture is session-scoped. Once api capture start is active, mutating browser commands automatically create action spans tied to the request burst they trigger. Use api span start/stop only when you need to bracket work that did not happen through a normal Opensteer action.

For reliable agent use, the recommended workflow is:

  • api request list --kind candidates
  • api request inspect <@request>
  • api slot list --request <@request>
  • api evidence inspect <@slot>
  • api plan infer --task ... --request <@request>
  • api plan validate <@plan> --inputs '{"term":"Ada"}'
  • api plan render <@plan> --format curl-trace

schema-json describes the output shape, not just selector bindings. Use semantic placeholders like "string" with --description and --prompt, or explicit bindings like { "element": 3 } and { "attribute": "href" } when you want deterministic field mappings.

opensteer extract '{"images":[{"imageUrl":"string","alt":"string","caption":"string","credit":"string"}]}' \
  --description "article images with captions and credits" \
  --prompt "For each image, return the image URL, alt text, caption, and credit. Prefer caption and credit from the same figure. If missing, look at sibling text, then parent/container text, then nearby alt/data-* attributes."

Skills

  • skills install [options]
  • skills add [options] (alias for skills install)

Supported options:

  • -a, --agent <agents...>
  • -g, --global
  • -y, --yes
  • --copy
  • --all

Profiles

  • profile list [--json] [--limit <n>] [--status active|archived|error]
  • profile create --name <name> [--json]
  • profile sync --from-profile-dir <dir> [--to-profile-id <id> | --name <name>] [--domain <domain> ... | --all-domains] [--dry-run] [--yes] [--json]

Use profile list to inspect available cloud browser profiles, profile create to provision a new reusable profile, and profile sync to upload cookies and other browser state from a local profile directory into a cloud profile before launch.

Auth

  • auth login
  • auth status
  • auth logout
  • login (alias for auth login)
  • logout (alias for auth logout)

opensteer auth login opens your default browser when possible. Use opensteer auth login --no-browser when you need to copy the printed device URL into another browser manually. opensteer auth login --json keeps prompts on stderr and writes the final JSON payload to stdout.

Saved machine logins remain scoped per resolved cloud API host (baseUrl). The CLI remembers the last selected cloud host, so opensteer auth status, opensteer auth logout, and other cloud commands reuse it by default unless --base-url or env vars select a different host.

Global Flags

  • --session <id>
  • --name <namespace>
  • --headless
  • --browser <chromium|real>
  • --profile <name>
  • --headed
  • --cdp-url <url>
  • --user-data-dir <path>
  • --browser-path <path>
  • --cloud-profile-id <id>
  • --cloud-profile-reuse-if-active <true|false>
  • --api-key <key>
  • --access-token <token>
  • --cursor <true|false>
  • --element <N>
  • --selector <css>
  • --description <text>

Environment Variables

  • OPENSTEER_SESSION: logical session id (scoped by canonical cwd)
  • OPENSTEER_CLIENT_ID: stable identity for default session binding
  • OPENSTEER_NAME: default selector namespace for open
  • OPENSTEER_CURSOR: cursor default for SDK and CLI daemon preference bootstrap
  • OPENSTEER_MODE: local (default) or cloud
  • OPENSTEER_API_KEY: cloud API key credential (best for CI/headless)
  • OPENSTEER_ACCESS_TOKEN: cloud bearer token credential (from opensteer auth login)
  • OPENSTEER_BASE_URL: cloud control-plane base URL
  • OPENSTEER_AUTH_SCHEME: api-key (default) or bearer
  • OPENSTEER_REMOTE_ANNOUNCE: always (default), off, or tty
  • OPENSTEER_CLOUD_PROFILE_ID: default cloud browser profile id
  • OPENSTEER_CLOUD_PROFILE_REUSE_IF_ACTIVE: optional true/false profile session reuse

Cursor defaults:

  • CLI sessions are enabled by default unless overridden by --cursor or OPENSTEER_CURSOR.
  • SDK instances default to disabled unless configured via cursor.enabled.

Credential precedence for cloud commands:

  1. explicit flags (--api-key / --access-token)
  2. environment (OPENSTEER_API_KEY / OPENSTEER_ACCESS_TOKEN)
  3. saved machine login for the resolved host (opensteer auth login)

All commands output JSON. Set session once per shell:

export OPENSTEER_SESSION=my-session
## Or for non-interactive runners:
export OPENSTEER_CLIENT_ID=agent-1

Global flags: --session <id>, --name <namespace>, --headless, --description <text>.

opensteer open <url>                                # Open browser, navigate to URL
opensteer open <url> --name "my-scraper"            # Set selector cache namespace
opensteer open <url> --headless                     # Headless mode
opensteer open --cdp-url http://localhost:9222        # Connect to running browser via CDP
opensteer open <url> --browser real                   # Use real Chrome profile (headless)
opensteer open <url> --browser real --headed           # Real Chrome, visible window
opensteer open <url> --browser real --profile "Work"   # Specific Chrome profile
opensteer navigate <url>                            # Navigate with visual stability wait
opensteer navigate <url> --timeout 60000            # Custom timeout (default 30s)
opensteer back                                      # Go back in history
opensteer forward                                   # Go forward in history
opensteer reload                                    # Reload page
opensteer close                                     # Close browser and stop server
opensteer close --all                               # Close all active sessions
opensteer sessions                                  # List active sessions
opensteer status                                    # Show resolved session/name state

open performs a basic navigation (no stability wait). navigate includes waitForVisualStability. Use open once to start, then navigate for subsequent pages.

Observation

opensteer snapshot action           # Same as above (explicit)
opensteer snapshot extraction       # Flattened HTML for data scraping
opensteer snapshot clickable        # Only clickable elements
opensteer snapshot scrollable       # Only scrollable containers
opensteer snapshot full             # Minimal cleaning, full HTML
opensteer state                     # URL + title + cleaned HTML
opensteer screenshot                # Save screenshot to screenshot.png
opensteer screenshot output.png     # Save to specific file
opensteer screenshot --fullPage     # Full page screenshot

Actions

First positional argument is element counter (c="N" from snapshot).

opensteer click 5                                   # Click by counter
opensteer click --description "the submit button"   # By cached description
opensteer click 5 --button right                    # Right-click
opensteer click 5 --clickCount 2                    # Double-click
opensteer hover 4                                   # Hover over element
opensteer hover --description "the user menu"       # Hover by description

Input

opensteer input 3 "Hello"                           # Type into element (clears first)
opensteer input 3 "Hello" --clear false             # Append text
opensteer input 3 "query" --pressEnter              # Type and press Enter
opensteer input --description "the search input" --text "query" --pressEnter

Select / Scroll

opensteer select 9 --label "Option A"              # Select by visible label
opensteer select 9 --value "opt-a"                  # Select by value attribute
opensteer select 9 --index 2                        # Select by index
opensteer scroll                                    # Scroll page down (default)
opensteer scroll --direction up                     # Scroll up
opensteer scroll --direction down --amount 1000
opensteer scroll 12                                 # Scroll within container element

Keyboard

opensteer press Enter
opensteer press Tab
opensteer press Escape
opensteer press "Control+a"
opensteer type "Hello World"                        # Type into focused element

Element Info

opensteer get-text 5                                # Get element text content
opensteer get-text --description "the heading"
opensteer get-value 3                               # Get input/textarea value
opensteer get-attrs 5                               # Get all HTML attributes
opensteer get-html                                  # Full page HTML
opensteer get-html "main"                           # HTML of element matching selector

Tabs

opensteer tabs                                      # List open tabs with indices
opensteer tab-new                                   # Open new blank tab
opensteer tab-new https://example.com               # Open URL in new tab
opensteer tab-switch 0                              # Switch to tab by index
opensteer tab-close                                 # Close current tab
opensteer tab-close 2                               # Close specific tab

Cookies

opensteer cookies                                   # Get all cookies
opensteer cookies --url https://example.com         # Cookies for specific URL
opensteer cookie-set --name token --value abc123
opensteer cookies-clear                             # Clear all cookies
opensteer cookies-export /tmp/cookies.json          # Export to file
opensteer cookies-import /tmp/cookies.json          # Import from file

Utility

opensteer eval "document.title"                     # Execute JS in page
opensteer wait-for "Success"                        # Wait for text to appear
opensteer wait-for "Success" --timeout 5000
opensteer wait-selector "h1"                        # Wait for selector to appear

API Reverse Engineering

opensteer api capture start
opensteer api capture stop
opensteer api capture status
opensteer api span list
opensteer api span start --label "manual network burst"
opensteer api span stop
opensteer api request list --kind candidates
opensteer api request inspect @request1
opensteer api slot list --request @request1
opensteer api evidence inspect @slot1
opensteer api value trace @value1
opensteer api probe run --span @span1 --values '["Ada","Grace"]'
opensteer api plan infer --task "download latest invoice" --request @request1
opensteer api plan inspect @plan1
opensteer api plan validate @plan1 --inputs '{"term":"Ada"}'
opensteer api plan codegen @plan1 --lang ts
opensteer api plan render @plan1 --format curl-trace

When capture is active, mutating Opensteer commands automatically create action spans. Agents should start from api request list --kind candidates, inspect a few top candidates, inspect slots and evidence before inferring a plan, and only use --raw true on api request inspect when summaries are insufficient.

Data Extraction

Counter-based (preferred)

opensteer snapshot extraction
## `schema-json` describes the output shape. It can use explicit bindings or semantic placeholders.

## Explicit field bindings from observed counters/attributes:
opensteer extract '{"title":{"element":3},"price":{"element":7}}'
opensteer extract '{"url":{"element":5,"attribute":"href"}}'
opensteer extract '{"pageUrl":{"source":"current_url"},"title":{"element":3}}'

## Explicit array bindings: include multiple items to identify the repeating pattern
opensteer extract '{"results":[{"title":{"element":11},"url":{"element":10,"attribute":"href"}},{"title":{"element":16},"url":{"element":15,"attribute":"href"}}]}'

## Semantic extraction: use the output shape plus description/prompt
opensteer extract '{"title":"string","price":"string"}' --description "product details"
opensteer extract '{"images":[{"imageUrl":"string","alt":"string","caption":"string","credit":"string"}]}' \
  --description "article images with captions and credits" \
  --prompt "For each image, return the image URL, alt text, caption, and credit. Prefer caption and credit from the same figure. If missing, look at sibling text, then parent/container text, then nearby alt/data-* attributes."

Use explicit bindings when you need deterministic element-to-field mappings. Use semantic extraction when the fields require relationship inference or fallback rules. --prompt is the place to describe those rules.

Covered Features

  • cli:back
  • cli:click
  • cli:close
  • cli:cookie-set
  • cli:cookies
  • cli:cookies-clear
  • cli:cookies-export
  • cli:cookies-import
  • cli:cursor
  • cli:dblclick
  • cli:eval
  • cli:extract
  • cli:forward
  • cli:get-attrs
  • cli:get-html
  • cli:get-text
  • cli:get-value
  • cli:hover
  • cli:input
  • cli:navigate
  • cli:open
  • cli:press
  • cli:reload
  • cli:rightclick
  • cli:screenshot
  • cli:scroll
  • cli:select
  • cli:sessions
  • cli:snapshot
  • cli:state
  • cli:status
  • cli:tab-close
  • cli:tab-new
  • cli:tab-switch
  • cli:tabs
  • cli:type
  • cli:wait-for
  • cli:wait-selector