[BUG] Desktop remote (SSH) sessions never create file-history snapshots → all rewind fails with "Can't rewind to this message" (ccd-cli 2.1.202)

Open 💬 0 comments Opened Jul 9, 2026 by mnrrxyz

Summary

When Claude Code Desktop connects to a remote machine over SSH, the remote backend (ccd-cli) never writes any file-history / checkpoint snapshots on the remote host, even across sessions with many Edit/Write tool calls. As a result, /rewind (and the Desktop rewind button) has no anchors to rewind to, and every rewind attempt fails with "Can't rewind to this message" — the client can only build an "active chain" of size 2 (the latest turn).

This looks like the underlying, remote-mode-specific root cause behind several of the reported "Can't rewind to this message" symptoms (see Related). It is not fixable client-side or by the user: the Desktop re-provisions ccd-cli on every connect, and no snapshots are being generated regardless of version.

Environment

  • Desktop app (macOS): Claude 1.19367.0 (1a5be1), 2026-07-07
  • Remote host: Raspberry Pi 5, Ubuntu 24.04.4 LTS, aarch64, Linux 6.8.0-1060-raspi
  • Remote backend actually running (from session env):
  • CLAUDE_CODE_ENTRYPOINT=claude-desktop
  • CLAUDE_CODE_EXECPATH=/home/<user>/.claude/remote/ccd-cli/2.1.202
  • AI_AGENT=claude-code_2-1-202_agent, CLAUDE_AGENT_SDK_VERSION=0.3.202
  • CLAUDE_SSH_DAEMON_CHILD=1
  • Provisioned ccd-cli versions on the remote: 2.1.187, 2.1.197, 2.1.202
  • Note: the standalone CLI at ~/.local/bin/claude (updated to 2.1.205) is not what the Desktop uses — the Desktop ships/uses its own ~/.claude/remote/ccd-cli/* backend.

Evidence (root cause)

On the remote host, ~/.claude/file-history/ contains only 2 session folders, both dated Jun 9, while the project has had heavy Desktop-over-SSH usage every day since:

$ ls -la ~/.claude/file-history/
drwxr-xr-x  e3cc3e4c-3a4c-47b1-85a6-04ee66baa1c7   (Jun  9)
drwx------  ee38b87f-65af-4e49-bcdf-0edf94c1621b   (Jun  9)

A representative Desktop-SSH session from Jul 8 (5.9 MB transcript) contains 25 file mutations yet produced zero file-history entries:

$ grep -o '"name":"\(Edit\|Write\)"' .../f213b833-....jsonl | sort | uniq -c
     17 "name":"Edit"
      8 "name":"Write"

$ ls ~/.claude/file-history/ | grep f213b833
(no output)  ->  no snapshot dir for any July session

So: 25 edits in one session, 0 checkpoints. Every remote session since Jun 9 is the same. This is why the rewind validator falls back to an active chain of size 2 and rejects every earlier anchor.

Steps to reproduce

  1. From Claude Code Desktop (macOS), connect to a Linux host over SSH.
  2. Run a normal session where Claude edits files (Edit/Write) several times.
  3. On the remote host, inspect ~/.claude/file-history/ — no new snapshot directory is created for the session.
  4. In the Desktop app, try to rewind to any earlier message → "Can't rewind to this message" for every target except (at most) the current turn.

Expected

In SSH/remote mode, the ccd-cli backend should write file-history snapshots on the remote host (as the standalone CLI does locally), so /rewind has anchors and can restore code + conversation to an earlier point in the same session.

Actual

No snapshots are written on the remote host at all, so rewind is effectively non-functional for the entire remote workflow.

Impact

Remote (SSH) is a primary way to "work from a laptop, keep projects on a server." In that setup, rewind — a core workflow for iterating on a fix and rolling back code + context without spawning a new chat — is completely unavailable.

Related (distinct symptom, likely same/adjacent area)

  • #57206 — Desktop: all rewinds rejected ("Can't rewind to this message")
  • #60121 — plugin-independent variant of #57206
  • #58460 — "Can't rewind..." after MCP disconnect/reconnect cycles
  • #59932 — "Can't rewind..." when parent is a SessionStart-hook system row
  • #50698 — earlier remote SSH daemon (ccd-cli) bug, shows the remote-backend surface

These are mostly about chain/anchor validation; this report points one level deeper for remote mode: the anchors are never created.

View original on GitHub ↗