Cua Docs

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 enable

An environment override takes precedence over the saved preference:

CUA_DRIVER_RS_TELEMETRY_ENABLED=false cua-driver mcp

Disabling 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-id

Use 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 mcp

Set 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 --json

Common client event properties#

Every schema-v3 client event has this fixed envelope:

PropertyMeaning
telemetry_schema_versionFixed integer 3
product_versionInstalled Cua Driver version
os_familymacos, windows, linux, or other
os_majorMajor operating-system version only
archBounded CPU architecture
is_ciWhether a recognized CI environment is present
transportcli, daemon, mcp_stdio, mcp_http, or unknown
process_session_idRandom ID created once per process and never persisted
id_persistedWhether 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#

EventAdditional bounded properties
cua_driver_installation_registeredinstall_channel
cua_driver_release_installedinstall_channel, product_version
cua_driver_serveNone. Transitional process-start event for cua-driver serve; transport is daemon
cua_driver_cli_completedFixed command, allowlisted tool for call, bounded operation, bounded MCP client_kind, success, exit_class, and duration_bucket
cua_driver_mcp_startup_completedexecution path, bounded daemon state, success, duration bucket, and execution_mode
cua_driver_mcp_session_startednormalized MCP client and protocol, capability booleans, optional reported agent context, and execution_mode
cua_driver_mcp_tool_completedallowlisted tool, bounded compound-tool operation, success, error class, duration bucket, output shape and size buckets, and execution_mode
cua_driver_agent_session_starteddeclaration kind, revival flag, concurrent-session bucket, entry transport, and execution_mode
cua_driver_agent_session_endedend reason, duration and count buckets, success flags, feature-family flags, multi-transport flag, and execution_mode
cua_driver_permissions_gate_startedmissing-permission booleans
cua_driver_permissions_gate_dismissedmissing-permission booleans and duration bucket
cua_driver_permissions_gate_completedmissing-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.