Claude-Context-Analysis-0526
May 4, 2026 · View on GitHub
Point-in-time snapshot of /context output from a live Claude Code session, captured 2026-05-04.
What this is
context.txt is the redacted dump of what /context reported was sitting in the model's window at the moment of capture — system prompt, custom agents, memory files, skills, and the MCP tool inventory. Personal/family-scoped MCPs and skills are redacted; the structural picture is intact.
Why
Exploring where context budget actually goes in a heavily-pluginned Claude Code setup, and what's eagerly loaded vs. lazily loaded.
The /context reading itself is somewhat misleading — the headline numbers don't cleanly map to "what the model actually sees on turn 1," because eager-loaded descriptions and lazy-loaded bodies are reported together.
The asymmetry this snapshot illustrates
MCP tools — well-handled here
This setup routes nearly all MCP servers through mcp-jungle, an aggregator. The host process sees one (or a few) upstream connections; individual tools resolve on demand via ToolSearch / deferred-tool fetch. Net result: hundreds of MCP tools in the inventory, near-zero baseline context cost — only the schemas the model actually pulls land in the window.
Plugins — not the same story
Per the Claude Code plugins docs and the skills docs, plugin skills load differently:
"skill descriptions are loaded into context so Claude knows what's available, but full skill content only loads when invoked" — code.claude.com/docs/en/skills
So while skill bodies are lazy (good), skill descriptions are eager. Every installed plugin skill contributes its frontmatter description (+ optional when_to_use) to a manifest that's resident from turn 1.
The docs are explicit about the budget mechanics:
"All skill names are always included, but if you have many skills, descriptions are shortened to fit the character budget … The budget scales dynamically at 1% of the context window, with a fallback of 8,000 characters." "each entry's combined text is capped at 1,536 characters regardless of budget"
In this snapshot ~440 plugin skills are installed. Even with per-entry truncation, the manifest dominates the eager footprint — and the /context tally rolls all of it into a single "Skills: 40.3k tokens" line that's hard to attribute.
Custom agent descriptions follow the same eager pattern: catalogue resident at start, body loads on spawn.
Offload levers (from the docs)
SLASH_COMMAND_TOOL_CHAR_BUDGET— env var to raise/lower the description budget.disable-model-invocation: truein skill frontmatter — explicit table in the docs: "Description not in context, full skill loads when you invoke." Effectively opts the skill out of the eager manifest, leaving it user-invocable only.user-invocable: false— hides from/menu but does not remove the description from the model's context (it's still there for model-invocation).- Skill permission rules (
Skill(name)allow/deny in/permissions) — gates invocation, not eager loading. - Aggregation pattern — what mcp-jungle does for MCPs has no direct equivalent for plugins yet; the closest move is consolidating many small skills into fewer larger ones (one description, many sub-procedures inside the body) so the manifest carries less.
What's next
Follow-up experiments will measure the actual eager footprint vs. the /context headline, and trial offload strategies — bulk-applying disable-model-invocation, raising/lowering the char budget, and grouping skills behind a single dispatcher.