macOS TCC dialogs show version number instead of app name, re-prompt on every update
Summary
macOS TCC (Transparency, Consent, and Control) permission dialogs display "2.1.92" instead of "Claude Code" when the CLI requests access to protected directories (Documents, iCloud Drive). Additionally, every auto-update triggers new permission prompts because macOS sees the new version binary as a different app.
Root Cause
The version-specific binary at ~/.local/share/claude/versions/2.1.92 has the correct embedded Info.plist:
CFBundleIdentifier = com.anthropic.claude-code
CFBundleName = Claude Code
However, because the binary is a standalone Mach-O executable (not inside a .app bundle), macOS falls back to using the filename as the display name in TCC dialogs. Since the filename is literally 2.1.92, that's what the user sees.
The symlink chain is:
~/.local/bin/claude -> ~/.local/share/claude/versions/2.1.92
On each auto-update, the symlink points to a new binary (e.g., 2.1.93), which macOS TCC treats as a different app, so the user gets prompted again — even if they previously granted access.
Screenshots
Two TCC dialogs showing "2.1.92" as the app name:
- "2.1.92" would like to access files in your Documents folder.
- "2.1.92" wants to access files managed by "iCloud Drive".
Expected Behavior
- TCC dialogs should display "Claude Code" as the app name
- Granting access should persist across version updates
Suggested Fix
Either:
- Name the binary something stable (e.g.,
claude-code) regardless of version, so the filename doesn't change on updates and macOS picks up a recognizable name - Ship inside a minimal
.appbundle so macOS reliably readsCFBundleNamefrom the embeddedInfo.plist
Environment
- macOS Tahoe (Darwin 25.4.0, arm64)
- Claude Code 2.1.92
- Terminal has Full Disk Access (doesn't help since TCC treats the binary as a separate entity)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗