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.
