macOS permissions
Handoff needs three grants in System Settings, Privacy & Security. All three are requested on first use; this page explains what each one is for and what breaks without it.
| Permission | Used for | Without it |
|---|---|---|
| Screen Recording | Screenshots (xcap) and window titles (active-win-pos-rs) | Screenshots fail; window titles come back empty, so title exclusions cannot match. |
| Accessibility | Global mouse and keyboard listener (rdev) | The listener starts but never receives an event. No error is raised. |
| Input Monitoring | Same listener on macOS 10.15 and later | As above. |
| Microphone | Voice notes, only while the microphone button is on | Spoken notes record silence and Handoff says so; typed notes still work. |
| Speech Recognition | Turning voice notes into text with Apple’s recogniser, on the Mac only | Choose Whisper in Settings instead. |
Microphone and Speech Recognition are asked for the first time someone speaks a note, not at install. Recognition is forced on-device; Handoff never lets Apple’s servers transcribe.
The screen capture prompt
On macOS 15 and later, the first screenshot an app takes through the window-list capture API raises a second, separate prompt even with Screen Recording on: "Handoff is requesting to bypass the system private window picker and directly access your screen and audio". Choose Allow. While it is open, screenshots come out black and the prompt itself is the window in front. Handoff takes one throwaway screenshot when the Settings tab opens with Screen Recording granted, so the prompt appears during setup rather than during a recording. Handoff never records its own window or system prompts (UserNotificationCenter, SecurityAgent and similar) in any case.
External drives
Keeping recordings on an external drive (Settings → Storage) triggers one more prompt the first time: "Handoff would like to access files on a removable volume". Choose Allow.
Verifying
The Settings tab shows a checklist backed by tauri-plugin-macos-permissions (check and request
for each grant) and verifies the input hook by counting events: once Accessibility and Input
Monitoring are granted and the mouse has moved, "events seen" climbs above zero. The listener
gives no error when it is not trusted, which is why the count matters more than the checkbox.
Screen Recording only takes effect after the app is restarted; the checklist says so.