Data handling¶
OpenAdapt handles screens, typed values, and record identifiers from the applications it drives. In a healthcare deployment these include protected health information. This page says where each kind of data lives and what can leave your network.
Where each artifact lives¶
| Artifact | Holds identifiers? | Where it stays |
|---|---|---|
Recording, bundle, report.json |
Yes, on purpose: the right-record check and the audit trail need the literal identifiers | Inside your boundary. Encrypt with OPENADAPT_BUNDLE_KEY and an encrypted disk. |
REPORT.md |
Free text is scrubbed; screenshots are redacted when scrubbing is on | Inside your boundary. Review before sharing. |
| Sanitized copy | Reviewed and approved by a person | May go to OpenAdapt Cloud after approval |
| Receipt | No. Only counts, digests, closed values, and versions | Safe to share |
| Halt report or decision task sent to Cloud | No. Closed values, counts, and digests; no free text or images | OpenAdapt Cloud |
Treat recordings, bundles, and run folders as protected data. Limit who can read them, and keep them on an encrypted disk.
Scrubbing¶
Scrubbing uses the openadapt-privacy package,
which finds personal and health data with named-entity recognition, through
one path in the engine:
REPORT.mdpasses every free-text field through the scrubber.- Saved step screenshots go through image redaction when scrubbing is on.
OPENADAPT_FLOW_SCRUB=onfails closed: if the scrubber isn't installed, the run stops instead of writing plain text. The on-premises queue refuses to start without it.- Without the
privacyextra, writing text that looks like an identifier prints a warning instead of failing silently.
The right-record check's evidence keeps literal identifiers, because scrubbing them would make the check impossible. That evidence stays inside your boundary.
Nothing raw is uploaded¶
The only way an artifact reaches OpenAdapt Cloud is a sanitized copy that a person approved:
openadapt flow sanitizewrites a redacted copy and a list of every file and change. The original is never modified.openadapt flow review-sanitizedshows the original and the copy side by side in a viewer that listens only on this computer. The reviewer can add redactions; any change cancels an earlier approval.openadapt flow approve-sanitizedfreezes the exact reviewed bytes as an archive and records who approved it.openadapt flow pushsends exactly those bytes. Cloud checks the manifest, the review state, and the archive's SHA-256 before accepting it.
Files the sanitizer can't handle, such as databases, video, audio, nested archives, and symlinks, refuse the whole copy instead of passing through. The sanitizer's success isn't proof of de-identification; the person's review is the gate.
What can leave your network¶
| Traffic | When | What it carries |
|---|---|---|
| None | A local or on-premises run with default settings | |
| Model requests | Only with model grounding turned on | Screenshots. Under patient-data mode, only to hosts on phi_grounding_allowlist. |
| A model server on your network | When OPENADAPT_FLOW_VLM_URL is set |
Crops and screenshots, within your network. Identity crops sent to it aren't scrubbed. |
| Cloud reports | With --report, report-break, or a Cloud connector |
Counts, digests, and closed values. See Subprocessors. |
| Cloud uploads | push of an approved sanitized copy |
The approved bytes only |
Encryption¶
- At rest: optional AES-256-GCM for the bundle, target crops, and
checkpoints with
OPENADAPT_BUNDLE_KEY, on top of your disk encryption. Regulated runs refuse an unencrypted bundle. You own key management: storage, rotation, and escrow. - In transit: Cloud APIs use HTTPS. Flow refuses plain
http://to the Windows agent server on any host other thanlocalhost, because screenshots can show patient data.