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: true in 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.