[BUG] Claude Code Desktop embedded CLI does not inherit Full Disk Access from Claude.app

Resolved 💬 3 comments Opened Feb 8, 2026 by rcbeall1 Closed Feb 12, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

When using the Code tab in the Claude Desktop app on macOS, the embedded CLI binary cannot access TCC-protected directories (e.g., ~/Library/Messages/) even when Claude.app has been granted Full Disk Access in System Settings.

The same operations work fine when using the Claude Code CLI from Terminal.app.

Root Cause

The embedded CLI binary lives outside the .app bundle at ~/Library/Application Support/Claude/claude-code/<VERSION>/claude. macOS TCC does not propagate Full Disk Access from a parent app to child processes that are separate executables outside the app bundle.

The process chain is:

Claude.app (com.anthropic.claudefordesktop) — has FDA
  └─ Claude.app/Contents/Helpers/disclaimer
      └─ ~/Library/Application Support/Claude/claude-code/<VERSION>/claude — does NOT have FDA

When using the CLI from Terminal, it works because Terminal.app has FDA and child processes inherit it:

Terminal.app (com.apple.Terminal) — has FDA
  └─ zsh
      └─ claude — inherits Terminal's FDA

The two binaries have different code signing identities:

  • Desktop app: com.anthropic.claudefordesktop
  • Embedded CLI: com.anthropic.claude-code

The user-level TCC database shows the embedded CLI was silently denied SystemPolicyAppData access (auth_value=5), with no user prompt ever shown — macOS auto-denied it because the binary lacks FDA and AppData access is not a promptable permission.

Related: #21737 (same root cause, different binary — node also doesn't inherit FDA)

What Should Happen?

The embedded CLI should inherit Full Disk Access from Claude.app, or the desktop app should surface a clear error/instruction when TCC blocks access.

Suggested fixes:

  1. Move the embedded CLI inside the .app bundle so it inherits the parent app's TCC grants
  2. Or use a stable symlink path that doesn't change with version updates, so users only need to grant FDA once
  3. Or detect TCC denials and show a user-facing message with instructions to grant FDA to the specific binary

Current workaround: Manually add the embedded CLI binary to Full Disk Access in System Settings via Cmd+Shift+G. However:

  • The binary does not appear in the System Settings UI after adding (macOS quirk with path-based entries)
  • The grant must be re-added after every Claude Desktop update since the version folder changes
  • The only way to audit or revoke the hidden entry is via sudo sqlite3 on the system TCC database

Error Messages/Logs

sqlite3.OperationalError: unable to open database file

# When accessing ~/Library/Messages/chat.db from Code tab in Desktop app.
# The same command works fine from Claude Code CLI in Terminal.

# TCC database shows the embedded CLI was auto-denied:
# ~/Library/Application Support/Claude/claude-code/2.1.34/claude | kTCCServiceSystemPolicyAppData | auth_value=5 (denied)

Steps to Reproduce

  1. Grant Full Disk Access to Claude.app in System Settings > Privacy & Security > Full Disk Access
  2. Open Claude Desktop app, select the Code tab
  3. Start a local session pointing to any project directory
  4. Ask Claude to run any command that accesses a TCC-protected file, e.g., sqlite3 ~/Library/Messages/chat.db "SELECT COUNT(*) FROM message;"
  5. Observe sqlite3.OperationalError: unable to open database file
  6. Run the same command from Claude Code CLI in Terminal — it succeeds

Verification:

# Check the user-level TCC database — the embedded CLI has been silently denied:
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
  "SELECT client, service, auth_value FROM access WHERE client LIKE '%claude-code%';"

# Output:
# ~/Library/Application Support/Claude/claude-code/<VERSION>/claude | kTCCServiceSystemPolicyAppData | 5

Workaround:
Add the embedded CLI binary directly to Full Disk Access:

  1. System Settings > Privacy & Security > Full Disk Access > click +
  2. Press Cmd+Shift+G, paste: ~/Library/Application Support/Claude/claude-code/<VERSION>/claude
  3. Note: the binary will NOT appear in the UI list after adding (macOS does not render path-based FDA entries), but the grant is active

Claude Model

Opus

Is this a regression?

No, this never worked

Last Working Version

_No response_

Claude Code Version

CLI: 2.1.37, Desktop embedded CLI: 2.1.34, Desktop app: 1.1.2321

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

This issue affects the Code tab in the Claude Desktop app specifically. The CLI version works fine because it inherits Full Disk Access from Terminal.app.

Key details:

  • The embedded CLI is signed as com.anthropic.claude-code (different from the desktop app's com.anthropic.claudefordesktop)
  • The embedded CLI is stored outside the .app bundle at ~/Library/Application Support/Claude/claude-code/<VERSION>/claude
  • macOS Sequoia (Darwin 25.2.0)
  • The workaround (manually granting FDA to the embedded CLI) must be repeated after every Desktop app update since the version folder path changes
  • The FDA grant for the embedded CLI does not appear in System Settings UI (macOS does not render path-based entries), making it invisible and unauditable without sudo sqlite3 on the system TCC database

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗