TCC permission grants lost on every auto-update: native installer gives each release a new absolute binary path (bare Mach-O, no bundle)

Status Open
Reported on v2.1.218
Maintainer reply None cached
Activity 1 comment · opened Jul 24, 2026

Summary

On macOS, Claude Code installed via the native installer re-prompts for TCC permissions ("would like to access data from other apps" / "wants to access files managed by iCloud Drive") after every auto-update — several times a day for active users. The prompt also shows the raw version number (e.g. "2.1.218") instead of "Claude Code".

Root cause (confirmed against the TCC database on macOS 26.5 / Darwin 25.5.0)

  1. macOS TCC keys a bare Mach-O CLI binary by absolute path (client_type=1).
  2. The native installer writes every release to a new path: ~/.local/share/claude/versions/<version>, then repoints the ~/.local/bin/claude symlink.
  3. Each update is therefore a brand-new TCC client with zero inherited grants → full re-prompt cycle.
  4. The version number appears in the prompt because the installer ships a bare executable with no app bundle / Info.plist, so macOS falls back to the filename for the client display name.

Evidence

  • Signature-keyed TCC rows (client_type=0, com.anthropic.claude-code) were written and survive updates, but macOS never consults them for a non-bundled binary: versions 2.1.216, 2.1.217, and 2.1.218 each still minted a fresh path-keyed client and re-prompted.
  • Related open issues: #51911, #53703, #60211, #66216, #76615.

Impact

Users granting Full Disk / Files-and-Folders / cross-app access must re-approve multiple prompts per day. Some users disable the auto-updater (DISABLE_AUTOUPDATER=1) solely to stop the prompts, forfeiting security updates.

Requested fix

Install the executing binary at a stable path (e.g. ~/.local/share/claude/current/claude, updated atomically in place or via a stable hard link that TCC resolves consistently), and/or ship a minimal app bundle with an Info.plist + stable code-signing identity so TCC keys grants by signature rather than by per-version path. Either makes grants survive updates and fixes the display name.

Environment

macOS 26.5 (Darwin 25.5.0), Apple Silicon; Claude Code native installer, auto-update enabled; observed across 2.1.216 → 2.1.218.

View original on GitHub ↗

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