macOS: Every version update creates a new TCC pasteboard permission entry, prompting user repeatedly
Summary
Every time Claude Code updates, macOS treats the new binary as a completely different app and creates a new TCC (Transparency, Consent, Control) permission entry. This means users receive a repeated system dialog:
"2.1.163" would like to access data from other apps.
...on every update, every day. Clicking Allow only silences it until the next update.
Evidence
After a handful of weeks of normal use, Privacy & Security → Pasteboard shows this:
- 2.1.143 (disabled)
- 2.1.146 (disabled)
- 2.1.148 (disabled)
- 2.1.150 (disabled)
- 2.1.153 (disabled)
- 2.1.154 (disabled)
- 2.1.156 (disabled)
- 2.1.158 (disabled)
- 2.1.159 (disabled)
- 2.1.160 (disabled)
- 2.1.161 (disabled)
- 2.1.162 (disabled)
- 2.1.163 (disabled)
Each entry is a separate Claude Code version. Each triggered its own permission dialog.
Root Cause
Claude Code's binary is not signed with a stable hardened runtime identity across versions. macOS TCC tracks permissions per code signature — so each new binary is treated as an entirely new app, with no memory of previous grants.
Well-behaved macOS apps (Chrome, VS Code, etc.) use a stable Apple Developer team certificate so that updates don't create new TCC entries.
Impact
- Users cannot permanently allow pasteboard access — it resets on every update
- Granting the permission to Terminal.app (the parent process) does not help — macOS evaluates child process pasteboard access independently
- The only workaround is manually running
sudo sqlite3against the TCC database after each update, which is not acceptable for end users
Expected Behaviour
A single TCC entry for Claude Code that persists across updates, consistent with how other regularly-updated macOS apps behave.
Fix
Sign the binary with a stable hardened runtime identity (consistent Apple Developer team ID + bundle identifier) so macOS recognises it as the same app across version updates. Alternatively, evaluate whether pasteboard access on startup is necessary at all.
Environment
- macOS Sequoia 15.x
- Claude Code versions 2.1.143 – 2.1.163 (confirmed across multiple weeks)
- Shell: zsh / tmux inside Terminal.app
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗