fix(desktop): resolve claude executable on windows - #4896
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
ApprovabilityVerdict: Approved 0c5a2c9 Straightforward Windows bug fix that merges PATH environment variable sources (Machine, User, Process) to ensure executables are properly resolved. Small, self-contained change using existing patterns. You can customize Macroscope's approvability policy. Learn more. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 037dc74. Configure here.
CDVolvik
left a comment
There was a problem hiding this comment.
Windows check against today's main (6ae9662d8).
Half of this PR is already on main. knownWindowsCliDirs already includes %USERPROFILE%\.local\bin (and this box has that directory). The remaining unique change is the PATH capture: Machine + User + Process, joined.
That join is the better shape for the desktop profile probe. [Environment]::GetEnvironmentVariable('PATH') with no target is Process scope, so after loadProfile: true it still sees fnm/profile prepends. #6356 reads only Machine+User for both probes, so profile.PATH and noProfile.PATH become the same registry string. If these two land independently, keep this merge and drop #6356's PATH rewrite (the Codex dir addition in #6356 can stay).
This PR only edits DesktopShellEnvironment.ts. packages/shared/src/shell.ts buildWindowsEnvironmentCaptureCommand — the path fixPath() uses on the server — is unchanged, so a refresh after install still misses User-PATH writes on the shared side.
CONFLICTING against current main; needs a rebase before the merge is real. No tests in the diff, so I did not get a revert-fail.
21f01c1 to
0c5a2c9
Compare
Dismissing prior approval to re-evaluate 0c5a2c9
|
Closing as superseded by #5074, which has merged and covers this change on the current architecture. Thanks for the contribution. |

Fixes #4846
On Windows, T3 Code would report Claude as missing if it was installed in the user's persistent PATH but the process inherited a stale PATH.
This fixes the desktop environment resolver to explicitly read and merge the
Machine,User, andProcessenvironment variables forPATHon Windows, and adds%USERPROFILE%\.local\binto the known CLI directories fallback.Note
Low Risk
Windows-only desktop startup PATH probing; improves CLI discovery without touching auth, data, or network paths.
Overview
Fixes false “Claude not found” on Windows when Claude lives on the User or Machine PATH but the Electron process inherited a stale Process PATH.
captureWindowsEnvironmentCommandnow treatsPATHspecially: the PowerShell probe reads Machine, User, and Process values via[Environment]::GetEnvironmentVariable, concatenates non-empty segments, and emits that merged string between the existing markers. Other env vars still use the single-scope lookup unchanged.Reviewed by Cursor Bugbot for commit 0c5a2c9. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Fix Claude executable resolution on Windows by merging Machine, User, and Process PATH scopes
The
captureWindowsEnvironmentCommandutil in DesktopShellEnvironment.ts previously captured only the process-scoped PATH, which could miss entries added by installers to the Machine or User scopes. PATH is now resolved by fetching all three scopes separately, filtering out null/empty entries, and joining them with;. Behavioral Change: the captured PATH value will now be broader than the process-scoped value alone, which may surface executables not previously visible.Macroscope summarized 0c5a2c9.