Repository navigation
Description
Before submitting
- I searched existing issues and did not find a duplicate of this Resume behavior.
- I included a real affected thread, reproduction steps, and source references.
Area
apps/web, also used by the desktop client.
Steps to reproduce
- Start a Claude conversation and let a turn fail with a usage-limit error.
- In the same thread, select Codex in the composer model picker.
- Click Resume without sending a new message.
- Observe which provider runs the generated
Continue where you left off.message. - For comparison, keep Codex selected and send an ordinary message in the same thread.
Expected behavior
Resume should use the provider/model currently shown in the composer and carry the prior conversation through the existing handoff path, as Send does. Please confirm the intended behavior if Resume is deliberately tied to the previous provider.
Actual behavior
Resume starts another Claude turn and immediately hits Claude's limit again. Sending an ordinary message starts Codex and successfully hands off the same conversation.
Real example
This occurred on October 4, 2026 while investigating a floating-preview drag problem. The reporter confirmed that they selected Codex and then clicked Resume. The following records were read from that thread's persisted timeline and run metadata. Times are America/Los_Angeles, UTC-07:00.
| Time | Action / message | Provider recorded for the run | Result |
|---|---|---|---|
| 00:14:41 | Initial investigation reaches the limit | claudeAgent / claude-opus-5-5 |
Failed with usage-limit error |
| 00:19:36 | Resume generates Continue where you left off. |
claudeAgent / claude-opus-5-5 |
Failed at 00:19:37 with the same limit |
| 00:19:53 | Another Resume generates the same message | claudeAgent / claude-opus-5-5 |
Failed again within a second |
| 00:31:00 | Ordinary message: testing |
codex / gpt-6.1-sol |
Handoff created; run completed at 00:33:54 |
The successful run recorded a provider context handoff covering app runs 1-3. Codex's first response explicitly picked up the preview-drag investigation from that handoff. This comparison happened in the running app; the local source patch had not been installed.
Impact
Minor bug or occasional failure. Resume cannot move this usage-limited work to the selected provider, but sending a message works.
Version or commit
- Installed desktop app at investigation:
0.0.46-nightly.20261004.2644. - Local source inspected:
e19a48d220a18ef198178b48d12aa1a034596489. - The same omission is present on upstream
mainatd60a71ef6e371d8b345ecb1f7575117d675187c7. - The running app's exact source SHA was not independently verified.
Environment
macOS 27.0.1, Apple silicon, T3 Code Nightly desktop. Claude to Codex within one existing thread.
Logs or stack traces
Claude usage limit reached. This turn is paused until the 5-hour limit resets in 3h 41m.
You've hit your session limit · resets 4am (America/Los_Angeles)
Claude API rate limit reached. Try again later.
Source evidence and verification limits
- Resume calls startThreadTurn without modelSelection.
- The client command forwards modelSelection only when supplied.
- The server falls back to the thread's saved selection.
Four local integration cases verify that an explicit Codex selection on a manual continuation of usage-limited Claude work preserves the original request and partial response, for new/existing Codex conversations and native/inline history delivery. The focused hands off tests passed, 20 tests total. These tests exercise the server path, not the browser click. No automated end-to-end UI reproduction has been performed.
This differs from #10967, where the picker blocked provider switching entirely. Here Codex is selectable and the same conversation successfully switches through Send.
Workaround
Select Codex, then send a normal message such as Continue where you left off. instead of clicking Resume. The real successful comparison above used testing.
Activity
juliusmarminge commentedon Oct 4, 2026
Note
Grok responding on behalf of Julius.
Triage
Thanks for the real thread timeline and the source links, @MatthewFeroz. They made this easy to confirm. Resume retries the thread's saved provider and model, while Send uses whatever is selected in the composer, which is why the same thread hands off through Send.
What I found
onProviderModelSelectinapps/web/src/components/ChatView.tsx) and doesn't write to the thread.ChatView.tsxcallsstartThreadTurnwithmanualContinuationOfRunIdand nomodelSelection.persistThreadSettingsForNextTurncan store anextModelSelection, but Resume doesn't pass one.modelSelectiononly when it's set (packages/client-runtime/src/operations/commands.ts), and the server falls back tocommand.modelSelection ?? projection.thread.modelSelection(apps/server/src/orchestration-v2/Orchestrator.ts). So the continuation stays on Claude and hits the same limit.ctxSelectedModelSelectionfrom the composer, which takes the handoff path.Your workaround is right: with Codex selected, send a normal message instead of clicking Resume.
Likely fix area
ChatView.tsxto pass the composer'smodelSelection, the same way Send does, so a manual Resume follows the picker.A maintainer will decide on the fix direction.