OpenAdapt enters approved information into the systems your team already uses, and then it checks that the entry saved.
It does this last manual step for your team in EMRs, payer portals, and desktop apps, including apps your staff reach through Citrix or remote desktop. When something doesn't match, it stops and asks a person instead of guessing.
Watch the live demo · Discuss your workflow · Run it yourself · Visit openadapt.ai
The live demo plays recorded runs that use synthetic data.
Take a faxed referral that staff enter into the EMR.
| Today | With OpenAdapt | |
|---|---|---|
| Entering it | A staff member keys each referral by hand. Two hospital time studies put one faxed referral at about 10 to 12 minutes of staff time. | OpenAdapt enters the approved fields in the same EMR screens your staff use. |
| Knowing it saved | Someone sees "Saved" and moves on. | OpenAdapt reads the saved record back and compares it with what it entered. |
| When something's off | It turns up later, at booking or billing. | The run stops before it guesses, and a person decides what happens next. |
| Your staff's part | Type every referral. | Review the runs that OpenAdapt stops on. |
The time studies are from UCSF, JAMIA Open 2020 (its mean includes a call to the patient) and Calderdale and Huddersfield NHS Foundation Trust, HFMA 2024. Nobody has measured an "after" time with OpenAdapt yet, so this table doesn't claim a time saving.
OpenAdapt doesn't need an EMR integration. The record check needs a second way to read the record, such as a report, an API, or a read-only login. To see which EHR tasks have a public API and which still end at a screen, browse the EHR Integration Directory that we publish (source). An EHR listed there isn't an OpenAdapt partner.
Every run ends with one of these results, and every run leaves a report.
| Result | What it means |
|---|---|
| Done and checked | It saved the entry and read the record back to confirm it. |
| Stopped before saving | Something didn't match, so it stopped before it changed anything and asked a person. Nothing was written. |
| Check the record | A save may have gone through. A person checks the record before anything is retried. |
| Finished, not checked | It did the steps but didn't confirm the saved result, as in a practice run. |
| Didn't finish | It couldn't complete the task. Its report says what's known about whether anything was written. |
It runs on a computer you control, or on one we host. A routine run makes no AI model calls.
Hand the workflow to us, or run the open-source engine yourself.
Tell us about a task your team repeats: discuss your workflow.
- You show us the task once, on your own system.
- We build the automation and test it with your own cases before it goes live.
- We keep it working. When a screen changes, we propose a fix, and a person on your team approves it.
We scope services per workflow. If your own AI product decides what to enter, OpenAdapt can make that final entry and return the result to your product. See OpenAdapt Execute.
The engine is free and open source under the MIT license. With Python 3.10, 3.11, or 3.12, run:
python -m pip install --upgrade openadapt
openadapt quickstart --break-itThis runs a synthetic clinic task twice on your computer. The first run is
done and checked. In the second run, the test server rejects the save after
the app shows that it saved. The record check finds no saved record, so the
run ends with "Check the record" instead of reporting success. On Python 3.13
or newer, install with uv tool install --python 3.12 openadapt instead.
To record your own task, follow the walkthrough. To have us run the computer for browser workflows, see the hosted plans on the pricing page.
OpenAdapt compiles demonstrations into governed workflows across browser, native desktop, RDP, and Citrix. The default healthy path executes deterministically and makes no generative-model API calls. Consequential actions are identity-gated, results are checked against the workflow's evidence contract, and uncertainty halts for review instead of being reported as success.
Each result in How a run ends comes from the engine's
outcome. Both kinds of stop report HALTED, so read the transaction outcome
before you tell anyone whether something was written.
| Result | Engine outcome |
|---|---|
| Done and checked | VERIFIED |
| Stopped before saving | HALTED with transaction outcome HALTED_BEFORE_EFFECT |
| Check the record | HALTED with transaction outcome RECONCILIATION_REQUIRED, or any uncertain delivery |
| Finished, not checked | COMPLETED_UNVERIFIED |
| Didn't finish | FAILED |
A caller must report a halt as a halt, never as success.
| Target | Role |
|---|---|
openadapt |
OpenAdapt installs the openadapt command and the engine. |
flow |
openadapt-flow is the compiler and governed runtime. Engine changes go here. |
cloud |
app.openadapt.ai runs hosted browser workflows and manages runs on computers you control. Its source is private. |
desktop |
openadapt-desktop records, tests, runs, and reviews workflows on your own computer, and handles approved fixes. |
capture |
openadapt-capture records screen, input, timing, and window evidence for Desktop and Flow. |
agent |
openadapt-agent gives agents governed Flow workflows as local MCP tools and Agent Skills. |
docs |
docs.openadapt.ai is the documentation site. The Support repository openadapt-ops publishes it. |
These targets form one product across browser, Windows, macOS, Linux, RDP, and Citrix or other virtual desktops. Qualification is per workflow. A product release admission doesn't qualify any workflow. Current signed admissions are in the live record.
Both studies grade each run with a check that doesn't depend on the thing being tested.
We injected faults into saves that our own engine made to a test record system: nine injected faults and one clean control, nine runs each. In 72 of 90 runs, the record ended up wrong: missing, partial, duplicated, on the wrong record, or with other records deleted or added. The table shows how many of those runs each kind of check still passed.
| Check | Wrong records it passed |
|---|---|
| Trust the app's success banner | 54 of 72 (75.0%) |
| One separate read of the record | 9 of 72 (12.5%) |
| A read of every table in the test database | 0 of 72 |
The 9 that one separate read passed were all one kind: a write to a billing table that read didn't cover. The zero covers only the audited test database. Every check also stopped 9 of 18 runs that had saved correctly, because the client never got the server's reply. This test covers a fixed list of faults. It doesn't measure a real-world error rate. Method and caveats.
On the shared OpenEMR public demo, with fake patients and an 18-step task that adds a patient note, compiled replay finished 19/20 runs at 39.2s median with no model calls. A computer-use agent finished 10/10 runs at 70.4s median, at about $0.55 a run at the July 2026 list price. The one compiled run that didn't finish stopped at step 17, before saving, instead of reporting success. We measured this on 2026-07-08 with a development build of Flow 0.1.0. It's a small sample on a demo that resets daily, so CI can't reproduce it. OpenAdapt isn't affiliated with the OpenEMR project. Method and caveats.
Neither study is a production reliability or clinical safety claim. The model
charge leaves out authoring, review, maintenance, and infrastructure. Read the
limits
before you extrapolate. Runnable references are in
openadapt-flow/docs/showcase,
and each method is under
benchmark.
Model training, retrieval, grounding, and general computer-use work are
Research: openadapt-ml,
openadapt-retrieval,
openadapt-grounding,
and openadapt-evals, which
scores agents and OpenAdapt programs on public benchmarks. You don't need any
of them to record, build, or run an automation.
OmniMCP, SoM, and PydanticPrompt are Labs projects. The product doesn't depend on them. The public lifecycle registry classifies every other repository as Support, Experimental, Historical, Superseded, Deprecated, Archived, or Internal.
Engine changes belong in
openadapt-flow. Packaging
and launcher changes belong in
OpenAdapt. Use each repository's
issues for scoped work. Unless a repository says otherwise, OpenAdapt code is
MIT licensed.