{"repo":"OpenAdaptAI/OpenAdapt","free":true,"listed":false,"github":"https://github.com/OpenAdaptAI/OpenAdapt","clone":"git clone https://github.com/OpenAdaptAI/OpenAdapt.git","description":"Compile a demonstrated GUI workflow into a deterministic, locally executable program. Zero model calls on healthy runs; governed repair; halts instead of guessing. Launcher for openadapt-flow: pip install openadapt","language":"Python","stars":1683,"topics":["agents","ai-agents","browser-automation","citrix","computer-use","computer-use-agents","demonstration-compiler","desktop-automation","deterministic-replay","effect-verification","gui-automation","healthcare-automation","local-first","process-automation","python","rdp","rpa","ui-automation","workflow-automation"],"license":"MIT","category":"rpa_automation","readme_excerpt":"# OpenAdapt\n\n[![CI](https://github.com/OpenAdaptAI/OpenAdapt/actions/workflows/main.yml/badge.svg)](https://github.com/OpenAdaptAI/OpenAdapt/actions/workflows/main.yml)\n[![PyPI](https://img.shields.io/pypi/v/openadapt.svg)](https://pypi.org/project/openadapt/)\n[![Downloads](https://img.shields.io/pypi/dm/openadapt.svg)](https://pypi.org/project/openadapt/)\n[![Python 3.10–3.12](https://img.shields.io/badge/python-3.10%E2%80%933.12-blue)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/license-MIT-3e6b4f.svg)](LICENSE)\n[![Discord](https://img.shields.io/badge/Discord-community-5865F2?logo=discord&logoColor=white)](https://discord.gg/yF527cQbDG)\n\n**Automate the UI-only work your APIs can’t reach.**\n\nOpenAdapt is the verified execution layer for consequential work trapped behind\nhuman interfaces. It turns a demonstration into an inspectable workflow that\nruns across browser, Windows, macOS, Linux, RDP, and Citrix/VDI. Healthy runs\nuse no generative-model calls. Consequential actions are identity-gated,\ndeclared results are verified, and uncertainty halts for review instead of\nbecoming a wrong click.\n\nUse a supported API when one fits. Use OpenAdapt when the interface is\nunavoidable and the outcome needs proof.\n\n[Website](https://openadapt.ai) ·\n[Documentation](https://docs.openadapt.ai) ·\n[Desktop downloads](https://openadapt.ai/download) ·\n[OpenAdapt Cloud](https://app.openadapt.ai) ·\n[OpenAdapt Execute](https://openadapt.ai/execute) ·\n[Qualify a workflow](https://openadapt.ai/qualify)\n\n> **Repository role:** this is the flagship OpenAdapt project, the source of\n> `pip install openadapt`, and the stable community entry point. The compiler\n> and governed runtime are implemented in\n> [`openadapt-flow`](https://github.com/OpenAdaptAI/openadapt-flow). This\n> repository provides the unified `openadapt` CLI and compatibility surface,\n> not a second engine. Lifecycle: **Beta**.\n\n## Try it locally\n\nOpenAdapt requires Python 3.10–3.12. Install the browser capability for the\nbundled tutorial:\n\n```bash\npython -m pip install --upgrade 'openadapt[browser]'\n```\n\nOn Windows `cmd.exe`, use double quotes:\n`python -m pip install --upgrade \"openadapt[browser]\"`.\n\nRun the complete bundled tutorial with one command. It needs no account,\ntarget application, API key, or operating-system automation permissions:\n\n```bash\nopenadapt quickstart\n```\n\nThe tutorial records and compiles a task in MockMed (a synthetic\npractice-management fixture), certifies it with the\nshipped clinical-write policy, and runs it under the Standard profile. A\nseparate read-only API confirms the saved record outside the screen that\nperformed the write. The healthy run returns `VERIFIED` with no model or Cloud\ncall.\n\nYou now have:\n\n- `openadapt-quickstart/recording/`: the demonstrated interaction and retained target evidence\n- `openadapt-quickstart/bundle/`: the inspectable compiled workflow\n- `openadapt-quickstart/run/REPORT.md`: the ordered actions, evidence, outcome, and any halt reason\n- `openadapt-quickstart/run/receipt.json`: the privacy-safe local receipt for the synthetic verified run\n\nInspect the program and its deployment gaps:\n\n```bash\nopenadapt flow visualize openadapt-quickstart/bundle --out graph.html\nopenadapt flow lint openadapt-quickstart/bundle\n```\n\nThe bundled workflow is a tutorial, not a production certification. Qualifying\na real workflow adds its application boundary, action risks, identities,\neffect verifiers, fault cases, and deployment policy. Continue with the\n[five-minute walkthrough](https://docs.openadapt.ai/get-started/).\n\n## Record your workflow\n\nThe browser path is an explicit capability, so native and remote-only installs\ndo not carry the Playwright driver:\n\n```bash\nopenadapt flow record --backend web --url https://your-app.example --out rec\nopenadapt flow compile rec --out bundle --name my-workflow\nopenadapt flow replay bundle --url https://your-app.example --run-dir run\n```\n\nThe first browser action downloads its matching Chromium build once. A native\ndesktop, RDP, or Citrix workflow never downloads or imports it.\n\nInstall only the capabilities needed for native or remote work:\n\n```bash\npython -m pip install \"openadapt[capture]\"          # local human demonstration\npython -m pip install \"openadapt[capture,windows]\"  # Windows UI Automation\npython -m pip install \"openadapt[capture,macos]\"    # macOS Accessibility\npython -m pip install \"openadapt[capture,linux]\"    # Linux AT-SPI\npython -m pip install \"openadapt[capture,rdp]\"      # RDP transport\npython -m pip install \"openadapt[privacy]\"          # PII/PHI scrubbing\n```\n\nFor the visual authoring and review experience, install\n[OpenAdapt Desktop](https://openadapt.ai/download).\n\n![Synthetic OpenAdapt Desktop PR #93 preview of a verified six-step workflow and its evidence contract](https://raw.githubusercontent.com/OpenAdaptAI/OpenAdapt/main/media/desktop-replay-verified.png)\n\n*Image provenance: headless synthetic fixture from Desktop PR #93 commit `1f50259ffb052776742b284a493eb9c735caa122`; no live run, engine sidecar, account, customer data, or physical input. SHA-256: `5616f0b0812a5e366f58e448689600e16eeab234aaf92ec6d49133efa0be33ee`. The final release hash will be updated after Desktop 0.15.*\n\n## What makes it different\n\n### Verified business effects\n\nA click succeeding is not proof that the intended transaction committed.\nOpenAdapt separates action delivery from outcome verification. Workflows can\nbind consequential writes to an independent interface, a separate read-only\nsession, or persisted-state reacquisition before reporting `VERIFIED`.\n\n### Fail-closed execution\n\nBefore a consequential action, the runtime can check authorization, workflow\nstate, record identity, target uniqueness, and the fresh application view.\nAfterward it waits for settled state and evaluates the declared effect. If the\ncontract cannot be established, it returns evidence and halts.\n\n### A focused question when a person is needed\n\nA halted run can send one signed task to the OpenAdapt phone view. The task can\nask about record identity, target ambiguity, a required human step, a saved\nresult, uncertain delivery, or an optional step. The phone shows only the\nactions that the current sealed pause capability permits. It does not click the\napplication or declare success.\n\nAfter an answer, the customer-controlled runner reads the live application\nagain. It checks the current pause, session, workflow state, identity, target,\nand effect requirements before it continues. Protected screenshots stay on the\nrunner. The hosted path carries closed status values and counts; a customer-run\nlocal portal can show the full evidence inside the customer's boundary.\n\n[Try the interactive mobile decision demo](https://app.openadapt.ai/demo/attention)\nwith synthetic application data. A domain label in the demo comes from that\nfixture. A production workflow uses the reviewed entity class in its exact\nqualification contract, or the neutral `record` or `item` label.\n\n### Deterministic healthy runs\n\nThe compiler retains structural, accessibility, visual, OCR, spatial, and\ntransition evidence from the demonstration. The runtime uses the strongest\nsignals available on each surface. A generative model may propose a governed\nrepair when explicitly allowed, but it is not on the healthy execution path.\n\n### Governed repair\n\nRepairs are versioned changes, not permission to improvise. Candidate repairs\ncan be reviewed, tested against the workflow’s qualification contract,\npromoted, and rolled back.\n\n## One workflow model, multiple surfaces\n\nOpenAdapt keeps portable workflow intent separate from environment-specific\nbindings:\n\n| Product family | Execution surfaces | Strongest available evidence |\n|---|---|---|\n| Browser | Chromium-based web applications | DOM, accessibility, visual, OCR |\n| Native desktop | Windows, macOS, Linux | UI Automation, Accessibility, AT-SPI, visual |\n| Remote applications | RDP, Citrix Workspace, VDI | External pixels, OCR, anchors, keyboard, mouse |\n\nRemote execution operates from a customer-controlled runner through the visible\nclient. It does not require OpenAdapt software inside the remote session.\nEvery workflow is qualified against its exact application, version,\nenvironment, identity contract, and effect verifier rather than inheriting a\nblanket platform claim.\n\nSubstrate maturity, stated the same way across the OpenAdapt repositories:\n\n| Substrate | Maturity |\n| --- | --- |\n| Browser (web) | Beta; available in production today through the managed browser product |\n| Native desktop (Windows, macOS, Linux) | Available for customer-controlled execution; qualification evidence is task- and environment-specific |\n| Remote display (RDP) | Available for customer-controlled execution; qualification evidence is task- and environment-specific |\n| Citrix / VDI | Available for customer-controlled execution; real-environment ICA/HDX qualification is deployment-specific |\n\nSee the [substrate model](https://docs.openadapt.ai/concepts/substrate-model/),\n[qualification evidence](https://docs.openadapt.ai/get-started/what-works-today/),\nand [CLI reference](https://docs.openadapt.ai/reference/cli/) for the full\ncontracts.\n\n## Local, customer-controlled, or managed\n\n| Operating model | Best for | Where application data and execution live |\n|---|---|---|\n| Local / self-hosted | Community use and local automation | Your machine or infrastructure |\n| Customer-controlled | Sensitive data, native apps, RDP, Citrix, private networks | Your declared boundary; Cloud can coordinate approved metadata and artifacts |\n| Managed execution | Approved browser and non-sensitive workflows | OpenAdapt-managed runners and control plane |\n\nRaw recordings and live observations stay local by default. Artifacts cross a\nboundary only through explicit sanitization and exact-byte approval. Review the\n[trust center](https://openadapt.ai/security) before choosing a deployment.\n\nThe local launcher, compiler/runtime, Desk","default_branch":"main","files":332,"tree":[".github/CODEOWNERS",".github/FUNDING.yml",".github/ISSUE_TEMPLATE/bug_form.yml",".github/ISSUE_TEMPLATE/config.yml",".github/ISSUE_TEMPLATE/new_feature.yml",".github/ISSUE_TEMPLATE/use_case.yml",".github/dependabot.yml",".github/pull_request_template.md",".github/release-health.json",".github/workflows/codeql.yml",".github/workflows/dependency-review.yml",".github/workflows/docs.yml",".github/workflows/main.yml",".github/workflows/notify-docs.yml",".github/workflows/platform-manifest.yml",".github/workflows/release-and-publish.yml",".github/workflows/release-health.yml",".github/workflows/secret-scan.yml",".gitignore",".gitleaks.toml","CHANGELOG.md","CLAUDE.md","CODE_OF_CONDUCT.md","CONTRIBUTING.md","LICENSE","README.md","SECURITY.md","TRADEMARKS.md","docs/LEGACY_FREEZE.md","docs/_scripts/README.md","docs/_scripts/generate_docs_screenshots.py","docs/architecture-evolution.md","docs/architecture.md","docs/assets/architecture-diagram.png","docs/assets/macOS_accessibility.png","docs/assets/macOS_input_monitoring.png","docs/assets/macOS_permissions_alert.png","docs/assets/macOS_screen_recording.png","docs/cli.md","docs/contributing.md","docs/design/INDEX.md","docs/design/openadapt-tray.md","docs/design/telemetry-design.md","docs/design/tray-logging.md","docs/getting-started/installation.md","docs/getting-started/permissions.md","docs/getting-started/quickstart.md","docs/index.md","docs/legacy/freeze.md","docs/packages/capture.md","docs/packages/evals.md","docs/packages/grounding.md","docs/packages/index.md","docs/packages/ml.md","docs/packages/privacy.md","docs/packages/retrieval.md","docs/packages/viewer.md","docs/permissions-macos.md","docs/platform-manifest.md","docs/reference-sandbox-source-and-notices.json","examples/capture_train_eval.py","examples/demo_retrieval_augmented.py","legacy/.flake8","legacy/.pre-commit-config.yaml","legacy/CHANGELOG.md","legacy/CONTRIBUTING.md","legacy/README.md","legacy/SETUP.md","legacy/assets/fixtures.sql","legacy/assets/macOS_accessibility.png","legacy/assets/macOS_input_monitoring.png","legacy/assets/macOS_permissions_alert.png","legacy/assets/macOS_screen_recording.png","legacy/assets/visualize.png","legacy/build_scripts/get_version.py","legacy/build_scripts/macos.sh","legacy/build_scripts/test_app_run_macos.sh","legacy/build_scripts/test_app_run_windows.bat","legacy/build_scripts/upload_release_artifacts.sh","legacy/chrome_extension/background.js","legacy/chrome_extension/content.js","legacy/chrome_extension/icons/logo.png","legacy/chrome_extension/manifest.json","legacy/deploy/.env.example","legacy/deploy/README.md","legacy/deploy/deploy/models/omniparser/.dockerignore","legacy/deploy/deploy/models/omniparser/Dockerfile","legacy/deploy/deploy/models/omniparser/client.py","legacy/deploy/deploy/models/omniparser/deploy.py","legacy/deploy/pyproject.toml","legacy/experiments/describe_actions.py","legacy/experiments/fastsamsom.py","legacy/experiments/gpt4o_seg.py","legacy/experiments/handle_similar_segments.py","legacy/experiments/imagesimilarity.py","legacy/install/install_openadapt.ps1","legacy/install/install_openadapt.sh","legacy/openadapt/__init__.py","legacy/openadapt/adapters/__init__.py","legacy/openadapt/adapters/prompt.py","legacy/openadapt/adapters/replicate.py","legacy/openadapt/adapters/som.py","legacy/openadapt/adapters/ultralytics.py","legacy/openadapt/alembic.ini","legacy/openadapt/alembic/README","legacy/openadapt/alembic/context_loader.py","legacy/openadapt/alembic/env.py","legacy/openadapt/alembic/script.py.mako","legacy/openadapt/alembic/versions/104d4a614d95_add_performancestat.py","legacy/openadapt/alembic/versions/186316d4f3ca_add_scrubbed_columns.py","legacy/openadapt/alembic/versions/20f9c2afb42c_rename_input_event_to_action_event.py","legacy/openadapt/alembic/versions/2a8a241785f2_add_original_recording_id.py","legacy/openadapt/alembic/versions/30a5ba9d6453_add_active_segment_description_and_.py","legacy/openadapt/alembic/versions/5139d7df38f6_add_recording_task_description.py","legacy/openadapt/alembic/versions/530f0663324e_add_recording_video_start_time.py","legacy/openadapt/alembic/versions/57d78d23087a_add_windowevent_state.py","legacy/openadapt/alembic/versions/607d1380b5ae_add_memorystat.py","legacy/openadapt/alembic/versions/8495f5471e23_add_recording_config.py","legacy/openadapt/alembic/versions/8713b142f5de_add_png_diff_data_and_png_diff_mask_data.py","legacy/openadapt/alembic/versions/87a78a84a8bf_remove_recording_timestamp_fks.py","legacy/openadapt/alembic/versions/98505a067995_add_browserevent_table.py","legacy/openadapt/alembic/versions/98c8851a5321_add_audio_info.py","legacy/openadapt/alembic/versions/a29b537fabe6_add_disabled_field_to_action_event.py","legacy/openadapt/alembic/versions/b206c80f7640_add_recording_inputevent_screenshot_.py","legacy/openadapt/alembic/versions/b2dc41850120_window_window_id.py","legacy/openadapt/alembic/versions/bb25e889ad71_generate_unique_user_id.py","legacy/openadapt/alembic/versions/c24abb5455d3_create_new_recording_fks.py","legacy/openadapt/alembic/versions/d63569e4fb90_actionevent_element_state.py","legacy/openadapt/alembic/versions/d714cc86fce8_add_scrubbed_recording_model.py","legacy/openadapt/alembic/versions/ec337f277666_datetime_timestamp.py","legacy/openadapt/alembic/versions/f9586c10a561_migrate_data_to_new_fks.py","legacy/openadapt/app/__init__.py","legacy/openadapt/app/assets/logo.ico","legacy/openadapt/app/assets/logo.png","legacy/openadapt/app/assets/logo_inverted.png","legacy/openadapt/app/dashboard/.eslintrc.json","legacy/openadapt/app/dashboard/.gitignore","legacy/openadapt/app/dashboard/.nvmrc","legacy/openadapt/app/dashboard/.prettierrc.json","legacy/openadapt/app/dashboard/README.md","legacy/openadapt/app/dashboard/__init__.py","legacy/openadapt/app/dashboard/api.ts","legacy/openadapt/app/dashboard/api/action_events.py","legacy/openadapt/app/dashboard/api/index.py","legacy/openadapt/app/dashboard/api/recordings.py","legacy/openadapt/app/dashboard/api/scrubbing.py","legacy/openadapt/app/dashboard/api/settings.py","legacy/openadapt/app/dashboard/app/favicon.ico","legacy/openadapt/app/dashboard/app/globals.css","legacy/openadapt/app/dashboard/app/layout.tsx","legacy/openadapt/app/dashboard/app/onboarding/page.tsx","legacy/openadapt/app/dashboard/app/providers.tsx","legacy/openadapt/app/dashboard/app/recordings/RawRecordings.tsx","legacy/openadapt/app/dashboard/app/recordings/ScrubbedRecordings.tsx","legacy/openadapt/app/dashboard/app/recordings/detail/page.tsx","legacy/openadapt/app/dashboard/app/recordings/page.tsx","legacy/openadapt/app/dashboard/app/routes.ts","legacy/openadapt/app/dashboard/app/scrubbing/ScrubbingUpdates.tsx","legacy/openadapt/app/dashboard/app/scrubbing/page.tsx","legacy/openadapt/app/dashboard/app/settings/(api_keys)/form.tsx","legacy/openadapt/app/dashboard/app/settings/(api_keys)/page.tsx","legacy/openadapt/app/dashboard/app/settings/SettingsHeader.tsx","legacy/openadapt/app/dashboard/app/settings/layout.tsx","legacy/openadapt/app/dashboard/app/settings/navbar.tsx","legacy/openadapt/app/dashboard/app/settings/record_and_replay/form.tsx","legacy/openadapt/app/dashboard/app/settings/record_and_replay/page.tsx","legacy/openadapt/app/dashboard/app/settings/scrubbing/form.tsx","legacy/openadapt/app/dashboard/app/settings/scrubbing/page.tsx","legacy/openadapt/app/dashboard/app/settings/utils.ts","legacy/openadapt/app/dashboard/app/utils.ts","legacy/openadapt/app/dashboard/assets/logo.png","legacy/openadapt/app/dashboard/components/ActionEvent/ActionEvent.tsx","legacy/openadapt/app/dashboard/components/ActionEvent/ActionEvents.tsx","legacy/openadapt/app/dashboard/components/ActionEvent/RemoveActionEvent.tsx","legacy/openadapt/app/dashboard/components/ActionEvent/Screenshots.tsx","legacy/openadapt/app/dashboard/components/ActionEvent/index.tsx","legacy/openadapt/app/dashboard/components/Navbar/Navbar.tsx","legacy/openadapt/app/dashboard/components/Navbar/index.tsx","legacy/openadapt/app/dashboard/components/Onboarding/steps/BookACall.tsx","legacy/openadapt/app/dashboard/components/Onboarding/steps/RegisterForUpdates.tsx","legacy/openadapt/app/dashboard/components/Onboarding/steps/Tutorial.tsx","legacy/openadapt/app/dashboard/components/RecordingDetails/RecordingDetails.tsx","legacy/openadapt/app/dashboard/components/RecordingDetails/index.tsx","legacy/openadapt/app/dashboard/components/Shell/Shell.tsx","legacy/openadapt/app/dashboard/components/Shell/index.tsx","legacy/openadapt/app/dashboard/components/SimpleTable/SimpleTable.tsx","legacy/openadapt/app/dashboard/components/SimpleTable/index.tsx","legacy/openadapt/app/dashboard/entrypoint.ps1","legacy/openadapt/app/dashboard/entrypoint.sh","legacy/openadapt/app/dashboard/index.js","legacy/openadapt/app/dashboard/next.config.js","legacy/openadapt/app/dashboard/postcss.config.js","legacy/openadapt/app/dashboard/run.py","legacy/openadapt/app/dashboard/tailwind.config.js","legacy/openadapt/app/dashboard/tsconfig.json","legacy/openadapt/app/dashboard/types/action-event.ts","legacy/openadapt/app/dashboard/types/recording.ts","legacy/openadapt/app/dashboard/types/scrubbing.ts","legacy/openadapt/app/tray.py","legacy/openadapt/browser.py","legacy/openadapt/build.py","legacy/openadapt/build_utils.py","legacy/openadapt/cache.py","legacy/openadapt/capture/__init__.py","legacy/openadapt/capture/__main__.py","legacy/openadapt/capture/_linux.py","legacy/openadapt/capture/_macos.py","legacy/openadapt/capture/_windows.py","legacy/openadapt/common.py","legacy/openadapt/config.defaults.json","legacy/openadapt/config.py","legacy/openadapt/contrib/__init__.py","legacy/openadapt/contrib/som/__init__.py","legacy/openadapt/contrib/som/visualizer.py","legacy/openadapt/custom_logger.py","legacy/openadapt/db/__init__.py","legacy/openadapt/db/crud.py","legacy/openadapt/db/db.py","legacy/openadapt/db/list.py","legacy/openadapt/db/remove.py","legacy/openadapt/deprecated/app/cards.py","legacy/openadapt/drivers/anthropic.py","legacy/openadapt/drivers/google.py","legacy/openadapt/drivers/openai.py","legacy/openadapt/entrypoint.py","legacy/openadapt/error_reporting.py","legacy/openadapt/events.py","legacy/openadapt/extensions/synchronized_queue.py","legacy/openadapt/models.py","legacy/openadapt/playback.py","legacy/openadapt/plotting.py","legacy/openadapt/privacy/__init__.py","legacy/openadapt/privacy/base.py","legacy/openadapt/privacy/providers/__init__.py","legacy/openadapt/privacy/providers/aws_comprehend.py","legacy/openadapt/privacy/providers/presidio.py","legacy/openadapt/privacy/providers/private_ai.py","legacy/openadapt/productivity.py","legacy/openadapt/prompts/apply_replay_instructions.j2","legacy/openadapt/prompts/describe_recording--segment.j2","legacy/openadapt/prompts/describe_recording.j2","legacy/openadapt/prompts/description.j2","legacy/openadapt/prompts/generate_action_event--segment.j2","legacy/openadapt/prompts/generate_action_event.j2","legacy/openadapt/prompts/is_action_complete.j2","legacy/openadapt/prompts/system.j2","legacy/openadapt/record.py","legacy/openadapt/replay.py","legacy/openadapt/scripts/__init__.py","legacy/openadapt/scripts/reset_db.py","legacy/openadapt/scripts/scrub.py","legacy/openadapt/scrub.py","legacy/openadapt/share.py","legacy/openadapt/spacy_model_helpers/__init__.py","legacy/openadapt/spacy_model_helpers/download_model.py","legacy/openadapt/spacy_model_helpers/spacy_model_init.py","legacy/openadapt/start.py","legacy/openadapt/strategies/__init__.py","legacy/openadapt/strategies/base.py","legacy/openadapt/strategies/demo.py","legacy/openadapt/strategies/mixins/ascii.py","legacy/openadapt/strategies/mixins/huggingface.py","legacy/openadapt/strategies/mixins/ocr.py","legacy/openadapt/strategies/mixins/openai.py","legacy/openadapt/strategies/mixins/sam.py","legacy/openadapt/strategies/mixins/summary.py","legacy/openadapt/strategies/naive.py","legacy/openadapt/strategies/segment.py","legacy/openadapt/strategies/stateful.py","legacy/openadapt/strategies/vanilla.py","legacy/openadapt/strategies/visual.py","legacy/openadapt/strategies/visual_browser.py","legacy/openadapt/utils.py","legacy/openadapt/video.py","legacy/openadapt/vision.py","legacy/openadapt/visualize.py","legacy/openadapt/window/__init__.py","legacy/openadapt/window/_linux.py","legacy/openadapt/window/_macos.py","legacy/openadapt/window/_windows.py","legacy/permissions_in_macOS.md","legacy/scripts/downloads.py","legacy/scripts/postinstall.py","legacy/setup.py","legacy/tests/assets/calculator.png","legacy/tests/assets/excel.png","legacy/tests/assets/sample_llc_1.pdf","legacy/tests/assets/test_emr_image.png","legacy/tests/assets/test_image_redaction_presidio.png","legacy/tests/assets/test_image_redaction_privateai.png","legacy/tests/conftest.py","legacy/tests/openadapt/drivers/test_anthropic.py","legacy/tests/openadapt/drivers/test_google.py","legacy/tests/openadapt/drivers/test_openai.py","legacy/tests/openadapt/privacy/providers/test_comprehend_scrub.py","legacy/tests/openadapt/privacy/providers/test_presidio_scrub.py","legacy/tests/openadapt/privacy/providers/test_private_ai_scrub.py","legacy/tests/openadapt/privacy/test_providers.py","legacy/tests/openadapt/test_browser.py","legacy/tests/openadapt/test_crop.py","legacy/tests/openadapt/test_crud.py","legacy/tests/openadapt/test_events.py","legacy/tests/openadapt/test_models.py","legacy/tests/openadapt/test_share.py","legacy/tests/openadapt/test_summary.py","legacy/tests/openadapt/test_utils.py","legacy/tests/openadapt/test_video.py","legacy/tests/openadapt/test_vision.py","legacy/workflows/release-and-publish.yml","media/desktop-replay-halted.png","media/desktop-replay-verified.png","media/openadapt-hero.svg","mkdocs.yml","openadapt/__init__.py","openadapt/cli.py","openadapt/version.py","platform-manifest.json","pyproject.toml","scripts/check_release_health.py","scripts/check_source_boundary.py","scripts/generate_platform_manifest.py","scripts/validate_platform_manifest.py","scripts/verify_release_artifacts.py","scripts/verify_release_lock.py","source-policy.public.json","tests/test_cli_smoke.py","tests/test_import_integrity.py","tests/test_platform_manifest_drift.py","tests/test_release_artifacts.py","tests/test_release_lock.py","tests/test_source_boundary.py","uv.lock"],"storefront":"/r/OpenAdaptAI","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/OpenAdaptAI/OpenAdapt/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}