cua-driver enforces authorization inside the native runtime, after transport arguments are sanitized and before any platform action runs. CLI, MCP, direct SDK, private-worker, and service-backed calls all reach the same enforcement boundary. The permission mode is fixed at launch and belongs to the process that owns the runtime. A running daemon’s mode cannot be changed — stop it and start it again with the configuration you want.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/trycua/cua/llms.txt
Use this file to discover all available pages before exploring further.
Choosing a Mode
- standard
- bounded
- unrestricted
The default mode. Routine observation, input, file transfer, isolated browser use, recording, and agent-adjustable settings run without Cua prompts. Residual boundaries (such as attaching to an existing Chromium profile) return a structured refusal unless they have an explicit grant or trusted host callback.Best for: normal local CLI and MCP use, development, interactive sessions.
autonomous is a manifest compatibility alias for bounded. yolo is a
configuration alias for unrestricted. New integrations should use the
canonical names.Setting the Mode Without CLI Flags
The mode is read once when the runtime that owns the driver starts. Launchers that cannot pass flags —cua-driver mcp owning its own runtime on Windows and Linux, a Windows Scheduled Task, or an embedding host — use equivalent environment variables:
| CLI flag | Environment variable |
|---|---|
--permission-mode <mode> | CUA_DRIVER_PERMISSION_MODE=<mode> |
--session-policy <path> | CUA_DRIVER_SESSION_POLICY_FILE=<path> |
--approve-session-policy | CUA_DRIVER_SESSION_POLICY_APPROVED=1 |
--dangerously-bypass-approvals | CUA_DRIVER_DANGEROUSLY_BYPASS_APPROVALS=1 |
1, true, yes, or on for their boolean form.
CUA_DRIVER_SESSION_POLICY_FILE and CUA_DRIVER_SESSION_POLICY_APPROVED are rejected in standard and unrestricted mode, so a stale exported variable prevents startup rather than applying silently.
These variables are trusted launch configuration on the same footing as CLI flags. An agent tool call can never set them.
What Standard Mode Allows
Standard mode preserves practical autonomous workflows without requiring explicit approval for routine actions.| Operation | Standard behavior |
|---|---|
| Observe windows, applications, and the desktop | Allow |
| Click, type, scroll, drag, and focus | Allow |
| Create and use a driver-owned isolated browser | Allow |
| Read visible page content through typed browser tools | Allow |
| Upload, download, screenshot, record, and replay validated paths | Allow |
| Change agent-adjustable cursor and image settings | Allow and audit |
| Terminate a process proven to have been launched by this runtime | Allow after process fingerprint revalidation |
| Terminate a foreign process | Deny |
| Run unbounded legacy page mutation scripts | Deny |
| Raise an operating-system permission prompt from an agent tool call | Deny |
| Attach to an existing logged-in Chromium profile | Require an explicit launch grant or trusted host authorization |
| Invoke an unknown risk-bearing operation | Deny |
Attaching to Existing Chromium Profiles
An existing profile can contain live cookies and authenticated sites. Standard mode keeps attachment as an explicit boundary. Authorize it at daemon launch:--grant is repeatable and is trusted launch configuration. It cannot modify an already-running daemon — restart the daemon with the same grant when needed.
Other valid authorization paths:
- A
boundedmanifest that allowskind: existing_profile. - A
DriverAuthorizationHostcallback installed by an embedding application. unrestrictedmode with its dangerous acknowledgement.
Bounded Manifests
Bounded mode is deny-by-default. A tool must appear inallow.tools, and every resource crossed by that call must match the manifest.
Manifest version 2 supports application identities, browser profile kinds, and directory roots:
Origin Scope Excludes Generic Input
resources.browser.origins binds the typed browser adapter only. A manifest that declares origins cannot also allow tools that reach a page around that adapter. The runtime refuses to start if it does:
click, double_click, right_click, drag, scroll, type_text, press_key, hotkey, set_value, get_window_state, get_desktop_state, get_accessibility_tree, verify_state, and page.
Browser access and generic desktop input consequently belong to separate manifests and separate runtimes.
Version 1 manifests remain loadable, but version 2 is preferred for
pre-launch and unattended workflows.
Authorization Stack
Every call must pass all applicable layers in order:- Hard invariants (self-targeting, protected-host checks).
- The reviewed built-in tool and risk map.
- Administrator policy from
CUA_DRIVER_MANAGED_POLICY_FILE, when set. - User policy from
CUA_DRIVER_POLICY_FILE, when set. - The bounded manifest, when the active mode is
bounded. - A launch grant or trusted host authorization for a residual standard-mode boundary.
Revocation
Revoke a single session:start_session re-declares it.
Host Authorization and Embedding
An embedding application may installDriverAuthorizationHost to decide residual standard-mode requests itself. Cua supplies an attested, request-bound resource and digest; the host returns allow, deny, or cancel.
An optional DriverActivityObserver receives content-free action, authorization, grant, and session events. Events never contain page text, typed input, file contents, screenshots, or raw resource identities.
When no launch grant or host callback exists, a residual boundary returns a structured authorization_required refusal — no Cua-owned modal is shown.