claude-code - 💡(How to fix) Fix macOS TCC Automation grants not preserved across CC versions — Settings panel accumulates one row per release [2 comments, 3 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#54691Fetched 2026-04-30 06:38:41
View on GitHub
Comments
2
Participants
3
Timeline
5
Reactions
0
Timeline (top)
labeled ×3commented ×2

On macOS, every new release of Claude Code registers as a separate app in System Settings → Privacy & Security → Automation. Old entries from binaries that no longer exist persist indefinitely. The list grows by roughly one row per CC release where the Bash tool invokes osascript.

Root Cause

On macOS, every new release of Claude Code registers as a separate app in System Settings → Privacy & Security → Automation. Old entries from binaries that no longer exist persist indefinitely. The list grows by roughly one row per CC release where the Bash tool invokes osascript.

RAW_BUFFERClick to expand / collapse

Summary

On macOS, every new release of Claude Code registers as a separate app in System Settings → Privacy & Security → Automation. Old entries from binaries that no longer exist persist indefinitely. The list grows by roughly one row per CC release where the Bash tool invokes osascript.

Reproduction

  1. Run CC version A (e.g. 2.1.90) and execute a Bash call that uses osascript to control an app (Reminders, Photos, Calendar, etc.). macOS prompts for Automation permission; user clicks Allow.
  2. CC auto-updates to version B (2.1.91).
  3. Run the same osascript action. macOS prompts again — TCC treats it as a new app.
  4. Repeat for every subsequent release.

After ~30 releases, the Automation panel shows one row per version (2.1.90, 2.1.91, … 2.1.121), each expandable to a list of controlled apps. None can be deleted via the GUI in current macOS.

Expected

CC releases should share a stable code-signing identity / designated requirement so TCC matches them as the same app. A user who grants Automation to one CC version should not be re-prompted on every update, and the panel should show a single Claude Code row.

Actual

Each version registers separately. Stale entries persist after the binary is gone. Users see repeat prompts and accumulating clutter.

Environment

  • macOS 26.4.1 (build 25E253)
  • Claude Code 2.1.121, with stale Automation entries back to 2.1.90
  • Bash tool calling /usr/bin/osascript

Impact

  • Repeat consent prompts erode the trust signal — users start clicking Allow reflexively, defeating TCC's purpose.
  • The Automation panel becomes unusable for auditing what CC can actually control today versus historically.
  • Cleanup paths are unattractive: tccutil reset Automation nukes all Automation grants for every app on the system; direct edits to TCC.db require Full Disk Access and are unsupported.

Likely cause

CC's signature designated requirement appears to be version-pinned rather than identifier-based. TCC uses the designated requirement to decide whether two binaries are the same app. If the requirement references the exact code signature or version, every release looks new.

Suggested fix

Audit the CC code-signing setup. The designated requirement in the signature should match by Team ID + bundle identifier (e.g. identifier "com.anthropic.claude-code" and anchor apple generic and certificate leaf[subject.OU] = "<TEAM_ID>"), not by exact binary hash, so TCC sees 2.1.90 and 2.1.121 as the same app.

extent analysis

TL;DR

Update the code-signing setup to use a stable identifier-based designated requirement, allowing TCC to recognize different versions of Claude Code as the same app.

Guidance

  • Review the current code-signing configuration to identify the cause of the version-pinned designated requirement.
  • Update the designated requirement to match by Team ID + bundle identifier, using a format like identifier "com.anthropic.claude-code" and anchor apple generic and certificate leaf[subject.OU] = "<TEAM_ID>".
  • Verify that the updated setup correctly identifies different versions of Claude Code as the same app, by checking the Automation panel in System Settings.
  • Test the updated setup with multiple versions of Claude Code to ensure that TCC no longer prompts for repeated Automation permissions.

Example

No code snippet is provided, as the issue is related to the code-signing setup and not a specific code implementation.

Notes

The suggested fix assumes that the issue is caused by the version-pinned designated requirement in the code-signing setup. If this is not the case, further investigation may be necessary to identify the root cause.

Recommendation

Apply the suggested fix by updating the code-signing setup to use a stable identifier-based designated requirement, as this is likely to resolve the issue and prevent repeated Automation prompts.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

claude-code - 💡(How to fix) Fix macOS TCC Automation grants not preserved across CC versions — Settings panel accumulates one row per release [2 comments, 3 participants]