Skip to content

macOS: Calendar access is denied silently for CLIs run inside T3 Code (missing NSCalendarsFullAccessUsageDescription) #21283

Closed

Description

@1nto5

What happens
Any command started from T3 Code (integrated terminal or agent tool calls) that uses EventKit fails right away, and macOS never shows a permission prompt:

$ ekctl today --calendar adrian
{ "error" : "Permission denied for Calendar. Please grant access in System Settings > Privacy & Security > Calendars.", "status" : "error" }

T3 Code also never appears in System Settings → Privacy & Security → Calendars, so the user has no way to grant access by hand.

Why
T3 Code (Nightly).app/Contents/Info.plist has no NSCalendarsFullAccessUsageDescription (or NSCalendarsUsageDescription) key. As the responsible app, T3 Code is denied by TCC automatically, with no prompt. The same is probably true for Reminders, Contacts and Photos (NSRemindersFullAccessUsageDescription, NSContactsUsageDescription, NSPhotoLibraryUsageDescription).

Expected
CLIs run in T3 Code trigger the normal macOS prompt, and T3 Code shows up in the Calendars privacy pane, the same way Terminal, Ghostty and other terminal apps work.

Suggested fix
Add the usage description keys to Info.plist (in electron-builder: mac.extendInfo), e.g.:

"NSCalendarsFullAccessUsageDescription": "Commands you run in T3 Code may need access to your calendars.",
"NSRemindersFullAccessUsageDescription": "Commands you run in T3 Code may need access to your reminders."

Environment

  • T3 Code 0.1.1-nightly.20261018.3315
  • macOS 27.0.1
  • Tool: ekctl 1.6.0 (EventKit CLI)

Workaround
Run the CLI as a launchd job (launchctl submit … -- ekctl …), so that it becomes its own responsible process.

Activity

  1. added
    needs more infoInitial triage showed no bug. Awaiting more info
    and removed
    needs more infoInitial triage showed no bug. Awaiting more info
    on Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions