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.1

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.1
File Size Uploaded
opensteer-0.11.1.tar.gz 40.9 kB Details

Built distribution (wheel)

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

Total release size: 88.8 kB

Release files / opensteer-0.11.1.tar.gz

Download URL opensteer-0.11.1.tar.gz
Size 40.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a44f3248da7863659c9d35635256ac3909dd05e2a53c13ac2584700a96e89bae
BLAKE2b-256 checksum
How to use checksums
f0e058596a31357a4e25e2f9afe90289c9d70124a145394d467c0f53ab24d7dc
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.1-py3-none-any.whl

Download URL opensteer-0.11.1-py3-none-any.whl
Size 47.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a7af2e5fd19d1b7ea6ab76949713a6acc77ee2024a2b61c18e03f0c95a8ae91f
BLAKE2b-256 checksum
How to use checksums
82e13b991c76da28e6785fb267ed4441cfc3964c027e9580f2e0a260dbef6f5c
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.1 This release

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