[BUG] Claude Desktop's built-in terminal can never get Apple Events (Automation) permission
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Running a command from Claude Desktop's built-in terminal that sends an Apple Event to another app (for example, BBEdit's bbdiff/bbedit CLI tools controlling BBEdit.app) always fails with macOS error -1743 ("not permitted to send Apple Events"). No permission dialog ever appears, and no entry for Claude ever appears under System Settings > Privacy & Security > Automation, so there is no way to grant the permission by hand either.
What Should Happen?
macOS should show a one-time consent dialog ("claude wants to control BBEdit"). Accepting it should let future calls proceed, with the grant then visible and toggleable under System Settings > Privacy & Security > Automation.
Error Messages/Logs
% bbedit pyproject.toml
You must allow the application which is running `bbedit` to send events to the BBEdit application.
Please make appropriate changes in your Security & Privacy system preferences,
or contact your terminal/IDE application's developer for assistance.
bbedit: error: -1743
Steps to Reproduce
- Configure a tool that sends Apple Events to another app from the command line, for example BBEdit's bbdiff:
git config --global difftool.bbdiff.cmd 'bbdiff --wait --resume $REMOTE $LOCAL' - Open Claude Desktop's built-in terminal.
- Run
bbedit some-file.txtorgit difftool -t bbdiff. - Observe the immediate -1743 failure, with no permission dialog and no entry created under Automation settings.
Claude Model
Sonnet (default)
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
Claude Desktop 1.22209.0 (bundles claude-code 2.1.209)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Other
Additional Information
macOS's unified log (log show --predicate 'process == "tccd"') shows the request being denied by policy before any prompt is shown:
tccd: [com.apple.TCC:access] AccessRequestIndirect: Policy disallows prompt for com.anthropic.claudefordesktop; access to kTCCServiceAppleEvents denied
Comparing entitlements confirms why. The top-level /Applications/Claude.app (com.anthropic.claudefordesktop) has neither an NSAppleEventsUsageDescription key in its Info.plist nor the com.apple.security.automation.apple-events entitlement:
$ /usr/libexec/PlistBuddy -c "Print :NSAppleEventsUsageDescription" /Applications/Claude.app/Contents/Info.plist
Print: Entry, ":NSAppleEventsUsageDescription", Does Not Exist
$ codesign -d --entitlements :- /Applications/Claude.app
... (com.apple.security.automation.apple-events absent)
The nested helper bundle at ~/Library/Application Support/Claude/claude-code/<version>/claude.app (com.anthropic.claude-code) has both, and Apple Events sent under that identity work correctly once approved, including after restarting Claude Desktop and on cold invocations with no prior priming — confirming the entitlement is the actual gate, not something environmental.
Related issues
Neither of these is a duplicate but both are instances of the same underlying pattern (a Hardened Runtime bundle missing an Apple Events entitlement) on different bundles:
- #52712 (closed, auto-stale) — same missing-entitlement pattern, but on com.anthropic.claude-code (the nested CLI helper), not the top-level app. Appears fixed for that bundle in current versions, though closed by the stale-bot rather than a maintainer confirming a fix.
- #77081 (open) — a different mechanism (the standalone CLI installer's unbundled binary changing path on every update, causing repeated re-prompts) on a third bundle (the standalone CLI, not the Desktop app).
Suggested fix
Either add NSAppleEventsUsageDescription and the com.apple.security.automation.apple-events entitlement to the top-level Claude.app bundle, or route the built-in terminal's subprocess spawning through the already-entitled claude-code helper's identity instead of the top-level app's.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗