[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:

  1. Full Disk Access permission to no longer apply (registered for old version path)
  2. "claude" is requesting access to data from other applications dialog to reappear
  3. Users must re-grant permissions in System Settings after every update

Steps to Reproduce

  1. Grant Full Disk Access to Claude Code (e.g., version 2.1.49)
  2. Update Claude Code to a new version (e.g., 2.1.51)
  3. 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

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗