[BUG] Windows Desktop Code session opens blank, appears under wrong project after failed update followed by reinstall, although CLI can resume it
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?
An existing Claude Code session no longer appears under its original project in the Windows desktop app. A conversation with the same title is instead listed under a different project, but it opens as an empty chat.
The session’s .jsonl transcript still exists in the directory associated with the original project, contains the conversation, and can be resumed successfully using the terminal version of Claude Code. This suggests that the transcript itself is intact and that the problem may be in the desktop app’s session index, project association, or sidebar state.
The issue was noticed following a Claude workspace VM failure, an update that became stuck, and an uninstall/reinstall of the desktop app.
Environment
Claude Windows desktop app: 1.26832.0 (056ee2)
Claude Code Version: 2.1.227
Operating system: Windows 11 Home 25H2
Architecture: 64-bit OS, x64-based processor
Plan: Team
Affected area: Code tab
Sequence of events
1. Claude displayed the following workspace error:
Failed to start Claude’s workspaceVM service not running. The service failed to start. Restarting Claude or your computer sometimes resolves this. If it persists, you can reinstall the workspace.
2. I attempted to update Claude, but the update remained stuck and never completed.
3. I uninstalled and reinstalled the Claude desktop app.
4. Afterward, one project was missing from the Code tab.
5. A conversation from that project appeared under a different project with its existing title, but the conversation was empty when opened.
6. The original transcript remained present on disk and readable in a text editor.
7. I installed the terminal version of Claude Code, which successfully found and resumed the same session.
What Should Happen?
The desktop app should discover the existing .jsonl session, display it under the project corresponding to its encoded project path, and load the full conversation.
Reinstalling or updating the desktop app should not cause existing sessions to disappear from the sidebar, become associated with another project, or open as empty conversations.
Actual behavior
- The correct project is absent from the Code tab.
- A conversation with the same title appears under another project.
- Opening that entry produces an empty conversation.
- The complete .jsonl transcript is still present locally.
- Claude Code in the terminal can access and resume the session.
Error Messages/Logs
Possibly related Windows event
Windows Event Viewer recorded the following AppX deployment event during removal of an older Claude package. I do not know whether it is directly related to the missing session.
Log: Application
Source: Microsoft-Windows-AppXDeploymentServer/Operational
Date: 2026-08-01 18:04:15 local time
Event ID: 2562
Level: Information
MSIXDeployment
windows.applicationData
DeleteMachineFolder
Package Claude_1.22209.3.0_x64__pzs8sxrjxfjjc removed machine folder
C:\ProgramData\Microsoft\Windows\AppRepository\Families\ApplicationData\Claude_pzs8sxrjxfjjc:
The system cannot find the path specified.
Relevant XML data:
<EventData>
<Data>MSIXDeployment</Data>
<Data>windows.applicationData</Data>
<Data>DeleteMachineFolder</Data>
<Data>Package Claude_1.22209.3.0_x64__pzs8sxrjxfjjc removed machine folder C:\ProgramData\Microsoft\Windows\AppRepository\Families\ApplicationData\Claude_pzs8sxrjxfjjc: The system cannot find the path specified.</Data>
</EventData>
Steps to Reproduce
Because the initial update/reinstallation problem occurred only once, these steps describe how to observe the persistent broken state rather than how to reproduce the original corruption:
1. Open the Claude Windows desktop app.
2. Go to the Code tab.
3. Look for the affected project.
4. Observe that the original project is missing.
5. Open the other project containing a conversation with the affected conversation’s title.
6. Observe that the conversation is empty.
7. Check the local Claude projects directory:
C:\Users\<Windows-user>\.claude\projects\C--Users-<Windows-user>-Prosculpt\<session-id>.jsonl
8. Observe that the transcript exists and contains the conversation.
9. Open Claude Code in the terminal and resume the session.
10. Observe that the terminal version can access the conversation successfully.
The problem persists after fully quitting and restarting the desktop app and manually reopening the intended project directory.
Troubleshooting attempted
- Fully quit and restarted the Claude desktop app.
- Restarted Windows.
- Confirmed that the .jsonl file exists and is readable.
- Confirmed that its encoded path corresponds to the original project.
- Manually opened the intended project directory.
- Uninstalled and reinstalled the desktop app.
- Installed Claude Code for the terminal and successfully resumed the affected session there.
Claude Model
Not sure / Multiple models
Is this a regression?
Yes, this worked in a previous version
Last Working Version
Claude Windows desktop app: 1.26832.0 (056ee2) claude code version (2.1.215)
Claude Code Version
2.1.215
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
Support conversation ID: 215475439279529 from Claude AI Support Bot Fin
I can provide the affected .jsonl file, organization ID, affected account email, complete Event Viewer XML, or sanitized logs privately if needed.
-----
3 Comments
Desktop therefore displayed the conversation under BoltzGen. When it attempted to resume the session, it searched from that wrong project and logged:
After
cliSessionIdwas removed, Desktop displayed the conversation as empty or showed:The transcript was actually still present under Prosculpt.
2. Desktop recovery/import fragmented the JSONL message graph
During recovery, Desktop logged:
The resulting JSONL was valid JSON, but the removed records were still referenced by later records through
parentUuid.Inspection found:
This explains why
claude --resume,/export, and/branchinitially recovered only the final portion of the conversation even though the JSONL was approximately 1.5 MB.The count is notable: Desktop reported dropping exactly 114 records, and the resulting file had exactly 114 missing parent references.
Recovery performed
The following workaround restored the session:
The repaired copy had:
The repaired session then resumed with its full history in the CLI.
Using
/desktopreproduced part of the bug: Desktop again assigned the imported session to BoltzGen, stripped five newer thinking-only records without reconnecting their children, failed to find the transcript from the wrong directory, and removedcliSessionIdagain.The final successful workaround was:
cwdandoriginCwdto the correct Prosculpt directory.cliSessionId./desktopagain.The conversation now opens under Prosculpt with its complete visible history.
Suggested fix areas
It would be helpful if Desktop could:
cwdor actual JSONL location rather than the currently active Desktop project.cliSessionIdas stale.parentUuidexists before replacing the transcript.cliSessionIdwhen the first lookup may simply have used the wrong project directory.This is recovered locally, but I am leaving the issue open because the workaround required manual repair of internal JSONL and Desktop metadata. The same corruption or project reassignment could affect other users or recur after another import/recovery.
I can provide sanitized wrapper files, graph-validation results, and relevant log excerpts privately.
The transcript is still on disk, so the immediate job is to reconnect Desktop to the original project rather than start a replacement session. I have seen this split when the Desktop wrapper carries one
cwd/originCwdwhile the.jsonllives under the slug for another project.Run
python tools/diagnose.pybefore trying Retry or Start fresh again. It compares the metadata files with~/.claude/projects/and prints the exact next command if thecliSessionIdis missing, dangling, or attached to the wrong project slug. Use that command's dry-run first. Copy%APPDATA%\Claude\claude-code-sessions\and~\.claude\projects\before any apply step, then fully quit Claude Desktop and verifyclaude.exeis gone before changing metadata.I built
BasedGPT/claude-code-session-recoveryfor this file-layer problem. The check that matters is whether the metadata file'scliSessionIdresolves to the transcript file that contains the conversation. The reinstall may be the trigger, but the intact.jsonland the successful CLI resume give you a concrete recovery path; avoid sending another message from the empty Desktop entry until the pointer is preserved.Hope this helps, if my tools are able to help you, would appreciate a ⭐ :)
I'm not a maintainer (Not sure I wish I would like to be), but I recently spent a while mapping where the Windows desktop
app keeps its session state, and your symptoms match something specific, so this may give you something concrete to check.
The app's session list is not built from the
.jsonltranscripts. It reads a separate registry, one small JSON per session:(
%APPDATA%\Clauderesolves to the same store — the app is MSIX, so its data is redirected underPackages\.)Each record looks roughly like:
Two things follow that fit your report:
cwdin that record, notfrom the transcript's location on disk. So a session can sit in the correct
C--Users-<user>-Prosculptfolder and still be displayed under a differentproject if its record's
cwdis wrong.<device>is machine-specific. An uninstall/reinstall — especially onewith an AppX error during removal, as you describe — is the kind of event that
could leave a second
<device>folder, or records regenerated with the wrongcwd. That would also explain why the CLI is unaffected: it never reads thisstore.
Worth checking, all read-only:
If the blank session's record points at a
cliSessionIdwith no matching.jsonl, that is an orphaned index entry rather than lost data. And if the misplaced one has acwdthat does not match where it shows up, the index is what is wrong, not your transcripts — which is the better outcome, since the conversations are intact and resumable from the CLI meanwhile.Close the app fully before changing anything there — it holds LevelDB locks while running.
This is a hypothesis from a different machine/case, not a diagnosis of yours; happy to be wrong. Verified against desktop app 1.37937.3.0.