Record once. Replay deterministically without healthy-run model calls.¶
OpenAdapt compiles demonstrated GUI workflows into deterministic, locally executable programs. Healthy runs make no model calls. When interfaces drift, OpenAdapt re-resolves targets deterministically or uses an explicitly configured model tier, records the repair, and halts when the configured verification checks fail.
Get started in 5 minutes See what works today See how it works
Who it is for¶
OpenAdapt is built for regulated, repetitive desktop and web work: the 500th patient referral this month, the daily claims batch, the mortgage file that moves through six screens the same way every time. Work that a person has already figured out, that runs many times, and where a wrong action has a real cost.
A computer-use agent re-reasons through the whole task with a large model on every run. That is the right shape for a task nobody has automated before, and the wrong one for a workflow you run a thousand times. OpenAdapt compiles the demonstration instead, so the model is only consulted to repair the script, not to drive it.
The browser/Playwright backend is the reference path. The bounded hosted recorder has live-provider evidence for public, non-regulated browser targets; the complete paid account-to-run lifecycle is still a Beta launch candidate pending production acceptance. Windows UIA, native macOS, and RDP accept partner-qualification applications while acceptance remains in progress; Citrix needs a design partner and has no ICA/HDX evidence. Customer-controlled execution is scoped to the actual substrate and data boundary. The shared protocol is real, but backend presence is not a production-readiness claim. See What works today.
Three things that make it different¶
-
Deterministic, model-free replay
A compiled workflow replays with zero model calls on the healthy path. Local template match, OCR, and geometry resolve each step. Self-hosted healthy replay has no model-API charge; hosted infrastructure and service pricing are separate.
-
Effect verification
The screen is not the system of record. A save banner can paint over an empty database. OpenAdapt can verify each write against the real record (a FHIR or REST API, a document store) and halt on a mismatch.
-
Halt, don't guess
When the screen stops matching expectations, the run stops with a report instead of clicking the wrong thing. An identity gate refuses to act when it cannot tell two records apart.
The shape of it¶
flowchart LR
A([Demonstrate<br/>once]) --> B[[compile]]
B --> C{{Workflow<br/>bundle}}
C --> D[[replay]]
D -->|healthy path| E([Deterministic<br/>$0 run])
D -->|UI drifted| F[[self-heal]]
F -->|repair as diff| E
D -->|cannot verify| G([Halt safely<br/>+ report])
G -->|demonstrate the fix| H[[learn]]
H -->|governed & gated| C
Each compiled step carries a template crop, an OCR label, geometry landmarks, and postconditions derived from what the demonstration actually changed on screen. At replay a resolution ladder tries them in order. Healthy scripts never leave the first rung. When the UI drifts, a lower rung still finds the target and the fix is written back to the bundle as a reviewable diff. When nothing matches, the run halts safely rather than guess.
A halt is not a dead end. Demonstrate the fix once and openadapt flow teach
compiles that correction back into the workflow (through the same identity,
effect, and policy checks that gate everything else), so it does not halt on
that situation again. The correction is induced as a guarded branch, a
regression gate proves it weakens nothing, and only a verified revision is
promoted (an underdetermined or unsafe fix is refused, not guessed at). It is
deterministic and runs at $0 with the reference inducer. See
The halt-learn loop.
One runner, any surface, any deployment¶
The same compiled bundle runs on any surface and in any deployment, because the runtime sits behind one substrate-agnostic runner that routes on a single field and never sees pixels or resolved values. Two orthogonal axes, one contract:
| Deployment ↓ / Substrate → | Web (browser) | Windows / native macOS / RDP | Citrix |
|---|---|---|---|
| Our cloud | Managed execution of locally authored, attested browser bundles (Beta launch candidate; production qualification pending) | Not in hosted candidate; partner-scoped qualification only | No hosted Citrix claim; design partner needed |
| Customer cloud / BYOC | Connector + customer storage (experimental; qualify by deployment) | Partner qualification; acceptance in progress for the exact app/session | Design partner needed; no ICA/HDX evidence |
| Self-hosted / on-prem | Local browser engine (Beta reference path) | Partner qualification; workflow-specific acceptance required | Design partner needed; RDP evidence does not transfer |
You choose where the data lives — there is no company-wide "never leaves your
network" claim; the guarantee is scoped to the tier you pick. For regulated data
the run verb is fail-closed by default:
it gates certification, identity and effect coverage, approval fallback,
encryption, and manifest integrity before execution.
Launch-candidate scope
The hosted launch candidate covers browser workflows. It does not promote Windows, RDP, or Citrix. Artifacts cross boundaries only as approved sanitized derivatives, while PHI-bearing runtime observations stay inside their declared trusted execution boundary. This is not a public availability statement. See the deployment matrix.
Measured, not claimed¶
We publish the numbers and the failure modes. Two representative results, same success check on both arms:
| Task | Compiled replay | Computer-use agent |
|---|---|---|
| OpenEMR (real third-party EMR, add-patient-note, 18 steps) | 20/20, 39.2s p50, $0/run, 0 model calls | 10/10, 70.4s p50, ~$0.55/run |
| MockMed (CI-reproducible triage task) | 100/100, 4.9s p50, $0/run, 0 model calls | 20/20, 37.5s p50, ~$0.27/run |
The compiled arm made no model calls and recorded no model-API cost in these measured runs. This excludes authoring, review, infrastructure, exception, and service costs. Full methodology and caveats live in the openadapt-flow benchmark docs.
Stated honestly
Compiled replay has real limits, and we test for them by attacking our own system before anyone else does. A 125% browser zoom currently zeroes replayability. Instance-specific screen state means per-tenant re-recording. On pure-pixel substrates a look-alike identifier can force a halt rather than a verify. The full list is in what it does not do yet.
Start here¶
-
Install, compile, lint, certify, drift, inspect, teach, and deploy.
-
Integrated maturity, hosted limits, and pre-deployment boundaries.
-
The compiler model, the capability ladder, effect verification, the identity gate, and how safety is enforced.
-
Record your own app, handle parameters and secrets, write a policy, and deploy on-prem.
-
Every
openadapt flowverb, the bundle format, and configuration.