LSBackgroundOnly ignored: background/Cowork sessions each spawn a visible Dock icon
Description
Background Claude Code sessions spawned by the desktop app (Cowork / local-agent-mode sessions) each show up as a separate rocket-icon entry in the macOS Dock, despite the app bundle declaring itself background-only.
Evidence
Inspecting the spawned bundle at ~/Library/Application Support/Claude/claude-code/<version>/claude.app/Contents/Info.plist:
LSBackgroundOnly=trueLSUIElementkey does not exist- Bundle identifier:
com.anthropic.claude-code
LSBackgroundOnly = true is macOS's standard signal to suppress a Dock icon entirely, but each spawned session process still gets its own Dock icon (confirmed via ps aux, showing multiple independent claude CLI processes each launched from its own versioned claude.app bundle under local-agent-mode-sessions).
Impact
Running several Cowork / background agent sessions clutters the Dock with duplicate rocket icons that don't correspond to any visible window, with no obvious way to tell which icon maps to which session, and no indication from the Info.plist alone that this would happen.
Suspected cause
Since the manifest already declares LSBackgroundOnly = true, the Dock icon is likely being forced by runtime code (e.g. an explicit Electron/Chromium activation-policy call such as app.dock.show(), or a launch method like open that forces regular app activation) rather than anything the Info.plist controls. A plist-only fix would not address this.
Expected behaviour
Background/Cowork session subprocesses should not appear as separate Dock icons, consistent with their own LSBackgroundOnly declaration.
Environment
- macOS Darwin 25.6.0
- Claude desktop app, claude-code bundle version 2.1.255