Repository navigation
Codex Desktop on macOS cannot trigger Calendar/Reminders TCC prompts for EventKit CLIs #21228
Description
Summary
Codex Desktop on macOS cannot trigger or obtain Calendar/Reminders TCC permissions for EventKit-based CLI tools launched from the Codex app terminal/tool context.
The same third-party CLIs work from iTerm after macOS prompts for access, but fail from Codex with immediate access-denied errors and no permission prompt.
Environment
- Codex Desktop app:
26.429.61741(CFBundleIdentifier = com.openai.codex) - Codex CLI:
codex-cli 0.128.0-alpha.1 - macOS:
26.4.1(25E253) - EventKit CLIs:
rem-cli 0.10.2ical 0.9.0
- Codex.app path:
/Applications/Codex.app
Reproduction
-
Install EventKit-based Calendar/Reminders CLIs:
brew tap BRO3886/tap brew install rem-cli ical
-
From iTerm, run the tools:
rem lists ical today
macOS prompts for Reminders/Calendar access and the tools can be authorized.
-
From Codex Desktop's app terminal/tool context, run:
rem lists ical today
Actual behavior
rem lists fails immediately:
Error: failed to initialize Reminders access: reminders: access denied: reminders access denied
ical today fails immediately:
Calendar access denied. Grant access in System Settings > Privacy & Security > Calendars
No macOS permission prompt appears for Codex.
Resetting Codex's TCC entries does not change the behavior:
tccutil reset Reminders com.openai.codex
tccutil reset Calendar com.openai.codexRunning with broader Codex filesystem sandbox permissions also does not change the behavior, so this does not appear to be the Codex workspace/filesystem sandbox.
Expected behavior
When an EventKit-based child process launched by Codex requests Calendar or Reminders access, macOS should either:
- show a TCC prompt for Codex so the user can grant access, or
- allow Codex Desktop to declare/support the required Calendar/Reminders usage descriptions so EventKit tools can be authorized like they can under Terminal/iTerm.
Local app metadata
/Applications/Codex.app/Contents/Info.plist contains usage descriptions for Apple Events, audio, camera, and microphone, but does not appear to contain Calendar/Reminders usage descriptions:
NSCalendarsUsageDescription: not present
NSRemindersUsageDescription: not present
NSCalendarsFullAccessUsageDescription: not present
NSRemindersFullAccessUsageDescription: not present
codesign -d --entitlements - /Applications/Codex.app shows:
com.apple.security.app-sandbox = false
com.apple.security.automation.apple-events = true
com.apple.security.cs.allow-jit = true
com.apple.security.cs.allow-unsigned-executable-memory = true
com.apple.security.device.audio-input = true
com.apple.security.files.user-selected.read-write = true
com.apple.security.network.client = true
Notes
This seems related in class to other macOS TCC/entitlement issues, but I could not find an existing Calendar/Reminders/EventKit-specific issue in openai/codex.
Activity
jonnyel commentedon May 22, 2026
I can confirm this is the same root issue with
remiin Codex Desktop on macOS.Environment:
26.519.3165126.5remi:0.2.0via HomebrewBehavior:
remi list <REMINDERS_LIST_NAME>works correctly.remi list <REMINDERS_LIST_NAME>fails withError: items.find is not a function.Additional detail:
remi authorizeopened System Settings and I granted Codex Full Disk Access.Privacy & Security > Reminders, but Codex did not appear in the app list and could not be added manually.remi doctor --syncin Codex reports that database access is granted, but Reminders access is not granted and 0 lists are returned.So this appears to be the same Codex-side Reminders TCC / missing usage-description problem described in this issue, with
remisurfacing a bad downstream error instead of a clean permission-denied message.alexeichhorn commentedon May 23, 2026
The fix should be very simple: Codex.app needs to declare Calendar and Reminders privacy usage descriptions in its Info.plist.
At minimum:
NSCalendarsUsageDescriptionNSRemindersUsageDescriptionAnd ideally also the newer full-access EventKit keys:
NSCalendarsFullAccessUsageDescriptionNSRemindersFullAccessUsageDescriptionMaybe at some point Codex could even have native skills for such access points (like calendar, reminders, etc)
ppeirce commentedon Jun 13, 2026
I can reproduce this on a newer Codex Desktop build.
Environment:
26.609.41114,CFBundleVersion = 3888com.openai.codex15.7.4(24G517),Darwin 24.6.0 arm64 armremat/Users/peter/.local/bin/remremindctl 0.1.1at/Users/peter/.local/bin/remindctlBehavior:
remworks from iTerm after granting Reminders permission there.REM_NO_UPDATE_CHECK=1 NO_COLOR=1 rem lists --countfails immediately with:remindctl statusinitially reportedNot determined, butremindctl authorizedid not produce a usable system prompt from Codex Desktop and moved toDenied.tccutil reset Reminders com.openai.codexsucceeds, but rerunning the command still fails with no macOS prompt.Local bundle metadata:
/Applications/Codex.app/Contents/Info.plistcontains usage strings for Apple Events, audio capture, camera, and microphone.NSRemindersUsageDescription,NSRemindersFullAccessUsageDescription,NSCalendarsUsageDescription, orNSCalendarsFullAccessUsageDescription.TCC log evidence after running
remfrom Codex Desktop:This confirms the access request is being attributed to Codex.app as the responsible process, and macOS refuses before displaying a consent prompt because the responsible app bundle does not declare the Reminders usage description.
GURULifeline commentedon Aug 31, 2026
Additional reproduction from Codex Desktop on macOS 26.5.2:
An EventKit-based Swift calendar reconciliation command was launched by the agent under the managed
workspace-writeexecution context. The executable immediately returned:The user had already enabled all visible Calendar privacy settings, and this workflow had worked previously. The agent initially interpreted the EventKit result as a TCC grant/signing problem and directed the user to Privacy & Security settings.
The same executable, with identical arguments and input, was then retried through
exec_commandusingsandbox_permissions: "require_escalated". It succeeded with exit code 0 and completed the Calendar updates. No privacy setting, binary, input, or command argument changed between the failed and successful attempts.This suggests a second failure mode alongside the missing usage-description/TCC-prompt problem in the original report: managed sandbox execution can cause EventKit to surface an ordinary-looking Calendar authorization denial, even when the user's TCC grant is correct and an explicitly escalated execution succeeds.
Requested improvements:
Local usernames, paths, calendar identifiers, and event contents are intentionally omitted.