Bridge/daemon-hosted sessions never write transcript to local JSONL; no way to re-host or export them locally
Summary
Sessions started (or resumed) from the claude.ai mobile/web app while no terminal is open become cloud-hosted ("bridge" sessions). Their transcript is never written to the local project JSONL — the local file only receives bridge-session marker lines. Worse, there is no way to bring such a session back to local hosting: attaching to it from an open terminal, or toggling /remote-control off, does not change where the transcript lives. The hosting mode appears to be fixed at session birth.
This silently breaks every local-transcript workflow (claude --continue, claude --resume, local JSONL tooling) and feels like data loss to the user.
Environment
- Claude Code 2.1.215 (autoUpdatesChannel: latest)
- Windows 11 Pro 10.0.26200, PowerShell
remoteControlAtStartup: true
Steps to reproduce
- Have a project with an existing terminal session; exit it (
/exit). - From the claude.ai mobile app (or web), send a message to that machine/project — a bridge continuation of the previous session starts (the machine executes tools via the background daemon).
- Inspect
~/.claude/projects/<project>/<session>.jsonl: none of the new user/assistant messages are appended. Onlytype: "bridge-session"markers and afile-history-snapshotare added. The last real content is still the old/exit. - Open a terminal and reattach to this conversation (it shows up and accepts input, local slash commands like
/modelwork) — still nothing is written to the local JSONL. - Run
/remote-control(reports "Remote Control disconnected") — still nothing. claude --continuein the terminal resumes the stale local transcript (pre-bridge state), not the actual conversation.
Expected
Any of these would solve it:
- Daemon/cloud-hosted sessions write through their transcript to the local JSONL (the local file is the user's expectation for
--continue/--resumeand tooling), or - A command to re-host / migrate a cloud-born session to the attached terminal (or at least
claude export <session>to materialize the transcript locally), or - At minimum, an explicit opt-out of silent cold-start hosting (e.g. a setting so that messaging a machine with no live terminal fails/queues instead of spawning a cloud-hosted continuation), plus a clear UI indication of the session's hosting mode.
Actual
- Transcript lives only on claude.ai; local JSONL gets
bridge-sessionmarkers. - Reattaching from a terminal does not re-host;
/remote-controloff does not re-host. - No export/migration command found.
- The behavior changed recently (the background daemon / cold-start machinery is new). Long-time Remote Control users were used to "phone messages join my open terminal session and everything lands in the local JSONL" — that still works, but the terminal-closed case now silently diverges instead of failing.
Impact
User believed weeks of context were lost (they were not — but only because the project keeps its decisions in git). Significant confusion and loss of trust in --continue/--resume. Please make the hosting mode explicit and give users a path back to local transcripts.