Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ live in [`openadapt-flow`](https://github.com/OpenAdaptAI/openadapt-flow), and
this repository doesn't reimplement them.

[Documentation](https://docs.openadapt.ai) ·
[Get started](https://docs.openadapt.ai/get-started/) ·
[Start locally](https://openadapt.ai/start) ·
[Walkthrough](https://docs.openadapt.ai/get-started/) ·
[Desktop downloads](https://openadapt.ai/download) ·
[Website](https://openadapt.ai) ·
[15s proof](https://x.com/OpenAdaptAI/status/2093535221324935360) ·
Expand Down Expand Up @@ -75,6 +76,18 @@ has already painted its success banner, so every on-screen check passes and the
run halts anyway, because the independent read of the record store disagrees.
The store is unchanged. That halt is the whole product in one command.

The bundled workflow is a tutorial. Qualifying a real one means declaring its
application boundary, its action risks, its identities, its effect verifiers,
its fault cases, and its deployment policy. Start with the
[five-minute walkthrough](https://docs.openadapt.ai/get-started/).

Tutorial `VERIFIED` is a local receipt on synthetic MockMed. It is not a
production Seal. `--break-it` is the aha: the banner can lie, and the
independent read stops the run. When you qualify a real job, that same
independent check is what a Seal attests. Public synthetic verify:
[openadapt.ai/seals](https://openadapt.ai/seals). The Seal contract:
[docs/commercial/seal.md](https://docs.openadapt.ai/commercial/seal/).

`openadapt-agent serve --allow-run` then generates the public MockMed bundle
at serve time and keeps the app up. A client calls `run_local_quickstart`.
You'll get a receipt. You never see frames. Local unsigned success isn't a
Expand All @@ -87,11 +100,6 @@ openadapt flow visualize openadapt-quickstart/bundle --out graph.html
openadapt flow lint openadapt-quickstart/bundle
```

The bundled workflow is a tutorial. Qualifying a real one means declaring its
application boundary, its action risks, its identities, its effect verifiers,
its fault cases, and its deployment policy. Start with the
[five-minute walkthrough](https://docs.openadapt.ai/get-started/).

## Record and rehearse one workflow

```bash
Expand Down
22 changes: 13 additions & 9 deletions docs/platform-compatibility-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

<!-- Generated by scripts/render_platform_versions.py. Do not edit. -->

- Generated: `2026-08-28T15:51:10+00:00`
- Generated: `2026-08-29T21:58:31+00:00`
- Selection: `latest-published`
- Compatibility: **dependency-compatible**
- Compatibility: **dependency-incompatible**
- Signature: `unsigned (signing infrastructure pending)`

## Published components
Expand All @@ -15,7 +15,7 @@
| flow | `openadapt-flow` | `1.34.0` | [`v1.34.0`](https://github.com/OpenAdaptAI/openadapt-flow/tree/v1.34.0)<br>commit `30fc60e55778a0e0f92b9776117cafcfe2512249`<br>tree `7a0263eda60b23f685cbd8abb4174da2db88fd4b` | `openadapt_flow-1.34.0-py3-none-any.whl` `56d32818989cb3a92830080ead39e10b08718c55e00988117f22cbfeaac98854`<br>`openadapt_flow-1.34.0.tar.gz` `a941a70015fe91897e655bfc9bf83e6cf8fbcf8bd4e4c7206ffb133c505203f8` |
| capture | `openadapt-capture` | `1.2.2` | [`v1.2.2`](https://github.com/OpenAdaptAI/openadapt-capture/tree/v1.2.2)<br>commit `06ade22948c12dcc6608bd54b5cca5c9c306e77c`<br>tree `b0a3b5b53f23536e01314f36aa46fd5b2d8baba6` | `openadapt_capture-1.2.2-py3-none-any.whl` `550fffe50990fa8431d332bdd5fe4755976d83baa7ad62553f50ad9e4ddcd1ae`<br>`openadapt_capture-1.2.2.tar.gz` `6f4298d3daadf9cced8994207e34b3116a79209ef792e98f778a0770e2f3406c` |
| privacy | `openadapt-privacy` | `1.0.4` | [`v1.0.4`](https://github.com/OpenAdaptAI/openadapt-privacy/tree/v1.0.4)<br>commit `7252de4820451b069310a3ccaecf484ad0af8c18`<br>tree `4c7bc72aa5c5879c7a51a4d3586c4b7e1c1ed5ff` | `openadapt_privacy-1.0.4-py3-none-any.whl` `e10bd265aba5e54c97aeb80a9ac0509384d19eb46ce46656880b619fd06f542b`<br>`openadapt_privacy-1.0.4.tar.gz` `89670173890192ecea31eea832e6e1c9b612cb7f19969fe99cda082cd71f2cb3` |
| types | `openadapt-types` | `0.10.1` | [`v0.10.1`](https://github.com/OpenAdaptAI/openadapt-types/tree/v0.10.1)<br>commit `9e0336ee92a807912338db570855a98d15919725`<br>tree `b63af56d5e639af1cfa7f1d008883c955e1b6ddf` | `openadapt_types-0.10.1-py3-none-any.whl` `c90a5a03721bf686895ae7212c88f178b96294d431edd37aebe9e5617fccc477`<br>`openadapt_types-0.10.1.tar.gz` `e39f850587ce05481c39bee87ecd266df1ddfd335cabdca23c4e2adc1df1c590` |
| types | `openadapt-types` | `0.12.0` | [`v0.12.0`](https://github.com/OpenAdaptAI/openadapt-types/tree/v0.12.0)<br>commit `da5ccb34928e912ac0ae16e04d818b9be68fb85d`<br>tree `9b40da24707b0562db8bded8779699c5ed9a5013` | `openadapt_types-0.12.0-py3-none-any.whl` `f9d2ef67f7f82554881601484647d8f2f221896e382c9e586286e40164b125e5`<br>`openadapt_types-0.12.0.tar.gz` `24bc131babbd9a4940df1c9c25cf4a7d63c859aeae4fe11b25b6672e303612f3` |
| desktop | `openadapt-desktop` | `0.15.0` | [`desktop-v0.15.0`](https://github.com/OpenAdaptAI/openadapt-desktop/tree/desktop-v0.15.0)<br>commit `ac01e90f04e604f40e030046457f5b5167c88755`<br>tree `06a0c7c3fc61194149f821522939a08fadc18736` | `openadapt_desktop-0.15.0-py3-none-any.whl` `11dd8da225d660f23fc5e779d564ef34c5d85ad40b303951ec7697e94f488401`<br>`openadapt_desktop-0.15.0.tar.gz` `f45e35d53469fcb75710010d56a9d3f362130f1637a2f5fb50889553104a5670` |
| agent | `openadapt-agent` | `2.0.1` | [`v2.0.1`](https://github.com/OpenAdaptAI/openadapt-agent/tree/v2.0.1)<br>commit `d9f16b2946dfdd0228eeb2660047347df9dce8d8`<br>tree `26606c89b4294603b628f1b3aaa8283c45765326` | `openadapt_agent-2.0.1-py3-none-any.whl` `5c5f6e3eca4c127d87b3affb8944223c0836916e0df57d0c6b8ba737b3bc8b5a`<br>`openadapt_agent-2.0.1.tar.gz` `67e05b299a4f035a0482b3032decc151fafc22de9a12bb3d8f884f37ea4cc937` |

Expand All @@ -24,7 +24,7 @@
| Unit | Version | Selected or locked OpenAdapt packages |
|---|---:|---|
| launcher_environment | `1.16.0` | `openadapt==1.16.0`<br>`openadapt-flow==1.34.0` |
| customer_runner | `1.34.0` | `openadapt-flow==1.34.0`<br>`openadapt-types==0.10.1` |
| customer_runner | `1.34.0` | `openadapt-flow==1.34.0`<br>`openadapt-types==0.12.0` |
| desktop_sidecar | `0.15.0` | `openadapt-capture==1.2.1`<br>`openadapt-flow==1.27.1`<br>`openadapt-privacy==1.0.0`<br>`openadapt-types==0.7.0` |
| agent_bridge | `2.0.1` | `openadapt-agent==2.0.1`<br>`openadapt-flow==1.34.0` |

Expand All @@ -42,20 +42,24 @@ These edges show whether each selected integration version satisfies its publish
| selected-platform | `openadapt-capture==1.2.2` | `openadapt-privacy` | `>=0.1.0` | `1.0.4` | `extra == "all"`<br>`extra == "privacy"` |
| selected-platform | `openadapt-flow==1.34.0` | `openadapt-capture` | `>=1.2.0` | `1.2.2` | `extra == "capture"` |
| selected-platform | `openadapt-flow==1.34.0` | `openadapt-privacy` | `>=1.0.0` | `1.0.4` | `extra == "privacy"` |
| selected-platform | `openadapt-flow==1.34.0` | `openadapt-types` | `<0.11.0,>=0.10.0` | `0.10.1` | `extra == "console"`<br>`extra == "dev"`<br>`extra == "interop"` |
| selected-platform | `openadapt-flow==1.34.0` | `openadapt-types` | `<0.11.0,>=0.10.0` | `0.12.0` | `extra == "console"`<br>`extra == "dev"`<br>`extra == "interop"` |
| selected-platform | `openadapt==1.16.0` | `openadapt-capture` | `<2.0.0,>=1.2.0` | `1.2.2` | `extra == "all"`<br>`extra == "capture"`<br>`extra == "core"` |
| selected-platform | `openadapt==1.16.0` | `openadapt-flow` | `<2.0.0,>=1.29.0` | `1.34.0` | `always`<br>`extra == "all"`<br>`extra == "browser"`<br>`extra == "capture"`<br>`extra == "core"`<br>`extra == "flow"`<br>`extra == "privacy"`<br>`extra == "rdp"`<br>`extra == "windows"`<br>`sys_platform == "darwin" and extra == "all"`<br>`sys_platform == "darwin" and extra == "macos"`<br>`sys_platform == "linux" and extra == "all"`<br>`sys_platform == "linux" and extra == "linux"` |

### Compatibility failures

- `flow` -> `openadapt-types` requires `<0.11.0,>=0.10.0`; the resolved version is `0.12.0`.

## Cross-component schemas

| Contract | Owner | Accepted versions | Exact source |
|---|---|---|---|
| `workflow_bundle` | `flow` | `schema_version` [1, 2] | [`openadapt_flow/bundle_validation.py`](https://github.com/OpenAdaptAI/openadapt-flow/blob/30fc60e55778a0e0f92b9776117cafcfe2512249/openadapt_flow/bundle_validation.py) `fe1e5ec441183adf1aa2209f1669f779043fb4ad1f41a651ca0f96123778240f`<br>[`openadapt_flow/ir.py`](https://github.com/OpenAdaptAI/openadapt-flow/blob/30fc60e55778a0e0f92b9776117cafcfe2512249/openadapt_flow/ir.py) `e1e5345dd173b694587dde515b59cd60de0cf6028c1f35d589706b84ad792598` |
| `capture_structural_observation` | `capture` | `openadapt.capture.structural-observation/v` [1] | [`openadapt_capture/structural.py`](https://github.com/OpenAdaptAI/openadapt-capture/blob/06ade22948c12dcc6608bd54b5cca5c9c306e77c/openadapt_capture/structural.py) `8f8bce37148a3357ace147c46a7c45e6d5501b70622b24b1ac2490f2def304fc` |
| `control_overlay_frame` | `types` | `openadapt.control-overlay-frame/v` [1, 2] | [`openadapt_types/control_overlay.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/9e0336ee92a807912338db570855a98d15919725/openadapt_types/control_overlay.py) `3aa01f89b43e12478c9e2ff1a9e61689397370691d15247ded9dcd5b05242790`<br>[`openadapt_types/control_overlay_tracking.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/9e0336ee92a807912338db570855a98d15919725/openadapt_types/control_overlay_tracking.py) `af8d934f0572c5f4e9c63ba720d4a1d0e73c8cdf3f7b87cc4562c01a8a551755` |
| `control_overlay_timeline` | `types` | `openadapt.control-overlay-timeline/v` [1, 2] | [`openadapt_types/control_overlay.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/9e0336ee92a807912338db570855a98d15919725/openadapt_types/control_overlay.py) `3aa01f89b43e12478c9e2ff1a9e61689397370691d15247ded9dcd5b05242790`<br>[`openadapt_types/control_overlay_tracking.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/9e0336ee92a807912338db570855a98d15919725/openadapt_types/control_overlay_tracking.py) `af8d934f0572c5f4e9c63ba720d4a1d0e73c8cdf3f7b87cc4562c01a8a551755` |
| `human_decision_task` | `types` | `openadapt.human-decision-task/v` [1, 2] | [`openadapt_types/human_decision.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/9e0336ee92a807912338db570855a98d15919725/openadapt_types/human_decision.py) `6ed5d2db82f5c73dfab568868f13f7a2cbfde6fb7b3f05b027b40c503ab04e29` |
| `human_decision_receipt` | `types` | `openadapt.human-decision-receipt/v` [1] | [`openadapt_types/human_decision.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/9e0336ee92a807912338db570855a98d15919725/openadapt_types/human_decision.py) `6ed5d2db82f5c73dfab568868f13f7a2cbfde6fb7b3f05b027b40c503ab04e29` |
| `control_overlay_frame` | `types` | `openadapt.control-overlay-frame/v` [1, 2] | [`openadapt_types/control_overlay.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/control_overlay.py) `3aa01f89b43e12478c9e2ff1a9e61689397370691d15247ded9dcd5b05242790`<br>[`openadapt_types/control_overlay_tracking.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/control_overlay_tracking.py) `af8d934f0572c5f4e9c63ba720d4a1d0e73c8cdf3f7b87cc4562c01a8a551755` |
| `control_overlay_timeline` | `types` | `openadapt.control-overlay-timeline/v` [1, 2] | [`openadapt_types/control_overlay.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/control_overlay.py) `3aa01f89b43e12478c9e2ff1a9e61689397370691d15247ded9dcd5b05242790`<br>[`openadapt_types/control_overlay_tracking.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/control_overlay_tracking.py) `af8d934f0572c5f4e9c63ba720d4a1d0e73c8cdf3f7b87cc4562c01a8a551755` |
| `human_decision_task` | `types` | `openadapt.human-decision-task/v` [1, 2] | [`openadapt_types/human_decision.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/human_decision.py) `6ed5d2db82f5c73dfab568868f13f7a2cbfde6fb7b3f05b027b40c503ab04e29` |
| `human_decision_receipt` | `types` | `openadapt.human-decision-receipt/v` [1] | [`openadapt_types/human_decision.py`](https://github.com/OpenAdaptAI/openadapt-types/blob/da5ccb34928e912ac0ae16e04d818b9be68fb85d/openadapt_types/human_decision.py) `6ed5d2db82f5c73dfab568868f13f7a2cbfde6fb7b3f05b027b40c503ab04e29` |
| `human_decision_relay` | `flow` | `openadapt.human-decision-relay/v` [2] | [`openadapt_flow/console/decision_relay.py`](https://github.com/OpenAdaptAI/openadapt-flow/blob/30fc60e55778a0e0f92b9776117cafcfe2512249/openadapt_flow/console/decision_relay.py) `d5320404d4342dbb52be1f2ead1cdb5cf0e22877feaaa1e47974b301df697292` |
| `remote_decision_projection` | `flow` | `openadapt.remote-decision-projection/v` [1] | [`openadapt_flow/console/human_decisions.py`](https://github.com/OpenAdaptAI/openadapt-flow/blob/30fc60e55778a0e0f92b9776117cafcfe2512249/openadapt_flow/console/human_decisions.py) `02651ad8888a5c17bfff6fb47165ba861193243dc0f7c951f8b94f544ca19477` |
| `runtime_validation` | `flow` | `openadapt.runtime-validation/v` [1, 2, 3] | [`openadapt_flow/runtime_validation.py`](https://github.com/OpenAdaptAI/openadapt-flow/blob/30fc60e55778a0e0f92b9776117cafcfe2512249/openadapt_flow/runtime_validation.py) `18675d6b4c40458394febb36cbe28e99f410cb65b4cab138b68df3cacc6f7dd4` |
Expand Down
Loading