macOS TCC dialogs show version number instead of app name, re-prompt on every update

Resolved 💬 3 comments Opened Apr 4, 2026 by willie Closed Apr 4, 2026

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:

  1. 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
  2. Ship inside a minimal .app bundle so macOS reliably reads CFBundleName from the embedded Info.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)

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗