Configuration¶
The deployment file¶
One YAML file wires a deployment. certify, replay, run, and resume
all read it with --config deploy.yaml. Command-line options override single
fields. Every section is optional: an empty file is a valid deployment that
runs locally, checks no records, and makes no outbound calls.
Start from a draft bound to one bundle:
certify and run refuse the draft until every field listed under
unresolved is filled. The complete annotated example is
deployment.example.yaml.
Credentials are always the names of environment variables, never values.
backend¶
Where the app is and how to drive it.
backend:
url: https://app.example.org
headed: false
# kind: web | windows | macos | linux | rdp | citrix
The surface fields match the command-line surface options in the
command reference, for example macos_app,
linux_app, rdp_window, and browser_cdp_endpoint.
Remote sessions and Citrix¶
For kind: rdp with a local client window, and for kind: citrix, these
fields bind the session and guard each input:
| Field | Default | Meaning |
|---|---|---|
rdp_window |
none | The exact local client process. Citrix defaults to Citrix Viewer on macOS and wfica32 on Windows. |
rdp_window_title |
none | The exact client window title. No match, or more than one, is refused. |
rdp_max_frame_age_s |
10.0 |
The oldest screen capture an input may rely on. An older one stops the run before input. |
rdp_readiness_text |
none | Stable text that must be on screen before input, such as a menu label. |
rdp_readiness_min_ratio |
0.85 |
How closely the text read from the screen must match the readiness text, from 0.0 to 1.0. |
rdp_host, rdp_port (3389) |
none | A network RDP session instead of a local window. Only for kind: rdp. |
Citrix is its own backend, not an alias for RDP. kind: citrix makes Flow
build CitrixWorkspaceBackend, which binds the local Workspace or Viewer
window and keeps that exact window through a run, a halt, and a resume.
backend:
kind: citrix
rdp_window: wfica32 # optional on Windows; the default
rdp_window_title: Claims - Citrix Workspace # bind one session
rdp_max_frame_age_s: 3.0
rdp_readiness_text: Claims queue
rdp_readiness_min_ratio: 0.90
kind: citrix rejects rdp_host; use kind: rdp for a network session.
Governed Citrix run and resume require a nonblank rdp_readiness_text
and refuse before any input without one. Choose text from the application's
own frame, not from a record, so a lock screen, sign-in page, or other
application doesn't match. Pin the window title and qualify the frame age and
match ratio against the real session before any saves.
actuation¶
Whether a step that has an API binding performs its save through the app's API instead of the screen. The record check still confirms it.
effects¶
Where record checks read the saved record. kind is one of:
kind |
Reads | Main fields |
|---|---|---|
none |
Nothing. Standard and Regulated refuse saves. | |
rest |
A JSON records document over HTTP | base_url, records_path, records_key, auth, path_params |
graphql |
One read-only GraphQL query | graphql_query, graphql_variables, graphql_records_path |
fhir |
A FHIR R4 search | base_url, resource_type, search_params, search_param_exprs, access_token_env |
sql |
One read-only SELECT |
sql_query, sql_query_params, sqlite_database or sql_driver and sql_connect_args, sql_password_env |
file |
A file or SFTP drop | root, file_pattern, file_min_size, file_mtime_window_s, file_content_probe |
email |
A maildir or SMTP capture folder | root, mail_pattern, file_mtime_window_s, file_content_probe |
document |
A report file whose contents are parsed | root, file_pattern, document_format, document_field_paths |
document-hash |
A document store, by exact SHA-256 | root, glob |
ui_readback |
The app's record page in a separate, signed-in, read-only browser session | ui_readback.record_url, sign_in, row_selector, fields, identity |
auth takes exactly one of bearer_env, header with value_env, or
basic_env. Values that come from run inputs are written
{param: name}; fixed values are {literal: value}. Any kind can also set
evidence_redact_fields or evidence_keep_fields to keep field values out
of the evidence, and timeout_s and poll_interval_s.
Which kinds count as strong enough for each profile is explained in How a save is checked.
runtime¶
runtime:
profile: regulated # demo | standard | regulated
durable: true # on by default under standard and regulated
approval_mode: each_item # each_item | problems_only | not_gated
allow_model_grounding: false
pixel_verify_enabled: false
grounding_model:
enabled: false
provider: openai_compatible # or anthropic
base_url: "http://vllm.internal:8000/v1"
model: "qwen2.5-vl-7b-instruct"
api_key_env: "OPENADAPT_FLOW_GROUNDING_API_KEY"
phi_grounding_allowlist: ["vllm.internal"]
phi_egress_attested: false
allow_model_groundingis the only switch that lets a model component receive screenshots. Configuringgrounding_modeldoesn't turn it on.- When patient-data mode is on, a model endpoint is refused unless its host is
in
phi_grounding_allowlist. Public model APIs stay blocked unlessphi_egress_attestedis true. pixel_verify_enabledlets the pixel right-record check confirm a match, not only refuse one. Leave it off unless that check was validated for your screens.
human_decisions¶
Off by default, so decisions on paused runs are made at the computer. When enabled with both ids, the runner may relay a signed decision task with no patient data to the hosted phone view.
policy¶
Environment variables¶
| Variable | What it controls |
|---|---|
OPENADAPT_FLOW_SECRET_<FIELD> |
The value of a secret field at run time |
OPENADAPT_BUNDLE_KEY |
The key for encrypted bundles and checkpoints; required under Regulated |
OPENADAPT_FLOW_SCRUB |
Scrubbing of identifiers from saved text: auto (default), on, or off. on stops with an error if the scrubber isn't installed. |
OPENADAPT_FLOW_PHI_MODE |
Turns patient-data mode on; OPENADAPT_FLOW_SCRUB=on also does |
OPENADAPT_FLOW_VLM_URL |
The address of an on-site model server |
OPENADAPT_FLOW_BROWSER |
Which browser to use: auto (default), chrome, msedge, or bundled |
OPENADAPT_HOME |
Where OpenAdapt keeps local state (default ~/.openadapt) |
OPENADAPT_AGENT_RUNS_DIR |
The MCP server's runs folder (default ~/.openadapt/runs) |
OAFLOW_AGENT_TOKEN |
The shared token for the Windows agent server |
OPENADAPT_INGEST_TOKEN |
The Cloud ingest token, if not in the keychain |
OPENADAPT_FLOW_REPORT_RUN |
1 sends a run summary to Cloud after a successful run, like --report |
OPENADAPT_CLOUD_EXECUTION_ID, OPENADAPT_EXECUTE_API_KEY |
Link a run to a Cloud Execute execution so it can get a Seal |
DO_NOT_TRACK=1 or OPENADAPT_TELEMETRY=0 |
Leave the failure signal out of a Cloud connector's run callbacks |