[BUG] Claude.app (macOS): ShipIt falsely reports successful update but bundle swap never completes
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Claude.app repeatedly shows "Relaunch to update", yet relaunching does not result in updated version.
Claude.app version stuck at (1.2581.0) and the staged version (1.3883.0)
The ShipIt log excerpt — especially the false-positive "Installation completed successfully" line
The bundle ID: com.anthropic.claudefordesktop.ShipIt
What Should Happen?
Relaunching Claude.app should allow the update to complete.
Error Messages/Logs
Pertinent output from `tail -f ShipIt_stderr.log`
2026-03-17 04:10:37.067 ShipIt[54779:42998617] Moved bundle contents from file:///var/folders/ml/7vxjbf7s5pq0k8cvn3bqtym40000gn/T/com.anthropic.claudefordesktop.ShipIt.qfTu7AJK/Claude.app to file:///Applications/Claude.app/
2026-03-17 04:10:37.197 ShipIt[54779:42998617] Couldn't remove owned bundle at location file:///var/folders/ml/7vxjbf7s5pq0k8cvn3bqtym40000gn/T/com.anthropic.claudefordesktop.ShipIt.qfTu7AJK/Claude.app, error NSError { domain: NSCocoaErrorDomain, code: 4, description: "“Claude.app” couldn’t be removed.", failureReason: "The file doesn’t exist.", underlying error: NSError { domain: NSPOSIXErrorDomain, code: 2, description: "The operation couldn’t be completed. No such file or directory" }, userInfo: {
NSFilePath = "/var/folders/ml/7vxjbf7s5pq0k8cvn3bqtym40000gn/T/com.anthropic.claudefordesktop.ShipIt.qfTu7AJK/Claude.app";
NSURL = "file:///var/folders/ml/7vxjbf7s5pq0k8cvn3bqtym40000gn/T/com.anthropic.claudefordesktop.ShipIt.qfTu7AJK/Claude.app";
NSUserStringVariant = (
Remove
);
} }
2026-03-17 04:10:37.563 ShipIt[54779:42998617] Installation completed successfully
2026-03-17 04:10:37.563 ShipIt[54779:42998617] ShipIt quitting
Steps to Reproduce
- Launch Claude.app and note currently-running version.
- Observe bottom left if/when an update is downloaded and notice a message to "Relaunch to update (v1.xxxx.x)".
- Relaunch/restart Claude.app.
- Notice message to "Relaunch to update" and compare currently-installed version.
Claude Model
Sonnet (default)
Is this a regression?
No, this never worked
Last Working Version
_No response_
Claude Code Version
2.1.108 (Claude Code)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
macOS version: 26.4.1
ShipIt completes its run and falsely reporting success despite not having swapped the bundle
The root cause seems to be a bug in ShipIt's move/swap logic—it's getting confused between the temp staging path in /var/folders/ and the cached copy in the ShipIt cache dir, resulting in a no-op with a false positive exit
Manual work-around has been to quit all Claude-related processes, manually delete /Applications/Claude.app, then move staged version from ~/Library/Caches/com.anthropic.claudefordesktop.ShipIt/update.[x]/Claude.app into /Applications.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗