


























Anthropic shipped Claude Opus 5 on July 24, 2026. It is the new default model on Claude Max and the strongest model you can pick on Claude Pro. So why does the model picker in your VS Code panel still say Opus 4.8?!
Before you go digging through your account or your plan, check the version. Opus 5 requires Claude Code v2.1.219 or later, and the list of models in that picker is compiled into the build you have installed. If your build predates the model, go ahead and update Claude Code so you have access to Opus 5. More info below:
Claude Code can exist twice on one machine, and the two copies update separately. Pick the path that matches where you are seeing the outdated listing for Opus 4.8.
Seeing it in the VS Code chat panel? Skip the terminal entirely. Open the Extensions sidebar, update Claude Code, then reload the window. Details are two sections down, and the terminal commands below will not touch this.
Seeing it in a terminal session? Three commands:
claude update
claude --version
claude --model opus
If claude --version reports 2.1.219 or higher and that last command opens a session on Opus 5, your terminal is sorted.
Anthropic requires Claude Code v2.1.219 or later for Opus 5. I did not want to take that on faith, so I checked it against the actual builds sitting on my machine. The VS Code extension ships a JavaScript bundle with the model registry baked into it as an object literal, which means every model ID is a searchable string inside that one file. This is the command I ran on Linux, where VS Code Server keeps its extensions:
for f in ~/.vscode-server/extensions/anthropic.claude-code-*/extension.js; do
[ -f "$f" ] || { echo "No matching extension bundles found"; break; }
printf '%s: ' "$(basename "$(dirname "$f")")"
grep -o "claude-opus-5" "$f" | wc -l
done
Three builds were still on disk, and the result was clean:
anthropic.claude-code-2.1.218-linux-x64: 0
anthropic.claude-code-2.1.219-linux-x64: 32
anthropic.claude-code-2.1.220-linux-x64: 32
The string is simply not present in 2.1.218. That build cannot offer you a model whose identifier it does not contain, and restarting the panel, signing out and back in, or waiting a day does not change what is sitting in that file. Updating installs a newer build alongside it, and that newer build’s registry does contain the identifier. It is why three separate versions were sitting in my extensions folder in the first place.
That path is specific to VS Code Server on Linux, which is how I run it. A desktop install keeps its extensions in ~/.vscode/extensions instead. Windows stores them under your user profile, though there you would want a PowerShell equivalent rather than this Bash loop. Either way, treat this as a diagnostic for anyone curious about the mechanism, not as a required step. Reading the version number in the Extensions sidebar tells you the same thing in far less time.
Anthropic’s documentation states it plainly: the extension bundles its own copy of the CLI for the chat panel. That bundled copy is independent of any standalone claude you have on your PATH, and the two update through different channels:
| Install | Updates via | Controls |
|---|---|---|
| Standalone CLI | claude update |
Sessions you start in a terminal |
| VS Code extension | The VS Code Marketplace, through the Extensions sidebar | The Claude Code chat panel inside VS Code |
So claude update can move your terminal to a current build while the extension stays behind, and the panel keeps offering Opus 4.8. On my machine, three extension builds were still sitting on disk, 2.1.218 through 2.1.220, while the standalone CLI had already reached 2.1.220. Updating the one I used in the terminal did nothing for the one running the panel.
To fix the panel:
/model and confirm Opus 5 now appears in the list. That, rather than the header, is the real test. On Max it should already be selected. On Pro the default is Sonnet 5, so seeing Sonnet in the header does not mean the update failed. What you are checking is whether Opus 5 is there to pick at all. Pick it, then read the header to confirm.
Once you are on a build that knows about Opus 5, pick whichever of these fits how you work. Anthropic’s docs present them in priority order, so anything higher in this table takes precedence over anything below it.
| Method | Example | Where it works | Scope |
|---|---|---|---|
| Mid session | /model opus |
Terminal and the VS Code panel | Documented to save as your default for new sessions. See the caveat below. |
| At launch | claude --model opus |
Terminal only | That one session only |
| Environment variable | ANTHROPIC_MODEL=claude-opus-5 claude |
Terminal only | That one session only |
| Settings file | "model" in ~/.claude/settings.json |
Terminal and the VS Code panel | Every session, reapplied at launch |
The “where it works” column matters more than it looks. Two of these launch the standalone CLI, so they cannot reconfigure a VS Code panel that is already running. Inside the panel you have the slash command, the settings file, and the picker itself.
Note the shape of the environment variable example. Setting it inline like that applies to the one session you are launching. If you export it instead, it applies to every Claude Code session started from that shell until you unset it or close the shell.
For the settings file method, add a model field. If the file already exists, merge this in rather than pasting over what is there, and remember the comma if it is not the last property:
{
"model": "claude-opus-5"
}
Tip
Reach for /model opus rather than the full claude-opus-5. Claude Code’s own help text describes these family names as aliases for the latest model, so a build that knows about Opus 5 points opus at it. I confirmed that on v2.1.220 by having a session report its own model ID, and it came back as claude-opus-5. The practical payoff is that you are not left pinned to an exact ID you typed months ago.
One inconsistency is worth knowing about before you rely on that first row. The docs say typing /model <name> directly saves your choice as the default for new sessions, and that is exactly what I saw in a terminal session on 2.1.219, which reported back “saved as your default for new sessions.” Inside the VS Code panel on 2.1.220, the same command reported “for this session only” instead. I have not pinned down whether that is a difference between the panel and the terminal, a change between those two builds, or a project settings file quietly overriding it.
So do not assume it stuck. Note that /status only tells you about the session you are in, which means it cannot answer this question. The only real test is to start a genuinely new session, not a resumed one, and see which model it opens on.
Start typing /model claude-opus-5 and the autocomplete offers a second entry with a [1m] suffix.
You can skip it. The [1m] suffix asks for a 1 million token context window, and Opus 5 already has one. Anthropic’s documentation is blunt on this point: 1M is both the default and the maximum, and there is no smaller context variant. Plain claude-opus-5 gets you the identical window.
The suffix is not pointless in general, which is exactly why it is easy to assume it must be doing something here. It has a job on models whose native window is smaller. The same model registry inside the extension bundle lists Haiku 4.5 with a 200K window and support for the 1M suffix, which is the shape you would expect where the suffix has room to change something. Opus 5 is already at its ceiling, so there is nothing left for it to raise.
One caveat on syntax. The documented form of the suffix attaches to the alias, as in opus[1m]. The full model name version is what the autocomplete offered me on 2.1.220, so the client clearly recognizes it, but I could not find it in the docs and I have not tested what the API does with it. If you want the suffix elsewhere, the documented forms are opus[1m], sonnet[1m] and opusplan[1m].
Work down this list in order.
--resume or --continue keep whatever model the transcript began with, regardless of your current settings. Start a genuinely fresh session before concluding anything is broken..claude/settings.json inside the repo beats the user level default that /model writes, and it reapplies every single launch. Check it for a model key.availableModels and enforceAvailableModels in managed settings override everything above. Your admin controls that list./status, or read the session header. Both report the model actually in use.Heads Up
Claude Code’s local check accepts any model string that begins with claude-, whether or not that model actually exists. A typo like claude-opus-50 passes that check, so you get no useful complaint at the moment you type it. If a model string is not behaving the way you expect, read it back one character at a time before you go hunting for anything more exotic.
If you went through this same drill back in April, the shape will feel familiar. I wrote up the Opus 4.7 version of this switch on release day, and the VS Code panel was the sticking point that time too. The fix was different then, so it is worth reading the current one rather than repeating what worked last quarter.
Since Opus 5 defaults to high effort, this is also a reasonable moment to look at how effort levels work in the VS Code panel if you have never adjusted yours.
Sources: Introducing Claude Opus 5, the Claude Code model configuration docs, the Claude Code VS Code docs, plus hands on verification against extension builds on my own machine.
Information in this post was accurate as of July 25, 2026.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。