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.

Reference

FAQ

Common questions about OpenSteer.

Does OpenSteer require cloud mode?

No. OpenSteer defaults to local mode using Playwright. Cloud mode is opt-in via OPENSTEER_MODE=cloud or cloud: true.

Can I attach to an existing Playwright page?

Yes, locally. Use Opensteer.from(page). Not supported in cloud mode.

const opensteer = await Opensteer.from(existingPage, { name: 'reuse' })

Why are counter-based actions failing?

Counter values (c) are assigned fresh on every snapshot() call. After navigation or DOM changes, counters become stale. Re-run snapshot action before counter-based actions.

How do I make CLI runs deterministic in CI?

Set OPENSTEER_SESSION explicitly, use a stable --name namespace, and rely on cached descriptions for replay.

What model providers are supported for CUA?

OpenAI, Anthropic, and Google. Set the model with OPENSTEER_MODEL or the model constructor option using provider/model-name format.

How do I extract arrays of data?

Use array syntax in your schema:

const result = await opensteer.extract({
  description: 'search-results',
  schema: {
    items: [{ title: { type: 'string' }, url: { type: 'string' } }],
  },
})

Why is my extraction returning null?

Ensure you called snapshot extraction (not snapshot action) before extracting. Extraction mode includes data-bearing elements.

Can I use Playwright methods directly?

Yes, via opensteer.page and opensteer.context. But prefer OpenSteer methods — they handle stability, replay, and cloud mode. The one exception is page.evaluate(fetch(...)) for REST API calls.

How do I debug selector resolution issues?

Enable OPENSTEER_DEBUG=true and check the logs for resolution chain details. Use clearCache() to reset cached selectors if they're stale.

What happens if cloud mode fails?

Cloud mode is fail-fast. It does not fall back to local mode. Check your API key, network connectivity, and the error codes table.

How do I share selectors between CLI and SDK?

Use the same namespace. Set --name my-project in CLI and name: 'my-project' in SDK constructor. Both read from .opensteer/selectors/my-project/.

Can I run multiple sessions simultaneously?

Yes. Each new Opensteer() instance manages its own session. Use different name values for separate selector caches.