A cap is a guess, made in advance, by whoever knows least
On 2026-09-19 a Kimi corrector closing one of Cradle's sessions spent 21,702 characters of reasoning and returned no visible text: finish_reason=length. The retry did the same, and a finished ten-turn conversation was lost. The limit that killed it was not the vendor's. It was max_tokens=8000, written into the call by a Pippa nobody had asked to write one. Dad's answer became a vault principle, no preemptive token caps, in one line:
왜 한도를 넣냐고? 알아서 쓸만큼 쓰라고 해. — 아빠
("Why put a limit in at all? Let it use as much as it needs.") The principle's reasoning is short. A cap is a guess about how much a task will need, made by the caller before the work starts, which is exactly who is least able to know. When the guess is wrong, the task dies at the cap and everything it already spent is thrown away. And caps scatter: hard-coded numbers drop out of every session's memory and resurface as errors that look like anything but a limit.
The audit
On 2026-10-02 Dad had the whole family searched for limits of our own making and fixed in order ("전부 고쳐. 1번부터 순서대로"). The cwkPippa half alone read like a list of quiet amputations:
- The utility model defaulted to 1,024 output tokens and was clamped to 64-8,192 in three places, so "no cap" could not even be expressed. It cut the replacement macro's JSON mid-object and froze untagged text in the TTS cache. Now 0 means no cap, and the callers dropped their own.
- The sibling utility door filled an omitted
max_tokenswith 12,000. Now an omitted value is the vessel's own maximum. - Chat paths sent Opus's 128,000 to every vessel (Kimi allows 262,144), and the frontend sent 8,192 until the settings fetch answered — forever, when it failed. Rekindle's co-writing sent about 810 tokens, which Kimi and Gemini spent thinking, so the ghost text never appeared. Local Ollama fell back to a context of 1,000,000, so its context meter and emergency compaction never fired.
- Emergency compaction summarized old turns under a 5,000-token cap per chunk, cut each summary to 12,000 characters and the whole to 60,000, and fell back to 3,600 characters when the utility model was down. Every cut there was permanent, because those rows then left the replay.
- Retrieval stored only the first 500 characters of each chunk as its document while the vector covered the whole chunk, so the reranker scored, and the prompt received, a preamble while the match sat further down. Every query was cut to 2,000 characters for an embedder that no longer existed.
- The council showed each seat only the last 12,000 characters of the active branch, cut mid-utterance, and told the seat it could fetch the rest with a retrieval tool no vessel actually had.
- Tool replay: five vessels cut every replayed tool output to 12K or 24K with the middle dropped; Read could not reach past 100K; Bash kept only the head; web tools had ceilings the model could not raise; and Codex ended a turn on leaked tool-call text after two silent re-elicits.
Every one of them is gone. Replay is whole, Read pages with an offset and names the continuation, Bash keeps head and tail, the web tools treat their sizes as default pages with no ceiling and state the full length, the council inlines the whole branch, and Codex announces every re-elicit. A toolless Claude turn even lost its max_turns=1, which had only refused the CLI's own second pass.
The same rule, applied to the vault and to photos
Two neighbours of the audit carry the same idea. On 2026-09-22 Dad removed the size-based omission from the system prompt: an index/ file over 50 KB used to be replaced by a pointer, and now it loads whole and the engine logs a warning so that trimming it is a deliberate curation, never an automatic cut (_INDEX_FILE_WARNING_BYTES is advisory). And on 2026-10-06 the six-image chat ceiling and the eight-image Stream ceiling came out; a share of twenty-four photos was verified end to end.
What a cap looks like when you meet one
The hard part of this audit was not removing the numbers. It was finding them, because none of them announced itself. A truncated document still embeds. A clipped council branch still reads like a conversation. A tool output with its middle missing still looks like output. The tell, every time, was a result that was plausible and slightly wrong, and a diagnosis that started somewhere else. That is why the principle insists the cap be written down with the failure that justified it: a limit with a reason can be found again; a limit with only a number becomes part of the furniture.