Eleven switches, and the trade-offs behind them
Memory, auto-summary, story choices, state tracking, stepped thinking, lorebook suggestions, reply ideas — the extension powers desktop tavern players rely on, built into Foreverse as a plugin center. A walkthrough of what each plugin does and costs, plus the three disciplines we hold: every side-request is itemized in your billing log, every turn has a call budget, and tapping a choice never sends on your behalf.

What makes desktop SillyTavern hard to leave is the extension ecosystem: memory, status bars, story choices, stepped thinking, hundreds of community add-ons each minding one job. Porting that to a phone by imitation does not work — every extension may fire extra LLM calls, and what a desktop player shrugs off against their own GPU, a phone player pays per token. So Foreverse builds the high-frequency powers in as a plugin center: each one a switch, governed by three disciplines about cost. The inventory first.
Eleven switches
| Plugin | What it does | Extra calls |
|---|---|---|
| Memory | Dual engine: fact extraction + retrieval injection, and session summaries | Yes, signal-gated |
| Auto-summary | Compresses early history past a length threshold | Yes, infrequent |
| Re-roll guard | Confirmation before regenerating, saves good replies from a slip | None |
| Story choices | Three plot-direction phrases after each reply lands | Yes, one per turn |
| Reply ideas | Three complete candidate lines in your voice | Yes, mutually exclusive with choices |
| State tracker | Infers scene state (time / place / relationships), manual refresh | Yes |
| Stepped thinking | Private draft before the real reply; 15s timeout degrades silently | Yes, blocking |
| Prose polish | Display-time rewrite of mechanical phrasing | Yes |
| Lorebook suggestions | Scans the chat and proposes new entries, added one by one with consent | Yes, manual trigger |
| Image trigger | Auto-generates an image when a reply carries an image tag | Yes, image model |
| Favorites | Long-press to save replies you love, global management page | None — always on, no switch |
The favorites row deserves its footnote: it has no switch. Saving is a data behavior — a toggle that could hide someone's saved replies hurts more than one extra switch ever tidies. So it stays on, with a management entry in the hub. The plugin center contains several of these decisions about what not to build.
Three disciplines
First: a per-turn call budget. One send could theoretically stack six calls (stepped thinking, the main generation, memory extraction, summary, choices, tracker) — six times the latency and the bill. The hard rule: at most one blocking plugin per turn; at most two post-reply quiet calls, prioritized choices, then tracker, then summary, with the loser deferred to the next turn.
Second: every side-request is itemized. Each plugin call gets its own row in the API request log, labeled with the plugin name, tokens and cost separated from the main conversation. You can audit the ledger and decide which plugins earn their keep — our stance is to hand over the choice together with the bill.
Third: tapping a choice never sends. Story choices fill the input box for you to edit; sending is yours. Auto-send looks slick and quietly means a plugin speaks as you. The one exception is reply ideas, whose whole product is complete lines — tap to send, long-press to edit — and when both plugins are on, only ideas runs that turn.
A field lesson worth the tuition
Real-device testing caught a counterintuitive bug: the state tracker produced permanently empty output on one phone. The cause was reasoning-model thinking budgets — the plugin capped side-request output at 400 tokens, and that device's reasoning model spent three to five hundred tokens thinking before writing a single visible character. The fix raised the caps across the board (up to 1600) and moved brevity enforcement into the prompt.
Everything is tunable
Each plugin has a detail page — explanation, cost badge, parameter card. Choice count, tracking frequency, and summary interval are adjustable, and quiet calls can run on their own model: flagship for the main chat, a flash-tier for plugin side-requests is the combination we use ourselves. Switches also override per character card — off globally, on for one card, or the reverse.
Why memory injects where it does, and how much retrieval strategies differ, is measured in the memory experiment; how plugins behave around multi-character scenes is in the group chat piece.
FAQ
Do plugins quietly inflate my API bill?
Every call is itemized. Plugin side-requests (generating choices, extracting state, writing summaries) appear as separate rows in the API request log, labeled with the plugin's name, tokens and cost split from the main chat. Hard budget on top: at most one blocking plugin call per turn, at most two post-reply quiet calls, overflow deferred to the next turn.
How does the memory plugin work?
Two engines. Fact memory extracts key facts into local entries and injects the most relevant on each turn (retrieval has four modes: auto, full, relevant, recent); session summary compresses early history once a long chat crosses a threshold. Both inject at the message-level tail on the user track — a position we chose from a 400-round caching experiment.
What's the difference between story choices and reply ideas?
Point of view. Story choices offers three plot-direction phrases (director's view); tapping one fills your input box for you to edit and send. Reply ideas drafts three complete lines in your voice (actor's view); tap to send, long-press to edit. With both enabled, only one runs per turn — ideas takes priority — so you never pay for both.
Does stepped thinking slow replies down?
It adds one preliminary call: the model drafts private notes first, then writes the real reply with them in hand — noticeably better on complex personas. A 15-second timeout degrades silently to a normal generation, so your message never hangs on it. It disables itself in group chats, where multiple inner monologues would cross-contaminate.
Questions or ideas? Join our Discord →