macOS: Calendar access is denied silently for CLIs run inside T3 Code (missing NSCalendarsFullAccessUsageDescription)#21283
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:
| 1 | $ ekctl today --calendar adrian |
| 2 | { "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.:
| 1 | "NSCalendarsFullAccessUsageDescription": "Commands you run in T3 Code may need access to your calendars.", |
| 2 | "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.