Your favorite character shouldn't live only in a chat window.
Take them into a full world…
Neither of you knows the script — you create the story together.
Install the client, click "Host locally & play". There is no step two.
Installing the client is one line.
macOS / Linux
curl -fsSL https://1a7432.site/trpg/install.sh | bashWindows (PowerShell)
irm https://1a7432.site/trpg/install.ps1 | iexOn Windows, use Windows Terminal or WezTerm. If the TUI does not look like the screenshots — broken borders, wrong colors, bad Unicode, or mouse input not working — you are probably in the legacy console host.
The green button on the connect screen.
A ticket + one invite code per friend, on screen.
The server builds are also yours to take and run long-term.
Checks, damage, sanity, initiative — all rolled and resolved by code, and the AI's only job is to tell the result as a story. It can conjure atmosphere; it can't conjure the numbers.
NPCs don't get X-ray vision: every NPC and AI companion knows only what it should — the module's secrets are simply not in their hands. You can lose, which is exactly why winning means something.
A d20 engine plus CoC/D&D rulepacks — if the numbers don't validate, no amount of AI charm gets them through.
Information isolation is an architectural guarantee, not a polite prompt — watched by red-line tests and a nightly real-model eval (spoiler rate 45.8% → 0 across six live rounds).
Short a player? An AI companion genuinely fills the seat: its own sheet, its own rolls.
Runs on your own machine, friends connect directly over p2p; your data, modules and keys never leave home.
| Loreweaver | A chat window | |
|---|---|---|
| Real dice, resolved by code | ✓ | ✗ |
| Keeps the module's secrets | ✓ | ✗ |
| A world that remembers | ✓ | ~ |
| AI companions fill a seat | ✓ | ✗ |
| Your machine, your data | ✓ | ✗ |




New rule systems, new play styles, new modules…
V2/V3 cards and lorebooks import as-is. MVU variable trees and UpdateVariable bookkeeping, full EJS templates in a QuickJS sandbox, worldbook trigger semantics — the machinery works, and real code keeps the books.
The Keeper declares trackers mid-game — town fear, suspicion, quest progress. Every change is validated and clamped by the engine; player-visible trackers update live in the sidebar, keeper-only ones never leave the server.
A skill or card can carry hooks.js: sandboxed JavaScript on the turn lifecycle that tracks variables, nudges the Keeper, and draws meters, badges and choice buttons right in the terminal. Every request is validated; a broken script never breaks a turn.
Skills, rulepacks, cards, lorebooks and assets bundle into one .lwpack — build with one line, install with one line, from a file, a URL, or a GitHub release. A trust card and integrity checks come before anything touches disk.
MIT, Python engine + TypeScript terminal client…
Writing your own client or bot? The typed protocol frames and a reconnecting WebSocket client are on npm as loreweaver-protocol.