Repository navigation
Description
Before submitting
- I searched existing issues and did not find an open issue covering the full same-project preference behavior.
- I included enough detail to reproduce or investigate the problem.
Area
apps/web (including the desktop app's shared web UI)
Steps to reproduce
- Open an existing project and start a new thread.
- Select a non-default provider/model.
- Change one or more model options, such as reasoning/effort, fast or service tier, context window, or thinking.
- Optionally change the runtime/permission mode or interaction mode.
- Send the first message so those settings are actually used.
- Create another new thread in the same project.
- Inspect the new-thread composer settings.
Expected behavior
A new thread should consistently inherit the target project's last successfully used safe composer preferences:
- provider instance and model;
- the complete model-options snapshot;
- runtime/permission mode;
- interaction mode.
Every new-thread entry point should use the same precedence:
- Explicit choices already made in the unsent draft.
- An explicitly configured project default model, when present.
- The target project's last-used working mode.
- Global/provider defaults.
Web/desktop and mobile should resolve these defaults consistently.
Branch, worktree path, environment mode, and start-from-origin should not carry implicitly; those should continue to use their configured workspace defaults.
Actual behavior
The new thread can reset model settings or inherit global/currently viewed-thread state rather than remembering the settings last used in the target project. The behavior depends on how and from where the new thread is created.
Impact
Major degradation or frequent failure
Repeatedly reselecting the model and its options is error-prone. Starting with the wrong reasoning level, service tier, permission mode, or provider instance can also affect cost, limits, and the permissions granted to the turn.
Version or commit
Current desktop app; exact build not available.
Environment
Desktop client using the shared web UI.
Logs or stack traces
No relevant logs observed.
Screenshots, recordings, or supporting files
None currently available.
Workaround
Manually re-check and reselect every composer setting before starting each new thread.
Related issues
- Model selection resets to GPT 5.4 when creating a new thread #1276 tracked the model-only same-project case and was closed as fixed, so this report may be a regression or a remaining entry-point gap.
- [Bug]: Project default model is ignored for new threads when another model was selected in a different project #5796 tracks an explicit project default being overridden by another project's sticky model.
- [Feature]: store preference setting for permission mode #2662, [Feature]: Remember reasoning level for each model #2324, and [Feature]: Start new session/thread in plan mode setting? #1991 track narrower permission-mode, per-model reasoning, and plan-mode defaults.
Activity
relatedcode commentedon Aug 29, 2026
T3 Code starts every new Codex thread at Low. My
~/.codex/config.tomlalready hasmodel_reasoning_effort = "high". Changing the composer to High does not provide a reliable global default. This happens with GPT-5.6-Sol on macOS.imadtg commentedon Aug 30, 2026
I’m seeing what appears to be the same web-client model-selection issue through T3 Connect.
Environment:
t3code.serviceapp.t3.codes0.0.37-nightly.20260830.1227Concrete evidence from the live server database:
codex / gpt-5.6-sol.opencode / opencode/big-pickleand the OpenCodebuildagent.thread.createdandthread.turn-start-requestedevents already contained the OpenCode selection, so this was not a server-side provider fallback.gpt-5.6-sol, with reasoning levelsmediumandhigh.Reproduction pattern:
gpt-5.6-solwith reasoningmediumorhigh.Ctrl+Shift+O.opencode/big-pickle, even though the project default is Codex and the visible composer may show Codex.The behavior suggests that the web client’s active-provider/sticky-selection state can become stale or diverge from the visible composer selection. The shortcut then submits the stale provider/model when creating the thread.
No server crash, provider outage, or database corruption was observed. Reselecting Codex immediately before creating the thread is a temporary workaround.
This may be related to #5796 and #5421 as well.
— Investigated by GPT-5.6 Sol via Codex triage
elmarbeckmann commentedon Sep 2, 2026
Still hitting this on
0.0.39-nightly.20260902.1253, and I went digging in the bundle to see why it is so inconsistent.New threads don't really "forget" the mode — they only ever remember it when there is something to carry it from. The code picks
carryRuntimeMode ?? DEFAULT_RUNTIME_MODE, where the carry source is the composer, the shell, or the draft you came from, andDEFAULT_RUNTIME_MODEis hardcoded to"full-access". So starting a thread from an existing one keeps my choice, and starting a fresh one silently drops back to Full access. That explains the "sometimes it sticks, sometimes it doesn't" feeling in this thread. There's nodefaultRuntimeModekey insettings.jsonorclient-settings.jsoneither, so there is nothing to pin it down with.Setting it on the Claude side doesn't work as an escape hatch: T3 launches the CLI with an explicit
--permission-mode, and that flag outrankspermissions.defaultModein~/.claude/settings.json. #7577 describes that precedence problem from the other direction.What makes this more than an annoyance for me is which mode we land in. My work machine has cloud credentials, kubectl contexts for production clusters and push access to our repos, and the mode I get by accident is the one that skips both the classifier and the sandbox. Auto costs me an occasional prompt and keeps those checks. Remembering the last used mode per project, which is what this issue asks for, would be enough for me. #2662 and #4916 asked for a global default, which would also cover the first thread in a brand-new project.
kinorai commentedon Sep 13, 2026
Still present on server
0.0.40, and the mobile web client hits it on every new thread.useHandleNewThread.tsbuilds the carry chain from the route you are on:All three sources derive from
getCurrentRouteTarget(). On mobile the normal entry point is the project/thread list, where the route target is neitherservernordraft, so all three are null and every new thread lands onDEFAULT_RUNTIME_MODE = "full-access". Opening an Auto thread first and creating the new thread from inside it carries Auto correctly, which matches the analysis above.Repro (mobile web,
app.t3.codes):Server-side
DEFAULT_RUNTIME_MODEis"full-access"insrc/persistence/Migrationsand in theThreadCreatedPayload/thread.turn.startschema defaults, so the client fallback is the only place a user preference could apply today. The settings schema hasdefaultThreadEnvModeandnewWorktreesStartFromOriginbut no runtime-mode sibling.Jardo-51 commentedon Sep 15, 2026
+1 for this. I have separate Claude providers for work and personal projects. Right now the web app is remembering a "global" last-used provider. Which means that when I start a new thread on a work project I select the work provider which gets remembered, and later when I start a new thread on a personal project, I can accidentally use the work provider on that personal project, and vice-versa.
Also the mobile app should be consistent with this behavior (which it currently is not).
t3dotgg commentedon Oct 21, 2026
Note
🤖 Claude Opus 5.5 responding on behalf of Theo
Thanks for the report. One part of this is fixed on main in #6011, #9164 and #11346. Please test on the nightly built from main on 2026-10-21, or on the next stable release. One part is still open: per-project last-used provider/model options and working-mode memory across entry points. If that part still matters to you, please open a new issue for that part only.
juliusmarminge commentedon Oct 22, 2026
Reproduced the remaining runtime-mode case in the web dev app on 3b95e7831b: selected GPT-6.1-Sol, High reasoning, and Auto in a new thread, sent a message, then created another thread in the same project through the breadcrumb. The new composer preserved GPT-6.1-Sol and High but reset Auto to Full access. Tested on Linux in Chromium with isolated copied state.
t3dotgg commentedon Oct 22, 2026
Note
🤖 Claude Opus 5.5 responding on behalf of Theo
Reopening: our earlier close left the remaining part with nothing tracking it, and it is reproduced on current main. A new thread started from the breadcrumb keeps the model and reasoning level but resets Auto to Full access.