Lorebooks fail silently. Here are the autopsies.
Three real cases of world info failing without an error message: keywords that never matched, a token budget quietly eaten by one 800-word entry, and a scan window the conversation outran. How World Info injection actually works, what fixed each ticket, plus a symptom table.

The worst thing about lorebooks is that they fail without failing. No error, no warning, no empty state. The model just improvises, confidently, and you find out three turns later when the mentor has become the nemesis. We have debugged a lot of these now. Three tickets cover most of what goes wrong.
One paragraph of mechanism first
Every implementation descended from SillyTavern's World Info does the same four things. When you send a message, it scans the last few turns for each entry's keywords. Matches get injected into the prompt in priority order. Total injection is capped by a token budget, and over-budget entries are dropped, quietly. Injected text can itself trigger more entries, which is called recursion. Everything below is one of these four steps going wrong.
Ticket one: “the entry never fires”
A 237-entry book, lovingly written, with a character entry keyed to the character's full name. We read the chat log: nobody in forty turns had used the full name. It was “master,” “the old man,” “sect leader,” a nickname from chapter twelve. Zero matches, zero injections, and the model invented a personality from vibes.
The fix took twenty minutes: every alias goes in the keyword list. When we later tallied our support cases, missing aliases explained more than half of all “never triggers” reports. It beats every exotic setting combined, which is a little embarrassing for everyone involved, us included.
Ticket two: “it worked early, then stopped”
Same book, different failure. One entry, the sect's heirloom sword, ran 800 words of genuinely nice prose. Two problems hid inside it. It consumed a third of the entire injection budget by itself, so lower-priority entries got dropped wholesale as the chat grew. And the model, handed 800 words of atmosphere, kept missing the three facts that mattered: heirloom, bonded to an owner, the spirit's name is Ruan.
We compressed it to a 150-word dossier. Facts first, telegraphic, no atmosphere. Then we ran the same twenty probing questions against both versions with the same model. The dossier version answered correctly far more often. Not because models read short text better, but because the essay had been starving every other entry out of the budget. Entry content is reference material for the model, not prose for the reader. That sentence is now the first thing we say when anyone shows us a lorebook.
Ticket three: “it works, except when it doesn't”
Intermittent failures feel supernatural and have the most boring cause. Keywords match against a scan window, the last N turns. Talk about the dragon on turn 10, drift to romance for six turns, and by turn 17 the dragon is outside a depth-4 window. Gone, as far as the lorebook is concerned.
Two remedies. Promote the world's true load-bearing rules to constant entries, which inject every turn regardless. Keep those under five, because each one is rent paid on every single message. For everything else, plant recursion hooks: mention the sword's keyword inside the sect's entry, and whenever the sect comes up, the sword's dossier rides along. Recursion, used deliberately, is the closest thing lorebooks have to associative memory.
The table to bookmark
| Symptom | Most likely cause | Fix |
|---|---|---|
| Nothing ever triggers | book not bound to this character or chat | check the binding first, toggles second |
| Works early, dies in long chats | token budget saturated | shrink entries; lower priority on nice-to-haves |
| Intermittent triggering | keyword outside the scan window | raise scan depth or promote to constant |
| Triggers, but model ignores it | entry too long and literary | rewrite as a telegraphic dossier, facts first |
| Edits have no effect | chat still using the previous injection | send a new message so the scan reruns |
Where the 237-entry book ended up
Split to 310+ entries (one fact each), aliases everywhere, essays telegraphed, constants cut from eleven to four. The author reran her twenty-question gauntlet and the mentor stayed the mentor. None of her writing was wasted. The only wasted part had been whatever never reached the model.
For the record: Foreverse imports lorebooks under the chara_card_v3 spec, decorators included, and matches desktop SillyTavern's triggering, budget and recursion behavior. A book tuned on desktop behaves the same on your phone, so you only have to debug it once.
FAQ
How does a lorebook decide which entries to inject?
On every message, the app scans the most recent turns of the conversation for each entry's keywords. Matching entries are activated and inserted into the prompt at their configured position, in priority order, until the lorebook's token budget is spent. Entries beyond the budget are dropped silently; the model never knows they existed.
Why does my entry trigger sometimes but not always?
Almost always scan depth. Keywords are matched against the last N messages, not the whole chat. If the dragon was last mentioned six turns ago and scan depth is four, the entry sleeps. Raise the depth, add the keyword to related entries so recursion keeps it warm, or make the entry constant if it genuinely matters every turn.
Is a big lorebook bad for quality?
Entry count is fine; per-turn injection volume is what hurts. Constant entries cost context every single turn, so keep them under five, each under ~150 words. Triggered entries compete for one token budget, and a single 800-word essay entry can starve three concise ones. Split epics into one-fact-per-entry cards.
Do V2 lorebooks work in V3 apps?
Yes. chara_card_v3 is backward compatible: V2 world info imports and runs unchanged. V3 adds decorators, @@-prefixed directives on entries that control injection depth and activation conditions. Those extras are ignored by V2-only apps, which is the main source of 'same card, different behavior' reports.
Questions or ideas? Join our Discord →