[Bug] macOS Activity Monitor shows version number (e.g. '2.0.53') instead of 'claude' as process name
Environment
- Platform: macOS (Darwin 25.1.0, Apple Silicon)
- Installation method: Native installation via
bun - Claude Code version: 2.0.53
Description
In macOS Activity Monitor, Claude Code processes appear with just the version number (e.g., 2.0.53) as the process name instead of something recognizable like claude or Claude Code.
This makes it difficult to:
- Quickly identify Claude Code processes in Activity Monitor
- Distinguish Claude Code from other applications
- Monitor resource usage at a glance
Root Cause
The native installation stores versioned binaries at:
~/.local/share/claude/versions/2.0.53 (actual Mach-O binary)
~/.local/bin/claude -> ~/.local/share/claude/versions/2.0.53 (symlink)
macOS Activity Monitor uses proc_pidpath() from libproc.dylib to get process names, which resolves symlinks and returns the actual binary path. Since the binary filename is literally 2.0.53, that's what Activity Monitor displays.
Reproduction
- Install Claude Code via native installation
- Run
claudein terminal - Open Activity Monitor
- Search for "claude" - no results
- Search for the version number (e.g., "2.0.53") - Claude Code processes appear
Expected Behavior
Activity Monitor should show a recognizable name like claude, claude-code, or claude-2.0.53.
Potential Fix
One low-disruption option would be to rename the versioned binary files from {version} to claude-{version}:
~/.local/share/claude/versions/claude-2.0.53
This would:
- Make processes show as
claude-2.0.53in Activity Monitor (recognizable + shows version) - Require minimal changes (just the filename template in build/update logic)
- Not affect any user-facing paths (symlink remains
~/.local/bin/claude)
However, there may be other approaches the team prefers.
Additional Context
Verified via:
$ readlink -f ~/.local/bin/claude
/Users/.../.local/share/claude/versions/2.0.53
$ python3 -c "
import ctypes, os
libproc = ctypes.CDLL('/usr/lib/libproc.dylib')
# ... proc_pidpath() returns the resolved path
"
# Returns: /Users/.../.local/share/claude/versions/2.0.53
This appears to be unreported - searched existing issues for Activity Monitor, process name/title, and related terms without finding a match.
22 Comments
This issue has been inactive for 30 days. If the issue is still occurring, please comment to let us know. Otherwise, this issue will be automatically closed in 30 days for housekeeping purposes.
This is still occurring as of version 2.0.76
This also impacts Tmux's automatic-rename capability
Still occurring as of v2.1.7 - and it's a bug that makes observability difficult especially when running multiple Claudes.
!Image
I would recommend leaving a
/bugin Claude Code. It's unclear to me how often GitHub issues are actually reviewed, but from seeing the attitudes of the Claude Code team on X, they seem to very aggressively monitor the native feedback and bug reports.I don't see any
/bugcommand in Claude Code? @shaanmajid!Image
I think it's disabled if you have
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1or similar settings (I keep the same on and briefly remove it to submit bugs and re-enable afterwards lol).Still occurring in 2.1.17
tmux
pane_current_commandalso affectedThis also breaks tmux's
automatic-rename-formatand any plugin that relies onpane_current_commandto identify the running process.On macOS, tmux uses
proc_name()which resolves the symlink at~/.local/bin/claudeto the versioned binary (e.g.~/.local/share/claude/versions/2.1.45), sopane_current_commandreturns2.1.45instead ofclaude.This means plugins like tmux-nerd-font-window-name can't match the process to show a Claude icon. Even if the binary were renamed to
claude-2.1.45, plugins still couldn't match onclaudewithout prefix/pattern matching support.The ideal fix from the tmux perspective would be a binary named
claude(with version tracked via an internal mechanism rather than the filename).Still present. It is probably because they are using symlinks when using the custom installer instead of npm:
Confirmed still happening in 2.1.62.
Root cause is that the binary is ~/.local/share/claude/versions/2.1.62
Renaming the binary to claude-2.1.62 would resolve this issue.
FWIW I'm seeing this in 2.1.74, just reported via
/bugand it generated this for a Github issue:Bug Description
tmux windows show "2.1.74" instead of "claude" because the binary at ~/.local/share/claude/versions/2.1.74 is named after the version. tmux
resolves the symlink and uses the filename as the window title. Same root cause as https://github.com/anthropics/claude-code/issues/12433.
Environment Info
Errors
Some more context - this only happens with the binary installed by the install script
curl -fsSL https://claude.ai/install.sh | bash. If you install viahomebrew->brew install --cask claude-codethe process is calledclaude.But the homebrew installation is constantly lagging behind because the pace of updates + slow homebrew formula updates, so claude is always complaining it's out of date and telling you to run
brew upgrade claude-code, when homebrew doesn't have a new version yet.Anyone know how we get someone to triage this? Or just get lucky with the 8k+ open issues on this repo, lol.
@mattwilkinsonn that's why I switched to the direct install (brew is often behind on releases)
tmux users may be interested in the [workaround][1] shared by @brian-deane-gusto.
[1]: https://github.com/anthropics/claude-code/issues/49852#issuecomment-4328517818
Behavior is definitely still present though, would love a fix!
+1 - this isn't only a cosmetic Activity Monitor / tmux title issue. The versioned binary path also invalidates macOS TCC Automation grants on every upgrade, which silently breaks unattended automation.
Concrete operational impact: I run scheduled cron flows that drive Chrome via
claude --chromeplus an AppleScript wrapper for window/tab housekeeping (health probe, stale-tab cleanup, post-flow window close). After every Claude upgrade, the Chrome Automation grant goes stale because TCC sees the new versioned binary as a new app. The cron-launched wrapper hits atell application "Google Chrome"health probe, macOS queues a TCC consent dialog that no one is at the keyboard to click, and the entire pipeline silently fails. Last upgrade cost me ~2 days of failed GLG scans before I noticed.Confirming @dweekly's earlier finding: my install is also at
~/.local/share/claude/versions/<version>/claudewith~/.local/bin/claudesymlinked in. macOS TCC resolves the symlink → new file → new TCC identity → reauth required.Workaround for anyone hitting this on automated/headless setups:
brew install --cask claude-codeputs the binary at a stable Homebrew path and the TCC grant survives upgrades. Tradeoff is the Homebrew formula lags upstream by days.Real fix would be either (a) install the binary at a stable path with a sibling versions/ dir (so the executed path doesn't change per release), or (b) codesign every release with a stable Designated Requirement so TCC treats them as the same identity even at different paths.
Please fix this, this is going against all norms on macOS. Process names should be static among versions and they should be a string that resembles the application. This abnormal name makes it very hard to perform any governance or forensic investigation on Claude Code.
Same root cause bites harder in the macOS Automation/TCC permission dialog, where it crosses from cosmetic into a security concern.
On 2.1.166, launching a background job triggered:
No "Claude Code", no developer identity — just a bare semver requesting the power to drive Terminal (effectively arbitrary command execution). To a careful user this is indistinguishable from malware, and the correct security instinct is to click Don't Allow and start hunting for what's compromising the machine. I did exactly that before tracing the process back to
~/.local/share/claude/versions/2.1.166.It compounds with the versioned-install-path problem (#46859 / #30608): every auto-update is a new binary identity to TCC, so the scary unnamed prompt re-appears on each update even after you've granted it once.
Fix is the same as this issue asks — a stable
CFBundleName/CFBundleDisplayName(and ideally a version-independent TCC-facing binary path) so both Activity Monitor and the permission dialogs read "Claude Code" instead of a version string.Seeing the same on Linux (e.g. in
top). +1 to fixing this.Still seeing this on macOS 15.7.1 (upgraded from 15.5 today). The dialog reads
"claude.app" would like to access data from other appsand reappears repeatedly even after clicking Allow. Full Disk Access is granted for all three claude CLI binaries and the Claude desktop app.Second symptom of the same root cause: the Local Network permission list (Privacy & Security → Local Network) accumulates a new 'claude' entry on every auto-update, because each versioned binary is a fresh TCC identity. I currently have 18+ duplicate 'claude' entries in Local Network, all enabled. The same happens in Full Disk Access. The net effect is that every update triggers a new permission dialog, and the permission panels become unusable garbage. This won't be fixed by clicking Allow — it will keep accumulating until the binary has a stable identity.