Cua DriverReference
Changelog
Release history for cua-driver
cua-driver Changelog
All notable changes to cua-driver are documented here.
These are the cua-driver-rs (Rust port) releases. The Rust port ships the same
user-facing cua-driver binary for macOS and Windows, plus Linux pre-release
artifacts for early testing. All versions are currently published as GitHub
prereleases under the cua-driver-rs-v* tag prefix (distinct from the Swift
driver's cua-driver-v* tags so their artifacts don't collide).
The canonical, always-current source is the
GitHub releases page. Each GitHub
release body is auto-generated per release from the commits touching
libs/cua-driver/rust, including SHA256 checksums and install instructions.
0.5.3 (2026-06-11)
- Linux: background drag and held-button tools + MPX parallel drags (#1871).
Adds
parallel_mouse_drag: each session gets its own MPX master pointer (fed by a per-session uinput slave), so multiple agent cursors can drag concurrently in the same window. Drags follow full waypoint paths — a straight from→to segment or a functionfn= y(x) (e.g."300+150*sin(x/40)") — as one continuous held glide. A device-specific XI2 shield grab keeps the window manager blind to the drag's button press, so parallel drags no longer steal focus from the user's active window, and drag masters are cleaned up per call. Also adds a confirmation-gatedinstall_ffmpegtool that detects the platform package manager and (only withconfirm: true) installs the ffmpeg binary the video recording backend shells out to. - Linux: agent cursor in background sessions + background terminal typing
(#1789). The agent cursor overlay now renders for background (unfocused)
sessions, and typing reaches background terminals; Linux keyboard input
switched from
XSendEventto XTEST injection (#1805) so synthetic keys are accepted by apps that ignore sent events.
0.5.2 (2026-06-04)
- Windows: background input without z-raise — input lands in target windows without raising them, plus multi-cursor demos and agent cursor overlay improvements (#1809).
- Windows: DPI awareness manifest so coordinates are correct on scaled displays (#1821).
- Python:
cua-driverPyPI wrapper with bundled binaries (#1849), plus Windows ARM64 support andcua-driver-uia.exeextraction (#1850).
0.5.1 (2026-06-01)
- Install home unified on
~/.cua-driver+ collision fix. The release installer (install.sh→_install-rust.sh) was still defaulting its package home to the legacy~/.cua-driver-rs, while the local installer (install-local.sh) and the runtime already used~/.cua-driver(renamed in v0.2.16). That mismatch meant a machine could end up with two homes and two conflicting installs. The release installer now defaults to~/.cua-driver(still honoring theCUA_DRIVER_RS_HOMEoverride), and on every install it (a) cleans up a priorinstall-localdev build under the shared home — stops the daemon, removes the*-local-*release dirs and the local signing-identity marker — and (b) sweeps a stale~/.cua-driver-rsleft by an older release. Both steps are best-effort, idempotent, and conservative (marker-gated; they never touch a real release dir, thecurrentsymlink, or unrelated user state). TCC grants are preserved — the/Applications/CuaDriver.appbundle is replaced in place, nottccutil reset. The Windows installer (install.ps1) already used~/.cua-driverand migrated the legacy home, so it is unchanged.
0.5.0 (2026-06-01)
- Windows: per-session agent cursors — the per-session cursor model (macOS #1779) is ported to Windows, so concurrent sessions are tracked per-session on Windows too (#1801).
- Streamable-HTTP MCP transport (parallel multi-agent). Over stdio, one
cua-driver mcpprocess is a single pipe, so a client's tool calls — including multiple subagents — serialize. The daemon itself is concurrent. SetCUA_DRIVER_RS_MCP_HTTP_PORT=<port>and the daemon also serves MCP over HTTP (POST http://127.0.0.1:<port>/mcp, loopback only), so each agent opens its own connection and they run truly in parallel — measured 3.6× on 10 concurrent calls. Per-connection ordering keeps a single agent's sequence correct; the per-(pid, window_id)cache + per-session cursor make concurrent cross-connection actions safe.move_cursoris nowreadOnlyHint:trueso MCP clients also parallelize cursor moves on stdio (mutating tools stay serialized on purpose) (#1799). - Breaking — session identity is now caller-declared. A "session" (which
owns the agent cursor + per-session state) used to be minted per MCP
connection, so it couldn't be set from the CLI and couldn't span a run that
touches multiple apps. It's now an explicit identity you declare: pass a
sessionid (or call the newstart_session/end_sessiontools), and the same id drives the same cursor over MCP, the CLI, or the raw socket, following the run across any apps/windows. The cursor is now opt-in: a run shows a cursor only when it declares asession— anonymous calls execute without one. Sessions are reclaimed byend_sessionor an idle-TTL (default 300s, overrideCUA_DRIVER_RS_SESSION_IDLE_TTL_SECS) instead of connection-EOF. Per-session config + recording keep their existing connection-scoped cleanup as a fallback when nosessionis declared. Update agents tostart_sessionat the start of a run (the bundled skill + MCP instructions now say so). - macOS: fix a daemon crash (
EXC_BREAKPOINTinAXUIElementCopyActionNames) when two sessions drive the same window concurrently. Element actions (click,type_text,set_value, …) read the targetAXUIElementRefout of the per-(pid, window_id)cache, but a concurrentget_window_statecould replace that cache entry andCFReleasethe element to zero while the action was still using it — a use-after-free. The cache now hands out a retained guard (CFRetainunder the cache lock,CFReleaseon drop), so an in-flight action keeps the element alive across a concurrent refresh. - macOS (local dev install only):
install-local.shnow clears a stale TCC grant left over from a previous signing identity. If you first granted Accessibility / Screen Recording while the bundle was ad-hoc signed, that grant was pinned to the per-buildcdhashand silently stopped matching on the next rebuild — the daemon readNOT grantedwhile System Settings still showed CuaDriver toggled ON, a dead end re-toggling couldn't fix. The installer records the signing identity and, when it changes, runstccutil resetso the next grant re-pins cleanly to the stable self-signed certificate (after which grants survive all future rebuilds). Release builds are unaffected — they're CI-signed with a stable identity (#1792 follow-up).
0.4.3 (2026-05-31)
- macOS: the agent-cursor overlay now actually renders in the
servedaemon. It was only wired into the in-processmcppath, so in the daemon-proxy setup (the default) every cursor command was a silent no-op and the agent cursor never appeared (#1790). - macOS:
cua-driver permissions grantno longer spams the TCC prompt — it raises a single dialog and then polls silently, and the gate honours its deadline instead of re-prompting (and restarting the daemon) on every ~25s re-exec (#1791). - Dev:
install-localnow signs the bundle with a stable self-signed identity, so TCC grants (Accessibility / Screen Recording) survive rebuilds instead of resetting on every install (#1792).
0.4.2 (2026-05-31)
- macOS: guard the SkyLight auth-message selector on macOS 14 Sonoma so the driver no longer crashes on launch (#1782, #1503).
- macOS: enable Chromium/Electron accessibility trees via
AXManualAccessibility, soget_window_statecan see their window content (#1756).
0.4.1 (2026-05-31)
- macOS: per-session agent cursors, so concurrent sessions each get their own visual agent cursor (#1779).
- macOS: ship
AppIcon.icnsin the bundle soCuaDriver.appno longer shows a blank icon (#1780, #1496). - macOS: guard AppKit initialization so
mcpruns headless instead of SIGABRT-ing (#1781, #1724).
0.4.0 (2026-05-31)
- Daemon session-identity model: the daemon now owns and cleans up session-scoped recording and config, tying that state to the session that created it (#1776).
0.3.6 (2026-05-30)
- macOS: fix permissions status so it reports the driver's real TCC grants (via the daemon) instead of the calling terminal's — it no longer claims granted when only the caller holds the grant (#1774).
0.3.5 (2026-05-30)
- macOS: bind the
servesocket before the permissions gate, so clients can connect even while permissions are still being resolved (#1761, #1773).
0.3.4 (2026-05-30)
- Maintenance release (no path-specific changes).
0.3.3 (2026-05-30)
- Maintenance release (no path-specific changes).
0.3.2 (2026-05-27)
- Add a
check-updateCLI verb and acheck_for_updateMCP tool so clients can detect when a newer driver is available (#1734).
0.3.1 (2026-05-27)
- First release in the 0.3.x line, which began the macOS TCC / permissions hardening series.
0.2.x (2026-05-17 – 2026-05-21)
- Pre-release iteration on the Rust port across versions 0.2.0–0.2.18, including cross-platform build and packaging work for the macOS, Windows, and Linux pre-release artifacts.
0.1.x (2026-05-14)
- Initial
cua-driver-rspre-releases. See the GitHub releases for details.
Was this page helpful?