beginner 20 minutes
What is claude doctor? How to run it and what /doctor does
claude doctor checks your Claude Code install from the terminal; /doctor, in a session, also offers fixes. Learn to run both and read what the report says.
You'll be able to
- choose between
claude doctorand/doctorfor the problem in front of you; - run
claude doctorand read the lines above its verdict; - name two things doctor can’t see, and the check to run instead;
- use
claude --safe-modeto tell a Claude Code problem from one you installed.
- Who it’s for
- people who use Claude Code, whether it’s working or not. This guide is part of the Claude Code strand, because both commands are built into Claude Code.
- Time
- about 20 minutes, including the exercise (an estimate).
You’ve been using Claude Code for months and it works, mostly. Then something goes odd: a hook that used to fire doesn’t, a setting you’re certain you set has no effect, and search comes back with fewer files than you know are in there. So you shrug, restart, and carry on, because the work is more interesting than the plumbing.
claude doctor is a command that checks your Claude Code installation and settings from the terminal. Type it in your terminal and it prints a read-only report on your installation and settings files, without starting a session. There’s also a second command, /doctor. I used one of them for a year before noticing the other existed, and they do different jobs. The second, /doctor, runs inside a Claude Code session and also offers to fix what it finds.
Both commands are built into Claude Code, so this guide is for people who use it, whether it’s working or not. Which one do you run when something is odd, and what is the report telling you?
Part 1 of 4 Learn
The two doctors
claude doctor | /doctor | |
|---|---|---|
| Where you run it | Your shell | Inside a Claude Code session |
| What it does | Reports | Reports and offers to fix |
| Reads settings | Yes, without a trust prompt | Yes |
| Also checks | — | Extensions, CLAUDE.md files, permissions, plan usage |
| Works when Claude Code won’t start | Yes | No |
You can also type /checkup instead of /doctor, if you find that easier to remember.
The CLI’s own help text puts it plainly: “Check the health of your Claude Code installation. Reads settings files in the current directory without a trust prompt. For a full checkup that can also fix issues, run /doctor in a session.”
Two parts of that help text need explaining.
“Without a trust prompt” means you can point it at a directory you haven’t approved yet and it will still read the settings. Useful when you’ve cloned something and want to know what its .claude/settings.json is asking for before you let it run.
“Can also fix issues” belongs to /doctor alone. Anthropic’s troubleshooting page says it “proposes fixes it can apply after you confirm.” So /doctor is the one you want ordinarily. claude doctor is the one you want when claude itself is refusing to start, which is exactly when a diagnostic inside a session is no use to you.
Pick a symptom to see which one to run.
Which doctor?
Pick what’s going wrong. You’ll see which command or page to use, where to run it, and why.
Use
claude doctor
In your terminal, without starting a session.
Why
/doctor needs a working session, and you don’t have one. claude doctor prints a read-only report on your installation and settings files without starting a session.
If that doesn’t fix it
Read the lines above the verdict. “No installation issues found” can appear a few lines below a line saying a feature is switched off.
This page sends nothing anywhere. It doesn’t run any commands.
How to run claude doctor
In your shell, type:
claude doctor
No flags. Here’s mine, run while writing the first version of this guide in July 2026:
Claude Code doctor
Running: native (2.1.220)
Commit: 4073f59596e2
Platform: darwin-arm64
Config install method: native
Search: OK (bundled)
Auto-updates: enabled
Auto-update channel: latest
Last update attempt: success → 2.1.219 (2026-07-24)
Remote Control
Remote Control requires feature-flag evaluation, which is disabled
because DISABLE_TELEMETRY is set. Unset it (or run in a shell without
it) to use Remote Control.
- Feature-flag evaluation disabled (disabled by DISABLE_TELEMETRY)
No installation issues found.
Your lines will differ. On version 2.1.316 (checked 5 November 2026), the report also shows how Claude Code was installed by a package manager, the install path, and lines for managed settings and organisation policy, and it closes by pointing you to /doctor for a full checkup.
Read upward from the verdict
With a report like that in front of you, take the verdict and the Remote Control lines together, because they disagree.
The bottom line says no installation issues found. Four lines above it, the output tells me a whole feature is switched off. Remote Control needs feature-flag evaluation, feature-flag evaluation needs telemetry, and I set DISABLE_TELEMETRY a long time ago for reasons that had nothing to do with Remote Control. Those two facts had never been in the same place at the same time until doctor put them there.
That’s the thing this command is actually good for, and it’s in the middle of the output, above the verdict. My installation is fine by doctor’s own definition, and a capability is off because of a decision I made somewhere else and never revisited.
No installation issues found means the install passed doctor’s specific checks, and those checks don’t cover what your setup does day to day.
If you take one habit from this guide: read upward from the verdict.
What claude doctor checks
Anthropic’s CLI reference describes the command as printing “read-only installation and settings diagnostics from the terminal without starting a session, including install health, settings-file validation errors, and Remote Control eligibility.” Three lines in the report are worth stopping at.
Install method and path. If you’ve ever installed Claude Code more than one way (npm once, native later, maybe a Homebrew attempt in between), this tells you which one is actually running. Two installs where you assumed one explains a surprising amount of odd behaviour.
Search. Mine says OK (bundled), so it’s using the ripgrep that ships with Claude Code. Say you’ve switched to your own ripgrep by setting USE_BUILTIN_RIPGREP=0. This line is how you check it took. The docs tell you to look for “the path of your system ripgrep instead of OK (bundled).” A setting you believe is applied but isn’t is hard to spot without checking this line.
Auto-update channel matters if you’re chasing a fix that shipped recently, or avoiding one that broke something.
What claude doctor cannot see
Doctor isn’t a full audit of your setup.
The clearest example sits in Anthropic’s own documentation: on WSL, reading across filesystems is slow, and search returns fewer results than it should. And the docs say it plainly: “claude doctor shows Search as OK in this case.”
Note
Anthropic’s troubleshooting page lists this case under “Slow or incomplete search results on WSL”. Its fixes are to search more specific folders or file types, move the project to the Linux filesystem (under /home/), or run Claude Code natively on Windows.
So there’s a documented state where search is degraded and doctor calls it healthy. The check reports that search works, and it does. Whether your queries come back complete is a different question, and doctor never asks it. On WSL, search for a file you know is there before you trust Search: OK.
The other blind spot is what you’ve added on top of the installation. claude doctor checks that Claude Code is correctly installed. It doesn’t check whether what you’ve added to it makes sense.
I found that out doing a clear-out of my own setup in 2026. Some of what turned up:
- Marketplaces registered that were dead or empty, still being consulted at startup.
- Plugins installed from a legacy source that had been superseded, so I was pinned to old copies without knowing.
- One plugin installed twice.
- Another with an official replacement that I’d never switched to.
- A tool I’d “uninstalled” months earlier that had never been a managed plugin at all, so its agents, commands, hooks and a
SessionStartentry were all still sitting there, quietly loading. - A pile of Syncthing conflict files under
~/.claude, because that directory is replicated between two machines and nothing was tidying up after it.
Doctor reported no installation issues throughout, and that was accurate: all of it came from things I’d added, and claude doctor doesn’t check those.
Since then, /doctor inside a session has started checking some of what you’ve added. Anthropic’s skills page lists what it now looks at: skills, MCP servers and plugins you don’t use and how much context each takes up, hooks that are slow, and CLAUDE.md files that repeat each other.
For the instructions themselves, /doctor prompt-audit checks them. It reads your CLAUDE.md, AGENTS.md, rules, skills, commands and subagents, and looks for “instructions written for older models, references to files or commands that don’t exist, and files that contradict each other.” You get a report with proposed edits, and nothing changes until you ask. It needs version 2.1.283 or later.
Neither /doctor nor /doctor prompt-audit is documented as catching everything on my list, such as a dead marketplace or a pile of sync conflict files. Use them first, then look through the rest by hand.
It reads the current folder, and shows the state now
The checks it does make depend on where you run it: claude doctor reads the settings files in the current directory. Run it somewhere else and you may get a different answer about settings, though the install-level lines stay the same. If you’re diagnosing project-specific behaviour, run it in that project.
It’s also a snapshot of the state now, and what changed last Tuesday to make things odd isn’t something it shows. For settings not applying, hooks not firing or MCP servers not loading, Anthropic’s Debug your configuration page is the right path: doctor will report a healthy install underneath a hook that never fires.
When doctor says fine and something’s still wrong
When the report is clean and something still isn’t working, I check these next:
/mcpshows MCP server status.claude doctorwon’t tell you a server failed to connect.- Your CLAUDE.md file. If Claude keeps ignoring your project’s conventions, check what it’s actually being told before you suspect the install.
claude --safe-modestarts a session with your customisations disabled. If the problem disappears, one of your customisations is involved: your CLAUDE.md, a skill, plugin, hook, MCP server, or a custom command or agent. It’s the fastest way to split “Claude Code is broken” from “something I installed is broken.”/hookslists every hook registered in the session, so a hook you wrote that isn’t listed wasn’t loaded./contextshows what’s in the context window, including whether your CLAUDE.md loaded.
The last two come from Anthropic’s Debug your configuration page, which also covers the common causes.
Part 2 of 4 Practise
Try it on your own work
- In your shell, go to a project folder and run
claude doctor.Result a report that ends with a verdict line, with your version on the Running line and lines for how Claude Code was installed. - Read upward from the verdict. Note any line that says something is disabled, off or unavailable.Result a short list, possibly empty, of lines that need a decision from you.
- Run
claude doctoragain from your home folder.Result the install lines are the same. Doctor reads each folder’s settings, so settings-related lines can differ. - Open a Claude Code session in the project and run
/doctor.Result a checkup covering installation, settings, extensions, CLAUDE.md files and permissions. If it proposes a fix, it asks you to confirm before applying it. - Run
/doctor prompt-audit.Result a report on your instruction files, listing any outdated or contradicting instructions it finds, with proposed edits. Your files stay as they are until you ask for the edits. - If something has been odd, start
claude --safe-modeand try it again.Result if the problem goes away, one of your customisations is involved (CLAUDE.md, a skill, plugin, hook or MCP server); if it stays, look at Claude Code itself, your settings or your environment. - Run
/mcp.Result the status of each MCP server. A server that failed to connect shows here and never appeared in theclaude doctorreport. - Run
/hooksand compare the list with the hooks you expect.Result the hooks that actually loaded. If one you wrote is missing, Claude Code never loaded it, andclaude doctordoesn’t list hooks.
Part 3 of 4 Check
Check yourself
Claude Code won't start after an update. Which doctor do you run?
claude doctor, from your shell. /doctor needs a working session, and you don’t have one.
Doctor ends with "No installation issues found", but a few lines up it says a feature is disabled because of an environment variable you set. Is your setup fine?
The installation passes doctor’s checks, and the feature is still switched off. Decide whether you still need that environment variable, or whether you’d rather have the feature, and change one of them.
A hook you wrote stopped firing, and `claude doctor` reports no issues. What do you check next?
Open a session and run /hooks. If your hook isn’t in the list, Claude Code never loaded it, and Anthropic’s Debug your configuration page lists the usual causes, such as a hook defined in a standalone file or a matcher written as an array. If it is listed, the matcher is the next thing to check. claude doctor flags some invalid settings, such as a matcher written as an array, but it doesn’t show you which hooks loaded.
On WSL, search in a project under /mnt/c/ keeps missing files you know are there, and doctor shows Search as OK. What do you do?
Don’t trust the OK: doctor only checks that ripgrep runs, and Anthropic’s docs list this exact case. Their fixes are to search more specific folders or file types, move the project to the Linux filesystem (under /home/), or run Claude Code natively on Windows.
Since you installed a plugin, Claude Code has been slow to start, and `claude doctor` reports no issues. What's your next step?
Run /doctor in a session first: it looks at unused extensions and slow hooks, which claude doctor doesn’t. Then start a session with claude --safe-mode. If it starts quickly there, one of your customisations is involved, and the plugin you just added is the first to check: disable it and start normally again.
Part 4 of 4 Keep
Keep this
Run it when something’s odd, and read upward from the verdict
- Run
claude doctorwhen Claude Code won’t start, and/doctorwhen it will. - Read the lines above the verdict before you believe the verdict.
- Run it in the project you’re diagnosing, because it reads that folder’s settings.
- When doctor is clean and something is still wrong, try
/mcp,/hooks,/contextandclaude --safe-mode. - Run
/doctorand/doctor prompt-auditto check what you’ve added to Claude Code, then look by hand at anything they don’t cover, such as marketplaces. - If a hook doesn’t fire, run
/hooksto see whether it loaded, becauseclaude doctordoesn’t list hooks. - If a setting has no effect, use the Debug your configuration page.
- If search misses files on WSL, search for a file you know is there, because
Search: OKonly means ripgrep runs.
In the Kit Library, members can get a one-page symptom card and a prompt that has Claude Code check your hooks and settings files and report back without changing anything.
Read next
- How to Audit Your AI Usage Patterns: the other built-in check, this time on how you work with Claude Code.
- Connecting MCP Servers to Claude Code: when
/mcpshows a server that won’t connect. - Setting Up Your First CLAUDE.md File: when Claude ignores your project’s conventions.