# Rin Chat Guide > The Rin Chat user guide, as shipped in version 0.7.6. It's generated from the app's own Guide screen on every release, so it matches what the app does. "Settings → …" names a place in the app's Settings. ## Getting started Rin Chat is a local-first roleplay chat app. Your characters, chats and API keys are stored **encrypted on this device** and are never uploaded. What does leave your machine: the requests you send to *your* AI provider; anonymous usage counts (Usage statistics lists every field); a version check against `rin.chat` at launch; and — only when you use the feature that needs it — card downloads from aicharactercards.com (importing by ID or link); with a linked aicharactercards.com account and your yes, a daily check of the cards you got from there (card IDs and a fingerprint of each card's name, description, personality and scenario) for updates, ratings and reviews; voice runtime files from `rin.chat` and voice/embedding models from `huggingface.co` (first time you enable text-to-speech or vector memory), and the webpage you paste into the forge's attach-a-page. None of these carry your chats, cards or keys. You set up a local account with a password at first run; see Account & security. **The app at a glance.** Everything is reached from the title bar: **Characters** (your library, and where chats start — its **Personas** row is who *you* are), **Lorebooks** (reusable lore), **Card Forge** (build a character, a lorebook, a generator or a document style by talking it through), and **Guide** (this page). To their right: the **☰** menu, the **gear** for Settings, a **phone** icon for reading chats on your phone, and a **search** button — `Ctrl`+`K` from anywhere. ▶ Take the app tour — the two-minute look around, whenever you want it. **Three steps to your first chat:** 1. Add a provider in Settings → LLM Providers — an OpenAI-compatible endpoint (LM Studio, Ollama, KoboldCpp, OpenRouter, NanoGPT, etc.) with its URL and API key. Then pick your **model** in Settings → Generation Configs, which is where a provider and a model are paired up. 2. Go to **Characters**. Two characters are already there to try — **Jinx Wilder** and the **Adventure Mode Narrator**. Add your own by importing a card (drag in a `.json`/`.png`, or use Import) or creating one with **+ New**. 3. Open the character → **New chat** → type a message and press `Enter`. > **Tip:** No provider yet? A local one like LM Studio or Ollama needs no API key — just point the URL at it and pick a model. **Questions, bug reports, or just want to hang out?** Join the community Discord: discord.rin.chat. ## Troubleshooting & FAQ The questions that come up most, and what to check first. **I have a ChatGPT / Claude subscription — can I use that?** No. A consumer subscription only covers those companies' own apps. Rin Chat needs **API access**, which is billed separately: you sign up with a provider, create an **API key** (a long secret string you paste into Settings → LLM Providers), and pay per message instead of monthly. Providers that resell many models behind one key — OpenRouter, NanoGPT — are the easiest start. The alternative is free: run a model on your own machine with LM Studio, Ollama or KoboldCpp, where there is no key and no bill. **Where is everything stored?** By default in `Documents/rin-chat//`. You can move it in Settings → Data & Backup. **The model returns nothing, or only thinking.** A reasoning model spends its token budget thinking before it writes. Extra headroom is only added when you pick an explicit effort tier — on *Auto* there is none. Set an effort level in the config's *Reasoning* section, or raise **Max response tokens** — both in Settings → Generation Configs. **Replies get cut off mid-sentence.** Auto-continue rescues a reply that hit the technical token cap, but it *only runs while Length is set to Auto* — with Short/Medium/Long, hitting the cap is treated as the limit you asked for. Either switch Length to Auto, or raise the cap. **An error number came back:** - **401 / 403**: the API key is missing, wrong, or lacks access to that model. - **404**: the model id doesn't exist on that endpoint. The model field is free text; check the spelling against the provider's list. - **402**: out of credit. A brand-new key with no money on the account returns this. - **429**: rate-limited, or too many requests too quickly. - **400**: often the prompt is longer than the model's context window; lower **Max context tokens** in Settings → Generation Configs. - **Connection refused / failed to fetch**: a local server (LM Studio, Ollama, KoboldCpp) isn't running, or the URL/port is wrong. > **Tip:** Use **Test** in Settings → LLM Providers, or ask the same question in Direct Chat — it sends no card, persona or lore, so a clean answer there means the problem is your card or settings, not the provider. **My lorebook entry never triggers.** Keyword scanning reads only the **last 4 messages** by default — a keyword mentioned earlier has already scrolled out of the scan window. Give the entry a keyword that keeps recurring, raise that entry's own scan depth, or set it to always-on. Check what actually fired in **Session info → Lorebook**. **Keyboard shortcuts do nothing.** Shortcuts with no modifier (`E`, `C`, `←`, `→`, `/`, `?`) are deliberately ignored while your cursor is in a text box, so typing can't fire them. Click outside the message box first. **There's no Regenerate button on an older reply.** Regenerate, swipes and Continue act on the *last* message only — rewriting an older one would strand every reply written against it. Delete back to it (Shift-click Delete removes that message and everything after), or branch from it. **Where is my data, and can I move it?** Everything lives in the app's data folder, which you can relocate in Settings → Data & Backup. To move to another computer, export a full backup there and restore it on the other machine — see Export, import & backup for what the file does and does not protect. **I forgot my password.** There's no master reset — the vault key is derived from your password. Two things can get you back in, and both must exist *before* you're locked out: your **recovery kit**, or an **AICC account linked while unlocked**. With neither, the data cannot be decrypted by anyone, including us. Set one up now if you haven't: Account & security. **My browser says the connection isn't private (phone remote).** Expected — the desktop serves HTTPS with a certificate it generated itself, which no public authority has signed. The traffic is still encrypted. Compare the fingerprint shown in Settings → Remote access and continue. Phone remote access covers pairing problems. **Something looks wrong / I want to report a bug.** Session info → Exchanges shows the exact request and response (your API key redacted) — that, and what you expected instead, is almost always enough to diagnose it. # Characters & cards ## Characters & the library The **Characters** page is your card library. Click a card to open its editor, or use its **Chat ▾** button to start or resume a chat without leaving the grid. [Screenshot] The library toolbar — most of it is unlabelled. Left of the search box: **New character**, **Card Forge**, **Import cards**. Right of **Sort order & filters**: the three view modes — **grid**, **list** and **field checklist** (which fields each card fills in) — then **save this view**, **library statistics**, **library tools** (find duplicates / placeholder art), and **select multiple cards** for bulk actions. **Getting cards in.** Drag `.json` or `.png` files anywhere onto the page, or use the **Import** button (the arrow-into-tray icon): - **Import file(s)…**: one or many cards at once. - **From URL or card ID…**: paste an AICC card ID (`AICC/###/###`), an `aicharactercards.com/cards/…` link, a bare card number, or any direct link to a card file. - **Import folder…**: scans a folder (and its subfolders) and imports every card in it. SillyTavern V1/V2/V3 cards convert to the app's format on import; native Rin Chat cards come back in unchanged. Imports land in whichever folder you're currently viewing. Above 50 files the import runs as a locked, full-screen wizard so it isn't interleaved with the rest of the app. **Sharing a card you made.** With an aicharactercards.com account linked (Settings → Account & Security), the card editor's **Import / Export → Upload** saves you the round trip of exporting a file and finding it again in a browser. It sends the card to the site and opens the site's **submit form** with it already attached — you write the title, summary and description there and submit it, exactly as you would on the site. Nothing is posted until you do, and then it goes to the moderators like any other submission. Do it again with the *same* card later and the app opens the **edit form for the listing you already have** instead of a blank submit form — so you update that card rather than posting a second one, and you can revise the listing text at the same time. Your ratings, reviews and download count carry over. One thing worth knowing: once you submit that edit, the card comes off the site until a moderator approves the new version. That's how edits work there, and the app says so before it opens the form. Anyone who already downloaded it keeps their copy. **My listings** (in the ☰ menu) is where you see what you've posted and where each card stands — waiting on a moderator, published, or sent back needing changes, with the reason when a moderator has shared one. A card you upload appears there as soon as you submit the form, and the character itself picks up an **In review** badge in its editor. > **Tip:** **Coming from SillyTavern?** Cards and their embedded lorebooks come across; standalone lorebook JSON imports too. **Personas** are just cards here, so import yours like any character and set its **Card type** (in the editor header) to **User Persona**. **Chat logs don't** come across — treat old chats as read-only history in your old app. **Duplicates are caught for you.** A card whose content already exists is skipped (you can still **Import anyway**). A card that matches an existing one by *name + creator* but differs is listed next to the card it matched, with its art and folder — **Open** or **Compare** them, choose **Replace** (overwrites the existing card with the imported one, content and art, and keeps its folder, tags, notes and chats), **New** or **Skip** for each card, then **Apply**. A placeholder creator such as "anonymous" or "unknown" isn't treated as a match. Tags that differ only by case, spacing or dashes are folded onto the spelling you already use. The import menu's **Import log** records what happened to every card you've imported. **Organizing.** - **Folders**: create, rename, nest (up to four levels), and drag cards or whole folders between them. A folder's count includes its subfolders. Right-click a folder for **Move to top level**, **Rename**, **New subfolder** and **Delete folder** — deleting a folder deletes its subfolders but never its cards; they just become unfiled. - **Hide a folder**: with a folder open, the eye button toggles **Hidden from All cards**. Its cards (and its subfolders') stay reachable in the folder itself but disappear from All cards — handy for archives and NSFW shelves. A hidden folder shows a small crossed-out eye in the sidebar, and its cards still appear in the Personas view, the global search (Ctrl+K), and All chats. - **Folder chips**: in views that aren't a folder (Personas, search results), a card filed somewhere shows a small 📁 chip naming its folder; click it to jump there. - **Show nested cards**: with a folder open, this also lists its subfolders' cards, in a second section below its own. - **Tags**: click a tag chip to filter by it, **Shift-click to exclude** it. With two or more included tags, the **ALL of / ANY of** toggle switches between AND and OR. **Manage tags** (sidebar) renames, merges, re-cases, colors and bulk-assigns tags across the whole library — including suggested merges for near-duplicate spellings. - **Favorites**: the ★ on a card. **Bulk Organize** (sidebar) moves, exports or deletes many cards at once, by hand-picking them or by tag. **Finding things.** - **Search** matches **name, creator and tags**. Prefix with `f:` to search inside the card instead — display name, name, creator, tags, general description, appearance, core personality, behavior rules, background/history, world/setting, creator notes and your private card note. It does *not* reach greetings, example dialogue, prompts or the lorebook. `Ctrl`+`K` opens the same search from anywhere, including inside a chat. - **Sort:** Recently updated · Recently chatted · Newest imported · Name (A–Z) · **Largest (tokens)** · **Least complete**. The last two have to read every card in the current view before they can rank it, so a big library shows a *Measuring N more cards…* line for a moment; after that it's instant. - **Quick filters** in the same dropdown: `# Untagged only` and `Missing art only` (which also counts cards wearing the app's own placeholder). - **Views:** grid, list, or **field checklist** — the checklist shows *n/m fields filled* per card and which fields those are. Pair it with *Least complete* to find the half-empty cards in a big import. - **Saved views**: the bookmark button saves the current search + filters + sort under a name; it appears as a chip you can click to re-apply, or `×` to delete. - **Default view**: right-click any sidebar row (All cards, Favorites or a folder) → **Set as default view**. A pin marks it and the library opens there. - **All chats** lists every chat across all of your characters, newest first — the search box filters it by chat title or character name, and a click opens the chat. **Right-click a card** for New chat, Edit, **Edit in Card Forge**, **New card image** (with an image provider set up), **Duplicate**, the four export formats, and Delete. **Working on many cards at once.** The select button (top right) turns on selection mode: click cards to select, Shift-click for a range, then **Assign Tag**, **Assign Folder**, **Compare** (2–3 cards, field by field), or **Delete**. **Library tools** (wrench) run over whatever you're currently viewing — the open folder and its subfolders, Favorites, Not in Folder, or everything: - **Find duplicate cards…**: groups cards by content. *Identical* means byte-for-byte the same, so keeping one is safe; *Versions* share a name and creator but differ, so compare them first. Each row shows when the card was added and how many chats it has. **Compare** → **Merge into one card** keeps the card you pick: choose which version of each differing field (and the image) goes into it, and the other card's chats move over before it's deleted. Imported a batch of updated cards as new by mistake? **Replace older versions** does every pair at once: the card added first takes the newer one's content and image and keeps its chats, folder and notes. Open a card from the results and Back returns you to them. - **Find placeholder artwork…**: finds cards wearing a stock avatar or sharing a picture. Nothing is ticked for you, because a cast of characters sharing one image is normal. Clearing artwork **can't be undone**; the cards fall back to the app placeholder and show up under *Missing art*, ready to generate. **Library statistics** (chart icon) counts favorites, unfiled, missing art, never chatted, creators and top tags — and each underlined number is a link that applies that filter. > **Tip:** Deleting a card asks whether to delete its chats too. Shift-clicking **Delete card** in the right-click menu skips the confirmation *and* deletes the chats — so don't hold Shift out of habit. ## The AICC-Chat card format Internally, every card uses the app's own **AICC-Chat** format (`spec_version "1.0"`, `metadata.card_format "AICC-Chat"`). Instead of a few large text blobs like SillyTavern, it splits the character into focused fields. This gives the model cleaner, more consistent context and lets you edit one aspect without disturbing the rest. **The fields, and what to put in each:** - **Name**: the character's identity; this is what the model sees as `{{char}}`. - **Display name** (`char_ui_name`) — an optional label shown in the library, search, and chat. It's *never* sent to the model (falls back to Name), so it can be a tagline or a shorter nickname. It's also what the library's plain search matches, and what **Duplicate** appends `(copy)` to. - **General description**: the high-level concept of *who* they are (role, premise) — not their looks. - **Appearance**: physical traits, clothing, body language, notable visual details. - **Personality**: split into: *Core* (traits + how they act toward you), *Behavior rules* (explicit "always/never" rules, shown as a bulleted list), and *Speech style* (tone, verbosity, format, and recurring patterns — how they talk). - **Background / history**: backstory, past events, relationships, motivations. - **World / setting**: the world, setting, and current situation. - **Dialogue**: *Greetings* (the first is the opening message; the rest are swipeable alternates), *Example dialogue* (sample exchanges that teach the voice — used more while the chat is short), and *Group-only greetings*. - **Prompts**: the card's own *System prompt*, *Post-history instructions* (the "jailbreak", placed after the chat), and a *Depth prompt* (a note injected a set number of messages from the end, as a chosen role). - **Lorebook**: the card's own lore (keyword-triggered entries; same engine as the shared ones — see Lorebooks). - **Generators**: AICC-native. Embedded `[Create …]` randomizers the card carries with it (see Generators). - **Metadata**: creator, creator notes/tips, version, tags, and the two image prefixes that keep generated art on-model. Card art (assets) is carried along verbatim. Metadata also holds **Spoiler mode**: for story and game cards whose fields give the plot away. With it on, anyone who opens the card finds every section folded (except Metadata) and is asked before one opens. The name, image, tags and notes stay visible, and it never changes what the model receives. - **Features** (`metadata.features`) — *AICC-native* app-feature flags the card carries, like `card_type` (set via the editor's **Card type** dropdown and the **Adventure character sheet** checkbox under Metadata). Not a SillyTavern field: ST exports round-trip it in a namespaced `extensions.aicc` spot that ST tools ignore, and ST's own extensions data is never read as flags. > **Tip:** How fields reach the model: the context template assembles labeled sections (Description, Appearance, Personality, Behavior rules, Speech style, Background, Setting, Example dialogue). You can also reference them in prompts/macros: `{{appearance}}`, `{{corePersonality}}`, `{{behaviorRules}}`, `{{speechStyle}}`, `{{backgroundHistory}}`, `{{worldSetting}}`, `{{dialogueExamples}}`. **Clickable choices and interactive replies** — buttons, inputs, timers, locked options and documents — are their own section: Choices & interactive replies. They work on any card, not just Adventure Mode. **How it differs from SillyTavern** - ST is *flat*: description, personality, and scenario are each single blobs. AICC pulls **Appearance**, **Behavior rules**, **Speech style**, **Background/history**, and **World/setting** into their own fields. - **Display name**, **Generators**, the **image prefixes** and **Features** are AICC-only. - Everything else maps one-to-one: greetings, example dialogue, system prompt, post-history, depth prompt, the character lorebook, tags, creator, version, and card art. **Importing / conversion** - Any card you import (ST V1/V2/V3, JSON or PNG) is converted to this shape *on load*. ST's flat fields map straight in — description → general description, personality → personality core, scenario → world/setting, first message + alternates → greetings, example messages → example dialogue, and the character lorebook, prompts, depth prompt, tags, creator, and art all carry over. (A `nickname` becomes the display name if present.) - The fields ST doesn't separate — **Appearance, Background/history, Behavior rules, Speech style** — start *empty*. That's exactly what AI Restructure fills. - Re-importing is safe: a card that's already in the native AICC format passes through unchanged. **AI Restructure** - In the editor, it takes the card's current prose (usually a flat import where everything's dumped into description/personality/setting) and, using your active provider, *redistributes* it into the structured fields — pulling looks into Appearance, backstory into Background, and behavior rules + speech style out of the personality blob. - It only **moves and lightly rephrases existing content — it never invents facts**, leaves unsupported fields empty, and preserves `{{user}}`/`{{char}}` macros. - It touches only the prose fields; greetings, example dialogue, prompts, and the lorebook are left as-is. You review it section by section and tick what to take. **Images** - The editor's **Images** section holds the card's own pictures in three kinds: **Expressions** (sprites named after a feeling — `joy`, `anger`, `neutral`; `joy-2` is a second picture for joy), **Pictures** (with a description of what each shows) and **Backgrounds**. - **Import sprite pack** takes a sprite pack — a zip, or images named `joy.png`, `anger.png`… — and replaces expressions of the same name. **Export sprite pack** saves them back out the same way. A sprite pack dropped on the library asks which card it's for. - **Add from link** downloads the picture into the card straight away, so the card carries it rather than pointing at the website — you can also paste an image into that box. - Every image is converted to WebP and scaled down to at most 2048 pixels (backgrounds 1920) as it's added, so a card stays light; animated images are kept as they are. There's no limit, but past 25 MB the card can't go into a bundle. - They travel with the card in a bundle (`.aicc` / `.charx`) — not in a PNG or JSON export. - **In chat**, a card with expressions shows the character's current one in a panel beside the chat (in a group, everyone with sprites; whoever spoke last stands out). The buttons under it switch this chat to **visual novel** style — a stage across the top with the sprites and the card's background, and the chat below it — or hide them. The default is in Settings → Chat display → Character expressions. - The expression is picked from each reply: offline by default, or with an emotion classifier (a one-time ~70 MB download), set in **Choosing the expression**. A line `[[expression: joy]]` in a reply or a greeting always wins and isn't shown. When nothing is clear the card shows `neutral`, or its first expression. - `[[img: name]]` (or `[[img: name | caption]]`) shows one of the card's pictures in the message — the first one in a reply, and not the same one again within a few messages. `[[background: name]]` switches the chat background to one of the card's. Card authors can write them in greetings and lorebook entries, or with the macros `{{img::name}}`, `{{background::name}}` and `{{expression::name}}`. - Tick **Tell the AI about these images** in the Images section and the AI learns the names and descriptions, and uses the pictures, backgrounds and expressions itself. - A lorebook entry can carry a **Picture** (in the entry's settings): whenever the entry fires, that picture opens the reply. A choice can show one too — `[[choice: Play the tarot | img tarot]]` makes a picture tile — and a picture inside a `[[reveal:]]` stays hidden until it's opened. - **Generate** in each group of the Images section makes one with your image provider, using the card's image prompt prefix; keep it or try again. - An imported card whose images are links to a website shows a button instead of loading them: click it and they're saved into the card (converted, kept offline), and nothing is loaded from that site again. **Exporting** - **Rin Chat Format** (JSON or PNG card) keeps every character field, including the ones SillyTavern has nowhere to put. The PNG re-imports losslessly, so it's the format to share with other Rin Chat users. It deliberately leaves behind the things that are about *your* copy rather than the character: your **private card notes**, its folder and its favorite flag. Tags do travel. - **Bundle (.aicc / .charx)** is one file holding the card, its art and — if you tick them — the document styles it uses and your shared lorebooks. (A card's *own* lorebook is always inside the card.) Select several cards in the library and **Export bundle** to send a whole cast as one file; importing it puts them in a new folder named after the bundle. A one-card bundle can be saved as `.charx`, which SillyTavern and RisuAI also open. Chats are never included, and a bundle can be at most 25 MB. Double-click an `.aicc` file to import it. - **SillyTavern Format** is *lossy* — ST has nowhere to put the extra fields, so each flat ST field is rebuilt with the split-out fields **merged back in under labels**: - ST `description` = General description + (labeled) Appearance - ST `personality` = Personality core + (labeled) Behavior rules + (labeled) Speech style - ST `scenario` = World / setting + (labeled) Background / history - Greetings, example dialogue, prompts, depth prompt, the lorebook, tags, creator, version, and art map straight across. **Dropped by the ST export:** embedded generators, both image prefixes, and the display name — unless the card originally came from an ST card that used `nickname`, in which case it's written back there. > **Tip:** Export as **Rin Chat Format** to keep the character intact — the SillyTavern export merges the structure back into flat text and drops the AICC-only fields. A card with no artwork still exports a valid PNG; the app's placeholder is embedded for you. ## Choices & interactive replies Any card can give the player buttons, inputs and other interactive bits in a reply — not just Adventure Mode cards. These are a Rin Chat feature written into the card's text (part of the AICC format); in other apps the lines just show as plain text. Each element goes on a line of its own. **Clickable choices** A line that holds only `[[choice: …]]` shows as a button right where you wrote it, and clicking it sends that text as the player's message. Put a few in your greeting and example dialogues and the model picks up the pattern; you can group them under headings to make a menu: ``` *The innkeeper wipes the bar and waits.* **Explore** [[choice: Search the cellar]] [[choice: Climb to the attic]] **Talk** [[choice: Ask about the missing map]] ``` - Only the latest reply's buttons work. Earlier ones stay visible, grayed out, as a record of what was offered. - A choice has to be on a line of its own. `[[choice: …]]` in the middle of a sentence stays as text, so you can still write about the syntax. - A choice can roll one of the card's generators when it's picked: `[[choice: Draw a card | gen Tarot]]`. Stat changes and dice need an Adventure Mode card (Writing an adventure card). **More interactive elements** — same rule, each on a line of its own, on any card: - **Timed choice**: `[[choice: Freeze | timer 15]]` puts a countdown under the reply; if you don't pick in time, *that* choice is sent for you. The clock only starts once the choices are on screen, adds time for how long the reply is to read, and pauses while you type or with its Pause button. Don't want it? Settings → Chat Display → Timed choices. - **Ask**: `[[ask: What do you name the dragon? | as dragon]]` shows a text box; your answer is sent as your message, and with `as` it's also saved, so the card can use `{{getvar::dragon}}` from then on. - **Choices that remember**: `[[choice: Take the brass key | set has_key = true]]` saves a story variable when it's picked (`+=` and `-=` count up and down: `set coins -= 5`; several at once: `set a = 1, b = 2`). The model is told what changed, and the card can read it with `{{getvar::has_key}}`. - **Choices you finish yourself**: `[[choice: Ask about the map | insert I catch up and ask about ]]` puts its text in your message box instead of sending it, so you can complete the sentence before you send. The button shows a pencil. Everything after `insert` is dropped in exactly as written. - **Locked choices**: `[[choice: Open the chest | if has_key | hint You need a key]]` shows with a lock, and the hint, until the condition holds — then it opens by itself. Conditions: `has_key`, `!has_key`, `coins >= 5`, `door == open`, `inventory contains rope`, joined with `&&` or `||`. Add `| hide` to keep a choice secret until it's available. On an Adventure card, a condition can read the character sheet too (`if gold >= 10`). - **The story can change variables too**: a reply line `[[set: door = open]]` is applied by the app and never shown — for when the character hands something over or a door opens without a choice. Regenerating, swiping or deleting that reply puts the variables back. - **Tip for game cards**: build progress from what the *player* does, not from the model remembering a rule. A vault that opens on `if shard_ember && password == whiskers && shard_echo` — each part set by the player's own choice or answer — works however loosely the model plays along. - **Pick several**: `[[pick 2: Sword | Shield | Bow | Lantern]]` lets you tick exactly two, then Confirm. Leave out the number to allow any amount. - **Reveal**: a folded note you click open. Nothing is sent, and the model isn't asked anything — good for letters, clues and item descriptions: ``` [[reveal: Read the letter]] *The ink is smudged.* Meet me at the old mill at midnight. Come alone. [[/reveal]] ``` **Documents** show a block as a real object: `paper`, `newspaper`, `terminal` or `sms`, with an optional title after a `|`. In `sms`, write one `Name: message` per line; your own lines appear on the right. ``` [[doc: sms | Kisa]] Kisa: you up? {{user}}: now I am Kisa: come outside. look up. [[/doc]] ``` You can make your own document styles in Settings → Document Styles: HTML with placeholders for where the text goes ({{title}}, {{content}}, and a line template for message threads), plus CSS for that style alone. Duplicate a built-in to start from its real template. A card can carry its own styles too, in the card editor's Document styles section, and they work in its chats. A style nobody has shows plain. Reveal and documents also work in your own messages; the other elements only in replies. **Status bars** A small gauge, drawn wherever you write it. It's the only element that doesn't need a line of its own, so it can sit in a sentence or at the end of a status line. Either side can be a number or the name of a story variable, so both ends can move as the story goes: ``` Hunger: [[bar: hunger / 10]] Rations: [[bar: rations / capacity]] reads both from variables Heat: [[bar: heat / 10 | 20]] 20 cells wide instead of 10 Fever: [[bar: fever / 10 | invert]] full is the BAD end ``` - **What fills it** is the first number over the second. Past the top it's simply full, and below zero it's empty. A variable that isn't set yet draws an empty bar, so turn one looks right; a *second* number that can't be read is a mistake in the card, so the line stays on screen as written for you to spot. - **What drives the color** is that same fraction, not the variable's name: over 60% draws in the theme's accent, 60% or under turns orange, 25% or under turns red. That assumes full is the good news: health, fuel, trust. - **For a bar you want low** (infection, suspicion, heat), add `| invert` and the colors read from the other end, so 9 out of 10 shows nine lit cells in red. It only changes the color; the fill still follows the value. The width and `invert` can come in either order. - **The bar itself is never sent to the model**: the app draws it from the text. The text around it *is* sent, though, so to keep a status line out of the model's view entirely, wrap it in `[co]…[/co]` or add it with a display-only regex script. For a status line under every reply rather than one the card writes by hand, the card editor's Regex section has **Add text to every message**. It builds the pattern and ends it with a `[co]…[/co]` pair, with the caret between the tags: what you write there is in the chat and out of the model's view. It writes into the message as it arrives, so you can edit it with the ordinary Edit action, and writing the sides as macros, `[[bar: {{.hunger}} / 10]]`, freezes the numbers to that turn instead of following the variables afterwards (Regex scripts). > **Tip:** For the logic behind these — variables, `{{if}}`, `{{calc}}`, `{{switch}}` and meters — see Variables & macros. ## The card editor The editor uses the app's structured card format — separate fields for appearance, core personality, behavior rules, speech style, background, world, greetings, example dialogue and prompts instead of one big blob (see the card format). Edits **auto-save**; leaving the editor flushes anything still pending. A brand-new character from **+ New** is a draft — it isn't written to your library until you actually change something (or set an image, or open a chat/the Forge from it). **The header block** holds the card's identity: artwork (click it to replace, or **✨ Generate image**), **Name** (what the model sees as `{{char}}`), **Display name** (shown in the library, search and chat — the model still gets the plain Name), **Private Card Notes**, **Character version**, **Folder**, and **Tags**. **Two kinds of notes, and they behave differently:** *Private Card Notes* are yours — never sent to the model, never included in an export. *Public Creator Notes* (under Metadata) travel with the card, so whoever you share it with sees them. Which one your library tiles show is a setting in Settings → Chat Display. **The section rail** down the side lists every section with a filled or hollow dot and its **token cost**; click one to jump to it, or use Expand all / Collapse all. The number at the right of the bar above the buttons is the card's size, counted with the tokenizer of the model you're using: the **total**, then — lighter — how much of it is **permanent**: the name, description, personality, scenario and character's note, which stay in the prompt for the whole chat. The rest of the total is the first message, the system prompt, post-history instructions and example dialogue. If the card has always-on lorebook entries, **+N lore** follows: they're sent every turn, but aren't part of the total. Hover it for the breakdown field by field. A model's tokenizer downloads once, the first time it's needed — until it's ready the number is an estimate and starts with ~. Sections always open on the same defaults; that's deliberate, not a forgotten setting. [Screenshot] The section rail — a filled dot means the section has content; a plain number is what it costs in every prompt, and a "+N" (Dialogue, Lorebook) is what it adds only some of the time. **Every long field** shows its own token estimate and carries two buttons: **✨ Edit with AI** (describe a change, review the proposal, accept or retry — with one-tap quick prompts you can manage) and **⤢** for a full-screen editor. Highlight text inside any field and right-click for formatting plus **Edit selection with AI**, which rewrites just that passage. List fields (greetings, behavior rules, speech patterns, example dialogue) can be reordered by dragging or with ▲/▼ — **the first greeting is the one a new chat opens with**, so reordering is how you change the opener. **Metadata** also holds **Image prompt prefix** and **Image negative prefix** — fixed visual traits (or a LoRA tag) added to every picture generated for this character, which is what makes two images look like the same person — and the **Adventure character sheet** checkbox for persona cards. The **Card type** dropdown in the header (Character / User Persona / Adventure Mode Game Master) travels with the card; *Adventure Mode Game Master* starts its chats in Adventure mode automatically. **Lorebook** and **Generators** are the card's own lore entries and `[Create …]` randomizers. Attaching a generator embeds a copy that travels with the card. Edit changes that copy only; use Save a copy to library to add it to your Generators library. **Tools ▾** is where the heavy machinery lives: [Screenshot] The **Tools** menu. - **AI Restructure**: splits a flat import's merged prose into the structured fields: appearance out of the description, background out of the setting, behavior rules and speech style out of the personality. It only moves and lightly rephrases what's already there. You get a **before/after review with a checkbox per section**; unticked sections keep their current text, and greetings, example dialogue, prompts and the lorebook are never touched. This calls your active provider, so on a paid API it costs tokens. - **History**: version history, and the app's undo for card edits. A checkpoint is saved when you start editing, periodically while you work, when you leave, and before anything that rewrites a lot at once. **Restore** opens a before/after review where you pick which fields come back — and your current state is checkpointed first, so a restore is itself undoable. - **Find & replace**: literal text (not a pattern) across every field of this card plus your private notes, with a live match count and optional case sensitivity. Undo via History. - **Import & overwrite**: load a newer `.png`/`.json` of *this same character* and pick, field by field, what to take from it. Changed fields start ticked; a PNG can also bring its artwork. - **Preview prompt**: exactly what the model receives for this card, and what it costs. - **Duplicate**: a full copy with a new id and its art. `(copy)` is appended to the *display name* only, so the model still sees the plain name. - **View JSON**: read-only, including unsaved edits, with a Copy button. - **Delete character**: asks whether to delete its chats too. **Export ▾** writes the card as it is on screen. Use **Rin Chat Format** to keep everything; **SillyTavern Format** for other apps (see the card format section for what that loses). The **Card health check** callout at the top flags common card problems. Dismiss a single tip with its `✕`, all of them with **Dismiss all**, or turn the whole thing off (or bring dismissed tips back) in Settings → Diagnostics. > **Tip:** Before you accept an AI rewrite of a field, remember it can't blank content that's already there — an empty proposal is refused. But it *can* shorten one. Check the before/after, not just the after. ## Card Forge (build characters, lorebooks and more with an AI guide) **Card Forge** is a different way to make a character: instead of filling in fields, you **talk it through with a guide** — by default **Rin** — and when you're ready she writes the card from the conversation. Open it from the title bar (or the **☰** menu if you unpin it in Settings → Sizing & Layout → Header buttons), from the wand button on the **Characters** page, from a card's right-click menu (**Edit in Card Forge**), or from **✨ Card Forge** in the card editor. **Not only characters.** A new session opens on **What are you making?**: **Character card**, **User persona** (a card that describes you, the one you play as), **Lorebook**, **Generator** or **Document style**. Each has **New**; the last three also have **Open…**, to work on one you already have. You can also just start typing, which makes it a character session. The libraries open the same way: the guide button on a book in **Lorebooks** (*Work on this lorebook with the guide*), on a generator, or on a document style starts a session already holding it. - **A lorebook session** works on a shared lorebook, the kind in the Lorebooks library. Ask for entries in the chat, or use **Edit lorebook entries** to pick some and say what to change. Every change arrives as a proposal you review, exactly as with a card, and the book saves itself into the Lorebooks library as you apply them. There is no Save button, and **History** undoes what the Forge did. - **Generator and document style sessions** work the same way and save into the Generators list and Settings → Document Styles. - **A character's own lorebook** (the one inside the card) is worked on from a *character* session, below. **The loop:** describe a character — or just a vibe — she asks questions and pushes back on the vague bits, then you hit **Generate character**. Every field lands in the sidebar on the right, fully editable. Not right? **Regenerate character** takes a note about what to change and builds it again. - **Runs on your own provider**: the model you pick is the model that forges, with no quotas and no content rules beyond your provider's. A capable model gives noticeably better cards. You can set a provider and model per session, separate from your chat one. - **What a character session writes.** Generate produces name, description, appearance, personality (core, behavior rules, speech style), background, world, greetings and example dialogue. Two switches at the top of the sidebar add more: **Let the guide write a lorebook** (the character's own lorebook entries) and **Let the guide write generators**. With them on, the guide writes those too and can add, rewrite or replace entries and generators when you ask in the chat or through **Edit character**, which lists every lorebook entry by its title. The system prompt, post-history instructions, depth prompt, group-only greetings, tags and creator info are still yours to finish in the card editor. - **Generating replaces the card; edits are reviewed.** Two different things: **Generate / Regenerate** builds a fresh card from the whole conversation and *replaces what's in the sidebar* (a field the new card leaves empty keeps its old value, but a field it fills is overwritten). **Edits** — asking for a change in chat, **Edit character**, or the ✨ on a single field — always arrive as **proposals** with before/after, which you Apply selected, Apply all, Retry or Discard. An edit can never blank a field that already had content. - **Saved cards sync both ways.** Before the first save the card lives only in the session; **Save to library** creates it and opens it in the editor. After that the header reads **✓ Synced to library** — edits here update the library card, and edits made in the card editor show up here. Opening an existing card in the Forge saves a restore point first, so *Tools → History* in the editor can undo whatever the Forge does. - **Sessions**: several characters in progress at once. Switch, rename, delete or start a new one from the session picker; the 30 most recently used are kept. Deleting a session doesn't delete a card you already saved to your library. - **Reference card**: pick a second library character (or your persona) at the top of the sidebar and note how the two relate ("this is the player's persona; make my card her rival"). The guide sees it as read-only context: the two are never blended, and the card being forged is written to be *compatible* with it — when the reference is a persona, greetings can even address {{user}} as that person. It's loaded fresh from the library on every turn, and its token cost shows in the line above the composer. - **Artwork**: **Upload** or **Generate** a picture right in the sidebar (either one saves the card to your library first, because art is stored per card). - **Attachments**: the 📎 on the presets row takes images (vision input — show the guide a reference picture) and documents (pdf, docx, odt, epub, plain text), converted to text on your machine. Attach a story excerpt and ask for a card built from it. - **Attach a webpage**: the 🔗 beside it takes a link (a wiki article, a character page). The page is downloaded, boiled down to its readable text, and attached like any document — paste a fandom wiki page and ask for that character as a card. **Typing shortcuts** — type `/` in the composer for: `/create [what to change]` (build the card), `/edit [what to change]` (pick fields to rewrite), `/clear` (start a new session, keeping the current one in the list). Sending an **empty** message asks the guide for another reply to the last one. You can also edit, delete or re-roll any individual message in the transcript. **Your own guide.** Rin is a built-in you can't break — the pencil beside her *duplicates* her so you can edit the copy — and **+ New guide** writes one from scratch. A guide is just fields: personality, scenario, example dialogue, session instructions, card-craft guidance (field lengths, what makes a good greeting) and opening lines. **If a build fails.** "The model returned nothing usable in any output mode" almost always means the model can't produce clean JSON. The **Card output** dropdown handles it: it starts on *Auto*, which tries strict JSON and falls back to simple tags, remembering what worked for that exact provider + model. If a model keeps misbehaving, pin it to **Simple tags**. Two other messages you might see: a warning that the model is spending tokens on hidden "thinking" despite being asked not to (switch to a non-reasoning model), and "that reply was cut off part-way through the rewrite" (raise the max response tokens for that provider/model). > **Tip:** The Forge sends the **whole card on every single message**, plus a sliding window of recent turns — it's the most token-hungry thing in the app. The meter under the transcript shows what the next reply will cost, split into card / guide / chat (and how many older turns are no longer being sent), so watch it and pick a cost-effective model. # Chatting ## Chatting: the essentials Type and press `Enter` to send (`Shift`+`Enter` for a newline — flip this in Settings → Chat Display, which swaps them so `Ctrl`+`Enter` sends). Clicking **Send** with an *empty* box just asks for the next reply — pressing Enter on an empty box does nothing. You can keep typing while a reply streams; only *sending* waits for it to finish. The **📓 Notes** button in the chat topbar opens a scratchpad that belongs to this chat — your own notes, never sent to the model. **Attachments** (📎 beside the message box): **images** go to the model as real vision input (downscaled automatically; needs a vision-capable model — with a text-only one the app resends the turn without images and tells you). **Documents** — pdf, docx, odt, epub — are converted to text on your machine, and plain text files (md, txt, json, csv, code…) attach directly. Attachments stay on their message, are re-sent with the history every turn, and file contents can't trigger macros or generators. The same paperclip lives in Direct Chat and the Card Forge. [Screenshot] Hovering a message reveals its actions — **copy**, **edit**, **exclude from context**, **pin**, **bookmark**, **branch**, **delete**. The header carries the message number (`#7`) and the icon for what the model can see. **On each message (hover for the buttons):** - **Regenerate**: on the *last* reply only. Plain click re-rolls it; **Shift-click** opens a directions box with one-click quick prompts (Shorter, Spicier, Darker, Less repetitive…) — edit that list in Settings → Quick Actions. Directions you give the last reply are remembered and reused by the next plain click. - **Swipes**: regenerating stacks alternates you can step through with `←` / `→` or the arrows under the reply. Stepping past the last one generates a fresh alternate. The trash icon deletes the alternate you're on. - **Edit**: inline. If the reply has a thinking block it gets its own box; that box is never sent back to the model, and clearing it deletes the block. - **Copy**: puts the message's text on your clipboard. - **Speak aloud**: reads the message out, when a voice is set up in Settings → Voice Providers. - **Delete**: removes that message. **Shift-click** removes it *and everything after it*. - **Exclude from context** (eye): keeps a message on screen but stops sending it to the model. - **Pin to memory** (pin): always kept in context — see Memory below. - **Bookmark** (ribbon): a place-marker you can jump back to. It changes nothing about the prompt. Once anything is bookmarked, a bookmark button appears in the topbar to jump between them. - **Add to lorebook** (book-plus): *make it canon*. Select the text that matters (or take the whole message) and a review window lets you edit the entry, set keywords, and save it into the **character's built-in lorebook** — active in every chat with them from then on. The Memory window's **Story so far** tab does the same at scene scale: pick how many entries (1, 2, 3 or 5 — 3 by default), press **Draft entries from this chat**, and the AI splits the recent chat into that many (one per distinct fact, each with its own keywords), shown together for review — accept or reject each, restructure any with AI, then save the keepers in one go. - **Branch** (git-branch): forks a new chat from that point, named `Original (Branch #1)`, leaving this one intact. **Graduate an NPC into a full card:** the Memory window's **Create character** tab. Say who to extract, pick the message range they appear in (the endpoints are previewed so you know you grabbed the right scene), and a new **Card Forge** session opens seeded with that excerpt — the guide builds them from how they actually behaved, and you refine from there. > **Tip:** Everything except Copy and Speak is switched off while a reply is streaming — including the swipe arrows, which disappear entirely. Stop the reply, or let it finish, then act. On an *older* reply the arrows only **preview** its alternates (the counter says "2 / 3 · preview"). The chat still uses the version it was written against, and nothing is saved. Each message shows its number (`#12`) and an icon for what the model can see: an **eye** (sent in full), a **brain** (dropped from context, but your memory still covers it), a **crossed eye** (dropped, nothing catching it), or a **ban** sign (you excluded it). **In the reply-tools row (above the box):** [Screenshot] The reply-tools row, with the **context meter** above it — each segment is one thing filling the window, and **Summarize** appears on the right as it fills up. - **Length**: Auto / Short (~80 words) / Medium (~240) / Long (~650). It *asks* the model for that length and caps the reply to match. If a thinking model spends the whole cap reasoning, see Sampling & generation settings. - **Send with directions**: **Shift-click Send** (or `Ctrl`+`Shift`+`Enter`) to tell the model what its next reply should do ("keep it short", "have her admit the truth"). They go in right after your message for that one reply, aren't saved to the chat, and that reply's Regenerate reuses them. The wording that introduces them is the prompt profile's regenerate nudge. - **Continue**: extends the last reply from where it stopped. Shift-click, or type `/continue your notes`, to steer how. - **Impersonate**: the AI drafts *your* next message straight into the box (which goes read-only while it streams) so you can edit before sending. Shift-click (or `/impersonate …`) opens a bigger editor where you can page back through earlier drafts and highlight part of one to rewrite just that part. - **Undo**: drops the last exchange and puts your message back in the box. If you've already started typing something else, your draft is kept instead. - **Suggest**: three one-line ideas for what you could say, as chips above the box. Clicking one *fills the box*; it doesn't send. - **Director**, **Image** and the **gallery** icon get their own sections below. **Right-click:** highlight part of any message and right-click for **✨ Regenerate this section** — the model rewrites just that span in place, with the rest of the reply as context. Right-clicking in the message box gives you spelling suggestions, cut/copy/paste, and the formatting list, including **Add to dictionary** for a word the checker flags that you spell that way on purpose. `Shift`+right-click *in a text box* gets the system menu instead. The ⤢ button opens the message box full screen — same shortcuts, its own Send, `Esc` to close. If you've set up dictation, the microphone works even while a reply is streaming, and sending while it's recording stops it and appends what you said. ## Multiple chats at once You can keep up to **five** chats open simultaneously — same or different characters. A reply keeps streaming in the background while you're in another chat, so you can bounce between them. - Open another chat from the library or a card; it opens as its own session. - The **stacked chip** (right end of the reply-tools row, or floating bottom-right when you're not in a chat) shows a count and opens a list of the other open chats — each with its character's avatar and a pulsing dot while it's generating. Click to jump; × to close. - At five open, opening another closes the least-recently-used *idle* one. If all five are generating, nothing is closed — you're told to close one yourself. > **Tip:** Send in chat A, switch to chat B and read/reply, then jump back — A's response will be waiting. ## Personas (who you are) A **persona** is your side of the roleplay — and it is a **card**, like any character: give it art, tags, a folder, export it, share it. What makes a card a persona is one setting: the **Card type** dropdown in the editor header, set to **User Persona**. Pick one from the dropdown in the chat topbar, or choose **+ New temporary persona…** to make one that lives only in this chat. The **Personas** row in the **Characters** sidebar is the library filtered to your persona cards. **Your default persona** is the one every new chat starts with, unless the character has its own bound persona. Set it from a persona card's right-click menu or its editor's **Tools** menu (**Set as default persona**), the star beside a persona in the chat's persona dropdown, or Settings → Personas. The default wears a *default* badge in the library. An **adventure persona** is a persona with a character sheet for Adventure mode — abilities, gear, level. Tick **Adventure character sheet** under Metadata (the type stays User Persona) and a **Character sheet** section appears in the editor; the card then shows up in the adventure character builder's "Load a saved…" list, and characters you build there are saved as these cards. Two names, two jobs: the **name** is what the model receives as `{{user}}` and what labels your lines in the transcript; the optional **display name** is only for the app's own dropdowns and message headers. Set just the name if you want them the same. Your persona's **appearance** and **personality** go to the model every turn — the character needs to know who it's talking to. **Dialogue examples** don't: they're sent only when something is writing *as you* (`/impersonate`, the Story Director). Example lines are the strongest style cue a prompt carries, so including yours in every reply nudged characters toward your phrasing and encouraged them to write your side of the scene. The **link** button beside the dropdown pins the current persona as the default for new chats with this character (click again to unbind). A *temporary* persona can't be pinned that way — use the pencil beside it to edit it, or **Save to my personas** to promote it to a real one first. ## Group chats Add more characters to a chat with the group (people) button in the topbar. A group bar appears above the message box with a chip per member. - **Pick who responds:** click a member's chip to have them answer now. **Shift-click** the chip to give that one reply directions first. Otherwise members follow the turn order. - **Per-member settings:** the small gear on each chip sets that character's own provider, model and prompt preset — the gear lights up when it differs from the chat's. - **☰ Order**: **who answers your messages**: *Smart* (whoever you name — name two or more and each answers in turn — else the best fit), *Natural* (as in SillyTavern: named members plus each member's **talkativeness** roll, so one message can get several replies; set it per member there), *List* (the rotation), *Pooled* (everyone once before anyone twice) or *Manual* (only who you click). Also the rotation itself and Auto mode's pause between turns. **Set next** jumps a member to the front; the arrows reorder the rotation. **Mute** keeps a member in the group but skips them whenever the app picks who speaks — the rotation, AI picks, Auto and the Director. Their chip dims; click it to have them speak anyway. At least one member always stays unmuted. - **🎬 AI picks**: a director chooses who should speak next (whoever was addressed or would naturally respond). It overrides the turn order for that one turn only. - **▶ Auto** lets the members talk among themselves for the number of turns in the box beside it (1–50), with a pause between turns (5 seconds unless you change it in ☰ Order). **⏹ Stop** ends it early and shows progress as it runs; so does starting to type. - **New chat with this group** (in the group window) starts over with the same members, mutes, order and per-member models. Characters with *group-only greetings* open it with one, and so does a member you add before your first message. > **Tip:** Regenerating a group reply re-rolls it as the *same* character who spoke it, using that member's own model and preset — not whoever happens to be next in the order. ## Story Director (auto-play) The **Director** button (in the reply-tools row) hands the chat to an AI director that auto-plays it toward a storyline you set — steering the character(s) and, optionally, voicing your own character — for a fixed number of messages. It works in two layers: on start a **planner** turns your storyline into a plot outline, then a **scene director** reads that outline plus the recent chat and writes the concrete next beat. Both calls show up in Session info → Exchanges. **Setup:** - **Storyline / direction**: describe where you want the scene to go (the arc, beats, and how it should end). The director advances it gradually rather than rushing to the finish, and starts wrapping up in the last couple of messages. - **Messages to play**: how many messages to generate before it stops (1–100). - **Reply length**: applies your chosen length preset to the generated turns. - **Re-direct every N**: how often the director rethinks the next beat. 1 = before every message (most reactive); higher = fewer director calls and less reaction to what just happened. - **Mode**: **Auto** plays straight through; **Step-by-step** stops before every message so you can edit the beat and the generated text before it's committed. - **Delay between messages** (auto mode) — a reading pause in seconds after each message. 0 plays continuously. - **Impersonate**: in a single chat the director voices your character (required to keep the story moving on its own). In a group chat this is a toggle: leave it off to only drive the characters, or on to have the director speak for you too. In groups it also picks who talks next each turn. - **Advanced — director prompts**: the planner's and scene director's system prompts and user templates, with the placeholders each accepts. Edits save as you type; **Reset to defaults** puts them back. **Before it starts** you get the drafted **plot outline** to read. Edit it, hit **↻ Regenerate** for a different one, or write your own — then **Accept & start**. **While it runs** the **Story Director panel** sits on the right side of the chat (collapse it to a rail with the chevron; the rail still shows progress). It holds: - **⏸ Pause**: stops after the current message and keeps your progress; **▶ Resume** continues. **⏹ End** closes the session. In step-by-step mode the button is **▶ Next beat** instead. - The **direction box** — a live note to the director ("raise the stakes", "introduce a new character") that steers the upcoming turns without ending the run. Send an empty note to clear it. - The **plot outline**, plus the current **next beat**. While paused the outline is editable — rewriting it is the strongest way to change where the rest of the run goes. - During an auto-mode reading pause, a **Next in Ns** countdown with **Skip →**. **Step-by-step mode** replaces those controls with a review for each beat: the director's stage direction and the generated message, both editable, with **↻ Regenerate** and **Accept**. Nothing is committed to the chat until you accept it. Paused, you can type your own messages, regenerate, or edit as usual, then resume. When it reaches the message target it pauses on its own — set a number and hit **Continue +N** to add that many more messages and keep going (repeat as often as you like). Close the chat mid-run and the session comes back *paused* when you reopen it. > **Tip:** Set a short message count for a quick guided beat, or a long one to let a whole scene play out while you watch. If a run keeps drifting, pause and edit the plot outline rather than fighting it with direction notes. ## Adventure mode (experimental) Adventure mode turns a chat into a game-mastered adventure: the character (written as a GM) offers **choice buttons**, demands **dice rolls**, and keeps a live **character sheet** the story updates as you play. The app referees — it rolls the dice and applies the stat changes; the model only ever asks. Works with any model — how well it plays GM depends on the model. > **Tip:** Quickest way to try it: your library already contains the **Adventure Mode Narrator**, a card built for this. Start a chat with it — nothing to configure. **Turning it on:** it's carried by the *card*, not a setting. Adventure-built cards enable it automatically for their own chats; flag any card yourself by setting its **Card type** (the dropdown in the card editor's header) to *Adventure Mode Game Master*. Ordinary cards carry none of it. **Playing:** - **Choices**: click to take the action; some carry costs ("Bribe him (5 gold)") that hit the sheet the moment you pick them, so the GM can't charge you twice. **Shift-click** a choice and the model performs it *in your voice* instead of sending the plain label. You can always ignore the buttons and just type. - **Rolls**: the GM states what you're rolling for and what's at stake, but **the app rolls the dice**. Typing "I rolled a 20" does nothing — a 🎲 you type is stripped from your message, and a 🎲 line the *GM* writes is deleted before the reply is saved. Only the app's reports are real. Results render as dice cards — success/failure vs the difficulty, nat-20 shimmer, and damage on successful attacks (rolled by the app, applied exactly by the GM). Sometimes you'll get **two or three rolls side by side** for genuinely different tactics — take one. - **Your abilities move the dice.** When a roll leans on one of your abilities the app looks the score up on your sheet, applies the classic modifier, and names it on the button ("Roll Stealth (dexterity +2)") — a forgetful GM can't ignore your scores and an eager one can't count them twice. - **Social rolls**: a say-box appears: what you actually say travels with the dice, and a good pitch legitimately tilts the result (a stated −6 to +6, never more — enough to carry a bad roll). The mask button drafts the line in your character's voice; **Shift-click the mask** to use what you've typed as instructions for the draft ("be humble, mention the ring"). `Enter` rolls, `Shift+Enter` adds a newline, and leaving the box empty just rolls normally. **Your character:** the greeting's create-your-character button (or the person icon at the top of the sheet, once the greeting scrolls past) opens the builder — name, class, abilities (roll 4d6-drop-lowest then drag each score onto the ability you want, 27-point buy, or **manual entry** — honor system, type the scores in to bring a real tabletop character over as-is; rename, add or remove abilities to fit any genre), hp, level & XP, starting inventory, and notes to the GM. Give them a **portrait** too — upload one or generate it with AI, same generator the card art uses; it shows at the top of the sheet. **Complete sheet for me** fills only the fields you left *empty* (never your numbers, never overpowered gear); **Shift-click** it to say what you want them to be first, and **Cancel** stops it mid-flight. *Use for this chat* stays disabled until the character has a name and every rolled score has been placed. **Saving and reusing characters:** **Save as persona card** keeps a reusable copy in your library; load it later from the *Load a saved…* dropdown at the top of the builder. A character you loaded shows **Update persona card** instead (it edits that card rather than making a duplicate); to get rid of one, delete the persona card from the library. **Use for this chat** starts playing with the sheet, and **Play without a sheet** skips character creation entirely. In an adventure chat your character replaces your regular persona, so {{user}} *is* them — your normal persona is untouched everywhere else. Reopening the builder mid-game is safe: it re-applies your abilities, class and level, but leaves hp, max hp, XP and everything you picked up in play exactly as play left them. **The sheet** (🎲 in the right sidebar) groups stats into sections by name prefix — *your character*, *Inventory*, *Money*, a plain *Stats* group for anything unprefixed, and *DM stats*. Empty sections don't show. There's a history of every change, and each entry jumps to the message that did it. - **Edit** any value by typing in its box. Negative numbers clamp to 0, and **emptying a box deletes that stat**. - **Add** a stat with the row at the bottom: pick the section, type a name and a value, hit **Add**. The section *is* the stat's name prefix, so "rope" under Inventory becomes `inv_rope`. Adding a DM stat switches spoilers on so you can actually see it. - **Right-click a stat** to **rename or move** it between sections (the dialog shows you exactly what the GM will see) or to **delete** it. - Your edits are the truth the GM must respect, and they **outrank the story** — a stat you fix or delete by hand stays fixed even if you later delete or reroll an older message. (An old message that *runs again* can still re-emit its own changes, and a GM that no longer sees a stat may recreate it — that's the story happening, not the sheet losing your edit.) **The GM's hidden side.** Flip *Show DM stats (spoilers)* in the sheet's settings to see what the GM is tracking: enemy hp and states (`npc_`), world flags, hidden clocks and any condition it's put on you (`dm_`), plus the **campaign plan** — an overarching arc the app writes right after your first action, which every later reply steers by, and which also starts the GM off already tracking the people and clocks that matter. The plan is fully editable: rewrite it to change where the story is heading, or right-click a selection to rewrite that part with AI. Writing it takes a few seconds ("Crafting the scenario…") and **Stop** cancels it — the box stays there empty and writable either way, so you can simply type one. Deleting your way back to the start of the chat clears the plan so your next opening gets a fresh one. **The GM tidies up too.** It can drop stats that are finished — a slain enemy's hp, a clock that ran out, an item used for good. It can only drop *its own* stats and consumables; your character's abilities, hp, level and XP are yours alone and the app refuses anything else. Gear that's confiscated rather than destroyed **moves to whoever took it** instead of vanishing, so it comes back intact when you get your pack off the warden (turn on spoilers if you want to watch it sitting there). **Levelling** is the app's job, not the GM's: every 100 XP earns a level, and you get a dialog with the HP it adds and **two points to raise abilities** (up to 18) — spend them, or take *Skip the points* to bank the level and the HP without them. Earn two levels at once and you get both, and all four points, in one go. Your current HP rises by exactly what the maximum did, so levelling is never a free heal. It works off the sheet, so XP you type in by hand levels exactly like XP the GM awarded — but it needs a character: a sheet-less adventure never levels. **House rules the app enforces:** healing can never push past your max HP; deleting, rerolling or swiping a message **reverses its stat changes** (with a "Sheet reverted" notice, so a refund is never silent); and at 0 hp you're never killed — the app puts you back at **5 hp**, weak but alive, and the GM narrates the setback. Turn on **Hard mode** in the sheet's settings and 0 hp is a real death: final, and the sheet won't let you edit that hp back up. Rests are house rules the GM is *taught* rather than rules the app enforces — a short rest heals a chunk, a long rest restores you to full — so a weaker model may play them loosely. **Making your own?** See Writing an adventure card. > **Tip:** Adventure chats work best with a model that follows instructions well — the app referees the mechanics, but the storytelling is all the model's. #### Being the DM yourself (experimental) The same machinery runs backwards: **you** game-master, and the AI characters are the players. Open any chat that has a character in it, click the **dice button** in the sidebar, and turn on **I’m the DM**. No game-master card is needed — a one-on-one chat works (a party of one), and so does a group. - **Everyone at the table gets a sheet.** The app stats each character up from their card — or reads the sheet the card already carries (card editor → *Metadata → Adventure character sheet*). Every number is yours to edit in the sidebar: abilities, HP, level, XP, inventory, and stats you invent yourself — HP and XP take `-6` or `+50` as well as a plain number. Award enough XP and a **level-up** button appears, which adds the level and its hit points and leaves the ability points to you. - **Players state attempts, never outcomes.** A character reaching for something they could fail at ends their message with an attempt, and a roll box appears under it. You pick the ability and difficulty (or, for a game with its own dice, whatever its sheet says a check is made of: see Building your own game), optionally write *what happens if they succeed* and *if they fail* — before rolling, which is the point — and press Roll. Only the branch that actually happened is sent. Your choices stay on that message, so deleting the result and rolling again finds them still there. - **Call for a check nobody asked for** from the roster in the sidebar — "everyone roll Perception" — with the same box. - **Go round the table** with the **▶ Round** button above the composer: each player takes a turn in order, so everyone reacts to the scene before it comes back to you. - **The greeting is set aside** when you turn DM mode on: the opening scene is yours to write. Turn it off and the card’s own greeting comes back. - **Your notes stay yours.** Two tags, and the difference matters: `[co]…[/co]` stays *on your screen* and is never sent to anyone — the trap they haven’t found, who is lying, what happens if they open the box. `[h]…[/h]` is the opposite: it disappears from the chat and is withheld from every player’s prompt, but your own AI-assist draft still sees it — a note to your co-writer rather than to yourself. (In ordinary adventure mode `[h]` goes to the model, because there the model is the referee.) The stat board’s *npc_* and *dm_* stats are private the same way, and the notes panel (📓 in the toolbar) keeps longer material per chat. - **Stuck for words?** The impersonate button drafts *your* next turn as the game master — scene, NPCs and consequences — rather than a character’s reply. > **Tip:** The dice are still the app’s: a 🎲 line a player writes is stripped as a forgery, so the only real results are the ones you rolled. ## Writing an adventure card The most important thing to know: **the app already teaches the game mechanics.** Every turn, the model receives the directive syntax, the referee rules (app-rolled dice, stat namespaces, rests, the works) and the live character sheet. Your card's job is everything the app *can't* supply: **who the GM is, what the world is, and how the adventure opens.** Don't spend card tokens re-explaining syntax — demonstrate it instead (see dialogue examples below). Those mechanics are roughly D&D's by default, and a card can REPLACE them with another tabletop system: see *Teaching it a different tabletop system* at the end of this section. Already handled for you, every turn, so your card never needs to say it: the app applies ability modifiers to rolls, deletes any dice line the GM writes itself, teaches the GM to drop finished stats with `[[unstat:]]` (and refuses when it aims at the player's own), teaches it to move confiscated gear to whoever took it instead of deleting it, reminds it every turn that its own `npc_`/`dm_` values are its to *move*, and seeds a starting set of them from the campaign plan. **1. Write the character as a narrator, not a companion.** Name it like one ("The Dungeon Master", "Adventure Mode Narrator") and make the description about its *style of running a game*: second person, present tense; fair but consequential; never speaks or decides for the player. A card written as a companion character will chat *with* the player instead of running a world *around* them. **2. The greeting is the front door.** Set the opening scene in a few paragraphs, then offer the starting buttons. `[[character]]` and `[[starter_choice: …]]` are *opening-only* — they run character creation, and the GM is told never to emit them once play has begun: ``` …the caravan crests the ridge and the valley opens below, chimney smoke and trouble. [[character: Create your character]] [[starter_choice: Ride down before dark]] [[starter_choice: Camp on the ridge and watch the road]] [[choice: Just start walking — no character sheet]] ``` `[[character]]` opens the character builder. `[[starter_choice: …]]` runs character creation first, *then* sends the choice — use these for your main openings. A plain `[[choice: …]]` (the ordinary in-play directive) gives players a sheet-less freeform way in. Note that these buttons live under the *last* message, so they're gone the moment play starts — afterwards the character sheet's person icon is the way in. **3. Behavior rules = game feel, not syntax.** Use them for how the game should play: "State the stakes before demanding a roll", "Consequences are permanent — a failed roll changes the situation, never gets retconned", "Introduce named NPCs with wants of their own", "Prefer hard choices over combat". The app enforces the mechanics; your rules shape the drama. **4. Dialogue examples are your strongest lever.** Models imitate examples far more reliably than they follow instructions — one worked exchange showing the protocol in action beats a page of rules. Show a roll demand with stakes, stat bookkeeping, and hidden DM tracking. Note the `mod dexterity` segment: the app looks the ability up on the character sheet and applies the modifier itself, so the GM never has to do (or fudge) that math: ``` {{user}}: I try to slip past the guard post. {{char}}: Torchlight sweeps the road. If they spot you, the gate closes and the alarm brings the whole watch. [[roll: 1d20 vs 13 | Stealth | Slip past unseen — spotted means the gate slams and the watch turns out | mod dexterity]] {{user}}: 🎲 Stealth (dexterity +2) check: 1d20+2 → 16 + 2 = 18 vs DC 13 — SUCCESS {{char}}: You ghost between the wagons; the sentry yawns at nothing. Inside the walls, the fence's shop is dark — but a light burns upstairs. [[stat: npc_watch_alert = calm]] [[choice: Knock anyway]] [[choice: Wait in the alley until the light goes out | inv_torch -1]] ``` A choice can also roll one of the card's generators when it's picked — add a `gen` segment with anything a `[Create …]` tag takes. The roll lands in the player's message, and the GM narrates it next turn: `[[choice: Look for recruits | gen Mercenary x3 Class=Archer, as=recruits]]`. Effects still go in their own segment: `[[choice: Hire a guide (10 gold) | gold -10 | gen Guide]]`. Choices are drawn where they're written, so you can group them under headings (**Fight**, **Talk**, **Flee**) instead of one long list. When a reply also asks for a roll, its choices are grayed out: the roll decides first. **5. Seed the world.** Put geography, factions and tone in World / setting; use lorebook entries keyed to names for deep lore the model only needs when it comes up. The GM's hidden stats are its working memory — `npc__` for a creature or person it is tracking, `dm_` for everything else it keeps to itself (world state, a ticking clock, a secret), and `dm__` for a condition it puts on the player (poisoned, disguised) — never the player's own prefix, which is their character sheet. Both hide behind the spoiler toggle. Your examples should show it using them, and clearing finished ones with `[[unstat: npc_wolf_hp]]` so a long game's sheet doesn't fill with dead business. **6. The campaign plan reads your card.** On the player's first action the app writes a hidden arc from your card's description, personality, behavior rules, setting, background and system prompt — but *not* from your greetings or dialogue examples (the opening scene is passed separately). If the true situation behind your opening lives only in a greeting, move it into the description or the setting so the planner can build on it. **7. Ship it right.** Set the editor's **Card type** to *Adventure Mode Game Master* (this is what auto-enables the mode for whoever imports the card — it travels in JSON and PNG exports), tag it so it's findable, and use Creator notes to tell players what to expect (difficulty, themes, whether a character sheet matters). > **Tip:** Test-play a few turns and watch the sheet: if stats drift or rolls come without stakes, add a dialogue example demonstrating the exact behavior you want — weaker models need more example coverage, not more rules. #### Teaching it a different tabletop system Everything above describes the rules the app teaches by default, which are roughly D&D's. If your game is Fate, Powered by the Apocalypse, Cortex, Forged in the Dark or something you wrote yourself, **a card can replace them.** An Adventure Mode Game Master card carries three boxes in the card editor's **Features** section: **Ruleset** (how a roll is read: what a target number means, modifiers, damage, rests), **GM style** (how the game is run: pacing, when to call for a roll at all) and **Extra GM guidance**, which is added on top and replaces nothing. A card's text beats the same boxes in Settings, so a game you share is self-contained: whoever opens it plays your system without changing a setting. What you cannot replace is the part the app's own parsers read: the directives, the dice grammar and the sheet. That is sent every turn whatever your ruleset says, which is exactly why rewriting the rest cannot break the choice buttons, the character sheet or undo. **Decide first what the numbers on your sheet are**, because it decides what a roll should say, and getting it backwards is silent. If a rating is a *modifier*, as in Fate, PbtA, Forged in the Dark and Cortex, the roll adds it with a `bonus ` segment and the app does the arithmetic. If a rating is the *target*, as a percentile skill is, nothing goes on the roll at all: the dice stay bare and the GM compares the number to the sheet itself. Use `bonus` on a percentile skill and a `1d100` becomes `1d100+55`, which is not a close call. `mod ` is a third thing again and is always the D&D ability formula, so a system whose sheet already holds the final number should forbid it outright: a rating of 3 reaches the dice as +3 through `bonus` and as -4 through `mod`. **Dice the app can roll:** `1d20+2` and anything shaped like it, `4dF` for Fate and Fudge dice, `3d6kh1` and `2d6kl1` to keep the best or worst of a pool, `d8+d6+d10` to add different dice together, and `(d8+d6+d10)kh2` to keep the best two *across* dice of different sizes, which is how Cortex scores a trait pool. Rolls that drop dice show you the ones they dropped. **What it will not do:** a target number means meet or beat, unless the card's character sheet sets its roll method to roll-under (Call of Cthulhu and that family; see Building your own game), in which case at or under succeeds. A system that counts successes in a pool (World of Darkness, Shadowrun) cannot use a target: leave it off, and the app reports the number, claims no verdict, and prints every face it rolled, so your ruleset can tell the GM to read it however your system says. Dice that explode on a maximum are not supported; a ruleset can ask the GM for a second roll instead. **If the GM reads the result itself, put the numbers on the sheet before you play.** This is the one that bites a percentile game. With no Spot Hidden on the sheet the GM will invent a threshold to compare against, and the same action then succeeds one turn and fails the next, with nothing on screen to show why. Fixed bands are safe, because they live in your ruleset text: a 7-9 in PbtA is a 7-9 for everyone. **Giving the character builder your sheet, and choosing how checks roll.** A Game Master card can also describe its character sheet (abilities, groups, dealt scores, HP, levels) and how its checks are rolled and judged. That is all in Building your own game, with finished examples for Fate, Powered by the Apocalypse, Cortex Prime and percentile games. **Writing it so a model actually follows it.** Every one of these came from watching a real game go wrong: - **Name the wrong dice as well as the right ones.** "Rolls are 4dF" is not enough on its own, because every worked example a model has ever seen is a d20. "NEVER use d20; this game rolls 4dF" is what stops it. - **Forbid the segments your system does not use,** and say why. Told only what Fate does, a model still added advantage out of habit; "never use adv or dis, an edge in Fate is an aspect you invoke" stopped it. - **Put one fully worked roll line in the ruleset.** It is the only concrete example the model gets, and it is the single highest-value line in the box. - **Say what to DO on each outcome, not just what the bands are called.** A table of bands was not enough: the model read "6 or less is a hard move" and then offered another roll. Phrase them as instructions to the game master. - **Repeat the dice clause.** Name it in the rule, show it in the example, and say what it is called, or the same ruleset will produce `2d6kh1` in one run and a bare `2d6` in the next, which are very different odds. > **Tip:** Check it landed before you play: open the prompt inspector on a reply and confirm your own words are in there and the default ruleset is not. The context meter is not that check, because its Adventure ruleset row looks identical whether the text is yours or the built-in one. ## Building your own game (step by step) Everything you need to turn a tabletop system, a published one or your own, into a game anyone can import and play. It goes in order: make the game master, teach it your rules, describe your character sheet, choose how checks roll, add lore, write the opening, make ready-made characters, test it, and share it. Finished examples for five common kinds of system are at the end, then answers to the questions people run into. #### What a game is made of - **A Game Master card.** One card whose **Card type** is **Adventure Mode Game Master**. It IS the game: the narrator, the world, the rules, the character sheet and the lore all live on it. - **Persona cards** (optional): ready-made characters, for players who want to start without building one. - **A bundle**: one `.aicc` file holding the Game Master card, any persona cards and their art. It is how you hand the whole game to someone else. Nothing here needs code. The rules and the sheet are text you type into boxes on the card, and everything travels with the card when it is exported. #### Step 1: Make the Game Master card Make a new card and set **Card type**, at the top of the card editor, to **Adventure Mode Game Master**. That turns Adventure Mode on for anyone who opens the card, and adds the game boxes (Ruleset, GM style, Extra GM guidance, Character sheet) to the editor's **Features** section. - **Name it as the narrator**, such as "The Game Master" or "The Keeper", because the name is who the model plays. Put the game's title in **Display name** if you want the library to show that instead. - **Description and personality** describe how this game master runs a game: second person, present tense, fair but consequential. Write a narrator, not a companion, or the model will chat with the player instead of running a world around them. - **Behavior rules** set the feel of play ("state the stakes before calling for a roll", "a failure changes the situation, it is never undone"). Leave the dice to the ruleset. - **World / setting** and **Background** hold the setting and the true situation behind your opening. On the player's first action the app writes a hidden campaign plan from these fields, not from the greeting, so anything the plan needs must be here. - **The clock switch** (in Features): leave it on for a game with something ticking, a heist or a deadline; turn it off for open-ended play, where a countdown only invents false urgency. More on writing each of these, with examples: Writing an adventure card. #### Step 2: Teach it your rules Out of the box the game master is taught rules that are roughly D&D's. Three boxes in the card's Features section replace that, for this card only: - **Ruleset**: how a check is made and read. Your dice, what a target means, what the sheet's numbers are, what happens on each result, damage, recovery. - **GM style**: how the game is run. Pacing, when to call for a roll at all, how spoken words are judged. - **Extra GM guidance**: added after everything else and replaces nothing. House rules and the things this particular game needs its game master to know. A card's text beats the same boxes in Settings, so the game is self-contained: whoever opens it plays your rules without changing a setting. What your text cannot replace is the part the app itself reads, the directives, the dice grammar and the sheet, which is sent every turn. That is why rewriting the rules can never break the buttons, the dice or the character sheet. **A ruleset that works covers these, in this order:** 1. **The dice, and the wrong dice.** "Every check is 4dF. NEVER a d20." Every example a model has seen is a d20, so naming the dice you do NOT use is what stops it. 2. **One fully worked roll line**, exactly as the game master should write it. It is the most valuable line in the box. 3. **What the sheet's numbers are.** A modifier is added with a `bonus ` segment. A die size goes into a pool as that die. A percentile skill is the number to roll under, so nothing is added. Say which, and forbid `mod` unless your game derives modifiers the way D&D does: `mod` is always D&D's (score - 10) / 2, so it turns a +3 into -4 and a d12 into +1. 4. **Targets**: your difficulty ladder, or "no target" for a game that reads bands. 5. **What to DO on each result**, written as instructions to the game master ("on a 7-9, they get it but you introduce a cost"), not just the names of the bands. 6. **Your game's resources** (stress, fate points, momentum, sanity) and which stat holds each. **What your ruleset can tell the game master to write.** These are the directives the app reads; your ruleset decides how they are used. - `[[roll: vs |