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.
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
- MCP server setup — Claude Desktop / Cursor config.
- Flow setup — define and run YAML flows.
- Template setup — optional icon/image matching.
- API — use
Sessionand MCP-oriented integration guidance. - Act setup and Verify setup — run safely with evidence.
- Full docs index — contributor and planning docs.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57ba7e9704e2ef1244e05ec431ba97331e8516a2dd164824752d7114dc56807d
|
|
| MD5 |
3185fa9dd4630216a3fcc8075c87cbf1
|
|
| BLAKE2b-256 |
df2afe9746cf5e98a3c5949002daaa50172d74231149e71604b99680c67d2c1f
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
off_camber_open_frame-0.2.1.tar.gz -
Subject digest:
57ba7e9704e2ef1244e05ec431ba97331e8516a2dd164824752d7114dc56807d - Sigstore transparency entry: 2342109532
- Sigstore integration time:
-
Permalink:
Off-Camber/open-frame@6f4a6195c11d905bacc8b5706094a52cb199bc5d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/Off-Camber
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@6f4a6195c11d905bacc8b5706094a52cb199bc5d -
Trigger Event:
release
-
Statement type:
File details
Details for the file off_camber_open_frame-0.2.1-py3-none-any.whl.
File metadata
- Download URL: off_camber_open_frame-0.2.1-py3-none-any.whl
- Upload date:
- Size: 69.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b186b4ddbefd48845eae8cd416733affd1679cd227021ced4f451bea06b02d9
|
|
| MD5 |
eed02c17c2fc6cdd5f371a2fbdcd4931
|
|
| BLAKE2b-256 |
7c3ad9dff1c25dd08b0c24dc770732590fa367f60edbbcf7735ec1ca89c827b1
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
off_camber_open_frame-0.2.1-py3-none-any.whl -
Subject digest:
4b186b4ddbefd48845eae8cd416733affd1679cd227021ced4f451bea06b02d9 - Sigstore transparency entry: 2342109536
- Sigstore integration time:
-
Permalink:
Off-Camber/open-frame@6f4a6195c11d905bacc8b5706094a52cb199bc5d -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/Off-Camber
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@6f4a6195c11d905bacc8b5706094a52cb199bc5d -
Trigger Event:
release
-
Statement type: