claude-code - 💡(How to fix) Fix macOS: Full Disk Access revoked on every Homebrew update — binary needs FDA entitlement [1 comments, 2 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#55661Fetched 2026-05-03 04:47:44
View on GitHub
Comments
1
Participants
2
Timeline
4
Reactions
0
Author
Timeline (top)
labeled ×3commented ×1

Every time Claude Code updates via brew upgrade, macOS revokes Full Disk Access (FDA) because the binary's code signature changes. This breaks access to external drives until the user manually toggles FDA off/on in System Settings → Privacy & Security.

This is a recurring regression that should be fixed at the binary level, not worked around by users.

Error Message

External drives are inaccessible to Claude Code bash subprocesses after every update. For users with models, datasets, or project files on external storage, this silently breaks overnight automation runs with no clear error message pointing to the cause.

Root Cause

macOS TCC stores a code signature requirement alongside each FDA grant. When the binary is updated, the stored requirement no longer matches the new binary's signature — so auth_value=2 (allowed) exists in the TCC database but is rejected at runtime.

Confirmed via:

sqlite3 "/Library/Application Support/com.apple.TCC/TCC.db" \
  "SELECT client, auth_value FROM access WHERE service='kTCCServiceSystemPolicyAllFiles'; "
# Shows auth_value=2 for claude.exe — but access still denied
ls /Volumes/<any-external-drive>/
# Operation not permitted

This affects ALL external drives, not just specific volumes.

Fix Action

Fix / Workaround

Current Workaround

This is unacceptable as a permanent workaround for a development tool that updates frequently.

Code Example

sqlite3 "/Library/Application Support/com.apple.TCC/TCC.db" \
  "SELECT client, auth_value FROM access WHERE service='kTCCServiceSystemPolicyAllFiles'; "
# Shows auth_value=2 for claude.exe — but access still denied

---

ls /Volumes/<any-external-drive>/
# Operation not permitted
RAW_BUFFERClick to expand / collapse

Summary

Every time Claude Code updates via brew upgrade, macOS revokes Full Disk Access (FDA) because the binary's code signature changes. This breaks access to external drives until the user manually toggles FDA off/on in System Settings → Privacy & Security.

This is a recurring regression that should be fixed at the binary level, not worked around by users.

Environment

  • macOS Sequoia 15.x (Darwin 25.4.0)
  • Claude Code installed via Homebrew
  • Binary: /opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/bin/claude.exe
  • Bundle ID: com.anthropic.claude-code

Reproduction Steps

  1. Grant Full Disk Access to Claude Code in System Settings
  2. Run brew upgrade claude-code
  3. Try to access an external drive from any Claude Code bash subprocess
  4. Result: Operation not permitted on all external volumes

Root Cause

macOS TCC stores a code signature requirement alongside each FDA grant. When the binary is updated, the stored requirement no longer matches the new binary's signature — so auth_value=2 (allowed) exists in the TCC database but is rejected at runtime.

Confirmed via:

sqlite3 "/Library/Application Support/com.apple.TCC/TCC.db" \
  "SELECT client, auth_value FROM access WHERE service='kTCCServiceSystemPolicyAllFiles'; "
# Shows auth_value=2 for claude.exe — but access still denied
ls /Volumes/<any-external-drive>/
# Operation not permitted

This affects ALL external drives, not just specific volumes.

Expected Behavior

FDA should survive binary updates. The fix is to declare com.apple.security.files.all as a hardened runtime entitlement in the binary. This pins FDA to the team identity + bundle ID rather than the per-build code directory hash, so it survives updates without user intervention.

Current Workaround

After every brew upgrade claude-code, user must manually:

System Settings → Privacy & Security → Full Disk Access → toggle Claude off → toggle back on

This is unacceptable as a permanent workaround for a development tool that updates frequently.

Impact

External drives are inaccessible to Claude Code bash subprocesses after every update. For users with models, datasets, or project files on external storage, this silently breaks overnight automation runs with no clear error message pointing to the cause.

extent analysis

TL;DR

Declare com.apple.security.files.all as a hardened runtime entitlement in the Claude Code binary to prevent Full Disk Access revocation after updates.

Guidance

  • Verify the current code signature and TCC database state using the provided sqlite3 command to understand the existing auth value and client settings.
  • To implement the fix, update the binary's entitlements to include com.apple.security.files.all, which will pin FDA to the team identity and bundle ID, making it update-resistant.
  • Test the updated binary by running brew upgrade claude-code and then attempting to access an external drive to ensure FDA is preserved.
  • Consider automating the verification process to catch any future regressions, given the history of this issue.

Example

No code snippet is provided as the fix involves updating the binary's entitlements, which is a build-time configuration change rather than a code modification.

Notes

This solution assumes that the development team has control over the binary's build process and can modify its entitlements. The fix may require updates to the build scripts or configuration files to include the necessary entitlement.

Recommendation

Apply the workaround of declaring com.apple.security.files.all as a hardened runtime entitlement in the binary, as this directly addresses the root cause of the issue and provides a permanent solution rather than a temporary workaround.

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