[BUG] VSCode extension rewrites explicit model ID to alias, causing unintended 1M context resolution
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
The VSCode extension silently normalizes the "model" field in ~/.claude/settings.json, replacing explicit model IDs with short aliases. This causes the wrong (and far more expensive) model to be used.
I set "model": "claude-opus-4-6" (the specific 200k Opus model). The extension rewrites it to "model": "opus". It then reads "opus", sees I'm on a Max plan, and resolves it to opus[1m] -- 5x the context window and cost I chose. This happens automatically with no prompt or notification. Setting it back triggers the same rewrite cycle.
What Should Happen?
The extension should preserve "claude-opus-4-6" exactly as written. Full model IDs are explicit and unambiguous -- normalizing them to short aliases is lossy and changes what model is actually used.
Error Messages/Logs
Steps to Reproduce
- Open
~/.claude/settings.jsonin any editor - Set
"model": "claude-opus-4-6"and save - The VSCode extension detects the change and rewrites the file --
"model"is now"opus" - Open a new Claude Code conversation in VSCode
- The extension reads
"opus", sees you're on a Max plan, and resolves it toopus[1m](1M context) - You are now on a model you did not choose, at significantly higher cost
No /model command is involved. The extension does this purely by watching the file.
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.84 (Claude Code)
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
VS Code integrated terminal
Additional Information
Related closed issues that were never actually fixed: #22659, #27941
This is distinct from #35789 (model picker showing wrong model). This bug is about the extension destroying a correct, explicit user config through lossy normalization -- no model picker involved.
The cost impact is real: "claude-opus-4-6" = 200k context. "opus" on a Max plan resolves to "opus[1m]" = 1M context. The user is silently moved to a 5x more expensive context window they explicitly opted out of.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗