macOS: FDA panel accumulates multiple versioned entries on auto-update; no cleanup on upgrade
Summary
System Settings → Privacy & Security → Full Disk Access accumulates one entry per Claude Code version install (e.g. Claude Code 2.1.174, Claude Code 2.1.175, … Claude Code 2.1.195). Auto-update (either CLI npm self-updater or Desktop app updater) does not remove old entries. Over ~3 months a user can accumulate 20+ entries, none labeled clearly enough to know which to keep.
Environment
- macOS 26.4.1 (Tahoe)
- Claude Code CLI (npm-installed,
~/.local/bin/claude) - Claude Desktop app also installed (occasional use)
- FDA panel shows entries from approximately 2.1.174 through 2.1.195
Behavior
Each time CC auto-updates:
- A new FDA entry is created named
Claude Code <version> - The old entry is not removed
- The user sees a growing list of versioned entries, all enabled
- There is no documentation on which entries are safe to delete or how many should exist
Attempting to add /bin/bash or /bin/zsh to FDA gives Error: Internal error: 1038 on macOS 26 Tahoe (Apple intentionally blocks interpreter binaries). This is a separate issue but compounds the confusing state of the FDA panel.
Related
Issue #58952 decoded the TCC csreq blob for a CC entry: it uses identifier "com.anthropic.claude-code" and anchor apple generic and certificate leaf[subject.OU] = "Q6L2SF6YDW" — i.e., Team ID binding, not CDHash. If the binding is stable across updates, it's unclear why new entries accumulate rather than updating the existing one. Possible causes:
- Display name change (bundle CFBundleDisplayName includes the version string) causes macOS to treat it as a new app identity for UI purposes even though the csreq binding is stable
- Desktop app and CLI are separate bundle identities, each registering separately
- Auto-update path change (e.g., new npm install location) creates a second entry
Expected Behavior
One entry per CC identity (CLI / Desktop treated as separate is fine). Auto-update should either:
- Update the existing entry in-place, OR
- Remove the old entry after successful update, OR
- At minimum, document the expected accumulation and which entries are safe to prune
Workaround
Old entries appear safe to delete. Keep only the most recent version entry (or one per identity — CLI vs Desktop). Re-enable the toggle after any manual cleanup if it was affected.
Impact
- Privacy & Security panel becomes cluttered and confusing
- Users may unnecessarily re-grant FDA after each update, or may not realize they should
- Related to the launchd agent FDA issue: launchd agents cannot use the FDA grant at all on macOS 26 Tahoe due to TCC attribution chain failure (no bundle ID in launchd process tree), making this panel even more confusing — entries are present but some are structurally unreachable
cc: #58952