Claude for Desktop menu bar icon blocked on macOS 26 (StatusKit trackedApplications)

Resolved 💬 2 comments Opened Apr 1, 2026 by dieeer Closed May 8, 2026

Summary

On macOS 26.3, Claude for Desktop runs (visible in Activity Monitor) but never shows a menu bar icon. The root cause is a new macOS 26 per-app approval system for menu bar status items.

Root Cause

macOS 26 introduced StatusKit — a gated approval system where every third-party app's menu bar icon starts as isAllowed: false and must be explicitly approved before it can appear. Approvals are stored in a root-owned plist:

~/Library/Group Containers/group.com.apple.controlcenter/Library/Preferences/group.com.apple.controlcenter.plist

The trackedApplications key (a nested binary plist) contains per-bundle-ID entries:

{
  "location": { "bundle": { "_0": "com.anthropic.claudefordesktop" } },
  "menuItemLocations": [{ "bundle": { "_0": "com.anthropic.claudefordesktop" } }],
  "isAllowed": false
}

When isAllowed is false, ControlCenter logs:

[com.apple.controlcenter:appStatusItems] Starting to track blocked host; (bid:com.anthropic.claudefordesktop-Item-0-XXX)

...and the status item is destroyed within ~100ms of launch. The app appears to run fine but has no menu bar presence.

How to Fix (for affected users)

Run the following in Terminal:

python3 - << 'PYEOF'
import plistlib, shutil, os

path = os.path.expanduser(
    "~/Library/Group Containers/group.com.apple.controlcenter"
    "/Library/Preferences/group.com.apple.controlcenter.plist"
)
shutil.copy(path, "/tmp/cc-fix.plist")
os.chmod("/tmp/cc-fix.plist", 0o644)

with open("/tmp/cc-fix.plist", "rb") as f:
    data = plistlib.load(f)

inner = plistlib.loads(data["trackedApplications"])
for entry in inner:
    if isinstance(entry, dict) and "isAllowed" in entry:
        bid = entry.get("location", {}).get("bundle", {}).get("_0", "")
        if bid == "com.anthropic.claudefordesktop":
            entry["isAllowed"] = True
            print("Fixed.")

data["trackedApplications"] = plistlib.dumps(inner, fmt=plistlib.FMT_BINARY)
with open("/tmp/cc-fix-patched.plist", "wb") as f:
    plistlib.dump(data, f, fmt=plistlib.FMT_BINARY)
PYEOF

Then (requires sudo):

sudo cp /tmp/cc-fix-patched.plist "/Users/$USER/Library/Group Containers/group.com.apple.controlcenter/Library/Preferences/group.com.apple.controlcenter.plist" && sudo chown root:wheel "/Users/$USER/Library/Group Containers/group.com.apple.controlcenter/Library/Preferences/group.com.apple.controlcenter.plist" && sudo chmod 600 "/Users/$USER/Library/Group Containers/group.com.apple.controlcenter/Library/Preferences/group.com.apple.controlcenter.plist" && killall ControlCenter && sleep 3 && killall Claude 2>/dev/null; sleep 1 && open -a Claude

Proper Fix (for Anthropic)

macOS 26 requires apps to handle the StatusKit approval flow on first launch — ensuring the user sees the "Allow in Menu Bar" prompt. If the prompt is never shown (e.g. due to app translocation or entitlement issues), the app silently ends up blocked with no way to recover without the manual fix above.

Additionally, Claude Desktop should have the following hardened runtime entitlements if not already present:

<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>

Environment

  • macOS 26.x
  • Claude for Desktop (any recent version)
  • Confirmed: com.anthropic.claudefordesktop has isAllowed: false in the trackedApplications plist on affected machines

Related

View original on GitHub ↗

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