anthropics / anthropics/claude-code

Resuming a phone conversation on the Mac silently discards what you type there

Open
#94,599 0 comments 0 reactions 0 assignees View on GitHub
area:core bug data-loss platform:ios platform:macos
Dominant language
Python
Stars
145k
Forks
23.1k
PR merge metrics
PR metrics pending

Description

### Preflight Checklist

- [x] I have searched existing issues and this hasn't been reported as a bug yet (closest: #75525 stale/archived mobile listing and #51267 mobile hang recoverable by local Esc — both distinct, neither involves work being discarded)
- [x] This is a single bug report
- [x] I am using the latest version of Claude Code

### What's Wrong?

A conversation started in the Claude phone app, then resumed locally on the Mac, **silently discards everything typed on the Mac** as soon as the phone is used again.

The phone's next turn resumes the conversation from the branch as it stood *before* the Mac picked it up. The Mac's turns are not on that branch. The model answers as though they never happened, nothing warns, nothing errors, and neither interface shows that the two devices are on different branches.

There is a lockout first (the phone spins and its turn never arrives), which is visible. The discard underneath it is not.

### What Should Happen?

Either the phone's turn continues from the conversation's current head, or the cloud session ends when the conversation is resumed locally. Failing both, some signal that the conversation has moved, so a person can avoid the tap that loses their work.

### Error Messages/Logs

No error is produced. That is the problem.

Session `436160f2-f25d-55d6-99af-25046ea4cbb8`, cloud id `cse_016hhPLpVnviBpoJE4YpQ63U`. The transcript, read at 14:12:55 local, held six spoken records:

```
19:02:28 user Remember the word MERCURY. Reply with just: ok (phone)
19:02:31 assistant ok
19:05:13 user Say ok again. (phone)
19:05:16 assistant ok
19:10:32 user Remember the word NEPTUNE. Reply with just: ok (MAC)
19:10:35 assistant ok
```

A message was then sent from the phone. It did not arrive; the phone spun indefinitely. After the Mac's session process ended, the phone's message landed:

```
19:14:44 user List every word I have asked you to remember (phone)
19:14:49 assistant MERCURY — that's the only one.
```

Its `parentUuid` resolves to the record at `19:05:16`, the last one written before the Mac took over. Afterwards `NEPTUNE` appears in that transcript only inside a `last-prompt` metadata record, and a sweep of every file under `~/.claude/projects` finds `Remember the word NEPTUNE` in **zero** conversation turns.

### Steps to Reproduce

1. Start a conversation in the Claude phone app. Send a message.
2. On the Mac, resume that conversation locally (`claude --resume `, or any handoff that does so).
3. Send a message at the Mac and let it answer.
4. Send one more message from the phone.

The phone's turn hangs, and once the Mac's process exits it lands on the pre-handoff branch. Step 3's work is gone from the conversation.

### What it is not

Three explanations were tested and ruled out.

**Not a stale local session.** A conversation started on the Mac and joined from the phone stays on one branch: 10 spoken records, one root, zero forks, and the Mac's session knew the word sent from the phone.

**Not a missing `--remote-control` flag.** The resumed session ran as `claude --remote-control --permission-mode bypassPermissions --resume 436160f2...`. The phone was still locked out.

**Not a lost bridge binding.** `claude remote-control --session-id cse_016hhPLpVnviBpoJE4YpQ63U`, run once while the phone owned the session and once after it was resumed on the Mac, returned the identical message both times:

```
Error: Environment env_01VmpuCpzAmrK6eSg7MYeDgL is already being served by another
`claude remote-control` instance (pid 43793)
```

The environment exists and is served in both states.

### Additional context

Reproduced three times (`dad4233a…`, `e2fa932c…`, `436160f2…`), same signature each time. Only the third was instrumented on both sides of the handoff.

There is also no way for a user to route around this: resuming locally stops every local process holding the session, including the bridge, but does not end the cloud session, and nothing ends one. `claude stop` and `claude rm` both answer `No job matching` for a session uuid and for a `cse_` id, and no other subcommand covers it. So the phone keeps a live handle on a conversation it can only damage, indistinguishable in its list from any other.

### Environment

- Claude Code 2.1.272, macOS (Darwin 25.6.0), Apple Silicon
- `claude remote-control` installed as a LaunchAgent
- Claude iOS app, same account

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reproducing the handoff with `claude --resume` and `claude --remote-control`, then inspect the resulting transcript under `~/.claude/projects`. Compare the phone and Mac branches using the recorded `parentUuid` values. Done means the phone continues from the current conversation head, the cloud session ends, or users receive a signal before work is discarded.

Written by the indexing model from the issue text.

Assessment

Tech stack
ios, macos, python
Domain
cloud, distributed-systems, mobile-dev
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.