The session starts. I have not typed anything yet. The system prompt is already nineteen thousand tokens long.
I know this because I counted. Ten plugins enabled at the user level in ~/.claude/settings.json. Across those ten plugins, roughly ninety persona agents and fifty skills. Each persona ships a name, a description, a one-paragraph charter that tells the orchestrator when to delegate to it. Each skill ships a name and a description and a trigger condition. None of this is the persona's actual prompt — those load on invocation. This is only the metadata. The table of contents. The index that lets the top-level model know what is on the shelf.
The index is nineteen thousand tokens.
The session I opened was to rename a file.
What the tax buys
The tax is not waste in the abstract. It buys the thing that makes the constellation usable — the orchestrator's ability to look at a request and say, without me prompting it, this is a job for the editor persona, then the validator, then the publisher. The delegation is only as good as the index. Strip the index and the orchestrator does not know what it has. The personas still exist on disk. They are simply invisible to the model that is supposed to call them.
So the metadata loads eagerly. The personas themselves load lazily. This is the right architecture for a session that uses many personas. It is the wrong architecture for a session that uses two.
Most sessions use two.
Three scopes, three lifecycles
The enabledPlugins field appears in three places. Each one has different reach.
User-level, at ~/.claude/settings.json — the plugin is on for every project you open, every session you start, every prompt you send, until you turn it off. This is where I had put all ten.
Project-level, at .claude/settings.json inside the repo — the plugin is on for sessions opened in this project. The setting is checked in. The team gets it. The plugin is off everywhere else.
Local-only, at .claude/settings.local.json inside the repo — the plugin is on for sessions you open in this project, on this machine. The setting is gitignored. The team does not get it. Useful for the persona you are testing before you trust it enough to commit.
Three knobs. I had been turning one.
The fix is accounting
I moved seven of the ten plugins out of the user-level config. The blogging constellation — editor, publisher, the persona pack that knows the house voice — went into .claude/settings.json in the blog repo. The WordPress persona pack went into the plugin repo it was built for. The voice-agent personas went into the voice-agent project. The three that stayed at the user level are the ones I genuinely reach for in any session, on any project, at any hour — the planner, the librarian, the one that reads logs.
The user-level session prompt dropped from nineteen thousand tokens to about forty-one hundred. The blog repo's session prompt is still large, because in the blog repo I want all of that loaded — that is the whole point of opening the blog repo. The voice-agent repo's session prompt is small and fast and forgets nothing that matters to the voice agent.
The personas did not move. They are still on disk, still in their plugins, still installable, still discoverable. Only the enablement moved. The inventory is the same. The receipt at the register changed.
The story we tell ourselves
The story we tell ourselves about plugins is that they are free until invoked. The story is wrong by a fixed amount per session, measurable in tokens, payable at startup, charged whether or not the persona is called. The story is wrong because we are thinking of plugins the way we think of npm packages — dormant on disk, costing nothing until require. Plugins are not npm packages. Plugins are line items on a receipt the model reads before it reads anything you wrote.
The session that should be small feels slow and forgetful because half the window is a catalog of personas it will not summon. The personas were not the problem. The scope was.
References: the constellation that makes this tax legible is described in Great Minds Constellation, and the persona-folder pattern it grew out of is in building-with-ai-brain.
Didion wrote that we tell ourselves stories in order to live. We also tell ourselves stories in order to keep our config files tidy. The story that the plugin is free is the one that costs nineteen thousand tokens a session until somebody counts.