Summary
The shipped recommended-model ladder (packages/coding-agent/src/core/extensions/builtin/recommended-models/index.ts) no longer matches the intended default order, and it picks a provider for a recommended model in registry order instead of ranking the provider lanes the way the category and profile chains do.
Current behavior
RECOMMENDED_DEFAULT_MODELS on main:
- kimi-k3 max
- gpt-6-astra high
- gpt-6-sol medium
- gpt-5.6-sol medium
- claude-fable-5-1 high
- claude-opus-5-5 max
- glm-5.2 max
findAvailableRecommendation returns the first registry entry whose canonical id matches, so when a machine holds both an Anthropic API key and the Claude subscription, whichever provider the registry lists first wins (the subscription lane is registered by an extension, i.e. usually later).
Expected (ideal state)
The ladder is, in order:
- claude-opus-5-5 medium
- claude-fable-5-1 xhigh
- kimi-k3 max
- gpt-6-astra xhigh
- gpt-6-sol medium
- glm-5.3 max
For each rung, candidate providers are ranked like the existing Claude/Kimi/GPT/GLM chains (subscription lanes first): Claude anthropic-subscription, anthropic, anthropic-api, github-copilot, opencode; Kimi kimi-coding, kimi-for-coding, moonshotai, opencode-go; GPT chatgpt-subscription, openai, github-copilot, opencode; GLM zai-coding-plan, opencode-go. A provider outside the ranking still serves the rung after the ranked ones, in registry order.
Gateway aggregators (opengateway, openrouter, vercel-ai-gateway) are never pulled in by the ladder: they list models under vendor-prefixed ids (anthropic/claude-opus-5-5), and the exact canonical-id match must keep rejecting them.
Acceptance criteria
Related
Summary
The shipped recommended-model ladder (
packages/coding-agent/src/core/extensions/builtin/recommended-models/index.ts) no longer matches the intended default order, and it picks a provider for a recommended model in registry order instead of ranking the provider lanes the way the category and profile chains do.Current behavior
RECOMMENDED_DEFAULT_MODELSon main:findAvailableRecommendationreturns the first registry entry whose canonical id matches, so when a machine holds both an Anthropic API key and the Claude subscription, whichever provider the registry lists first wins (the subscription lane is registered by an extension, i.e. usually later).Expected (ideal state)
The ladder is, in order:
For each rung, candidate providers are ranked like the existing Claude/Kimi/GPT/GLM chains (subscription lanes first): Claude
anthropic-subscription, anthropic, anthropic-api, github-copilot, opencode; Kimikimi-coding, kimi-for-coding, moonshotai, opencode-go; GPTchatgpt-subscription, openai, github-copilot, opencode; GLMzai-coding-plan, opencode-go. A provider outside the ranking still serves the rung after the ranked ones, in registry order.Gateway aggregators (opengateway, openrouter, vercel-ai-gateway) are never pulled in by the ladder: they list models under vendor-prefixed ids (
anthropic/claude-opus-5-5), and the exact canonical-id match must keep rejecting them.Acceptance criteria
RECOMMENDED_DEFAULT_MODELSequals the six rungs above with the listed thinking levels.anthropic/claude-opus-5-5andanthropic-subscription/claude-opus-5-5available (registry order API first), the subscription model is selected at medium.opengateway/anthropic/claude-opus-5-5pluskimi-coding/kimi-k3selects kimi-k3.settings.recommendedModelsoverrides keep working.changes.mdrecord the new order.Related