Skip to content

[Feature]: macOS Input Monitoring permission flow (global keyboard/mouse) #6482

Description

@theonlyhennygod

Summary

Add native Input Monitoring (TCC kTCCServiceListenEvent) check/request to the desktop app so global keyboard and pointer events can be observed outside our own windows.

Problem

Without Input Monitoring, the desktop agent cannot:

This is a sibling of #6333 (AX), #6334 (Screen Recording), #6335 (Microphone) and is currently the only "core control" permission with no native check or request path.

Proposal

  • Add IOKit FFI block in apps/tauri/src/macos/permissions.rs:
    • IOHIDCheckAccess(requestType: u32) -> u32
    • IOHIDRequestAccess(requestType: u32) -> bool
    • Constants: kIOHIDRequestTypeListenEvent = 1, kIOHIDAccessTypeGranted = 0, kIOHIDAccessTypeDenied = 1, kIOHIDAccessTypeUnknown = 2.
  • check_input_monitoring() and request_input_monitoring() returning granted / denied / not_determined.
  • Extend open_system_settings() with input_monitoring → Privacy_ListenEvent.
  • Surface in onboarding wizard alongside AX / Screen Recording.
  • Add NSInputMonitoringUsageDescription to Info.plist.

Acceptance

  • Native check returns correct status without prompting.
  • Native request triggers the macOS Input Monitoring dialog on first call.
  • Onboarding wizard shows the permission and reflects the current status.
  • Deep-link to System Settings → Privacy & Security → Input Monitoring works.

Related

Implemented as part of feat/desktop-onboarding PR (linked when opened).

Metadata

Metadata

Assignees

No one assigned

    Labels

    desktopDesktop app (Tauri) — menu bar, dashboard parity, macOS integrationsenhancementNew feature or requestpriority:p1High prioritysecurityAuto scope: src/security/** changed.status:in-progressOpen PR actively targets this issue; recheck when PR closes.status:no-staleExempt from 60-day stale auto-close only with public reason and revisit surface.tauriTauri shell, native bindings, build/packaging

    Type

    No type

    Projects

    Status
    In Progress

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions