Before submitting
Area
apps/server
Steps to reproduce
- On a Claude provider instance, add a custom model (for example a model served through an Anthropic-compatible proxy) and enable the Fast mode capability in Settings → Models.
- Select that custom model in a thread and turn the per-thread Fast toggle on.
- Send a prompt and inspect the Agent SDK query options or the outgoing request.
Expected behavior
The thread's Fast choice should reach the Claude Agent SDK as settings.fastMode: true, as it does for bundled models that expose the fast-mode option.
Actual behavior
From source tracing on main, the selection is dropped at the provider boundary:
- The custom capability is saved and offered per thread (
apps/web/src/components/settings/customModelEditor.logic.ts, apps/web/src/components/chat/TraitsPicker.tsx), and the composer dispatches the selected model with its options.
makeClaudeQueryOptions in apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts calls compileClaudeModelSelection(input.modelSelection) without a catalog argument, so it falls back to BUNDLED_CLAUDE_MODEL_CATALOG.
compileClaudeModelSelection (apps/server/src/claudeModelOptions.ts) only emits fastMode when that catalog's capabilities for the model include the boolean fastMode descriptor. Custom models aren't in the bundled catalog, so no fastMode setting is produced, while the custom slug is still passed as options.model.
scopeClaudeModelCatalog in apps/server/src/provider/ClaudeModelCatalog.ts would include custom-model descriptors, but it appears to be used only by ClaudeTextGeneration.ts, not the adapter.
I have not captured a live request; this is from reading the code path.
Impact
Minor bug or occasional failure
Version or commit
main @ 8ddf200
Environment
macOS, T3 Code desktop, Claude provider with custom models routed through an Anthropic-compatible proxy.
Workaround
Configure a separate custom model ID that encodes the fast variant on the proxy side, instead of using the Fast toggle.
Possible fix
Compile the selection against the provider instance's scoped catalog (the one including custom-model capabilities) in makeClaudeQueryOptions. Separately, whether Claude Code forwards fast mode for a non-Claude model ID would need confirming once settings.fastMode is passed.
Before submitting
Area
apps/server
Steps to reproduce
Expected behavior
The thread's Fast choice should reach the Claude Agent SDK as
settings.fastMode: true, as it does for bundled models that expose the fast-mode option.Actual behavior
From source tracing on
main, the selection is dropped at the provider boundary:apps/web/src/components/settings/customModelEditor.logic.ts,apps/web/src/components/chat/TraitsPicker.tsx), and the composer dispatches the selected model with its options.makeClaudeQueryOptionsinapps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.tscallscompileClaudeModelSelection(input.modelSelection)without a catalog argument, so it falls back toBUNDLED_CLAUDE_MODEL_CATALOG.compileClaudeModelSelection(apps/server/src/claudeModelOptions.ts) only emitsfastModewhen that catalog's capabilities for the model include the booleanfastModedescriptor. Custom models aren't in the bundled catalog, so nofastModesetting is produced, while the custom slug is still passed asoptions.model.scopeClaudeModelCataloginapps/server/src/provider/ClaudeModelCatalog.tswould include custom-model descriptors, but it appears to be used only byClaudeTextGeneration.ts, not the adapter.I have not captured a live request; this is from reading the code path.
Impact
Minor bug or occasional failure
Version or commit
main @ 8ddf200
Environment
macOS, T3 Code desktop, Claude provider with custom models routed through an Anthropic-compatible proxy.
Workaround
Configure a separate custom model ID that encodes the fast variant on the proxy side, instead of using the Fast toggle.
Possible fix
Compile the selection against the provider instance's scoped catalog (the one including custom-model capabilities) in
makeClaudeQueryOptions. Separately, whether Claude Code forwards fast mode for a non-Claude model ID would need confirming oncesettings.fastModeis passed.