Research

Your Session Starts at 29,000 Tokens

Field Note

The number on the box is not the number you get. You open Claude Code, type nothing, and a fixed block of tokens is already sitting in the window. It gets sent again with every message you send after that, so it is a subscription rather than a one time purchase.

We know the size of ours because we tripped over it. A long context study we ran through the CLI kept measuring more input tokens than we had asked for, by a flat amount, in every single cell. That gap was the harness. It measured a steady 29,000 tokens across all 128 runs, which meant our nominal 5,000 token control was really 33,766. This note is the practical half of that finding.

Short answer

A fresh Claude Code session is never empty. A system prompt, built-in tool definitions, memory files, and one description per installed skill load before your first word, and that whole block is resent with every message for the rest of the session. Across 128 runs of our own context rot study the floor measured a steady 29,000 tokens. Keep yours under about 15 percent of the window, and measure at the wire before you start deleting things.

Chalk illustration of a single figure standing in the one narrow patch of clear floor left in a warehouse stacked wall to wall with crates, the delivery door at the far end still shut
Nothing has been delivered yet. Across 128 runs, the floor of a fresh session measured a steady 29,000 tokens.

What loads into the Claude Code context window before you type?

Four things. The system prompt Anthropic ships with the CLI, the full schema of every built-in tool, your memory files, and a name plus one line description for each installed skill. Memory files arrive as a user message after the system prompt. Every part of that block is resent with each message in the session.

Only some of it is under your control, and the parts you control are not the parts people usually attack first.

ComponentWhat it isWhat controls its size
System promptThe instructions the CLI ships to the model on every requestFeature flags such as disableWorkflows and disableBundledSkills
Built-in toolsRead, Edit, Bash, Task, Workflow and the rest, as full JSON schemaspermissions.deny rules and the disable flags
Memory filesCLAUDE.md at or above your working directory, loaded in full at launchWhat you write, and which directory you launch from
SkillsName and description only, roughly 30 to 100 tokens eachHow many are installed and in scope for that directory
MCP toolsDeferred by default on 4.5 generation models and laterThe ENABLE_TOOL_SEARCH variable, and permissions.deny
Source: Claude Code documentation, memory and MCP pages, August 2026

The load order matters for one reason. Files in the directory hierarchy above your working directory load in full at launch. Files in subdirectories below it load on demand, when Claude reads something in that subdirectory. Where you start the session sets the bill.

How much startup overhead is normal?

On a 200,000 token window, under 15,000 at startup is lean, 15,000 to 30,000 is normal, and past 50,000 something is loading that you do not use. Expressed as a share of the window rather than an absolute, keep the block under about 15 percent. That leaves the rest for the actual job.

Baseline at startupShare of a 200k windowReading
Under 15,000Under 8 percentLean. Instruction files trimmed, unused features switched off, nothing loaded upfront.
15,000 to 30,0008 to 15 percentNormal, and fine. Our own eval harness sat at about 29,000.
30,000 to 50,00015 to 25 percentWorth an audit. Something loads every session that you use once a month.
Over 50,000Over 25 percentCheck the measurement before you cut. Then cut.

Those bands are assembled from three sources rather than invented. Ours is the 29,000 token floor measured across 128 CLI runs in the context rot study, on a fairly standard setup. Firecrawl's survey of token consumption puts the hidden baseline at 20,000 to 30,000 tokens before you type. Matt Pocock, measuring his own machine at the wire before trimming, logged 69 tools, 154,946 bytes of tool schema, and 65,538 real input tokens on a single request.

The spread between 29,000 and 65,538 is the whole point. Both are real measurements of a default install plus whatever the owner added. Nobody tells you which one you are running until you look.

Do MCP servers really eat your context window?

Less than they used to, and less than the built-in report claims. Tool search is on by default for Opus, Sonnet and Haiku 4.5 and later, so MCP tool definitions are deferred until Claude actually needs one. Only tool names and server instructions load at startup. Adding another server now has minimal effect.

This is the advice most in need of updating. The widely quoted figures of 10,000 to 20,000 tokens per server, or 50,000 to 70,000 for a full setup, describe a version of the product where every schema loaded upfront. On current models it does not. The docs are explicit that tool search defers definitions and that the practical limit is your context budget rather than a per server cap.

The second correction is a measurement artifact. When you run the built-in context report, the CLI prices each tool with its own call to the token counting endpoint. Each of those calls wraps a single schema in a dummy conversation and pays Anthropic's tool use preamble again, roughly 460 tokens of wrapper on a tool whose real schema might be 130 tokens. Iterate that over 60 tools and you pay the preamble 60 times. Async Let measured the difference: about 45,000 tokens summed one at a time, against about 15,000 for the same 60 tools in one real request.

So roughly 30,000 tokens of that scary number can be double counting. The cuts are still worth making. The panic is mostly measuring a problem that has already been fixed.

If you do want them gone, there are two levers. ENABLE_TOOL_SEARCH takes true to always defer, false to always load upfront, and auto:N to load upfront only when the tools fit inside N percent of the window. A deny rule of mcp__* removes every MCP tool without unconfiguring the servers themselves.

How do you measure your own baseline?

Three ways, in ascending order of trust. The context command gives you a category breakdown in one second and over-reports tools. A logging proxy shows the request exactly as the model receives it. An instructions hook tells you which memory files loaded and why. Use the first to triage and the second to decide.

# point the CLI at a local proxy for one session
node proxy.mjs
ANTHROPIC_BASE_URL=http://localhost:8787 claude

# the proxy prints the real payload, tool by tool
[agent-proxy] 69 tools · 154,946 tool bytes · 65,538 real input tokens
  Workflow      21229 B  ~5307 tok
  DesignSync     8978 B  ~2245 tok
  Monitor        7767 B  ~1942 tok

What should you cut first?

Kill whole features before you kill individual tools, because a feature drags a cluster of tools and instructions with it. Then trim the memory files, which are the largest thing you personally wrote. Touch MCP servers last, after you have confirmed at the wire that they are actually costing what the report says.

  1. Measure. Record the baseline before any change, or you will have no idea whether the change helped.
  2. Switch off features you do not use. One flag removes a whole cluster. disableBundledSkills drops Anthropic's bundled skill catalogue while leaving the slash commands typable. disableWorkflows drops the multi-agent tool, which is usually the single largest schema in the payload.
  3. Deny the individual tools your ranked table says are large and unused. Plan mode tools, notebook editing, remote control, scheduling. Keep anything your background jobs depend on.
  4. Trim CLAUDE.md. If a competent engineer could work it out in twenty minutes of reading the repo, cut it. What stays is the non-obvious build command, the decision that goes against the framework default, the constraint nobody would guess.
  5. Move what is left out of the always-loaded path. Path-scoped rules under .claude/rules/ and skills both load on demand. A skill costs 30 to 100 tokens at startup and its body loads only when it is relevant.
  6. Now look at MCP. Confirm the real cost at the wire, then disconnect the servers you are not using this session.
{
  "disableBundledSkills": true,
  "disableWorkflows": true,
  "disableRemoteControl": true,
  "permissions": {
    "deny": ["NotebookEdit", "CronCreate", "CronList", "CronDelete"]
  }
}

Treat that as a menu and not a prescription. The reason to look at your own payload first is so you cut what you personally do not use. If you live in plan mode, keep plan mode.

What are the less obvious ways to lower the baseline?

The standard advice stops at trimming files and disconnecting servers. Bigger wins come from structural moves: replacing servers with command line tools, launching sessions in the right directory, auditing the context you inject into yourself, and converting standing prose rules into gates that cost nothing until they fire.

When is a lean baseline not worth chasing?

When you are optimising accuracy rather than cost. Our own recall testing found retention holding out to 730,000 tokens, so a large startup block does not by itself make the model dumber. What it costs is money, prompt cache stability, and the room you have left for the real work.

There is a version of this exercise that makes your setup worse. You strip the tools you actually use, spend the first ten minutes of every session working around their absence, and call it efficiency. The thing degrading in long sessions is composition rather than recall, and composition is not helped by owning fewer tools.

One practical warning for anyone billing through the API. Connecting or disconnecting an MCP server mid-session invalidates the prompt cache for the whole session. Make those changes at the start, not in the middle.

Common Questions

How many tokens does Claude Code use before I type anything?
On a fairly standard setup, 20,000 to 30,000. We measured a steady 29,000 across 128 runs of our own long context study, and independent surveys land in the same band. A heavily extended install measured at the wire can reach 65,000 or more. The only way to know your own number is to measure it.
Do MCP servers still use 50,000 tokens of context?
Not on current models. Tool search is enabled by default on Opus, Sonnet and Haiku 4.5 and later, so MCP tool definitions are deferred until needed and only names and server instructions load at startup. The large figures still circulating describe an older loading behaviour, and are further inflated by how the built-in report counts tools.
Why does /context show a bigger MCP number than my actual request?
Because it prices tools one at a time. Each tool gets its own token counting call, and every call re-pays the tool use preamble and a wrapper of roughly 460 tokens. Sixty tools counted separately can read about 45,000 tokens where the same sixty in one real request cost about 15,000.
How long should CLAUDE.md be?
Short enough that every line earns its place in every message of every session. Anthropic's guidance is under 200 lines. The test is whether a competent engineer could work the same thing out from the repo in twenty minutes. If yes, cut it. Move anything you cannot bear to lose into a skill or a path-scoped rule, which load on demand.
Does deleting CLAUDE.md make Claude Code better?
It makes the session cheaper and it removes instructions that were never guaranteed to be followed. Memory files are delivered as a user message rather than as part of the system prompt, so compliance was always best effort. If a rule has to hold every time, a hook enforces it and costs nothing until it runs.
What is the fastest single change that lowers the baseline?
Switching off a whole feature rather than individual tools. One flag removes a cluster of tools and their instructions together, and the multi-agent workflow tool is often the single largest schema in the payload. Measure, apply one flag, measure again.

Sources

SourcePublisherLink
Connect Claude Code to tools via MCPClaude Code documentation, Anthropiccode.claude.com
How Claude remembers your projectClaude Code documentation, Anthropiccode.claude.com
Manage costs effectivelyClaude Code documentation, Anthropiccode.claude.com
Extend Claude with skillsClaude Code documentation, Anthropiccode.claude.com
How To Kill The Bloat In Claude Code's System PromptMatt Pocock, AI Herowww.aihero.dev
Do MCP Servers Really Eat Half Your Context Window?Async Letwww.async-let.com
12 Ways to Cut Token Consumption in Claude CodeFirecrawlwww.firecrawl.dev
Tool use with Claude: overviewClaude Developer Platform, Anthropicplatform.claude.com

Questions to explore next

Keep Exploring

Chalk stick figure in a hard hat presenting a little machine of blue gears it just built

Bring us the bottleneck.
We’ll build the system.

No Dreaming. Just Building.