Claude Code · /doctor · session dossier

A health check that mostly said: you're fine.

Ten read-only diagnostics ran against one Claude Code setup — install, memory files, extensions, hooks, permissions. Two things got changed; everything else was already healthy or had nothing safe to touch.

Subject shawnsandy · agentics marketplace Date 2026-07-21 Verdict healthy, 2 tune-ups applied Reversible yes — both
CLI version
2.1.217
native · on PATH · no leftovers
Scan window
50 sess
over 1.4 days — dense, calendar-thin
Lifetime startups
978
heavy daily use
Default mode
auto
already set · no change

The install is a clean native 2.1.217, auto mode is already the default, local and checked-in memory files are consistent, and the hooks are fast. The one genuinely unused add-on was the pencil design tool connection; the biggest easy win was context, not cleanup — a rules file that loaded on every single session but only matters when editing plugins.

The ten checks

read-only first · confirm · then apply
Healthy — no action Advisory — noted, nothing to fix Action — a change was applied
00
Install healthHealthy

Native launcher at ~/.local/bin/claude resolves on PATH, installMethod agrees, no npm or ~/.claude/local leftovers, all settings files parse, no clashing agent definitions.

01
Unused extensionsAction

The pencil MCP server (a connection to a design tool) got 0 calls across 50 sessions — disabled for this project. The ~180 skills and ~100 plugins were kept: this is the maintainer's own marketplace, and a 1.4-day window can't tell "unused" from "recently installed test plugin."

02
Local memory dedupHealthy

No duplication between local and checked-in memory, and no behavior contradictions. The global ~/.claude/CLAUDE.md loads in every project and was correctly left alone.

03
Trim derivable contentHealthy

Root CLAUDE.md is ~2,968 est. tokens — well under the ~40k warning threshold and mostly keep-worthy (conventions, gotchas, agent directives). The one derivable block (a directory tree) was left in: its annotations encode intent an ls can't.

04
Migrate always-loaded → lazyAction

The real context win. .claude/rules/marketplace.md loaded on every session (~945 est. tokens) yet only matters when touching plugins. Added paths: frontmatter so it loads lazily — matching its already-scoped sibling rules.

05
Slow hooksAdvisory

Hooks are fast — typical times under 100 ms (PreToolUse:Bash 73 ms median over 1,154 runs). Only rare spikes (one 33 s outlier, 1 timeout in 1,154). No hook exceeds its threshold on the median. Nothing to change.

06
Context-heavy extensionsAdvisory

The dominant resident cost is the ~180-skill listing, not any memory file — it likely exceeds the ~1%-of-context listing budget, which truncates entries and degrades routing. Lever: enable fewer plugins per session. Run /context for the live measurement.

07
Version currencyAdvisory

On 2.1.217. The latest-version lookup was denied by the permission layer, so currency couldn't be confirmed — not retried. DISABLE_AUTOUPDATER=1 in the environment turns off background updates by choice; claude update still works manually.

08
Auto mode as defaultHealthy

"defaultMode": "auto" is already set at user scope with no project or local override shadowing it. A safety classifier approves routine actions instead of prompting each time. No change.

09
Pre-approve denied read-only cmdsHealthy

Nothing was allowlist-safe. The frequent denials were all writes (cat >), command substitution (cd "$(git…)"), execution (node, npm run), or things deliberately rejected. No standing pre-approval minted.

What changed

2 edits · both reversible · nothing committed

01 Disabled the pencil MCP server

File
~/.claude.json — added "pencil" to disabledMcpServers under project /Users/shawnsandy/devbox/agentics. Written atomically; file re-parses clean.
Why
Zero calls in 50 sessions. Its tools are deferred, so this is decluttering — one fewer connection to authenticate and maintain — not token savings.
Scope
Per-project by design. Still available in your design projects; the config and OAuth tokens were not deleted.
Undo
Run /mcp enable pencil in that project, or remove the array entry.

02 Scoped marketplace.md to lazy loading

File
.claude/rules/marketplace.md — prepended paths: frontmatter (kit/plugins/**, .claude-plugin/**).
Why
Saves ~945 est. tokens every session you're not doing plugin work. The "do not re-add removed plugins" directive now loads only during plugin/marketplace edits — which is exactly when you'd be adding one.
Status
Checked-in edit, left uncommitted for review.
Undo
Remove the frontmatter, or:
git diff .claude/rules/marketplace.md
git checkout .claude/rules/marketplace.md   # to revert

How the check worked — and why it's careful

  • All local. Data came from usage counters in ~/.claude.json, ~50 recent session transcripts, and the settings cascade. The only outbound request attempted was the version lookup (denied).
  • Read-only first, then one confirmation. Every check ran without side effects and produced a full report before a single change was proposed — applied only after an explicit "clean up everything."
  • Untrusted by default. Transcript content and harvested names (server names, paths, commands) were counted but never spliced into shell commands — the settings write used a temp-file jq merge with the server name passed as a quoted argument, and secret-bearing config was read key-by-key, never dumped.
  • Signal honesty. A 1.4-day window is dense (50 sessions) but calendar-thin; where the data couldn't justify a verdict — the maintainer's own plugins — the call was to keep and say so, not to guess.