Builder's Manual ยท Chapter 2

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 guidanceWhat it means for you
Pin 1โ€“3 filesFour 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 presentShippedWhat happens once a world is installed
The Ladder (pinned)5,578fixed โ€” it is engine, not content
Scene State (pinned)822grows with the frame; it is the live scene
Genre Overlay (pinned)240this is the one that moves โ€” an empty template becomes the world's standing law
Table Contract (pinned)182grows a little; engagementLog self-trims
Narrative trigger bodies1,197fixed โ€” capped by the platform
settings.gm.personality649fixed โ€” you write it once
Standing total~8,700the 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 standingShippedOnce populated
@Missing file โ€” RUNG 12,060fixed
Memory vault โ€” cascade 8148twenty to forty times this; it is one file per character per day
Per-turn floor~10,900grows 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.

Manual updated Aug 12, 2026.