Skip to main content

Open Frame

Open Frame

Open-source desktop automation engine for AI agents and scripts.

Open Frame sees what is on screen, finds targets, interacts with UI, and verifies outcomes. It is built to be deterministic, scriptable, and auditable.

Open Frame approving an invoice in the browser

Above: Open Frame drives a live invoice UI — FIND “Post payment”, CLICK the match, VERIFY “Payment posted to Northline.”

Open Frame is an independent project and is not affiliated with or endorsed by any third-party automation vendor.

Open Frame is the deterministic execution layer behind AI agents, not the agent itself.

How this differs from assistant UX tools

  • Open Frame executes deterministic capture/recognize/act/verify primitives.
  • External LLM agents (or scripts) decide what tool call to make next.
  • The engine returns compact structured outputs and artifact paths for debugging.

Status

Beta (v0.2.1) — macOS-first. Available on PyPI as off-camber-open-frame. Evidence for this release comes from CI plus a local macOS live gate (including MCP stdio smoke); see release gates. Changelog: CHANGELOG.md.

Who this is for

  • Developers automating desktop workflows.
  • Teams who want agent-callable UI execution without bloating context windows.
  • Contributors building recognizers, flows, or integrations.

Quickstart (beta funnel)

1. Install

pip install "off-camber-open-frame[mcp,ocr,act,flow,template]"
brew install tesseract

On macOS, grant your terminal or IDE host Screen Recording and Accessibility (System Settings → Privacy & Security), then restart that app.

2. Diagnose

open-frame doctor

All required checks should report pass (overall: ok). Optional extras that are not installed show as skip and do not fail the report.

3. Connect an MCP client

Point Claude Desktop or Cursor at the stdio server:

open-frame mcp serve

Copy-paste client config: MCP server setup.

4. Run a first flow

open-frame find "Submit" --json
open-frame run examples/flows/mcp-dry-run-wait/flow.yaml --dry-run --json

If open-frame is not on your PATH yet:

python -m openframe.cli doctor

Local development (repo clone)

python3.11 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,ocr,act,flow,mcp,template]"
open-frame doctor
open-frame mcp list-tools --json

If python3.11 is not available on a fresh macOS machine:

brew install python@3.11

Next steps

License

Apache License 2.0 — free to use, modify, and self-host. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

off_camber_open_frame-0.2.1.tar.gz (84.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

off_camber_open_frame-0.2.1-py3-none-any.whl (69.2 kB view details)

Uploaded Python 3

File details

Details for the file off_camber_open_frame-0.2.1.tar.gz.

File metadata

  • Download URL: off_camber_open_frame-0.2.1.tar.gz
  • Upload date:
  • Size: 84.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for off_camber_open_frame-0.2.1.tar.gz
Algorithm Hash digest
SHA256 57ba7e9704e2ef1244e05ec431ba97331e8516a2dd164824752d7114dc56807d
MD5 3185fa9dd4630216a3fcc8075c87cbf1
BLAKE2b-256 df2afe9746cf5e98a3c5949002daaa50172d74231149e71604b99680c67d2c1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for off_camber_open_frame-0.2.1.tar.gz:

Publisher: publish-pypi.yml on Off-Camber/open-frame

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file off_camber_open_frame-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for off_camber_open_frame-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4b186b4ddbefd48845eae8cd416733affd1679cd227021ced4f451bea06b02d9
MD5 eed02c17c2fc6cdd5f371a2fbdcd4931
BLAKE2b-256 7c3ad9dff1c25dd08b0c24dc770732590fa367f60edbbcf7735ec1ca89c827b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for off_camber_open_frame-0.2.1-py3-none-any.whl:

Publisher: publish-pypi.yml on Off-Camber/open-frame

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page