CLI
CLI Command Reference
Complete command and flag reference for OpenSteer CLI.
Commands
Navigation
open <url>navigate <url>backforwardreloadcloseclose --allsessionsstatus
Observation
snapshot [--mode action|extraction|clickable|scrollable|full]statecursor [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
tabstab-new [url]tab-switch <index>tab-close [index]
Cookies
cookies [--url <url>]cookie-set --name <name> --value <value> [--url ...]cookies-clearcookies-export <file>cookies-import <file>
Utility
eval <expression>wait-for <text>wait-selector <selector>extract <schema-json>
API Reverse Engineering
api capture startapi capture stopapi capture statusapi span listapi span start --label <label>api span stopapi 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 candidatesapi 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 forskills 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 loginauth statusauth logoutlogin(alias forauth login)logout(alias forauth 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 canonicalcwd)OPENSTEER_CLIENT_ID: stable identity for default session bindingOPENSTEER_NAME: default selector namespace foropenOPENSTEER_CURSOR: cursor default for SDK and CLI daemon preference bootstrapOPENSTEER_MODE:local(default) orcloudOPENSTEER_API_KEY: cloud API key credential (best for CI/headless)OPENSTEER_ACCESS_TOKEN: cloud bearer token credential (fromopensteer auth login)OPENSTEER_BASE_URL: cloud control-plane base URLOPENSTEER_AUTH_SCHEME:api-key(default) orbearerOPENSTEER_REMOTE_ANNOUNCE:always(default),off, orttyOPENSTEER_CLOUD_PROFILE_ID: default cloud browser profile idOPENSTEER_CLOUD_PROFILE_REUSE_IF_ACTIVE: optionaltrue/falseprofile session reuse
Cursor defaults:
- CLI sessions are enabled by default unless overridden by
--cursororOPENSTEER_CURSOR. - SDK instances default to disabled unless configured via
cursor.enabled.
Credential precedence for cloud commands:
- explicit flags (
--api-key/--access-token) - environment (
OPENSTEER_API_KEY/OPENSTEER_ACCESS_TOKEN) - 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>.
Navigation
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:backcli:clickcli:closecli:cookie-setcli:cookiescli:cookies-clearcli:cookies-exportcli:cookies-importcli:cursorcli:dblclickcli:evalcli:extractcli:forwardcli:get-attrscli:get-htmlcli:get-textcli:get-valuecli:hovercli:inputcli:navigatecli:opencli:presscli:reloadcli:rightclickcli:screenshotcli:scrollcli:selectcli:sessionscli:snapshotcli:statecli:statuscli:tab-closecli:tab-newcli:tab-switchcli:tabscli:typecli:wait-forcli:wait-selector
