The Budget
Two different budgets govern this system, and conflating them makes you optimise the wrong one. A third one was invented here and enforced for months, so the first thing this chapter does is take it away.
Everything below is measured, not remembered. The method is characters รท 4 on the file body, summed across the pinned set, the trigger bodies and settings.gm.personality. Run .tools/enginecost.py yourself whenever the pinned set changes; the numbers here are a snapshot of a System that ships contentless.
Read chars รท 4 as a floor, not an estimate. Markdown fences, CamelCase field names and JSON punctuation tokenize nearer 3โ3.5 characters per token, so these figures are biased low, not symmetrically uncertain.
There is no standing-load ceiling, and you should not invent one
Earlier versions of this chapter told you to derive a cap as "a third of the smallest context window you intend to support", and gave 37.2k as that window, which put a working ceiling near 11,600.
37.2k was never a window. It was the total of one Craft Context Preview screenshot โ context in use at a single moment, most of it a conversation that had been growing all session. It became a capacity constant by being written down, and everything divided by it was wrong by 7โ27ร. The models this engine runs on have 256Kโ1M.
What Craft actually documents is an attention budget, and it is the one worth keeping:
| The documented guidance | What it means for you |
|---|---|
| Pin 1โ3 files | Four is already over. Every pin dilutes every other pin. |
| Keep a pinned file under ~200 words | "The more you pin, the less attention each pinned file gets โ this is the main driver of context rot." |
| "10 clear rules beats 50 vague ones" | Rule count is the real ceiling, and it is small. |
Measure your build against those three. The failure mode is dilution, not overflow โ window headroom cannot fix a pinned file nobody is reading carefully.
Standing context โ present before the GM reads anything
| Always present | Shipped | What happens once a world is installed |
|---|---|---|
| The Ladder (pinned) | 5,578 | fixed โ it is engine, not content |
| Scene State (pinned) | 822 | grows with the frame; it is the live scene |
| Genre Overlay (pinned) | 240 | this is the one that moves โ an empty template becomes the world's standing law |
| Table Contract (pinned) | 182 | grows a little; engagementLog self-trims |
| Narrative trigger bodies | 1,197 | fixed โ capped by the platform |
settings.gm.personality | 649 | fixed โ you write it once |
| Standing total | ~8,700 | the Overlay decides where this lands |
Read that as an absolute. It is not a fraction of anything and it has no bar on it.
Three of the four pinned files ship near-empty because a System has no world in it yet. Reading that table as the real cost of a played campaign is the most common mistake made with it. @Missing file โ the guide a filled Overlay is written from โ is itself over ten thousand tokens of source material. What lands on the Overlay is a hand-slimmed fraction of that, and slimming it is a real authoring task rather than a copy.
Cards are not standing, however they describe themselves. A card that says "every turn" in its own description still only arrives when the Ladder names it. It is a read, and reads are the other budget.
Read cost โ separate, and the one that actually grows
What the GM reads lands in the conversation window alongside the conversation itself. Pinned files are already paid for above; what the Ladder adds on top of them is this:
| Read every turn, on top of standing | Shipped | Once populated |
|---|---|---|
| @Missing file โ RUNG 1 | 2,060 | fixed |
| Memory vault โ cascade 8 | 148 | twenty to forty times this; it is one file per character per day |
| Per-turn floor | ~10,900 | grows with the world, not with the engine |
Both files in that table are empty brackets today. A populated vault and a written character sheet are the two things that actually inflate a live turn, and neither of them is engine work โ which is the point. The engine's floor is fixed; the world's is yours.
So adding to the pinned file is the cheap mistake; adding a mandatory read is the expensive one. A rule pinned costs its own length forever and dilutes every other pinned rule. A rule that becomes a mandatory read costs its length forever and takes room from the conversation, which is what the GM uses to remember what just happened.
Never read a whole mechanic. They run three thousand to nearly thirty thousand tokens; the largest is 5.1ร the pinned Ladder. Every mechanic carries a ## GM Navigation table โ enter there, take the one section it names, and stop. That is what cards are for.
The budget nothing here tracks: session length
The engine's files are a fixed cost. The conversation is not โ it grows every turn and never shrinks, and long-context recall on the models this runs on holds to roughly 64kโ128k tokens and then degrades sharply, into refusal rather than into vagueness.
Nothing in this project reads turn count against that. If you are building something meant to run for forty sessions, that is the number to think about, not the size of a pinned file.
Triggers are evaluated, not gated
All fifteen narrative trigger bodies are present every turn and evaluated against the phase. There is no keyword matching, and nothing is skipped.
Do not open a trigger with its own gate. "Is this a moment where X? If not, ignore this" spends a quarter of a 500-character budget instructing the evaluator to do nothing. The body is capped that tightly precisely because it is a directive, not a document.
Write the condition into the name โ the name is what a relevance evaluator reads โ and keep the body imperative:
<observable condition>. <imperative check>. <named card>.
If a rule applies unconditionally, it is not a trigger at all. Clear the trigger and let the rule be always-on, or fold it into the Ladder.
The test before you add anything
Does this apply on a turn where two people are simply talking?
If yes, it may earn a place in the standing set โ after something else leaves. If no, it belongs in a card that loads when it does.
And the second test, which is the one that was missing: is this a rule, or is it an explanation of a rule? Cutting 4,420 tokens of explanation out of the pinned Ladder once moved its rule count by five. The rules are almost never the bulk.