[BUG] macOS TCC permissions reset on every Claude Code update due to versioned binary path
Resolved 💬 1 comment Opened Mar 4, 2026 by shayashi683 Closed Mar 4, 2026
Description
On macOS, Claude Code's binary path includes the version number:
~/Library/Application Support/Claude/claude-code/<VERSION>/claude
macOS TCC (Transparency, Consent, and Control) registers permissions per absolute path. When Claude Code updates to a new version, the binary path changes, causing:
- Full Disk Access permission to no longer apply (registered for old version path)
- "claude" is requesting access to data from other applications dialog to reappear
- Users must re-grant permissions in System Settings after every update
Steps to Reproduce
- Grant Full Disk Access to Claude Code (e.g., version 2.1.49)
- Update Claude Code to a new version (e.g., 2.1.51)
- Run Claude Code — macOS permission dialog appears again
Evidence from TCC database
SELECT service, client, auth_value FROM access WHERE service='kTCCServiceSystemPolicyAllFiles';
kTCCServiceSystemPolicyAllFiles|.../claude-code/2.1.49/claude|2 -- (allowed, old version)
kTCCServiceSystemPolicyAllFiles|.../claude-code/2.1.51/claude|0 -- (denied/unknown, new version)
Additionally, kTCCServiceSystemPolicyAppData shows auth_value=5 (pending) for the new version, which triggers the repeated popup.
Expected Behavior
Permissions granted to Claude Code should persist across updates without requiring users to re-authorize.
Suggested Fix
Consider one of:
- Use a stable symlink or fixed path for the binary (e.g.,
claude-code/current/claude) that doesn't change between versions - Register Claude Code as a proper app bundle with a stable bundle identifier, so TCC tracks it by identity rather than path
- Use code signing identity for TCC registration instead of path-based registration
Environment
- macOS Sequoia (Darwin 25.3.0)
- Claude Code 2.1.51 (installed via Homebrew/npm)
- SIP enabled
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗