[BUG] macOS: Claude Code shows up as three identities (Desktop "Claude", "claude", and per-version "2.1.x") with four separate copies on disk

Status Open
Reported on v2.1.201
Maintainer reply None cached
Activity 2 comments · opened Sep 26, 2026

Preflight Checklist

  • [x] I have searched existing issues. The per-release version-number rows are already tracked in #93929 (refiling #76615 / #38722). This report is about the broader problem: one product shows up under three separate identities.
  • [x] This is a single bug report
  • [x] I am using the latest version of Claude Code

What's Wrong?

On a Mac with both Claude Desktop and the native-installer CLI, a single product (Claude Code) appears in System Settings → Privacy & Security under three unrelated identities, and it exists on disk as four separate copies managed by two different updaters. Users can't tell which row is which, what they are granting, or which rows are safe to remove.

What this machine shows in Privacy & Security (Full Disk Access, Files & Folders, Automation, Media & Apple Music, Photos, Accessibility / device control, Screen & System Audio Recording) and in General → Login Items:

| Row shown in Settings | Actual source |
|---|---|
| Claude (white icon) | Claude Desktop, /Applications/Claude.app, com.anthropic.claudefordesktop |
| claude (orange icon) | a bundled Claude Code (com.anthropic.claude-code): the Desktop-managed claude.app or the CLI's ClaudeCode.app (I can't tell which from the UI) |
| 2.1.201, 2.1.205, 2.1.282 (blank or generic icon) | CLI native-installer binaries at ~/.local/share/claude/versions/<ver> (path-keyed TCC clients, see #93929). Most of these point at binaries the updater already deleted. |

Copies of Claude Code on disk:

| Location | Managed by | Version | Size |
|---|---|---|---|
| ~/.local/share/claude/versions/2.1.283 (+ 2.1.282 kept for rollback) | CLI updater | 2.1.283 | 427 MB |
| ~/.local/share/claude/ClaudeCode.app | CLI updater | executable hardlinked to 2.1.282, one release behind the live binary | (hardlink) |
| ~/Library/Application Support/Claude/claude-code/2.1.281/claude.app | Desktop | 2.1.281 | 211 MB |
| ~/Library/Application Support/Claude/claude-code-vm/2.1.219/claude (Linux ELF for the VM) | Desktop | 2.1.219, last touched 2026-07-26, 60+ releases behind | 259 MB |

The Desktop copy and the CLI copies have the same signing identity (com.anthropic.claude-code, Team Q6L2SF6YDW), yet macOS treats them as different clients because they live at different paths (bundle vs bare executable, and a new path for each version). Every permission a user grants to one does not carry over to the others, so the same prompt keeps coming back under a different name.

What Should Happen?

  • One Claude Code install per machine that the Desktop app and the CLI share (or at least one stable, bundle-based executable path both launch through), so macOS sees one Claude Code client instead of claude + N × 2.1.x.
  • The Desktop app should reuse an existing native-installer CLI instead of downloading its own ~200 MB copy, or document why it can't.
  • Old copies (like the 2-month-old claude-code-vm/2.1.219) should be cleaned up or updated.
  • Permission prompts and Settings rows should read "Claude Code", never a bare version number.

Steps to Reproduce

  1. Install Claude Desktop and the CLI via the native installer on macOS.
  2. Use both for a few weeks across several auto-updates (including background / non-Terminal-launched CLI sessions).
  3. Open System Settings → Privacy & Security → any of the panes above.
  4. Observe Claude, claude, and several 2.1.x rows for what is one product.

The only cleanup available to users is tccutil reset All (every app on the machine loses its privacy permissions) plus sudo sfltool resetbtm for Login Items, and the rows come back after the next few updates.

Environment

  • macOS 27.0 (26A428), Apple Silicon
  • Claude Code CLI 2.1.283 (native installer)
  • Claude Desktop 2.9939.2

Related: #93929, #76615, #38722, #67167, #79053

View original on GitHub ↗

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