Run claude update to update any Claude Code install immediately. Native installs also update themselves in the background; Homebrew, WinGet, apt, dnf and apk installs do not unless you opt in. Choose how fast updates arrive with the autoUpdatesChannel setting: latest by default, or stable, which runs about a week behind and skips releases with major regressions. Stop the background check with DISABLE_AUTOUPDATER=1, or block every update path including manual ones with DISABLE_UPDATES. All accurate as of August 2026.
claude updateworks on every install method, including package managers.- Native and npm installs auto-update. Homebrew, WinGet, apt, dnf and apk do not.
autoUpdatesChannelpickslatest(default) orstable, roughly a week behind.DISABLE_AUTOUPDATERstops the background check.DISABLE_UPDATESblocks manual ones too.claude install 2.1.89pins an exact version without going through npm.- Check
claude --versionandclaude doctorbefore reporting any bug.
Update it now
One command covers every install method, including the ones that do not auto-update.
claude update
claude --version
On success it prints Successfully updated from <old version> to version <new version>. If you are already current it prints Claude Code is up to date (<version>). Installs owned by Homebrew, WinGet or apk report Claude is up to date! instead, because the package manager is the one that moves the files. claude --version answers in the form 2.1.211 (Claude Code).
Update behaviour by install method, as of August 2026.
| Install method | Update with | Auto-updates? |
|---|---|---|
| Native installer | claude update | Yes, in the background |
| Homebrew | brew upgrade claude-code | No, opt in below |
| WinGet | winget upgrade Anthropic.ClaudeCode | No, opt in below |
| apt (Debian, Ubuntu) | sudo apt update && sudo apt upgrade claude-code | No, needs elevation |
| dnf (Fedora, RHEL) | sudo dnf upgrade claude-code | No, needs elevation |
| apk (Alpine) | apk update && apk upgrade claude-code | No, needs elevation |
| npm global | npm install -g @anthropic-ai/claude-code@latest | Yes, if the npm global dir is writable |
| Docker image | Rebuild the image | No, and that is the point |
How auto-update actually works
A native install checks for updates at startup and periodically while running. New versions download and install in the background, then take effect the next time you start Claude Code. Nothing swaps underneath a running session, which is why a long agent run is never interrupted by an update and why the version you are running can be one behind the version on disk.
- On macOS and Linux the launcher is
~/.local/bin/claude, a symlink into~/.local/share/claude/versions/. Versions land in that directory; the symlink decides which one runs. - If you replace that launcher with your own script or symlink, the updater leaves it alone (from v2.1.207 onward) and keeps every installed version on disk, because it cannot tell which one your launcher needs.
claude doctorreports the result of the most recent update attempt, plus a launcher the installer did not create.- An npm global install that cannot write to the npm global directory shows a one-time notice at startup, and
claude doctorlists the fixes.
Latest or stable: pick a channel
Auto-updates and claude update both follow a release channel. There are two, and the choice is a one-line setting.
| Channel | What you get | Pick it for |
|---|---|---|
latest (default) | Every release as soon as it ships | Personal machines; you want the fixes |
stable | A build typically about a week old, skipping releases with major regressions | Team fleets; you want fewer surprises |
{
"autoUpdatesChannel": "stable",
"minimumVersion": "2.1.100"
}
You can also set the channel interactively with /config, under Auto-update channel. minimumVersion is a floor: background updates and claude update refuse to install anything below it, so switching from latest to stable cannot silently downgrade a machine that is already ahead. Switching channels in /config asks whether to stay put or allow the downgrade, and staying put writes that version into minimumVersion for you.
- Homebrew picks the channel by cask name, not by this setting:
claude-codetracks stable,claude-code@latesttracks latest. - The Linux repositories carry both channels in their URL path, so switching means editing the repository definition rather than a setting.
- Enterprise fleets can enforce a channel through managed settings, and can make Claude Code refuse to start outside a version range with
requiredMinimumVersionandrequiredMaximumVersion. Those are a harder guarantee thanminimumVersion, which only constrains updates.
Turning updates off
Two variables, and they are not interchangeable. Reaching for the wrong one is why people report that they disabled auto-update and it updated anyway.
| Variable | Stops | Leaves working |
|---|---|---|
DISABLE_AUTOUPDATER=1 | The background check | claude update, claude install |
DISABLE_UPDATES=1 | Every update path | Nothing; you distribute versions yourself |
{
"env": {
"DISABLE_AUTOUPDATER": "1"
}
}
Pinning a version for CI and images
In a pipeline, a self-updating agent means the tool that produced the last green build is not the tool running today. When something regresses you cannot bisect it, because one of the variables changed itself.
Install the exact version
The native installer takes a version or a channel as its argument, so you no longer have to route through npm to pin.
# native installer, exact version
curl -fsSL https://claude.ai/install.sh | bash -s 2.1.89
# or, on a machine that already has Claude Code
claude install 2.1.89
# npm, if your CI already caches an npm store
npm install -g @anthropic-ai/claude-code@2.1.89
Stop it moving
export DISABLE_AUTOUPDATER=1
claude --version # assert this in the job if you want to be strict
The channel you pass at install time also becomes the default for future auto-updates, so bash -s stable is the softer version of this: current, but a week behind the churn.
Bake it into the image
FROM node:22-bookworm-slim
ARG CLAUDE_VERSION=2.1.89
RUN npm install -g @anthropic-ai/claude-code@${CLAUDE_VERSION}
ENV DISABLE_AUTOUPDATER=1
The Dev Container Feature always installs the newest release, so an image that must be reproducible installs the CLI itself rather than relying on the feature.
Rolling back a bad release
# what exists
npm view @anthropic-ai/claude-code versions --json | tail -20
# go back, native install
claude install 2.1.88
export DISABLE_AUTOUPDATER=1
claude --version
On Homebrew, the equivalent move is to switch casks rather than to name a version: claude-code is the stable channel and is the closest thing to a rollback the cask offers. Homebrew keeps old versions on disk after upgrades, so run brew cleanup occasionally to reclaim the space.
Before you blame a release
Most "the update broke it" reports are one of five things, and four of them are answered in under a minute.
| Check | Command | What a bad answer looks like |
|---|---|---|
| Which version am I on? | claude --version | Older than you expected; the update never landed |
| Is the install healthy? | claude doctor | A failed last update attempt, or an unmanaged launcher |
| Am I running the binary I think? | which claude | A second install shadowing the one you updated |
| Is it the service, not the CLI? | Check the Anthropic status page | An open incident that explains everything |
| Did my config change? | git diff on your settings, if versioned | A setting you changed and forgot |
Questions people ask
Run claude update. It works on every install method, including Homebrew, WinGet and the Linux package repositories, and reports either the version it moved you to or that you are already current.
Native installs do: they check at startup and periodically while running, install in the background, and apply the new version the next time you start. Homebrew, WinGet, apt, dnf and apk installs do not update automatically unless you opt in, which is accurate as of August 2026.
Set DISABLE_AUTOUPDATER to 1 in the env block of your settings.json. That stops the background check while leaving claude update and claude install working. To block manual updates as well, set DISABLE_UPDATES instead.
latest is the default and gives you every release as it ships. stable gives you a build typically about a week old, skipping releases with major regressions. Set autoUpdatesChannel in settings.json, or pick it in /config.
Run claude install 2.1.89, or pass the version to the installer as curl -fsSL https://claude.ai/install.sh | bash -s 2.1.89. Both accept stable or latest in place of a version number.
Install the earlier version explicitly and set DISABLE_AUTOUPDATER=1 in the same step, otherwise the background check updates forward again. If you set a minimumVersion floor, clear it first, because it refuses the downgrade.
claude --version prints it in the form 2.1.211 (Claude Code). Do this before reporting any bug, since the answer is often that the issue is already fixed in a newer release.
For CI and container images, yes: an agent that changes underneath a pipeline makes failures impossible to bisect. For laptops, prefer the stable channel over a hard pin, because a frozen install accumulates missing fixes and costs more debugging time than the churn it avoided.
Sources
Every figure above was read from these pages on August 2026. Vendors reprice without notice; if you find a stale number, tell us.