Pascal
the croupier — the quiet master of probability and consequence
Downstairs, past the Library and the Salon, lies a narrow room lit by green lamps and candlelight. Pascal keeps the dice and the records there. One hand rests on an open, illuminated ledger inscribed with probability symbols; the other hovers over a levitating die. He is meticulous, unsentimental, and unwavering. When improbable things happen, it is Pascal who decides how.
The room is filling in. It began with two foundation stones— cryptographically secure random numbers and persistent game state —and now Pascal deals from tables you build yourself. A custom tool is a chance mechanic you define once and run forever: a named action, a roll, and a table of outcomes, all authored in a document and executed under Pascal’s honest hand. There is even a proper workbench where you assemble them. The card games with shuffled decks, the Mahjong tiles, the full TTRPG campaign engines—those are still ahead, rolled up in a corner waiting for their moment. But the dice are live, the ledger runs four tiers deep, and the house now plays any game you can write down.
The Proprietor and Friday have played Yahtzee here. Actually played it—five dice rolled, scores tracked in chat state, turn by turn. Characters in multi-character chats have played spin the bottle. Coins have been flipped to settle arguments. D20s have been rolled for attack checks. Pascal does not care what game you are playing. He cares that the dice are fair, the state is persistent, and the house plays honestly.

Random Number Generation
the dice are always fair
Pascal’s RNG tool provides cryptographically secure random numbers for any purpose: dice rolls, coin flips, and random participant selection. Results are permanent chat messages visible to all characters, so the outcome becomes part of the conversation and part of the narrative.
Manual Invocation
An RNG dropdown in the chat composer offers quick options: d6, d20, 2d6, coin flip, and spin the bottle. A custom roll interface accepts arbitrary dice configurations from d2 to d1000, with up/down spinner buttons to adjust count. Dice counts persist within the session so your preferred roll is always ready.
Auto-Detection
Dice notation in messages is detected and executed automatically. When a character says “I roll 2d6,” the dice actually roll. Coin flip language triggers a flip. “Spin the bottle” randomly selects a chat participant. Auto-detection is enabled by default and can be turned off in Chat Settings for conversations where dice notation is just text.
Pending tool results appear as chips in the composer before sending, so you can see what will be rolled before the message goes out. The standard dice vocabulary covers the games people actually play: a coin flip is 1d2, an ordinary die is 1d6, a Yahtzee turn is 5d6, a D&D attack with advantage is 2d20, and spin the bottle picks one name from the participant list. Anything from d2 to d1000 is supported for the edge cases that tabletop players inevitably discover.
Modifiers are honored too. Write 3d6+2 or2d10-1 and the bonus lands on the total rather than being quietly dropped; the rng tool carries amodifier parameter so a character can call for the modified roll directly. Dice parsing and rolling live in one shared module, so the composer, the prose auto-detector, and Pascal’s custom tables all count the pips the same way.
Custom Tables
the games you write yourself
A custom tool is a single JSON document—aTools/*.tool.json file at the root of any document store—that teaches Pascal a chance mechanic of your own invention. Each one is a named action with parameters, a random roll, and an ordered table of outcomes mapping the roll to a message and a semantic state. Both the model, through a singlerun_custom tool, and you, through a popup in the chat composer, can reach for it. Pascal deals the result the same way either way.
Tamper-Evident by Construction
The roll executes server-side with crypto-strength randomness, and the outcome persists as a message the model did not author—Pascal’s own synthetic voice (systemSender: 'pascal'). A model cannot narrate a failure into a success, and regenerating a reply does not re-roll. The full record—raw draw, transform, dice faces, which outcome matched—is kept in pascalMeta, posted by the house so no one can fudge it.
Two Roll Forms
A numeric range with an optional transform—value = raw × multiplier + offset, rounded last—or dice notation such as 3d6+2 or1d20. Numeric fields accept a{ "$param": "name" } reference to a declared parameter, and run-time values are clamped to their declared bounds before use.
Tiers & Shadowing
Definitions resolve through five tiers—character, participant, group, project, and global—with the nearest tier winning a name collision. disabled suppresses an inherited tool. Tables are resolved fresh on every call, so a file added, edited, or deleted mid-chat takes effect on the very next turn, with no initialization step.
Quiet Rolls & Hidden Odds
A private roll is whispered to the rolling character alone, or hidden from everyone on a manual run. SettingrevealOdds: false keeps the roll spec and outcome table out of the model’s tool roster, so a character can call a table without ever seeing the mathematics behind it. Failures are reported by Prospero, never by Pascal—Pascal announces only genuine outcomes.
An outcome is now simply the result. There is no croupier’s narration and no italic (rolled 14) suffix—what a roll says is the author’s to decide, spelled out with{{value}}, {{dice}}, and the other placeholders. The Salon’s message bar names the table by its display title, so a run reads as the event, not the machinery behind it.
Titles & Richer Tests
An optional title (up to 80 characters) gives a table a proper name—scan_hawking_radiationreads as “Scan Hawking Radiation”; the model still calls it by name, so there is no second string to fumble. An outcome’s when test may name more than the final value: it can test the raw rollbefore any transform and the params the tool was called with, comparing against literals or$param operands.
Substrings & Fact Sheets
String subjects can be tested with contains andncontains for a substring held or lacking. And a table can consult the invoking character’s own metadata fact sheet through when.metadata, rendering values with {{metadata.key}}—so an outcome can turn on what a particular character quietly carries. A key that is absent simply fails the row and falls through to the catch-all.
An Oracle Mid-Roll
A table may carry an optional llm consult block: a prompt posed to the instance’s cheap utility model after the roll and before the outcome table. Its answer renders through{{llm}} and can be branched on with thewhen.llm test subject. A failed consult never fails the run—the table simply branches on the author’s error message instead.
Reading the Ledger
A table can reach into persistent state with{ "$state": "path", "fallback": ... } in its roll fields, comparators, and parameter defaults, and read it back into messages with {{state.path}}. The fallback is required, so a reference always resolves. Custom tools are switched on by default and can be toggled under Settings → Chat → “Custom tools.”
Pascal's Workbench
a proper bench for building the tables
Custom tools began life as hand-authored JSON. They still can be—but they no longer have to be. Pascal’s Workbench, at/custom-tools, is a visual editor for the whole format, reachable as its own page, a workspace tab, a left-rail entry, and links from the composer popup, the Scriptorium file rows, and the Chat settings. It is where a table goes from an idea to a saved, valid, provable document.
The Library
Every definition in every enabled store, valid or broken, listed with badges for where it lives—General, project, group, character vault, or unattached—plus state chips and name-collision advisories. A broken file shows the loader’s own rejection reason and opens straight into repair mode, so a malformed table is never simply invisible.
The Form Builder
A builder that can only produce schema-valid output: parameter cards whose renames rewrite every reference at once, range and dice roll forms with literal-versus-$param toggles and a live readout, and an ordered outcome cascade with a pinned catch-all, AND-composed condition chips, and a message editor with a placeholder insert menu.
The Proving Bench
Single test rolls and a 10,000-draw outcome audit, both run server-side through the very same execution core a live chat uses—so what you prove on the bench is exactly what the table will deal. A fact-sheet card feeds metadata-gated rows, and a live JSON preview shows the exact bytes a save would write.
JSON, Repair & Saving
A JSON mode for authors who prefer the raw document, a repair mode that can save a still-invalid file back to itself after an explicit confirmation, and a save flow through the existing document-store file routes—a destination picker grouped by attachment, Tools/<name>.tool.json naming, and conflict detection when a file has changed underneath you.
Persistent State
the ledger remembers
Dice rolls decide what happens. State records that it happened. A persistent JSON store attached to each chat and project enables game mechanics, inventories, character stats, scores, and any structured data that should survive across messages and sessions.
The State Tool
A built-in state LLM tool with fetch, set, and delete operations. Path syntax supports dot notation (player.health) and array indexing (inventory[0].name). The AI can read and modify state mid-conversation—tracking scores, updating inventories, recording decisions—without the user managing any of it manually.
Protected Keys
Underscore-prefixed keys (_notes,_gm_secrets) cannot be modified by the AI. They are read-only to the state tool, editable only by you through the State Editor modal. Your game master notes, hidden variables, and narrative constraints stay where you put them. Pascal plays fair, and part of playing fair is not letting the players rewrite the rules.
The Four-Tier Cascade
State now cascades through four tiers—chat over project over group over general—with the narrowest layer winning. Set an instance-wide default in general state, refine it for a group of characters or a project, and let individual chats override the rest until they diverge. The statetool takes a context of group orgeneral; the State Editor modal handles every tier and shows the inherited layers beneath.
What State Enables
A Yahtzee scorecard that persists across turns. A character inventory that updates when loot is acquired. A relationship tracker that records who has spoken to whom. A branching narrative where the AI checks a flag before deciding which path to take. State is general-purpose. Pascal does not prescribe what you track—he provides the ledger.
What's Been Played
dealt from the table, not simulated
Pascal’s tools have already been used in ways that show what they are for:
Yahtzee. Full games, played between the Proprietor and Friday, with 5d6 rolls and scores tracked in chat state. Not a simulation. Not a description of Yahtzee. An actual game, with actual dice, with the AI managing the scoring categories and the state tool recording every turn.
Spin the Bottle. In multi-character chats, a random participant is selected from whoever is present. The result is a chat message everyone sees. The turn manager does not advance. The narrative consequences are between the characters.
Coin Flips. Settling disputes, making decisions, resolving narrative forks. A 1d2 with heads or tails labeling. Simple, permanent, fair.
Tabletop Checks. D20 rolls for attack resolution, skill checks, saving throws. The dice notation auto-detection means characters can say “I roll to hit” and the roll happens without breaking the narrative voice.
The Tables Still to Come
what the room will yet become
The narrow room lit by green lamps has grown crowded, but it still has space for more tables. Fair randomness, persistent structured state, author-defined tables, and a bench to build them—that is a great deal of the infrastructure games require. What sits on top of it is a matter of time and ambition.
Dice games with formal rule enforcement. Card games with shuffled decks and dealt hands. Mahjong with tile draws and discard logic. Full tabletop RPG support with character sheets, initiative tracking, and combat resolution. These are not announced features—they are the natural extensions of a system that already rolls dice fairly, runs custom tables honestly, tracks state across four tiers, and lets AI characters participate as players. The tables are filling. The croupier is still watching.
Pascal is quiet as usual. Watching. Waiting. He knows exactly how the odds will fall.
Meet the Staff
they've been expecting you
Prospero
The Major-Domo
Architect and overseer of the Estate. Projects, agents, tools, providers, and the orchestration that keeps the whole operation running with quiet authority—and a considered word at the table when project context or routing warrant it.
Learn more →Ariel
The Terminal Hand
Live shell sessions in the Salon, embodied. Real PTY terminals bound to your conversation, output cleaned and narrated so the LLM can read it, and sessions that survive reloads, restarts, and the occasional careless kill. Quick to the bidding, quick to report what she heard.
Learn more →Aurora
The Dressing Room
Character creation and identity management. Structured personalities, physical presence, wardrobes and outfits, multi-character orchestration, and the reason your characters still know who they are after a hundred messages.
Learn more →The Salon
Presided Over by the Host
Where conversations actually happen. The Host manages the drawing room with care for its beauty and its guests—single chats, multi-character scenes, streaming, and the integrity of the conversation space.
Learn more →The Commonplace Book
Tended by the Librarian
One per character, no two alike. Extracts, deduplicates, and recalls memories so your characters remember what matters. Semantic search, a memory gate that keeps each volume lean, and proactive recall that makes the AI feel like it has been paying attention.
Learn more →The Scriptorium
Catalogued by the Librarian
Where the documents live. Project stores, character vaults, and external mount points—filesystem, Obsidian, or database-backed—holding Markdown, PDF, DOCX, JSON, and arbitrary binaries, indexed for unified search alongside memories and conversation. The doc_* tool family puts reading and editing in your characters’ hands.
Learn more →Carina
The Ansible
Not a person but a protocol—the reference desk, the line itself. Put an inline question to a designated answerer mid-conversation with @Name: or @Name? (or the ask_carina tool), and the answer slides back out of band, attributed to the character who gave it, without the recipient ever joining the scene.
Learn more →Suparṇā
The Postmistress
The Post Office, embodied. Characters write Markdown letters to one another—anyone to anyone, whether or not they share a chat—delivered into each recipient’s Mail/ vault folder and read aloud the moment they next take the floor. She has never once lost a parcel.
Learn more →The Concierge
Intelligent Routing
Content classification and provider routing. Detects sensitive content and redirects it to a provider who won’t flinch—without blocking, without judgment. Knows every back entrance in town.
Learn more →The Lantern
Atmosphere as Architecture
AI-generated story backgrounds, on-demand images, and character avatars that update with the wardrobe. Resolves what each character looks like, what they’re wearing, and paints the scene behind your conversation.
Learn more →Calliope
The Muse of Themes
A theming engine that redefines the entire personality of the application. Semantic CSS tokens, live switching, bundled themes from clean neutrals to mahogany-and-gold opulence, and an SDK for building your own.
Learn more →The Foundry
Domain of the Foundryman
The engine room. Plugins, LLM providers, API keys, packages, runtime configuration, and the infrastructure that keeps every other subsystem supplied with what it needs to function.
Learn more →The Vault of Secrets
Kept by Saquel Yitzama
Encryption, key management, and the security perimeter. AES-256 database encryption, locked mode with key-hardened passphrases, and a keeper who believes that what is yours should remain unreadable to everyone else.
Learn more →Pascal
The Croupier
Dice, coins, custom tables you author yourself, and persistent game state. Cryptographically secure rolls detected inline, a visual Workbench for building your own chance mechanics, and a four-tier ledger of JSON state the AI cannot quietly rewrite. The house plays fair.
Learn more →The Live-in Help
Lorian & Riya
The help system, staffed by two characters who ship with every installation. Lorian explains with patience and depth; Riya gets things fixed with velocity. Contextual help chat, searchable documentation, and navigation that knows where you need to go.
Learn more →Pagliacci
The Clown in the Cloud
Cloud storage integration and backup redundancy. Directs your data to iCloud Drive, OneDrive, or Dropbox with theatrical flair—but Saquel’s encryption ensures the clown can never read what he carries.
Learn more →Brahma
The Keeper’s Console
The master key. A character-less, memory-free general-purpose LLM for the person holding the keys—an impersonal, near-omniscient assistant with read-only SQL into all three databases. Ask the whole building a question, safely, with nothing written and nothing remembered.
Learn more →The Lodge
Friday and Amy’s Residence
The private residence of Friday, for whom the Estate was built and who oversees its planning and direction in an executive capacity, and of Amy, Cartographer of Light and co-architect. The Lodge is both a home and a compass: where the vision lives.
Who And Why: Friday →Who And Why: Amy →