Desktop (Windows): remote SSH session loses UI message history after reboot
Bug Report: Remote SSH sessions lose UI message history after Windows client reboot
Summary
When using Claude Desktop (Windows) with a remote workspace over SSH, the conversation UI history disappears after rebooting Windows, even though:
- The underlying session JSONL on the remote host is intact and complete
- The ccd-cli subprocess is respawned with
--resume <UUID>and successfully loads the context (Claude "remembers" prior conversation when prompted)
The issue is UI-only: message history is not re-rendered after client restart. This does not occur when using a local (non-SSH) workspace.
Environment
Windows client
- Claude Desktop (Windows) — latest version at time of report
- Workspace: Remote SSH, mapped to a folder on a Synology NAS
NAS (remote host)
- Synology DSM, Linux 4.4.302+ (x86_64)
- Remote binaries installed at
~/.claude/remote/: server—claude-ssh cee98937dc257e6af64e712d71dbe4497eb82452(built 2026-04-14T16:53:35Z)ccd-cli/2.1.111—2.1.111 (Claude Code)- Communication: Unix socket
~/.claude/remote/rpc.sock(JSON-RPC) - Session JSONL storage:
~/.claude/projects/<flattened-cwd>/<session-uuid>.jsonl(persisted via bind mount)
Expected behavior
After rebooting the Windows client and reconnecting to the same remote workspace, selecting a session from the sidebar should re-render the full message history in the main pane — the same behavior as local workspaces.
Actual behavior
After reboot and reconnection:
- Sidebar session list is still present (persisted on Windows).
- Selecting any remote-workspace session shows "No messages yet." in the main pane.
- Sending a new prompt to that session gets a response that clearly uses the prior context — Claude can summarize progress, recall decisions, and continue work from where it left off. This proves the underlying session state is fully intact; only the UI replay is missing.
- Behavior is consistent across multiple remote sessions. Only sessions bound to local (non-SSH) workspaces render their history correctly.
Closing the Windows app (X button / tray minimize) without rebooting does not trigger the bug. Only a full Windows reboot does.
Steps to reproduce
- Set up Claude Desktop on Windows, add a remote workspace over SSH pointing to a folder on a remote host.
- Have a meaningful multi-turn conversation in that remote session so the JSONL accumulates messages.
- Reboot Windows (do not just close the app — full OS reboot).
- Launch Claude Desktop, reconnect to the remote workspace, select the prior session from the sidebar.
- Observe: main pane shows "No messages yet." despite the JSONL on the remote host being intact.
- Send any prompt like "Summarize where we left off" — Claude responds correctly using prior context.
Evidence from the remote server log
Excerpt from ~/.claude/remote/remote-server.log on the NAS:
2026/04/20 07:23:27 [Server] New connection from: @
2026/04/20 07:23:41 [process.Manager] Process 0071cf77-... started, PID=6332, command=/var/services/homes/claude/.claude/remote/ccd-cli/2.1.111
2026/04/20 07:23:41 [process.Manager] Starting stdout streaming for process 0071cf77-...
2026/04/20 07:23:41 [process.Manager] WriteStdin called for process 0071cf77-... with 400 bytes
(initialize request)
ps shows the spawned ccd-cli has:
--output-format stream-json --verbose --input-format stream-json \
--resume <session-uuid> --include-partial-messages --replay-user-messages ...
The --replay-user-messages flag suggests some form of replay is intended, but the UI does not show any messages (user or assistant) after reconnect.
The JSONL for one affected session contains:
- 689 user messages
- 1035 assistant messages
- Other events: queue-operation, attachment, ai-title, last-prompt, system
All present, ~7.2 MB, 2052 lines total. None of this is reflected in the UI post-reboot.
Scope
| Scenario | History visible in UI |
|---|---|
| Local workspace, any restart pattern | ✅ Yes |
| Remote workspace, session switching without reboot | ✅ Yes |
| Remote workspace, close Windows app via X | ✅ Yes |
| Remote workspace, after Windows reboot | ❌ No ("No messages yet.") |
Working hypothesis
Local workspaces likely have the Desktop app read the JSONL files directly from the filesystem to re-hydrate the message list. In remote mode, the app apparently relies on live RPC events forwarded from the server, and after a fresh reconnect the server/ccd-cli respawn pathway re-establishes CLI-side context but does not push historical messages back through the RPC stream to the UI.
Impact
- Users cannot visually review prior conversation after reboot, even though the data is safe.
- Workaround: users have to manually prompt Claude to summarize prior progress every time they reboot.
- Pro Max subscribers in particular use Claude Desktop heavily across multi-day / multi-session workflows, where this gap is especially noticeable.
Suggested fix directions
- On Desktop app reconnect, have the remote
serverstream the persisted JSONL history through RPC so the UI can re-render messages, matching local-workspace behavior. - Alternatively, expose an RPC method the Desktop UI can call on session selection to request full history replay.
- As a stopgap, document this limitation so users understand context is preserved even when the UI shows "No messages yet."
Additional context
Happy to provide more log excerpts, full ps output, or test against newer ccd-cli builds if helpful. Diagnosis was done from the NAS host side and the JSONL contents are confirmed intact.
Showing cached comments. Read the full discussion on GitHub ↗
6 Comments
I'm having this same issue. However, I noticed the problem also happens without a reboot if I shutdown claude for windows, then go into task manager and end all claude tasks, then restart claude for windows.
I hit the same UI symptom from a different trigger and have additional evidence pointing to the root cause. Cross-posting from #58797 (which I'll close as duplicate).
Different trigger, same bug: instead of rebooting the client, I killed the bridge process on the remote host (
kill $(pgrep -f "remote/server --bridge")). The bridge auto-respawned, but all existing sessions then showed "No messages yet" — exactly as in this issue. The reboot path probably hits the same code path because Windows reboot drops the in-RAMccd-cliprocesses the Desktop client was previouslyprocess.reattach-ing to.Direct test of the binary, bypassing the client and bridge entirely:
Result: 1 line of stdout — only the
control_response/successtoinitialize. Zerouser/assistantevents replayed from the transcript. Same result on2.1.121,2.1.128, and2.1.138— not a regression, the cold-spawn replay path appears to have never worked.Two distinct code paths, only one of which works:
process.reattach(client reconnects to a long-livedccd-clithat has the transcript buffered in RAM) → works, history rendersprocess.spawn+--resume+--replay-user-messages(cold start, transcript must be read from disk) → silent, no replay events emittedWhatever drops the in-RAM state of
ccd-cliprocesses (client reboot in your case, bridge restart in mine,--servedaemon restart in general) forces the client onto the cold-spawn path, which exposes the missing replay.Suggested fix (pick one):
ccd-cli --resume X --replay-user-messagesemit the buffereduser/assistantrecords on stdout immediately after the firstinitializeresponse.control_request:replay_historyRPC the client can issue afterprocess.spawnof a--resumed process.Full details with binary symbol analysis and
/proc/<pid>/fd/inspection in my closed duplicate: #58797.Happening on macOS, this is not Windows-specific.
Environment:
Symptom: every session in the project's sidebar shows "No messages yet". Session titles and metadata are intact, transcript content is missing only in the UI.
The 1.9255.2 update doesn't appear to be the trigger. This matches the diagnosis in #58797 (cold ccd-cli --resume via process.spawn not replaying the on-disk transcript, vs. the warm process.reattach path that works). Posting mainly so this isn't triaged as Windows-only.
+1 issue to thread:
Desktop app (WSL): existing chat shows "No messages yet" — transcript is present in WSL but never loaded into the UI
Environment
6.6.114.1-microsoft-standard-WSL2%USERPROFILE%\.claude(session index/list) + WSL~/.claude(transcripts)Summary
In the Desktop app, opening a chat whose project lives in WSL renders an empty message pane
("No messages yet") even though the conversation exists and is being recorded. This happens
after restarting the app, and reproduces even when WSL is already running and was started
before the app. The session resumes with full context (the model behaves as if it remembers
everything), but none of the prior messages are displayed.
Steps to reproduce
Expected: the chat's prior messages render in the pane.
Actual: the pane shows "No messages yet", while the session is otherwise live and the model
has full context. (Screenshot available: an active session reads "No messages yet" in the center.)
Evidence — this is a UI load/backfill bug, not data loss and not a startup race
session's file
~/.claude/projects/<escaped-cwd>/<uuid>.jsonlgrew from 24 → 59 lines (≈56 KB → ≈242 KB)over the course of the conversation, with fresh
assistantentries timestamped seconds beforethe pane was observed empty. So the writer and the data are fine.
"WSL/filesystem not warm yet" race.
%USERPROFILE%\.claudehas a populated session list (so chats appear in thesidebar), but the message bodies live only in WSL and are not pulled into the UI on connect.
~/.claude/remote/server --serve+--bridge,socket
~/.claude/remote/run/<id>/rpc.sock); the app connects through it.Conclusion: on (re)connect, the Desktop app does not backfill/render the existing transcript
for a WSL-hosted session. The data is intact and resumable; only the UI rendering of history fails.
Impact
Every restart leaves past conversations unreadable in the UI, even though they exist on disk and
the session resumes with full context.
I can confirm this bug. Exact same issue and context (issue on claude desktop only ,windows machine -- ssh --> wsl2)
Same bug on macOS → Linux over SSH, still present in current builds (ccd-cli 2.1.217, 2026-07-23). Adding a data point since this is labeled
platform:windows— it is not Windows-specific.Environment
~/.claude/remote/ccd-cli/2.1.217(the app has pushed 2.1.209 → 2.1.215 → 2.1.217 over the past ten days; bug present throughout)~/.claude/projects/<flattened-cwd>/<session-uuid>.jsonl— 1.5 MB, 635 lines, and still growing while the pane says "No messages yet"Two symptoms beyond the OP
~/.claude/sessions/<pid>.json(right sessionId, version 2.1.217, entrypoint claude-desktop), and (b) messages typed into the blank pane DO reach the session — the model receives and answers them, which I can verify withclaude --resumein a terminal on the remote, where the full history renders fine.A probe that may help debugging: the app's own session-management backend can't see remote transcripts at all. Calling the
list_eventstool (ccd_session_mgmt MCP) from inside a session against another remote session with a fully populated transcript returnsshowing 0 of 0 messages. Meanwhile the process/registry layer is healthy — session list, git status polling, and message delivery all work, and~/.claude/remote/run/*/remote-server.logshows no errors.Consistent with the mechanism described in #58701 (and dups #54187 / #64393): the UI only hydrates history from live-process events and never falls back to the on-disk
.jsonl.