Repository navigation
Description
Before submitting
- I searched existing issues and did not find an active duplicate.
- I included a deterministic reproduction and a verified provider probe.
Related but not duplicate: #6075 tracks the invalid synthetic grok-build model ID. This issue concerns switching between valid models advertised by Grok ACP.
Area
apps/server
Steps to reproduce
- Enable Grok in T3 Code and start a thread with an advertised model such as
grok-4.6. - Complete one turn.
- Open the model picker and select another advertised model such as
grok-4.5.
Expected behavior
T3 should allow the selection and apply it to the active Grok session before the next prompt, matching Codex model switching.
Actual behavior
The model is disabled after the thread starts. T3 shows:
Start a new chat to change models
This provider does not allow switching models after a conversation has started.
The server also rejects an equivalent turn request, so bypassing the web guard does not help.
Impact
Minor bug or occasional failure
The thread remains usable, but changing models requires abandoning its existing context and starting a new thread.
Version or commit
Current main after #8358 (a6797b3b97dca6b6941574ff062d069c45c89b9a).
Environment
- T3 Code: current
main - Grok CLI: 1.0.5 stable
- Client: web or desktop
Root cause
GrokProvider still publishes:
requiresNewThreadForModelChange: trueThe web model picker and ProviderCommandReactor both consume this flag and reject the change before GrokAdapter.sendTurn runs.
This guard no longer matches the adapter or Grok ACP:
GrokAdapter.sendTurnalready compares the requested model with the active model.- When they differ, it calls
session/set_modelbeforesession/prompt. - A mock adapter test produced this request order after one completed turn:
session/promptsession/set_modelwith the alternate modelsession/prompt
- A real Grok 1.0.5 probe completed a prompt and then successfully switched the same ACP session to a different advertised model.
Proposed fix
Remove requiresNewThreadForModelChange: true from Grok's provider presentation. Omission matches providers such as Codex and allows the existing web and server behavior to pass the changed selection to GrokAdapter.
No new switching implementation is needed.
Add focused coverage for:
- Grok's provider snapshot no longer publishing the lock.
- A started Grok thread being allowed to select another model in the web guard.
GrokAdaptersendingsession/set_modelbetween two completed prompts.- An opt-in real Grok probe switching to a different advertised model after a completed turn.
Prior work
- feat(server): Grok Build effort, auth, rewind, and usage [WIP - for content] #6383 and its superseding feat(grok): Grok Build workflows, usage, rewind — supersedes #6383 #7070 both contained this exact lock removal, but both PRs were closed.
- fix(grok): improve skills, plans, usage, and turn reliability #8358 merged the current Grok reliability and reasoning work while retaining the original lock.
- No active issue or pull request currently carries the model-switch fix.
Acceptance criteria
- A started Grok thread can select another valid advertised Grok model.
- The next turn sends
session/set_modelbeforesession/prompt. - Existing providers that genuinely require new threads remain locked.
- Invalid or synthetic model IDs remain handled separately under [Bug]: Grok model slug
grok-buildadvertised but rejected by Grok CLI ACP (session/set_model→ Invalid params / unknown model id) #6075.
Workaround
Start a new Grok thread with the desired model.
Activity
GTechMicah commentedon Aug 28, 2026
Seeing this as well
ahmed-besic commentedon Aug 28, 2026
I made a pr to fix this #8392
Squashed '.repos/effect-smol/' changes from a43c7e244c..e17ecdbe90