Before submitting
Area
apps/server
Steps to reproduce
- Use a Claude thread from the mobile app, and have the agent start a background shell or a background agent (here
gh pr checks --watch).
- Without changing the model, effort or any option, send a message to the same thread from the web or desktop client while that work still runs.
Expected behavior
The message goes to the live Claude process. Nothing about the model or its settings changed.
Actual behavior
Every message fails with:
Claude is still running background agents or commands, and this model or setting change would end them. Wait for them to finish, or press Stop, then send the message again.
The thread accepts nothing until the background work ends on its own. Stop doesn't help either, which is tracked separately.
Cause
The two clients send the same Normal speed differently. Mobile omits fastMode. The web composer always adds fastMode: false (withImplicitFastModeDefault in apps/web/src/components/chat/composerProviderState.tsx).
compileClaudeModelSelection (apps/server/src/claudeModelOptions.ts) keeps the two apart: settings is {} for one and { fastMode: false } for the other, so queryIdentity differs. openQuery in ClaudeAdapterV2.ts then sees a selection change. Since #14726 it refuses that change with ClaudeBackgroundWorkBlocksQueryReplacementError whenever background work runs. Before #14726 it silently restarted the process, which killed the work.
From the affected thread's run records:
| Runs |
Sent from |
modelSelection.options |
Result |
| 1–14 |
mobile |
none |
completed |
| 15–16 |
server (continuation after the update restart) |
none |
completed; run 16 started the background shell |
| 17–19 |
web |
[{ id: "fastMode", value: false }] |
failed with the error above |
Suggested fix
Compile an unset fastMode as false for models that support it. That is the Normal speed the web composer already sends, so both clients produce the same settings and the same query identity. It's a one-line change in compileClaudeModelSelection; the guard from #14726 stays as it is. I can open the PR.
Impact
Blocks work completely
Version or commit
t3@0.0.46-nightly.20261004.2644 (main 8fb068c)
Environment
Linux host (systemd service). macOS desktop client and the mobile app on the same thread.
Screenshots, recordings, or supporting files
The model and effort are unchanged (Claude Opus 5.5, Medium · 1M), yet each message is refused as a setting change:

Once the shell ended, the next message showed a context handoff from Claude Opus 5.5 to Claude Opus 5.5, again with no model change:

Workaround
Keep sending from the client the background work was started from, or wait until the work ends.
Related
Before submitting
Area
apps/server
Steps to reproduce
gh pr checks --watch).Expected behavior
The message goes to the live Claude process. Nothing about the model or its settings changed.
Actual behavior
Every message fails with:
The thread accepts nothing until the background work ends on its own. Stop doesn't help either, which is tracked separately.
Cause
The two clients send the same Normal speed differently. Mobile omits
fastMode. The web composer always addsfastMode: false(withImplicitFastModeDefaultinapps/web/src/components/chat/composerProviderState.tsx).compileClaudeModelSelection(apps/server/src/claudeModelOptions.ts) keeps the two apart:settingsis{}for one and{ fastMode: false }for the other, soqueryIdentitydiffers.openQueryinClaudeAdapterV2.tsthen sees a selection change. Since #14726 it refuses that change withClaudeBackgroundWorkBlocksQueryReplacementErrorwhenever background work runs. Before #14726 it silently restarted the process, which killed the work.From the affected thread's run records:
modelSelection.options[{ id: "fastMode", value: false }]Suggested fix
Compile an unset
fastModeasfalsefor models that support it. That is the Normal speed the web composer already sends, so both clients produce the same settings and the same query identity. It's a one-line change incompileClaudeModelSelection; the guard from #14726 stays as it is. I can open the PR.Impact
Blocks work completely
Version or commit
t3@0.0.46-nightly.20261004.2644 (main 8fb068c)
Environment
Linux host (systemd service). macOS desktop client and the mobile app on the same thread.
Screenshots, recordings, or supporting files
The model and effort are unchanged (Claude Opus 5.5, Medium · 1M), yet each message is refused as a setting change:
Once the shell ended, the next message showed a context handoff from Claude Opus 5.5 to Claude Opus 5.5, again with no model change:
Workaround
Keep sending from the client the background work was started from, or wait until the work ends.
Related