Skip to content

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

Description

@dieeer

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    staleIssue is inactive

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions