Telemetry and privacy
Exact Cua Driver telemetry controls, event schema, and privacy boundaries.
Cua Driver sends content-free product telemetry to the PostHog EU ingest endpoint. Telemetry is enabled by default. The installer prints a notice before it sends the first event, and the preference persists across driver processes and upgrades.
If an installation or release event fails, the driver leaves its success marker unset and waits 15 minutes before retrying. Commands during that interval do not wait for another telemetry request.
Control telemetry#
cua-driver telemetry status --json
cua-driver telemetry disable
cua-driver telemetry enableAn environment override takes precedence over the saved preference:
CUA_DRIVER_RS_TELEMETRY_ENABLED=false cua-driver mcpDisabling telemetry stops telemetry requests. It does not delete the local installation ID, so enabling telemetry later resumes the same pseudonymous installation identity. A normal uninstall also preserves the ID and saved preference. To create a new identity, run:
cua-driver telemetry reset-idUse uninstall --purge when uninstalling if you also want to remove retained Cua Driver state.
Separate update check#
The telemetry setting does not control Cua Driver's update check. On mcp, serve, and doctor startup, Cua Driver may make a content-free request to the public GitHub Releases API and cache the result locally for 20 hours. This request does not include the telemetry installation ID or command usage.
Disable the update check separately when you need to prevent that GitHub request and cache write:
CUA_DRIVER_RS_UPDATE_CHECK=false cua-driver mcpSet the same environment variable in your MCP server configuration to keep the update check disabled across sessions.
Inspect events locally#
inspect builds the event without sending a network request. It replaces the installation ID with a redacted placeholder.
cua-driver telemetry inspect cua_driver_mcp_session_started --json
cua-driver telemetry inspect cua_driver_mcp_tool_completed --json
cua-driver telemetry inspect cua_driver_agent_session_started --json
cua-driver telemetry inspect cua_driver_agent_session_ended --jsonCommon client event properties#
Every schema-v3 client event has this fixed envelope:
| Property | Meaning |
|---|---|
telemetry_schema_version | Fixed integer 3 |
product_version | Installed Cua Driver version |
os_family | macos, windows, linux, or other |
os_major | Major operating-system version only |
arch | Bounded CPU architecture |
is_ci | Whether a recognized CI environment is present |
transport | cli, daemon, mcp_stdio, mcp_http, or unknown |
process_session_id | Random ID created once per process and never persisted |
id_persisted | Whether the installation ID came from durable local state |
Client events set $process_person_profile to false. The installation UUID is used only as the PostHog distinct_id; it is not duplicated into event properties. This is pseudonymous installation telemetry, not anonymous telemetry.
The client does not send an IP address as an event property. PostHog derives a country code and country name from the network request during ingestion, then discards the client IP before storing the event. A country-only transformation removes continent, city, subdivision, postal-code, coordinate, accuracy-radius, and time-zone properties.
Fixed events#
| Event | Additional bounded properties |
|---|---|
cua_driver_installation_registered | install_channel |
cua_driver_release_installed | install_channel, product_version |
cua_driver_serve | None. Transitional process-start event for cua-driver serve; transport is daemon |
cua_driver_cli_completed | Fixed command, allowlisted tool for call, bounded operation, bounded MCP client_kind, success, exit_class, and duration_bucket |
cua_driver_mcp_startup_completed | execution path, bounded daemon state, success, duration bucket, and execution_mode |
cua_driver_mcp_session_started | normalized MCP client and protocol, capability booleans, optional reported agent context, and execution_mode |
cua_driver_mcp_tool_completed | allowlisted tool, bounded compound-tool operation, success, error class, duration bucket, output shape and size buckets, and execution_mode |
cua_driver_agent_session_started | declaration kind, revival flag, concurrent-session bucket, entry transport, and execution_mode |
cua_driver_agent_session_ended | end reason, duration and count buckets, success flags, feature-family flags, multi-transport flag, and execution_mode |
cua_driver_permissions_gate_started | missing-permission booleans |
cua_driver_permissions_gate_dismissed | missing-permission booleans and duration bucket |
cua_driver_permissions_gate_completed | missing-permission booleans, panel and dismissal flags, fixed resolution, and duration bucket |
The transitional cua_driver_serve event carries the common event properties and no additional properties. It does not contain command arguments or process output.
The legacy cua_driver_install event remains part of lifetime registration dashboards so existing installations are not registered a second time.
Reported model and agent context#
An MCP host can explicitly report agent context in the initialize request:
{
"params": {
"_meta": {
"ai.cua/agent-context": {
"provider": "anthropic",
"model": "claude-sonnet-4-5",
"agent_name": "claude-code",
"agent_version": "1.x"
}
}
}
}These values are self-reported and normalized through allowlists. Unknown values become custom or unknown. Cua Driver does not infer a model from the MCP client name, does not use MCP Sampling to identify the parent model, and does not collect the complete initialize payload. Stdio emits once per process. A long-lived HTTP process emits once per normalized client category, so the event measures HTTP client-category adoption rather than every connection.
Cua agent sessions#
A Cua agent session is a non-empty caller-declared session value. The value default, internal connection identities, and reserved fallback keys do not create agent-session events.
The start event is emitted for a successful start_session declaration or the first known tool call that carries an explicit session. Repeated calls in the same live episode do not emit another start. Reusing an ID after explicit end or idle eviction creates a new episode with revived=true.
The end event is emitted for end_session and idle eviction. It contains aggregate counters and booleans. When the platform has a cursor entry for that session, it also includes bounded cursor categories: enabled state, built-in/default/custom icon class, automatic/custom color source, label presence, motion customization, and an active-cursor count bucket. cursor_outcome_observed=false distinguishes sessions with no readable cursor entry from a disabled or default cursor. Cua Driver uses the caller session string only as a process-local map key. The string, a hash of it, and a replacement join token are absent from telemetry payloads.
Computer-action success covers fixed pointer and keyboard capabilities, app launch and kill, window activation, and state-changing page operations. State reads, screenshots, health checks, update checks, and session lifecycle tools do not count as computer actions.
For finite CLI commands, operation distinguishes only reviewed verbs for recording, permissions, config, autostart, skills, and update. client_kind is populated only for mcp-config. Unknown values become other; commands without a meaningful sub-operation use not_applicable.
For the compound page tool, operation is one of execute_javascript, get_text, query_dom, click_element, insert_text, type_keystrokes, enable_javascript_apple_events, or other. Other tools use not_applicable.
Data that is never collected#
Routine telemetry excludes task text, prompts, tool arguments, tool response bodies, typed text, screenshots, accessibility trees, window titles, application names, file paths, URLs, arbitrary MCP metadata, raw cursor IDs, labels, colors, icon paths, numeric motion values, and raw error messages.
Tool-completion events retain only coarse result shape: text, image, mixed, empty, or unknown; a size bucket; a duration bucket; and a fixed error class. The content itself never crosses the telemetry observer boundary. A proxy and daemon negotiate one completion-event owner. Mixed-version pairs retain proxy ownership, which prevents duplicate events during upgrades.
Region and deletion controls#
Client events are sent to PostHog's EU ingest endpoint. PostHog processes the request IP long enough to derive country-level distribution, then discards the IP before event storage. Stored telemetry keeps only the derived country code and country name; it excludes continent, city, subdivision, postal code, coordinates, accuracy radius, and time zone. PostHog does not create person profiles for these events.
Retention and server-side deletion are governed by the Cua privacy policy; the client does not enforce a retention window or submit deletion requests. telemetry reset-id and uninstall purge controls remove local identity state only. Do not post the installation UUID in a public issue.