context-checkup · git:20260606.894c2ea · 2026-06-06 · sha256 356c0d3570b7d552
context-checkup git:20260606.894c2eaA
Immutable. This exact content is served forever at /api/v1/blob/356c0d3570b7d552.
--- name: context-checkup description: Audit what auto-loads into a Claude Code session's context window and suggest lean, reversible fixes. Use when the user asks what's loaded at startup, wants to cut context bloat or startup tokens, or keep the context window lean. --- # Context checkup Find what eats the session's context at startup, quantify it, and propose **reversible** trims ranked by payoff. Read-only — measure and recommend; change settings only on explicit approval. ## Mental model (spend attention top-down) Cost hierarchy, biggest first: 1. **MCP tool schemas** — large, but **deferred** by tool search. Only a problem if tool search is OFF. 2. **Always-on text** — CLAUDE.md/AGENTS.md chain, `@imports`, and **skill/agent/command descriptions** (every available one's description loads every session). 3. **MCP server instructions** — load per enabled server at startup; a chatty preamble can dwarf its tool names. 4. **MCP tool names** — ~10 tokens each. Cheap. Don't over-optimize; 30 names ≈ 300 tokens isn't worth a recommendation. Rules: **measure, never guess** — `wc`/count, then attach a rough token figure to each finding. **Rank by tokens-saved × reversibility.** Distinguish **auto-loaded** from **lazy-linked** (nested AGENTS.md referenced from a parent are *not* loaded — don't flag them). ## Checklist **0. Verify tool search is on first.** If `ENABLE_TOOL_SEARCH` is disabled, MCP schemas load eagerly and every "names are cheap" conclusion flips. Check this before anything else. **1. Always-on docs.** Measure the CLAUDE.md/AGENTS.md chain: project file + **every parent dir up to root** + global `~/.claude/CLAUDE.md`. Expand `@import` lines (recursive). `wc -w` each. **2. Descriptions (often the largest unexamined chunk).** Skim the in-session lists of **skills, subagent types, and slash commands** — their descriptions are always loaded. Many rarely-used entries = standing cost. These live in *your session's system-reminders*, not on disk — read them from context. **3. MCP servers.** From `.mcp.json` + settings, list enabled servers. Count tool **names** per server (from the deferred-tools system-reminder in context). Note any server with long **instructions**. Flag servers irrelevant to the user's actual work. **4. Enablement levers.** Read `~/.claude/settings.json`, project `.claude/settings.json`, `.claude/settings.local.json`. Check `enableAllProjectMcpServers`, `enabledMcpjsonServers`, `enabledPlugins`. Precedence: managed > local > project > user. Each plugin can pull in MCP servers, skills, agents, hooks. **5. Memory.** Size of `MEMORY.md` index. ## Output A short sizes table (source → ≈ tokens → auto-loaded? → relevant to user's work?), then a prioritized action list. For each action give the exact setting/file edit, the rough savings, and how to reverse it (prefer per-session toggles). Skip anything under ~a few hundred tokens unless asked to be exhaustive. Then ask before editing. ## Useful probes ```bash # always-on doc chain (run from project root; also check parent dirs + ~/.claude/CLAUDE.md) for f in CLAUDE.md AGENTS.md ../CLAUDE.md ~/.claude/CLAUDE.md; do [ -f "$f" ] && wc -w "$f"; done # enabled MCP + settings cat .mcp.json; cat .claude/settings.json .claude/settings.local.json ~/.claude/settings.json 2>/dev/null ``` MCP tool-name counts, the skills/agents/commands lists, and tool-search status come from the **session's system-reminders**, not disk — read them from your own context.