[BUG] Code tab terminal integration fails on Windows (MSIX install)

Status Open
Reported on v2.1.288
Maintainer reply None cached
Activity 8 comments · opened Oct 3, 2026

Summary

In the Claude desktop app (Code tab), the PowerShell terminal integration does not load,
because its files are written into the MSIX-virtualized AppData folder, while the terminal
shell runs outside the package and looks for them in the real %APPDATA%. As a result, the app
never detects a ready prompt in Terminal panel tabs: Claude's run_in_terminal tool always
fails with "had not reached a prompt after 60 s" and closes the tab.

Environment

  • OS: Windows 11 Home 10.0.26200
  • Claude desktop app: MSIX package Claude_pzs8sxrjxfjjc, version 2.19675.0.0

(problem also present in 2.16120.0.0 before the auto-update)

  • Shell: Windows PowerShell 5.1, no PowerShell profile files present
  • Date observed: 2026-10-03

Steps to reproduce

  1. Install the Claude desktop app from the MSIX package on Windows 11.
  2. Open the Code tab, open a new tab in the Terminal panel.
  3. Alternatively, let Claude run a command via run_in_terminal.

Actual result

Every new terminal tab prints:

WARNUNG: Claude terminal integration did not load: Ausnahme beim Aufrufen von "ReadAllText"
mit 1 Argument(en): "Ein Teil des Pfades
"C:\Users\<user>\AppData\Roaming\Claude\terminal-shell-integration\pwsh\claude-desktop.ps1"
konnte nicht gefunden werden."

(English: "Could not find a part of the path ...claude-desktop.ps1")

The prompt then appears normally and manual typing works, but run_in_terminal fails:
"the shell in new terminal tab had not reached a prompt after 60 s ... The tab was closed".

Expected result

The integration script loads, the app detects the prompt, run_in_terminal works.

Analysis

  • The app writes terminal-shell-integration\ (pwsh, bash, zsh, fish, spawn) only to the

virtualized location
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\terminal-shell-integration\
(files regenerated on every app start).

  • The terminal shell runs outside the MSIX container and looks for

%APPDATA%\Claude\terminal-shell-integration\pwsh\claude-desktop.ps1, which does not exist.
Checked from a Terminal panel tab: the real path returns False, the virtualized path True.

  • The per-tab nonce file (env CLAUDE_DESKTOP_TERMINAL_NONCE_FILE, in spawn\) has the same

problem: it is written to the virtualized folder and was left unread
(e.g. spawn\959c2beede22cce1, 50 bytes).

Workarounds tried

  1. Copying the folder to the real %APPDATA%\Claude\: the warning disappeared, but the prompt was

still not detected (nonce file still not reachable).

  1. Directory junction from %APPDATA%\Claude\terminal-shell-integration to the virtualized folder:

the warning disappeared and the nonce file was now read and deleted by the shell (no new
leftover files in spawn\). The app still did not detect the prompt; run_in_terminal still
timed out after 60 s. Cause of this remaining part unknown.

  1. Junction removed again afterwards.

Not affected

Claude Code CLI (native install, 2.1.288) works normally in the terminal.

View original on GitHub ↗

3 Comments

QuintusPL · 11 days ago

Same issue here — additional diagnostics, incl. why the junction workaround fails.

Environment: Windows 11 Home 10.0.26300, Claude desktop MSIX Claude_2.19675.0.0_x64__pzs8sxrjxfjjc, Windows PowerShell 5.1, Claude Code 2.1.286 (Code tab).

1. Without any workaround — run_in_terminal tabs print:

WARNING: Claude terminal integration did not load: Exception calling "ReadAllText" with "1" argument(s):
"Could not find a part of the path 'C:\Users\<user>\AppData\Roaming\Claude\terminal-shell-integration\pwsh\claude-desktop.ps1'."

The file only exists in %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\terminal-shell-integration\. A process started outside the container (via Win32_Process.Create) confirms the real %APPDATA%\Claude doesn't exist at all.

2. With a junction real %APPDATA%\Claude\terminal-shell-integration → LocalCache copy (answering "cause of this remaining part unknown" above): the warning disappears, but the app itself can no longer write into that folder — every spawn logs a spurious EEXIST on the exclusive .tmp create (%LOCALAPPDATA%\Claude\Logs\main.log):

13:45:54 [warn] [ShellPtyManager] shell integration nonce unavailable EEXIST: file already exists, open '...\terminal-shell-integration\spawn\93e32ca642584f68.tmp'
13:57:59 [warn] [ShellPtyManager] shell integration nonce unavailable EEXIST: file already exists, open '...\terminal-shell-integration\spawn\e327ccfeace53b70.tmp'
14:01:46 [warn] [ShellPtyManager] shell integration unavailable EEXIST: file already exists, open '...\terminal-shell-integration\zsh\.zlogin.tmp'
14:05:01 [warn] [ShellPtyManager] shell integration unavailable EEXIST: file already exists, open '...\terminal-shell-integration\bash\claude-desktop.bash.tmp'

shellIntegrationForSpawn then returns undefined, so the shell is started as a bare powershell.exe (no -NoProfile -NoExit -Command …), no OSC 133 marks are emitted, and run_in_terminal still times out after 60 s. This is the MSIX write-virtualization reparse-point limitation described in #83584, so the junction is not a viable workaround (removed).

Likely fix: the one-line manifest change proposed in #83584 (<desktop6:ExcludedDirectory Name="$(KnownFolder:RoamingAppData)\Claude"/>), or writing terminal-shell-integration + the nonce file to a non-virtualized location (e.g. %TEMP%).

Rapius · 11 days ago

Thanks @QuintusPL, that matches what I see here. My own %LOCALAPPDATA%\Claude\Logs\main.log confirms both points:

  • While the junction was in place (11:04:02):

``
[warn] [ShellPtyManager] shell integration nonce unavailable EEXIST: file already exists, open 'C:\Users\<user>\AppData\Roaming\Claude\terminal-shell-integration\spawn\b06874d71254765e.tmp'
`
(stack goes through
shellIntegrationForSpawn → startShellPty`)

  • While only the copied folder was in place (10:54:55):

``
[warn] [ShellPtyManager] OSC 133 marks no longer trusted on ...::c5 (nonce leaked or never collected)
``

Correction to my original report: I wrote that with the junction "the nonce file was now read and deleted by the shell". That was wrong. The nonce file was never created because of the EEXIST error, which is why no leftover file appeared in spawn\. So neither the copy nor the junction is a working workaround. The junction has been removed.

Related: #83584

Lole1009 · 10 days ago

Title: Windows (MSIX) — Terminal panel can't load shell integration; run_in_terminal never types commands

Claude desktop 2.19675.0.0 (MSIX package Claude_pzs8sxrjxfjjc), Windows 11 Home 10.0.26200, PowerShell.

Every new Terminal panel tab prints:
"Claude terminal integration did not load: ... Could not find a part of the path
'C:\Users\<user>\AppData\Roaming\Claude\terminal-shell-integration\pwsh\claude-desktop.ps1'"
and run_in_terminal fails with "shell had not reached a prompt after 60 s". Restarting the app doesn't help.

Cause (verified): the app writes the integration scripts through MSIX AppData virtualization, so they land in
C:\Users\<user>\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\terminal-shell-integration\
but the Terminal panel shell runs outside the package and reads the real %APPDATA% path, where the file doesn't exist.
Processes inside the package (the agent's Bash/PowerShell tools) do see the file.

Showing cached comments. Read the full discussion on GitHub ↗