Skip to main content

Opensteer

Opensteer helps AI agents control browsers and use local code as tools. It gives agents a small Python command surface for local Chrome or Edge, Opensteer Cloud browsers, and project-specific automation.

Opensteer handles the browser plumbing: CDP, local and cloud attach, named sessions, screenshots, JavaScript, clicks, typing, scrolling, tabs, and reusable interaction skills. The agent's working directory supplies the specialized behavior through Markdown instructions, selectors, data, and custom functions.

Install

curl -fsSL https://opensteer.com/install.sh | sh

What Opensteer Does

Opensteer lets an agent drive a browser through short Python snippets:

opensteer -c "print(page_info())"

Python snippets run with Opensteer's browser helpers available, so an agent can navigate, inspect, click, type, scroll, capture screenshots, evaluate JavaScript, and call raw CDP methods without building its own browser bridge.

opensteer -c "new_tab('https://example.com'); wait_for_load(); print(page_info())"

Reusable code can import the helpers directly:

from opensteer.helpers import goto_url, js, click_at_xy, type_text, wait_for_load

Open browsers explicitly and keep the returned handle when more than one is active:

opensteer -c "linkedin = open_browser(label='linkedin', profile='fresh'); linkedin.new_tab('https://linkedin.com')"

Opensteer can also attach to a cloud browser when OPENSTEER_API_KEY is configured:

opensteer -c "open_browser(label='research', profile='fresh'); new_tab('https://example.com')"
opensteer -c "browser = open_browser(label='work', profileId='bp_...'); print(browser.page_info())"

mode='reuse' is the safe default. mode='new' intentionally creates another logical session. The label is human-readable; the cloud session id and run scope are platform-owned. Read helpers never provision browsers implicitly in strict cloud-agent environments.

List and select browsers without creating a new one:

opensteer -c "print(list_browsers())"
opensteer -c "research = use_browser('research'); research.new_tab('https://example.com')"

Browser transport is an explicit capability boundary. Local App execution can request auto, inapp, local, or cloud; Cloud execution supports auto and cloud and rejects device-only locations. For example, a locally executing agent can explicitly start a cloud browser with:

opensteer -c "open_browser(label='research', profile='fresh', location='cloud')"

Specialized Harnesses

A specialized harness is a project directory that makes an agent useful for a specific workflow. It can include Markdown instructions, selectors, data, API clients, and Python functions for repeated actions.

For example:

support-harness/
  AGENTS.md
  tools.py
  selectors.py
  data/

AGENTS.md tells the agent how the workflow works. tools.py exposes actions the agent can call:

# tools.py
from opensteer.helpers import goto_url, js, type_text, wait_for_load


def open_customer(customer_id):
    goto_url(f"https://support.example.com/customers/{customer_id}")
    wait_for_load()
    return js("document.title")

When the agent runs from that directory, local imports work like normal Python imports:

cd support-harness
opensteer -c "from tools import open_customer; print(open_customer('cus_123'))"

That is the core pattern: Opensteer provides browser control, and the current directory provides the domain-specific instructions and tools.

If your tools live in a subdirectory, add it to the import path:

support-harness/
  AGENTS.md
  actions/
    helpers.py
cd support-harness
opensteer -c "import sys; sys.path.insert(0, 'actions'); from helpers import open_customer; print(open_customer('cus_123'))"

What Belongs Where

Opensteer owns the browser layer: the daemon, CDP transport, helper functions, local and cloud attach, named sessions, profile helpers, and generic interaction skills.

Harnesses own the workflow layer: selectors, local functions, data files, API clients, and Markdown instructions for a specific site, product, or business process.

This keeps Opensteer reusable while letting each workspace become specialized. A sales harness, QA harness, and data-entry harness can all expose different tools while sharing the same browser primitives.

Verify

opensteer --doctor
opensteer -c "print(page_info())"

If local browser attach needs setup:

opensteer --setup

Opensteer will guide Chrome or Edge through enabling remote debugging for the current profile.

Metadata

Release files for opensteer 0.11.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for opensteer 0.11.2
File Size Uploaded
opensteer-0.11.2.tar.gz 41.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for opensteer 0.11.2
File Interpreter ABI Platform
opensteer-0.11.2-py3-none-any.whl Python 3 none any Details

Total release size: 89.9 kB

Release files / opensteer-0.11.2.tar.gz

Download URL opensteer-0.11.2.tar.gz
Size 41.4 kB
Tags Source
SHA-256 checksum
How to use checksums
dc8f13aa6c7584f3eea94f91deb750b01cee7d90c1ba84df320c105f3e29d69f
BLAKE2b-256 checksum
How to use checksums
468e224b8a60fae544f82f78b0a037bcc33bdee81d53b5f613d0fd87731709fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / opensteer-0.11.2-py3-none-any.whl

Download URL opensteer-0.11.2-py3-none-any.whl
Size 48.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
70b6d12b931dae8fa60e4c4eaa4d7838eee8111391fade886fcbddc4636541e6
BLAKE2b-256 checksum
How to use checksums
6f631649fdc10239c67ae52f667eeda50415b3f5d5c3a19e703e8317855e57ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.11.2 This release

2 release files

0.11.1

2 release files

0.10.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page