TL;DR: Run claude doctor first. It tells you how Claude Code was installed and whether the updater is healthy. Most stuck updates are one of three things: two installations shadowing each other, an npm global install with a permission problem, or an old npm install that should move to the native installer. Worst case, a clean reinstall with the native installer takes two minutes and fixes all of it.

First: find out which Claude Code you’re running

Claude Code has been installable two ways: npm install -g @anthropic-ai/claude-code, and the native installer, which doesn’t need Node at all. Update problems almost always trace back to which one you have, or to having both. Start with:

claude doctor

It reports the installation type and flags updater problems directly. Then note your version and where the binary lives:

claude --version
which claude        # macOS/Linux/WSL
where.exe claude    # Windows

Keep those two facts in hand. Now the fixes, in the order they’re likely.

Fix 1: You updated one install and you’re running another

The classic symptom: claude update completes fine, you restart the terminal, claude --version shows the same old number.

That’s two installations. An old npm global install and a native install both on your PATH, and the shell resolves to the one you didn’t update. which claude gives it away: an npm path (something like .../lib/node_modules/... or an AppData\npm shim on Windows) versus the native location (typically ~/.local/bin/claude).

Keep the native one, remove the npm one:

npm uninstall -g @anthropic-ai/claude-code

Open a fresh terminal and check claude --version again. This one fix resolves most “update does nothing” reports.

Fix 2: Permission errors on an npm install

If the update fails with EACCES or a permission denied while writing, you have an npm global install in a directory your user can’t write to (common when Node was installed system-wide). Don’t reach for sudo, that trades one broken state for a worse one.

The clean way out is to stop updating through npm entirely and switch to the native installer, which installs into your user directory and self-updates without elevated permissions:

# macOS / Linux / WSL
curl -fsSL https://claude.ai/install.sh | bash

# Windows PowerShell
irm https://claude.ai/install.ps1 | iex

Then remove the npm copy as in fix 1 so it can’t shadow the new one.

Fix 3: The clean reinstall

If the state is too tangled to reason about, nuke and repave. Uninstall the npm version, run the native installer above, open a fresh terminal, claude --version. Your settings and history live in ~/.claude/ and survive a reinstall untouched.

Fix 4: WSL is using Windows Node

WSL-specific gotcha: if which claude (or which npm) prints a /mnt/c/... path, your WSL shell is reaching across to the Windows Node installation, and installs/updates land in a confusing hybrid state. Install Node inside WSL properly (or skip Node entirely with the native installer run inside WSL) and reinstall there.

Fix 5: Auto-updates are turned off

Claude Code normally keeps itself current in the background. If your version seems frozen and manual updates work fine, check whether auto-updates were disabled at some point: a DISABLE_AUTOUPDATER=1 in your environment, or an auto-updater setting switched off in ~/.claude/settings.json. Easy to set once during a debugging session and forget forever.

> Sounds interesting?

Invoke is $49 once. Free 7-day trial, all features, no credit card.

Try it free →

Why bother staying current

Not just features. Some very annoying terminal bugs got fixed in updates, including the WSL image-paste failure that Alt+V now works around. If you’re fighting Ctrl+V not working or “no image found in clipboard” on an old version, the update is the fix.

While you’re tuning your setup

Invoke is the other half of my Claude Code workflow: local Whisper dictation on your GPU. Hold a key, describe what you want built, release, and a clean prompt lands at the cursor. It also pastes screenshot paths into the terminal with one hotkey. $49 once, no subscription. Free 7-day trial.