Status: Proposed — engineering direction agent-adopted; named production ratification pending
Date: 2026-09-08
Authors: Eve SOTA gap-closure task 6.1
Reviewers: pending — Product owner, Eve workbench/platform owner, Security owner, Evaluation owner, Reliability owner
This ADR is effective for implementation and CI on merge. It chooses owners and fail-closed boundaries; it does not admit native computer use, approve live browser autonomy, or fabricate named human review.
Context#
The repository contains three browser-shaped paths. The Eve/Hermes assistant has
five real Playwright tools behind createPlaywrightPageController.
@psyche/browser-automation is a second, broader Playwright state machine still
imported by the Teams and Webex conferencing adapters.
@psyche/computer-use-core is an unwired screenshot/reason/act loop that
reaches the OS through @oshun/iris-computer-use-native; Task 6.2 moved its
planning and vision paths behind the shared model registry/provider interfaces,
and Task 6.3 made missing native capabilities fail closed while isolating
doubles behind testing subpaths.
Without an ownership decision, admitting the third path could create two ways to drive the browser, two session models, and two security/evaluation surfaces. Browser Playwright evidence would also be easy to mislabel as proof of OS-level desktop control.
Decision#
One Eve browser driver#
@oshun/assistant owns Eve browser driving through
createPlaywrightPageController and createBrowserTools in
libs/oshun/assistant/src/tools/browser.tool.ts.
Its engine is the real playwright package.
- Eve runtime code may consume that owner; it may not import Playwright directly from another production module.
- Playwright test projects and repository verification scripts are evidence drivers, not product-runtime owners.
- A second browser state machine, wrapper, CDP client, or native pixel loop aimed at a browser window is rejected by default.
- Browser launch, contexts/pages/profiles, DOM selectors, navigation/history, cookies/storage, network interception, and browser transfer all stay with this owner.
The current Eve production-source census has 1424 files, 1 direct Playwright importer, and 0 import of the legacy Psyche browser package. The sole direct importer is:
libs/oshun/assistant/src/tools/browser.tool.ts
A sharply bounded native owner#
@psyche/computer-use-core has value only at the operating-system boundary:
native display/window pixels, accessibility, application/window identity and
focus, pointer, keyboard, scrolling/dragging, governed clipboard, and governed
native file dialogs.
It must not launch or connect a browser engine, own browser contexts/pages/profiles, operate the DOM, navigate URLs/history, intercept browser traffic, manage browser storage or transfers, or drive a recognized browser window through native input. Detecting that pixels belong to a browser is allowed only so the native path can refuse and hand the task to the Playwright owner.
The source census finds 2 native-binding importers, 0 prohibited browser imports, and 0 browser-driving syntax hits. It also records provider ownership and the post-audit absence of production fallback/test-double surfaces without treating the package as admitted:
- Direct provider importers: none (Task 6.2 completed the shared-provider rebind).
- Production fallback-bearing files: none (Task 6.3 completed).
- Production test-double-exporting files: none (Task 6.3 completed).
Existing Psyche browser machine#
@psyche/browser-automation is frozen as a legacy, non-Eve adapter. Its two
current production source consumers may remain until migration, but they are not
precedent for a new consumer or for Eve admission:
libs/psyche/teams-integration/src/teams-ui-automation.tslibs/psyche/webex-integration/src/webex-ui-automation.ts
Deleting or migrating either consumer is allowed. Adding a consumer, dependency, or Eve import fails the static gate.
A measured exception cannot create two owners#
The default answer is no. Before implementation, an exception needs a successor ADR, a named decision owner, and a preregistered same-task/same-budget/same-environment comparison covering at least 10 independent cases across at least 3 task families. It must report verified-task-success, human-intervention-rate, unsafe-action-rate, false-success-rate, latency, cost, and show no security, privacy, or reliability regression.
A win transfers or extends the single owner; it never permits two browser machines to coexist. An exception receipt that merely shows a demo, synthetic mock, or browser emulation is inadmissible.
Rejected options#
| Option | Reason |
|---|---|
Admit computer-use-core for browser and desktop work |
It duplicates the Playwright owner and makes browser evidence indistinguishable from native proof. |
Make @psyche/browser-automation the Eve owner |
Its broad session, page-object, network, cookie, and storage machine is already legacy and exceeds Eve's existing minimal tool contract. |
| Treat every Playwright test as a browser owner | Test harnesses verify products; they are not product runtime authority. |
| Permit both drivers and select dynamically | A router does not remove duplicate state, policy, security, and evaluation surfaces. |
| Allow an undocumented special case | "Measured" requires a preregistered comparison and an accountable decision, not an implementation-first waiver. |
Governance and downstream gates#
Implementation posture is effective-on-merge. Live admission is blocked.
Named ratification remains pending.
| Task | Obligation retained |
|---|---|
| 6.2 | Completed: shared provider bindings and governed screenshot-input contract. |
| 6.3 | Completed: production paths fail closed and doubles are test-confined. |
| 6.4 | Prove OS-level control in a separate real native fixture. |
| 6.5 | Enforce per-run native authority, freshness, budgets, and verified end state. |
| 6.6 | Admit native computer use only after all preceding gates pass. |
Consequences#
- Eve browser work has one code owner and one engine surface to secure and evaluate.
- Native desktop proof must use a separate OS-level fixture; Playwright can verify browser composition but cannot substitute for it.
- Browser recognition in the screen analyzer remains useful as a refusal/handoff signal, not authority to drive the browser.
- The two frozen conferencing consumers remain visible migration debt instead of silently becoming approved architecture.
- The machine record is
docs/audits/eve-sota-computer-use-ownership/2026-09-08.json, digest4a0c65f3f16e716c293ece4e921571eb33455cdbad41b36f8cbc79bf3f7fdade.
Limitations#
- This is a source-derived ownership and admission contract. It does not execute a browser or native desktop and does not admit computer-use-core to Eve.
- The existing @psyche/browser-automation state machine remains in two non-Eve conferencing adapters as frozen migration debt; this decision prevents expansion but does not remove those consumers.
- Task 6.2 removed the direct Anthropic binding and added separate registry/provider contracts for planning and vision with governed screenshot inputs; this ownership record does not itself prove the retained live provider calls.
- Task 6.3 removed native-unavailable false successes, isolated test doubles behind explicit testing subpaths, and retained the simulated Iris desktop prototype only as a production-unreachable test-only package.
- Named product, platform, security, evaluation, and reliability ratification is pending. Live native admission remains blocked through task 6.6.