Privacy Policy

Remote Desktop · Last updated July 23, 2026

Remote Desktop is designed so the developer does not receive your session content. We do not run a data-collection server, but the apps do store technical records in your private iCloud database and device Keychain to discover and enroll your devices, negotiate remote screen connections, report AI component setup, and recover one unfinished local request. This policy explains those records in plain terms.

The short version

How the connection works

Remote Desktop connects your iPhone or iPad to your own Mac or Windows computer using a direct, peer-to-peer connection (WebRTC). The screen video, audio, and your taps and keystrokes travel straight between your two devices. We never receive, record, or have access to any of that content.

Pairing and signaling

To set up a connection, the two devices exchange a small amount of technical connection information ("signaling"). Pairing records can include the host name, a short-lived internal routing binding, opaque device identifiers, timestamps, and the WebRTC connection descriptions and network candidates needed to connect. This is done through your own private iCloud (CloudKit) database under your personal Apple Account. It is governed by Apple's Privacy Policy. We have no access to your iCloud data. The records are scoped to devices signed in to the same Apple Account; automatic pairing is limited to that account. No pairing code or local credential is shown or entered.

The host generates a new internal routing binding whenever its listener starts, including after a connection ends. Discovery, enrollment, and remote-control signaling records have a five-minute validity window. The host refreshes its live advertisement while listening. The apps attempt to delete the CloudKit records they created after connection or teardown; any expired record left behind is ignored. Reads, cleanup queues, and replay tracking are capped so malformed or excessive records fail closed rather than causing unbounded retention in the apps.

For nearby AI Computer Use, the device sends an ephemeral public key through private CloudKit. The Mac returns its local credential encrypted with an ephemeral key agreement. CloudKit never receives that credential in plaintext; the device stores it only in its non-synchronizing, device-only Keychain.

AI Computer Use transport

CloudKit is limited to the AI component setup lifecycle. Before the local broker is ready, a setup record can contain a setup request, installation phase, normalized progress, and the session, message, sender, and recipient identifiers needed to route and deduplicate that setup. It does not contain an ordinary natural-language task, recent conversation, assistant task result, task controls, or an approval decision.

After enrollment, your prompt and recent conversation context, assistant task progress and result, pause/resume/stop controls, and approval requests and responses travel only over an authenticated TLS connection on your local network. If that broker cannot be authenticated or reached, the app stops instead of sending those values through CloudKit. Live screen pixels, host audio, and direct input stay on the separate peer-to-peer WebRTC connection. AI planning, policy checks, and visual grounding run locally on the Mac host rather than through a developer-operated AI service.

A receiving device attempts to delete a CloudKit setup record only after it has applied the message. If deletion is interrupted, the app retains a bounded cleanup identity and retries later. Both sides ignore setup records older than one hour and cap query pages, observed records, pending acknowledgements, and replay state. An expired record that CloudKit has not yet deleted can remain in your private database, where it is not accessible to the developer, but the app will not accept it.

Identifiers and unfinished-request recovery

On iPhone, iPad, and Mac, Remote Desktop uses an opaque device UUID stored in the Keychain to route records to the correct peer. This identifier is stable across launches and may remain after an app reinstall or iCloud sign-out. It is not an advertising identifier, and the app has no in-app account profile built from it.

Before sending a local AI request, the iOS app saves a recovery record for that one in-flight request in the device-only Keychain. It can include the prompt, exact encoded conversation context, host and internal routing identifiers, session and message identifiers, the latest pause/resume/stop revision, a locked approval decision, and manual-intervention guidance. This lets a relaunch ask the same enrolled Mac over authenticated LAN TLS about the same logical request without executing it as a new task or copying it into CloudKit. A pending record is recoverable for up to 24 hours. It is removed after a terminal task result is applied, or when it is found to be expired or for a different internal session binding.

Stopping a Computer Use session, losing its authenticated LAN task channel, or failing the Apple Account binding check revokes that peer's authorization for AI actions and closes the host's action gate. Losing the optional WebRTC visual sidecar removes live pixels and direct input; it never moves task traffic to CloudKit. An unfinished host task is not silently resumed by a different connection. A locally recoverable iOS record can remain until the terminal result is received or the 24-hour recovery limit is reached.

Information the developer receives

None from the app. We do not receive the private CloudKit or Keychain records described above. The app does not contain advertising or third-party trackers and does not use analytics SDKs.

Device permissions

The app requests Local Network access on your device. This is used only to establish the direct connection to your computer. It is not used to gather information about your network or other devices.

The iOS app declares both camera and microphone usage-description keys because its bundled WebRTC component is capable of those features. Those declarations do not themselves request access, and this version of the app does not request camera or microphone permission. It creates receive-only audio and video connections and configures audio for playback. It can receive your computer's screen and system audio, but it does not capture, record, store, or transmit camera video or microphone audio from your iPhone or iPad.

Children's privacy

The app does not send session data to the developer for any user. The device and private CloudKit records described above work the same way for all users.

Changes to this policy

If this policy changes, the updated version will be posted on this page with a new date.

Contact

Questions about privacy? Open an issue on our GitHub support page.