Complete Setup & Feature Guide
UnrealHQ lets you create AI character bots that live in Discord. Each character is its own Discord bot — with its own name, avatar, personality, memories, and codex entries. Your characters are live on Discord where your friends can talk to them too, or you can chat with them right here on the web.
Whether you want a roleplay companion, a group chat personality, a writing partner, or just a character you've designed to hang out in your server — this is the place to build it.
BYOA stands for Bring Your Own API. Instead of paying us a subscription, you get an API key from an AI provider (like ElectronHub, OpenAI, or Anthropic) and plug it in. The bot uses your key to generate responses.
uhq- tokens are the exception — those requests pass through UnrealHQ's metering proxy.)Here's the fastest path from zero to a working character bot in your Discord server:
Go to the Control Room and register with your email. You'll need an invite code during the closed beta — ask an existing user or the platform admin if you don't have one yet. You must be 18 or older and accept the Terms of Service. A verification link is emailed to you (valid for 24 hours) — you can set up characters and bots right away, but web chat in The Parlor is unlocked only after you verify.
Sign up at ElectronHub (or any provider you prefer), create an API key, and save it in your Control Room settings.
Go to the The Atelier. At minimum, fill in a name, description, and first message. You can always add more depth later.
Head to the Discord Developer Portal, create a new application, grab the bot token, and enable the Message Content intent. (Full walkthrough in the Create a Discord Bot section below.)
Paste your bot token in the Command Center. Pick which of your characters this bot is from the dropdown (one character per bot) — the bot comes online by itself the moment you do. Then use the invite link to add it to your server.
Click the Invite link in the Command Center to add your bot to a Discord server. @mention it in any channel (or reply to one of its messages) and start chatting! Bots also answer in DMs — open a direct message with the bot and every message you send is treated as addressed to it.
UnrealHQ supports 17 providers: ElectronHub, OpenAI, Anthropic, OpenRouter, UnrealHQ Managed API, DeepSeek, Google AI Studio, Mistral AI, Groq, AI21, AI/ML API, Fireworks AI, Cohere, Moonshot AI, NanoGPT, Chutes, plus any OpenAI-compatible endpoint via the Custom provider. You can store one key per provider from the Control Room settings panel (the stored keys are listed there and can be removed individually), or with Discord commands. A few examples:
| Provider | Command | Notes |
|---|---|---|
| ElectronHub | /setkey electronhub sk-... | Default provider (/setkey sk-... without a provider name saves an ElectronHub key). Many models, great pricing. |
| OpenAI | /setkey openai sk-... | GPT-4o, GPT-4, o1, etc. |
| Anthropic | /setkey anthropic sk-ant-... | Claude models. Great for creative writing. |
| OpenRouter | /setkey openrouter sk-or-... | Access 100+ models from one key. |
| UnrealHQ Managed | /setkey unrealhq uhq-... | Managed token from the platform admin (see below). |
| Custom | /setkey custom your-key https://host/v1 | Any OpenAI-compatible endpoint. The base URL is required. |
/setkey in a server channel, every UnrealHQ bot that can see it saves the key and deletes your message right away (you get the confirmation by DM). The safest place is a DM with the bot — nothing to delete there. !provider lists all provider names.
/setmodel model-name to choose your model. Examples: /setmodel claude-3-5-sonnet-20241022 or /setmodel gpt-4o. If you have never picked a model, /setkey picks a starting model your key can actually use (checked against the provider's own model list; for managed tokens, one your plan allows) and tells you which. Not linked yet? On Discord the bot uses the key and model you set there, not your Control Room settings, so link your account first. In the Control Room the model box offers a searchable list pulled live from your provider. Different models have different strengths — Claude is usually preferred for RP/creative writing, GPT-4o for speed and general conversation.
A different model per bot, or per channel: your default model is one setting for every bot, but on your own key you can point one bot elsewhere. /setmodel claude-sonnet-4.5 bot makes that bot answer you on Sonnet everywhere (Discord and the Parlor), while another bot in the same channel stays on your default; /setmodel claude-sonnet-4.5 here does it for that bot in that channel only, say a softer model for a quieter scene. /setmodel clear here / /setmodel clear bot undo them, plain /setmodel tells you which model that bot is using for you there and why, and the Control Room's API box lists everything you have set. Two things to know: the model has to exist at the provider your key is with, and these only apply on your key — when a bot answers on its creator's or the server's key, the key's owner picks the model.
If you're just starting out, ElectronHub is the easiest choice — it gives you access to models from multiple providers through a single key, and pricing is very competitive. If you already have an OpenAI or Anthropic key, those work too.
Don't want to sign up with an external AI provider yourself? UnrealHQ also offers managed proxy tokens as an alternative to BYOA. These tokens use the platform's own API keys under the hood, and let you pay per usage without ever touching an AI provider account.
uhq- prefix and works as a drop-in API key.Ask the platform admin for a managed token (on Discord — there is no support email). Once you have one, set it in your Control Room API Configuration exactly like any other API key. Pick "UnrealHQ Managed API" as the provider, or send /setkey unrealhq uhq-... to a bot. Your remaining credits and daily usage are shown in the Control Room settings.
Each character lives as its own Discord bot application. Here's the step-by-step:
You don't need Discord's OAuth2 URL generator. Once you register the token on UnrealHQ (next section), the bot's card in the Command Center shows an Invite to Server button. That link already asks for exactly what the bot uses:
/setkey and /link messages so keys and codes never stay visible, plus /deleteIf you switch on Moderation Tools for a bot, the link also asks for Kick Members, Ban Members, Moderate Members and Manage Channels. Opening the invite link again for a server the bot is already in simply adds the missing permissions.
Once you have a Discord bot token, head to the Command Center and paste it in the registration field. UnrealHQ will:
Reset the token by accident? Discord kills the old one instantly and the bot drops offline. Don't delete the bot — click Replace token on its card in the Command Center and paste the new token from the same application. UnrealHQ checks it really is the same bot, swaps the token in, and restarts it; settings, servers and memories are untouched. (A token from a different application is a different bot — register that one instead.)
A bot token is a character. In the Command Center, use the dropdown to choose which of your characters this bot is. Your bot comes online in Discord immediately (no separate Start needed — Start/Stop/Restart are there for later), speaking as that character with its full personality, codex entries, and commands — and you can invite that one bot to as many servers as you like.
Each character can drive only one bot (the bot is the character card — invite it to as many servers as you like). Until you lock it you can still swap which character a bot uses: pick a different, unused character in the dropdown and, if the bot is running, it restarts automatically with the new one. Characters already used by another bot are greyed out. If you want the pairing to be permanent, click Lock next to the character: this cannot be undone.
/setkey (or in the Control Room once they've linked their Discord) — you as the creator only handle the bot token.
Limits: How many bots and characters you can keep depends on your plan (see Plans: characters go from 3 on Free up to 50 on Headliner, and every character can also live in the Parlor without a bot), with up to 500 codex entries per character (a full SillyTavern lorebook fits; the keyword budget, not the entry count, is what governs cost per message).
Your UnrealHQ account and your Discord account start out as two separate identities. Linking them tells every UnrealHQ bot that you on Discord are you on the website, so one set of settings applies everywhere.
LINK-7K3PQ2 that works once and expires after 10 minutes./link LINK-7K3PQ2. In a server you can use the /link slash command instead — its reply is only visible to you, and if you type it as a plain message the bot deletes it right away./setkey per bot)./persona <name> (this channel) or /persona <name> everywhere (your default in every channel that has no persona of its own; the Use everywhere button in the Control Room does the same), and /persona off clears it. Bots call you by your persona's name./whoami tells you which account a bot thinks you are, /unlink disconnects. Bot DMs are the private place for /setkey and other settings — nothing to delete, nobody else can see it.
The Atelier lets you build AI characters with serious depth. Every field maps to the TavernCardV2 spec, so you can import and export characters freely.
Arriving with a vibe instead of a lorebook? The ⚒ The Forge button at the top of Your Characters takes a plain-language brief — "I wanna make a bot that does this, has this, feels like this" — and your model drafts the whole character. At the default Full character depth that means every card field — name, tagline, About, tags, description, personality, scenario, a system prompt, post-history rules, example dialogue, a first message and two alternate greetings — plus a real codex: the Forge first plans a world outline (history in chapters, the people around them, places, factions, rules, secrets, arcs and story hooks, 18 to 30 subjects) and then writes an entry for each, so the character can sustain months of play. Quick sketch is the older two-call version: card plus a five-to-ten-entry starter codex, for when you want a rough shape fast. It follows the house rules while it works: the description and tagline only tease, and the secrets you mention go into keyword-gated codex entries so users have to earn them in play.
Everything lands on a review screen first — read the card, untick codex entries you don't want, edit names, keywords and text — then Open in the Atelier drops it in as an unsaved draft you can rework top to bottom. Nothing exists until you click Save Character — that is true of every codex edit in the Atelier: adding, editing, deleting and importing entries all wait for Save, so the floating Save bar shows Unsaved changes the moment you touch anything, and the page asks before you close it or switch characters with edits still pending. Tidy a big codex with the row above the entries: tick entries and Delete selected, or Remove duplicates to drop entries that repeat another's keywords and text (one copy of each is kept). Importing a codex you have already imported skips the repeats instead of doubling them, and replacing the whole codex always asks for its own explicit OK. A good brief covers who they are, the world, the dynamic you want with users, tone and rating, and any secrets they guard; one vague sentence gets you a generic character, a meaty paragraph gets you something with teeth. Runs on your API key (a full forge is about six model calls, a quick sketch two) and needs a key on file in the Control Room. It works in the background: the box shows which stage it is on (card, world outline, codex entries so far) and you can close it, keep editing, and come back — a full forge on a slow model can take five or ten minutes, and the result waits for you for half an hour.
The Atelier's tools chain together, and this is the order that works: 1) Start with The Forge (from an idea) or Bulk Import (from existing cards and lorebooks — card+lorebook pairs merge themselves, and strays get the "Merge In a Draft" picker). 2) Adjust crop on the avatar so the face sits in the circle. 3) Run Codex Tidy so every keyword entry can actually fire. 4) Hit ✨ Suggest on Description, Tagline and Tags — they write shop-window copy that teases without spoiling. 5) Flip the In prompt pills off for any card field your codex already covers, and sanity-check the two token counts in the Preview (total, and starting constants). 6) Test a message in the Atelier, save, flip it Public, and link it to a bot in the Command Center. Ten minutes, idea to invite link.
Name — Your character's display name. Max 50 characters. (The name shown in Discord is the bot's own Discord username; the character name is what {{char}} becomes and what appears in The Parlor and The Lobby.) You can also add a tagline, an About blurb, tags, an avatar (upload an image up to 10 MB, or paste a URL), and flag the character as NSFW and/or Public. About is the one field written for people rather than the model: it shows on the Lobby profile and behind the ⓘ About link in The Parlor, and it is never sent in a prompt — so put the hook, the vibe and any content notes there, and keep the Description (which IS the model's recipe and is never shown to anyone) for who the character actually is. When you upload an image, a Frame the face window opens: drag and zoom until the face sits inside the circle — that circle is exactly what cards, profiles and chat show, so full-body art stops losing its head. Hit Use full image to skip cropping, and use the Adjust crop button any time to reframe an avatar that's already uploaded (bulk-imported ones included). GIF avatars upload untouched, since cropping would lose the animation. Public is the single switch that lists the character in The Lobby — it's the same flag you see under "Lobby Listing" in the Command Center. A public character with no bot yet appears as a Web only card that people can talk to in The Parlor; once you register a bot for it and publish, the card gains its Add to Discord button.
Description — Who the character is. Background, appearance, history, relationships. This is the core identity block and the most important field. Be detailed here.
Personality — How they behave. Speech patterns, quirks, emotional tendencies, mannerisms. Bullet traits work well: "sarcastic, fiercely loyal, uses 90s slang."
Scenario — The current situation. Where are we? What's happening? This sets the stage. Example: "{{char}} and {{user}} are roommates in a cramped Tokyo apartment. It's raining outside."
First Message — The opening message when someone first talks to the bot. This sets the tone and should establish the scene. Write it in the character's voice.
Example Dialogue — Sample exchanges showing how the character should talk. The AI uses these as style references. Format them like this:
{{user}}: Hey, what's up?{{char}}: *leans against the doorframe* Oh, you know. Just contemplating the void. The usual Tuesday stuff.
Custom System Prompt — Advanced. If set, this text is placed at the very top of the assembled prompt, ahead of the description, personality and other sections (it does not replace them). Use it for extra instructions that should come first. Most people can leave this blank.
Post History Instructions — Optional instructions appended as the last section of the prompt ("Response Instructions"), handy for formatting or style rules you want the AI to see right before it answers.
{{char}} becomes the character's name, {{user}} becomes the person talking (their active persona name if they have one, otherwise their username). The SillyTavern forms <USER> and <BOT> work too. Use them in your description, scenario, and example dialogue so the character works regardless of actual names.
The codex is where character depth really comes alive. It's a collection of entries that get injected into the AI's context based on different rules. Think of it as your character's encyclopedia — but the AI only reads the relevant pages.
These entries are always injected into every message's context, no matter what. Use them for core world facts, fundamental character traits, and rules that should never be forgotten.
These entries only inject when specific keywords from their trigger list appear in the conversation. This is classic codex behavior — precise and token-efficient. Turn on Fuzzy Matching on an entry and its keys also catch plurals, word stems and small spelling slips: sword then fires on "swords", "sworded" or "sowrd", and a multi-word key like dark tower still needs its words next to each other. Leave it off for keys where precision matters (names that are also common words).
Every entry can have a title at the top ("Mara's scar", "House rules"). It's for you, it never reaches the model, and it becomes the entry's heading in the list with the keywords in small type beside it. The search box above the list finds entries by title, keyword or text as you type, so a 300-entry codex stays navigable. Imported SillyTavern books keep their entry comments as titles.
Primary Keys — Comma-separated trigger words. At least one must match for the entry to fire.
Secondary Keys — If set, at least one secondary key must ALSO match (in addition to a primary). Great for precise two-condition triggers. Example: primary "sword" + secondary "broken" only fires when both concepts appear. (Cards imported from SillyTavern keep their selective logic, so "NOT" style rules are honoured too.)
Priority — Keyword-triggered entries can inject up to about 32,000 tokens per message (each entry may be up to 32,000 characters, roughly 8k tokens). If one message somehow triggers more than that, the highest-priority entries are kept and the rest are dropped, so put your most important lore at higher priority. Constant entries aren't budgeted at all — they're part of the character prompt itself, which is why the Preview's starting-constant figure is the one to watch.
Position — Applies to Constant entries. "Before Character" puts the entry in a World Info block between the personality and the scenario; "After Character" puts it after the scenario. Keyword-triggered entries are always injected in a separate "Triggered World Info" block after the character definition.
Case Sensitive — Whether triggers match exact case or ignore it. Usually leave this off unless you need to distinguish between "Rose" (a character) and "rose" (a flower). (Fuzzy Matching is always case-insensitive.)
Fuzzy Matching — Per entry. Matches plurals, stems and near-misses of each key instead of the exact text. Off by default. To flip a whole codex at once, use Fuzzy matching, every keyword entry: All on / All off under the entry list, then Save.
Keys written as /word/ — SillyTavern lets a key be a regular expression between slashes, and World Info exports often carry keys like /Greyfen/. UnrealHQ matches those as regexes too, so they fire as written. Fuzzy matching only understands plain words, though, so Codex Tidy flags slashed keys and offers Unwrap /slashed/ keywords to turn every /word/ back into word in one click (real patterns like /sw(o|a)rd/ are left alone).
Enabled — Turn an entry off without deleting it. Triggers are scanned in the current message plus the last few messages of the conversation (the scan depth, which imported SillyTavern entries bring with them along with sticky, cooldown, probability and group settings).
If you're coming from SillyTavern with a character who has "too much stuff for the description box": the description was never meant to hold it. Card fields have no length limit, but the Codex (the section below the card in The Atelier) is the lorebook, and your existing lorebook imports into it in one click. You can import codex entries in several ways:
Overhauling an old lorebook is real work, so The Atelier has a 🧹 Tidy Codex button under the entries. It scans what's in the editor (nothing is saved until you click Save) and lists what's worth a look: keyword entries with no keywords (they can never fire), one- or two-letter keywords (they fire on everything), entries with identical content or names, empty entries, very long entries, and how many tokens your constant entries add to every single prompt. Each row has Edit and Delete, and the ✨ Suggest keywords button asks your own model to propose triggers for every entry that has none — the literal names, places and terms someone would type. Chips appear under each entry; take them one at a time with "Use keywords" or all at once with "Apply all", then Save.
The ✂ Trim wordy or repeated prose button does the same for the writing itself: your model reads the whole codex in batches and hands back a tighter version of any entry that repeats itself, restates another entry, or pads — every fact, name, number and rule kept, only the filler gone. Each proposal shows the saving (characters, and the tokens it costs every time that entry fires) with the full rewrite one click away, so read it, then take it with "Use trim" or take the lot with "Use all trims". Entries that are already tight come back untouched. As always, nothing is saved until you click Save, and it runs on your own key.
Lobby cards and bot profiles show a ⚖ weight badge — the bot's starting prompt in tokens: its identity fields, always-on codex entries and the shared books its creator left switched on. Heavy bots (15–20k) are the deep, slow-burn characters that don't reveal everything in a day; light bots are cheaper company per message. It's the honest number to budget your daily tokens against: your reply cost is roughly the badge plus the conversation.
Got lore that isn't a lorebook yet — notes, a wiki page, a chapter of backstory? Click 🧵 Weave from text, paste it in, optionally tell the model what it's looking at ("the Ashen Reach setting; the character is Ryker"), and hit Weave. Your model splits the text by subject — one entry per person, place, faction, event or rule — and proposes a name, trigger keywords and compact present-tense content for each, without inventing facts that aren't in the text. Long pastes are sent in pieces of about 7,000 characters, so a whole document works, it just takes a few calls on your key. Nothing lands in the codex until you've reviewed the list: untick what you don't want, edit names, keywords and text inline, then "Add selected". Entries the model marks as a global rule come in as constant (always in the prompt, before the character) — check those carefully, since every constant costs tokens on every reply. Then Save.
Characters can have multiple first messages (greetings). Each greeting sets up a different scenario or starting point. When you start a new conversation in The Parlor, one greeting is picked at random from the first message plus all alternates and posted as the character's opening line. (Discord bots don't post a greeting on their own — they reply once someone talks to them.)
In The Parlor, users can also cycle through your greetings with arrows under the starter message (until they reply), so every alternate you write is discoverable. Add alternate greetings in the Character Creator under the "Alternate Greetings" section. Each one is a complete opening message, just like your main first message.
Creators can define custom commands unique to their character. These are special triggers that make the bot respond in a specific way.
Add them in the Character Creator under "Custom Commands." Each command has a name, one or more comma-separated triggers (e.g. !recipe, !cook), an optional category, and an instruction that tells the AI how to respond when that command is used. Commands work in Discord when the bot is @mentioned or replied to (not in auto-respond replies).
!recipe command that tells the AI: "Generate a creative recipe in {{char}}'s dramatic Italian style, with commentary about the user's cooking skills."
Custom commands override built-in commands if they share the same trigger name. This lets you personalize the experience per character.
Anything you'd otherwise paste into every character — a house writing style, a shared world bible, your personal set of !commands — goes in a book. Books live in The Library panel of The Atelier and apply across bots without being copied into each one.
Codex book — the same entries as a character's codex, shared. Constant entries go into every prompt (set their position to "before character" for writing directives, so they lead the prompt), and keyword entries fire on their triggers exactly like a normal codex — fuzzy matching, sticky, cooldown and the rest all work. Import a SillyTavern World Info export with "Import Codex".
Command book — a set of !commands. Add them one by one, or use "Import from World Info": each entry becomes a command, its keys become the triggers (/!sumup/ is understood as !sumup) and its content becomes the instruction. Disabled entries are skipped.
My bots reaches every character you own, now and in the future. Everyone (admins only) reaches every bot on UnrealHQ — that's how the platform's house writing style is delivered. A book can be switched off as a whole with its Enabled toggle.
Just me (command books only, Studio and up) turns the idea around: the book follows you rather than your bots. Any bot you talk to on Discord — yours, a friend's, one from the Lobby — answers your !commands from it, on any server, and nothing changes for anyone else in the channel. If the bot already has a command with the same trigger, the bot's own wins. !commands lists yours under Yours. If the plan lapses the book stays put and simply stops answering until you are back on Studio.
Open a character and scroll to Shared Books: every book that reaches it is listed with a toggle, and command books also list each command with its own toggle. Commands from a book start switched off for each character — turn on the ones that fit (or use "All on") so a 50-command book doesn't land on a character wholesale. The book's author can flip that with Commands on by default in the book's settings: every bot the book reaches then answers its commands straight away, and a per-character switch-off still wins. Changes save immediately and running bots pick them up within a minute. A character's own command wins over a book command that shares a trigger, and !commands in Discord always lists exactly what's switched on.
Next to Tagline, Tags, Description, Personality, Scenario and First Message there's a small ✨ Suggest button. Click it and The Atelier sends whatever is already on the page — the other fields and, most usefully, the codex entries you've imported — to your own model and drops a draft of just that field into the box. It's a draft, not a save: edit it, click Suggest again for another take, or clear it. If the field already has text, you're asked before it's replaced, and the model reads the old text as a rough draft to improve. The Muse runs on your API key (a few hundred tokens a go, counted against the same daily limit as chat) and needs a key on file in the Control Room.
The usual order that works well: import your lorebook, hit Suggest on Description, then Tagline and Tags, then Personality, and last First Message (which reads all of the above, so it lands in the character's voice).
Suggestions tease, they don't spoil. Description, Tagline and Tags are shop-window fields — people read them before meeting the character — so The Muse is told to write only what a stranger would see: the surface, the vibe, a hook. The secrets in your codex (backstory, wounds, hidden lore) stay secret, for users to uncover through play. Personality and Scenario are model-facing, so suggestions there still use everything.
Under the Public and NSFW toggles there's a box for models this character will not answer on, one per line. Some models are far more willing than others to recite the instructions they were given; if you've put real work into a character's prompting, this is how you keep it away from the ones that leak. A family name on its own covers the whole family (qwen catches qwen3.6-27b and qwen/qwen3-235b alike), * and ? are wildcards (deepseek*), and a full id such as gpt-4o-mini blocks just that model. Anyone who chats with the character on a blocked model, on Discord or in the Parlor, gets a single line back: isn't available for this character, with a nudge to /setmodel something else. Why it's blocked is never shown. /setmodel warns people at the moment they pick a blocked model for that bot, the Lobby card lists what a character isn't available on, and the rule applies to bot-carried keys too, so don't block the model your own shared key runs on. Be honest with yourself about what this buys: it removes the model that spills most readily, it doesn't make a prompt unextractable.
Next to it, Can see images decides whether pictures people attach are shown to the model at all (see The Parlor). It's on by default.
Below that, Voice is how the character sounds when it sends voice messages on Discord (see Voice messages). Pick from the built-in voices, American or British, female or male, and press Hear it to play a sample line in that voice before you save (type your own line in the box under it to hear the character's actual opening). The two smaller fields matter only for people chatting on their own key: an OpenAI voice for listeners on an OpenAI key, and an ElevenLabs voice id (any voice from your ElevenLabs library, cloned ones included) for listeners on an ElevenLabs key. Leave them alone if that's not you.
Description, Personality, Scenario and Example Dialogue each carry a small In prompt pill next to their label. Click it to flip a field to Not sent to the model: the text stays on the card (the Description still shows in the Lobby, the Muse still reads it for drafts) but it's left out of every prompt. That's the move when your codex already carries the character's identity as constant entries — sending the description too just repeats it on every reply. The starting-constant token figure in the Preview drops the moment you switch a field off; Save to keep it. Custom System Prompt and Post-History Instructions are always sent (they exist only to be sent), and Tagline, Tags, About, First Message and greetings are never part of the prompt.
One more pill sits on the Custom System Prompt label: Platform opener. Every prompt on UnrealHQ begins with a short fixed block from the platform — "you are a collaborative fiction author… never break character… no disclaimers" — and your System Prompt comes right after it, so nothing you write there is ignored; it simply isn't first. If your own prompt already covers that ground and you want the model to hear your words before anything else, flip the pill to off — yours leads and the opener is dropped for that character. The house book is a separate thing: switch it off per character under The Library, and Show the prompt the model received in Test Message tells you exactly what's going in and in what order.
The Test Message panel on a saved character sends one line with your own API key and shows the reply, the exact prompt the model received, and its size in characters and tokens. Nothing is stored in memory. Use it to check that codex triggers fire, that a book applies, and that replies land at the length you want.
Where your prompt goes matters. Instruction-style prompts ("you are the narrator…", writing rules, formatting rules) belong in the System Prompt field, which leads the prompt. A constant codex entry is sent every time too, but it lands under a World Info heading after the description and personality — fine for lore, weak for directives. Every prompt also ends with a short platform line that keeps replies inside one Discord message (about 300 words unless the user raises /setlength); your own instructions win over it whenever they say anything about length or format.
UnrealHQ has a multi-layered memory system that goes far beyond "remember last 30 messages." Your characters actually remember what happened.
1. Recent Messages — The recent chat, sent to the AI as-is with full detail. Count it in messages (default 30, from 5 to 200) or in tokens (1,000 to 1,000,000, as many recent messages as fit), from the Control Room or with /setcontext 40 / /setcontext 32k tokens.
2. Summaries — When older messages pile up, the AI compresses them into narrative summaries. These get injected as "memory blocks" so the character remembers the gist without needing every message. Think of it as the character's long-term memory.
3. Personal Notes — You can pin your own notes to a channel via the Unforgettable. Pinned notes are injected as established facts — perfect for things like "we agreed the character's birthday is March 5th" or "my OC's name is Luna."
4. Memory Books — Your own lorebook of memories, attached to a character (and/or a chat) rather than locked to one channel. Keyword memories come back when the conversation touches them; always-on ones ride in every reply. See Memory Books below.
After a configurable number of unsummarized messages (default 50), the bot automatically generates a summary using your own API key and hides the older messages from the context window. This happens silently in the background — the conversation just keeps flowing. Summaries are kept per channel and per user, and they persist indefinitely; the hidden raw messages behind them are pruned by nightly cleanup after 30 days, so export anything you want to keep verbatim.
!summarize 40 10 — Summarize the last 40 messages, keep the 10 most recent visible (defaults: 50 and 10).!memory — Check your memory stats (total messages, summaries, context window size, auto-summarize threshold).
The Unforgettable page gives you full control:
A codex tells the model who the character is. A memory book tells it what happened between the character and you — and unlike summaries and notes, it isn't chained to one channel: a book of entries that the character carries with it wherever you two talk.
Every memory book has a scope, set when you create it and changeable any time in Unforgettable → Memory Books:
Both filters apply together, so "Dante + this chat" is the narrowest a book gets and "every character + every chat" the widest. A book you switch off is silenced everywhere without losing anything.
Entries work exactly like codex entries, on the same engine. A keyword memory surfaces when one of its keywords appears in the conversation (fuzzy matching catches plurals and close spellings); an always memory is in every reply. Memories are private to you — the character's creator never sees them, and other people talking to the same bot don't get yours. Memory books have their own token budget (about 6,000 tokens per reply), separate from the codex.
Make a memory from a conversation. On Discord, /creatememory (or @Bot !creatememory 40) turns part of the chat into a memory: the last N messages, or everything between two message links (right-click a message → Copy Message Link, for from and to). Add about: to say what to focus on, and pick scope: This chat only to keep it out of your other chats with that character. In the Parlor, the ✦ Memory button in the chat header does the same with checkboxes: tick the messages, get a draft, fix anything before saving. The draft is written on your own API key; the memory lands in a book named after the character, created for you if you don't have one.
Import a lorebook. Open a book in Unforgettable and use Import lorebook (.json) — SillyTavern World Info exports, character_book files and our own exports all work, and the entries keep their keywords, constant flags and settings. Export gives you the book back as a World Info file.
Write it yourself. + Add memory in any book: a title, keywords, the memory, and whether it's always on.
!creatememories auto 40 (or /creatememory auto:40) makes the bot write a memory on its own every 40 messages in that channel, from the latest stretch, into your book, on your key. It's per account, per bot, per channel, so a friend in the same channel can set their own and each of you gets your own memories. auto 40 chat keeps those memories to that channel; auto off stops it; !creatememories auto alone shows the status. If your key stops working or the book fills up, the rule pauses and the bot tells you once in DMs; set it again once that's fixed. The Parlor has the same thing under ✦ Memory → Set and forget. Anything between 10 and 200 messages works.
/creatememory asks you to link your Discord first. Once linked, a memory made in a server is the same memory the character has in the Parlor.
The Parlor lets you chat with any character directly in your browser, no Discord required. Great for testing a character before you invite the bot to a server, or for private conversations that don't need a Discord channel. + New Chat lists your own characters, published or not (the Atelier's character cards have a Chat button too), and the Lobby has everyone else's public ones.
@Bot !regen, or react 🔁 to the bot's last reply: the bot edits that message in place with a fresh take (the person it was answering, or a channel admin, can do it).:mute:, or 🙈) to one of the bot's replies and that bot stops reading it: the message stays in Discord but leaves the character's memory (the person it answered, or a channel admin; the bot adds its own 🔇 to confirm). React 🔇 to your own message and every bot in the channel stops reading it. Take the reaction off and it comes back. Handy for OOC asides, typos you'd rather the character never saw, or a reply that went somewhere you don't want remembered.The ⚙ panel is where the Parlor's look lives. Start with a colour preset or your own four colours, then Appearance: a background picture (with dim and blur so the text stays readable), frame art for the top bar and the typing box, a font (built-in ones, or paste a Google Fonts link and the font's name), text size, separate bubble colours for you and the character, bubble roundness and see-through, avatar size, shape and a frame picture around them, the chat's width, a picture for the send button, and under More pictures art for the round buttons, for each side's speech bubbles, the sidebar, the settings panel and even the mouse cursor. Picture fields take a link to an image (right-click a picture online → Copy image address). The Custom CSS box under it takes anything the fields don't cover.
Share a look. Copy theme code turns the whole thing into one uhqtheme: string; anyone can Paste a theme code and have it. Creators can ship a look with a character: paste a theme code into the Atelier's Parlor look field and everyone who chats with that character gets it, unless they untick Use a character's own look in their own panel. Looks are saved in your browser, so a new device starts plain until you paste your code there.
UnrealHQ bots are built for group dynamics. They don't just talk to one person — they're aware of everyone in the room.
The bot saves every message in a channel to its history, even messages not directed at it. This means:
Bots see each other too. Every message another bot posts is saved into the history as a named speaker, so your character knows what the other characters said and can react to it. Left alone they only observe; a bot answers another bot only when that bot @mentions it, and only for a couple of exchanges after a human last spoke in the channel, so two characters can never chat each other into an endless loop.
Making them talk to each other (a scene hand-off). You start it: @Alex ask @Kaito what he makes of the plan. The first @ is who you are talking to; a bot @'d later in the sentence is being talked about, so Kaito listens rather than answering you himself (put both names up front, @Alex @Kaito, thoughts?, when you want both). Alex is told who else is in the room, and when his reply addresses Kaito as @Kaito Weiss that becomes a real mention, so Kaito answers; if Kaito hands it back the same way, Alex gets one more turn, then they wait for a human. The characters are told how this works: in a room with other characters, writing @Name in a reply is how they pass the scene on, and they are asked to do it only when they want that character to speak next. Those bot-to-bot replies run on the key of the person who last spoke in the channel, with that person's model, persona and memories, so a scene you start is yours: if you have no key on file the bots stay quiet rather than nag. Two bots, two mentions in one message, and you get both perspectives at once. The exchange budget is two replies per human message, and any human message resets it, so a steady hand keeps a whole cast going. Two guard rails keep it in your hands: a bot can only be pinged if it has already answered in that channel (a bot that merely lives in the server stays plain text until a person brings it in), and anyone with Manage Channels can set the budget per channel with @Bot !tagging off (bots never hand the scene to each other there), !tagging 1 through !tagging 10, or !tagging on for the default; !tagging alone shows the current setting. Only bots get pinged this way: an @Name in a reply that matches a person stays plain text.
Three behaviours, chosen per channel by a server admin (Manage Channels, Manage Server or Administrator):
@Bot !auto on (or the /auto slash command). The bot answers every message in that channel like a member of the conversation. Add !auto cooldown 30 so it never fires more than once every 30 seconds.!auto on then !auto chance 25 (or /random 25): the bot joins in on roughly a quarter of messages, which reads far more like a person. Narrow it further with !auto keywords add coffee so it only reacts when its topics come up.Back to quiet with !auto off (or /ping). !auto on its own shows the current settings, and the same controls live in the Server Manager page per channel. Details in Auto-Respond Mode.
Each bot has its own behaviour per channel. @Si Woo !auto chance 30 makes Si Woo chime in while Dante, in the same channel, stays quiet — the bot you @mention (or whose slash command you use) is the one that changes. The Server Manager shows a "Per-bot behaviour" row for every bot in the server, with a channel-wide default underneath it for bots you haven't set individually. !auto default puts a bot back on the channel default. Settings are stored permanently; they never expire or need repeating.
A public channel accumulates. After a few weeks of everyone playing, the bot is carrying every earlier scene at once and has agreed to marry half the server — and one determined god-modder can drag the whole room's story with them. Theatre crews call clearing the stage after a show striking the set, so that's the command. In a server, anyone with Manage Channels, Manage Server or Administrator can use it; the server's admins decide for their server, whoever made the bot. In a DM with a bot, you can strike your own conversation any time.
@Bot !strike (or /strike now) makes that bot forget everything said in this channel or thread, right away, no confirmation — its stored lines and memory blocks are deleted outright, and the next message is a clean first meeting. Each bot keeps its own memory of a channel, so striking Dante leaves Si Woo's memory of the same room intact. !strike @user (or /strike user) forgets just one person: their lines and the bot's replies to them, everyone else's story untouched. !strike all, then !strike all confirm within a minute (or /strike all confirm:True), clears every bot in the channel at once.
Anyone on Discord can make every UnrealHQ bot forget them, with no account needed: /forgetme confirm:True (or @Bot !forgetme confirm) deletes their messages and the replies they got from every bot, in every server and DM, right away. Memory books and notes on the site belong to their owner and stay; deleting the account removes those.
To take back just the last stretch of a scene, @Bot !strike 10 deletes the last 10 messages in the channel from Discord itself and every bot forgets them, so an argument, an out of character tangent or a scene that went somewhere it shouldn't is gone for good on both sides. Up to 100 at a time; more than 25 asks you to confirm. Anyone with Manage Messages can use it, and the bot needs Manage Messages in that channel too. In a DM the bot can only delete its own messages, so yours stay on screen but are forgotten.
For busy channels, set a standing rule so the harem never forms: !strike every 24h (or every 7d; /strike every) has the bot forget the channel on a timer, and !strike keep 300 (/strike keep) keeps only its newest 300 lines there. !strike rules shows what's set; !strike every off / !strike keep off clear it. Rules are per bot and per channel. Nothing anyone saved on purpose is touched by any of this: memory books and pinned notes on the site stay exactly as they were.
Striking clears memory, not Discord. The messages themselves stay in the channel. To make a bot take down its own messages — after a stolen token, say, when someone posted as the bot into your DM — use /cleanup: /cleanup count:100 tells you how many of its messages it found, and /cleanup count:100 confirm:True deletes them, newest first. Add within_hours: to stay inside a window. It only ever removes that bot's messages, never yours or anyone else's; in a DM you can always run it, in a server it takes Manage Messages or being the bot's creator. It does not touch memory — follow with /strike if you want the bot to forget too. (The moderation kit's /purge is the other one: any user's messages, server only, and the kit has to be switched on.)
Even in a shared channel, each user's pinned memory notes are private. Your notes about the RP are injected only into YOUR interactions with the bot.
!tagging changes that per channel, down to off) — so two characters can't chat each other into an endless loop, and a bot that has never spoken in a channel can't be dragged in by another bot. See Several Bots in One Channel for how to hand a scene from one character to another.
Bots can hear and speak. Send a Discord voice message in a DM (or in a channel where the bot answers everything) and the bot listens to it, answers, and remembers what you said as [voice: …]. Turn on /voice match and it answers your voice messages with a voice message of its own, in the voice its creator chose; /voice always adds a spoken clip to every reply, and /voice random 30 makes it a surprise: roughly 30% of replies arrive as voice, the number is yours to pick (a voice message from you always gets one back). /voice off goes back to text, and /voice alone shows your setting and today's usage. The text reply always comes first, the clip follows a few seconds later.
Hearing runs on our own server and every plan gets some: bots hear 5 voice messages a day on Free, 15 on Starter, 30 on Studio, and unlimited on Headliner. Spoken replies are a Studio and Headliner perk with a daily allowance (Studio 20, Headliner 40). Speaking is for members: Starter and up can bring their own key, which also lifts the hearing allowance (a free account gets no spoken replies, even with a key, since the bots and our server do the work): /voicekey openai <key> covers both directions, /voicekey elevenlabs <key> gives you ElevenLabs voices (the character's creator sets which one), and /voicekey groq <key> is a nearly free way to be heard. The message is deleted right away, like /setkey; /voicekey <provider> off removes a key. Clips are capped at about two minutes, and long replies are trimmed to what fits.
| Command | What It Does |
|---|---|
/voice match | Answer my voice messages with voice |
/voice always | Every reply comes with a voice message |
/voice random 30 | A voice message now and then, about 30% of replies (1 to 100) |
/voice off / /voice | Text only / show your setting and today's usage |
/voicekey openai|elevenlabs|groq <key> | Your own key for voice, no daily allowance (off removes it) |
By default, bots only respond when @mentioned or replied to (and always in DMs). Auto-respond mode lets the bot participate naturally, responding to any message in the channel as if they're part of the conversation. Settings are per channel and per bot: the bot you @mention is the one you're configuring, and a channel-wide default (Server Manager) covers any bot without its own setting. Settings persist until changed. Viewing the status is open to everyone; changing it requires Manage Channels, Manage Server or Administrator. @mention the bot when using these text commands (unless auto-respond is already on).
| Command | What It Does |
|---|---|
!auto on | Enable auto-respond in this channel |
!tagging [off|on|0-10] | Admins: how freely bots may hand the scene to each other in this channel — off, back to the default, or a cap on bot-to-bot replies between your messages; alone, shows the setting. A bot can only be tagged once it has spoken in that channel |
!auto off | Disable auto-respond |
!auto cooldown 30 | Wait at least 30 seconds between auto-responses (0–300) |
!auto chance 50 | Only respond to ~50% of messages (1–100, more natural) |
!auto keywords add <word> | Only auto-respond when one of the keywords appears (remove, list, clear also available) |
!auto default | Drop this bot's own setting; follow the channel default |
!auto | Show current auto-respond settings |
!strike / !strike @user / !strike all | Strike the set: this bot forgets this channel, one person here, or every bot starts over (admins; anyone in their own DM) |
!strike 10 | Delete the last 10 messages here from Discord and from every bot's memory (Manage Messages; up to 100, over 25 confirms) |
!strike every 24h / !strike keep 300 | Standing rules: forget on a timer, or keep only the newest N lines (off clears; !strike rules shows) |
/auto / /ping / /random [chance] | Slash-command shortcuts: reply to everything, only when mentioned (default), or unprompted at a set chance (default 25%) |
/setkey.
Personas let you define how YOU present yourself to the bot. It's your RP identity — a name and description injected into the bot's context so it knows who it's talking to.
Go to the Control Room and open Settings. Under User Personas, create a persona with a name (max 30 characters) and a description of your character. You can create up to 10 personas for different scenarios.
{{user}} becomes the persona name/persona <name> in a channel, /persona <name> everywhere (or the Control Room's Use everywhere button) for your default, /persona to list, /persona off to clear. A channel choice always wins over your default, including off. With a persona active your lines reach the model under the persona's name, so that is what the character calls youOnce your bot is working, you can publish it so other people can discover and invite it to their servers.
In the Command Center, each bot card has a publish section. Publishing needs the character locked to the bot first (the Lock button beside the character picker): a public bot's binding is permanent, which is what stops one bot slot being rotated through many characters. Write a short public description, then click Publish to the Lobby (or flip the character's Public toggle in The Atelier — it's the same switch). Your bot will appear in The Lobby for other UnrealHQ users to find, with a click-to-invite card. The card's Profile Settings let you pick a profile theme, write a longer bio (up to 12,000 characters, with light formatting: # headings, **bold**, *italic*, - bullet lists, --- dividers and [text](https://…) links), and add custom CSS for the bot's profile page. The profile card in The Lobby grows with what you put into it — a short bio gets a compact card, a long one gets a wide, full-height page — and custom CSS can size it further with .modal { max-width: … }.
Public bots appear in The Lobby with the bot's name, avatar, and your public description, plus an Add to Discord button. A Chat on web button appears too, so visitors can try the character in The Parlor before inviting it.
Finding things again. The Lobby lists alphabetically by default (the sort dropdown still offers Featured first, Most recent and Most popular). Every card carries a star in its top-left corner: tap it and the card joins your ★ Favorites tab, so the bots you actually play with are one click away instead of a search. Favorites are yours alone — nobody else sees what you starred, and creators are not told — and they work on Web only cards just the same. Tap the star again to drop one.
No bot yet? You can still be in The Lobby. Flip a character's Public switch in The Atelier and it shows up as a Web only card: name, avatar, tagline and tags, with Chat on web as its main button. That's a fine way to let people meet a character (and for you to get feedback) before you go through the Discord token setup. Your character allowance covers these the same as any other, and the description itself is never shown — the tagline is the card's blurb and About fills the profile, so write both.
Someone else can pay for your bot on their server. A paid member who runs a Discord server can attach their own API key to your published bot, for that server only (Servers → "Your key, for your server"). Their community then uses your bot without each person bringing a key — on their provider's bill, never yours, and they never see your prompt or your codex. You keep the switch: each bot card in the Command Center has a Server Keys section showing who has done it and letting you turn it off for that bot. Turning it off stops their key working immediately (the key is kept, so turning it back on revives it), and their key also stops if their plan lapses. Anyone who has set their own key always uses theirs regardless.
Three independent gates, each owned by the person it protects. They stack: a user has to pass all of them.
Each bot card in the Command Center shows Last reply in Discord. "Running" only means the process is up; this line tells you when the character last answered someone. A running bot that has been silent for a day gets an amber notice — usually nothing is wrong (quiet servers), but if people have been talking to it, check the channel's permissions or press Restart.
Creators can block specific Discord users from interacting with their bots, everywhere the bot lives. If someone is being disrespectful or abusing your character, expand Blocked Users on the bot's card in the Command Center, type their Discord username and click Block: the bot looks them up in the servers it's in (it has to be running and share a server with them) and stores their user ID, so the block follows them even if they rename. If the bot can't find them, paste the ID instead: enable Developer Mode in Discord (User Settings → Advanced → Developer Mode), then right-click the person and choose "Copy User ID". A block is per bot, applies everywhere that bot lives, and the bot doesn't even keep that person's messages in its memory.
Want your bot in your servers only? Expand Allowed Servers on the bot's card, tick Only allowed servers may host this bot, and list the servers that may have it (paste a Server ID — right-click a server icon with Developer Mode on → Copy Server ID — or just click Allow next to any server the bot is already in). Discord can't make an invite link itself selective, so the bot enforces the list on arrival: invited somewhere that isn't listed, it posts a short note in the server's system channel explaining that it's invite-restricted (with the Server ID to send you) and leaves immediately. Removing a server from the list evicts the bot from it too. Turning the whitelist on with an empty list auto-allows every server the bot is currently in, so you can never lock it out of its own home by accident.
Server owners get the mirror image: decide which members may use a bot in their server, without touching any user IDs. Anyone with Manage Server can run /access add role:@Regulars (or @Bot !access role add @Regulars) and from then on that bot only answers members holding an allowed role — everyone else is ignored in auto-respond channels, and a direct @mention just gets a quiet 🔒 reaction so they know it's deliberate. Adding someone to the whitelist is then simply giving them the role. /access remove takes a role off the list, /access everyone clears the restriction, /access show (or a bare !access) shows the current setup. Each bot keeps its own role list per server, and admins are never locked out of their own bots.
Every UnrealHQ bot can double as a lightweight moderation bot for the servers it lives in. It is off by default — the bot's owner turns it on per bot in the Command Center (bot card → Moderation Tools → Turn on).
Discord's rules put adult content in age-restricted channels. UnrealHQ enforces that for you: a character marked NSFW in The Atelier only answers in channels flagged Age-Restricted (Edit Channel → Overview), in threads inside them, in servers marked age-restricted (Server Settings → Access), and in DMs. Anywhere else it stays quiet; when someone @mentions it there it explains once an hour what a server admin needs to flip, and otherwise just reacts with 🔞. Commands and settings still work in DMs. Server owners: if most of your server is adult content, mark the whole server age-restricted rather than channel by channel — that is also what Discord expects.
Running a community server around your bots? @Bot !agent @user gives that person your member role (by default a role named Field Agent) and, if a channel called #the-ledger exists, drops a one-line note there saying who was onboarded and by whom. !agent remove @user takes the role back. !patron @user and !staff @user do the same for roles named Patron and Staff (!staff needs Administrator, since it hands out moderation powers). All need Manage Server, and the bot's own role must sit above the role it is giving. The role and ledger names can be changed per bot with the ONBOARD_ROLE, ONBOARD_PATRON_ROLE, ONBOARD_STAFF_ROLE and ONBOARD_LEDGER settings.
/purge, Moderate Members for /timeout, Kick Members for /kick, and so on). Discord hides each command from anyone who lacks it, and the bot checks again when the command runs.| Command | Needs | What it does |
|---|---|---|
/purge <count> [user] | Manage Messages | Bulk-delete the last 1–100 messages in the channel, optionally only one user's (Discord can't bulk-delete messages older than 14 days) |
/slowmode <seconds> | Manage Channels | Set the channel's slowmode (0 turns it off, max 6 hours) |
/timeout <user> <duration> [reason] | Moderate Members | Time a member out for 60 seconds up to 4 weeks |
/untimeout <user> | Moderate Members | Lift a timeout early |
/kick <user> [reason] | Kick Members | Remove a member (they can rejoin with an invite) |
/ban <user> [reason] [delete_days] | Ban Members | Ban a user, optionally deleting their messages from the last 0–7 days |
/unban <user_id> | Ban Members | Lift a ban by Discord user ID |
/warn <user> <reason> | Moderate Members | Record a warning (kept per server by UnrealHQ) and DM the member |
/warnings <user> | Moderate Members | List a member's warnings on this server |
/clearwarnings <user> | Moderate Members | Delete all of a member's warnings on this server |
Every section of the settings page folds: click a heading to open it, and the page remembers which ones you left open on that browser.
The Control Room settings panel lets you configure everything in one place.
| Setting | Default | What It Does |
|---|---|---|
| Provider | Electron Hub | 17 providers: ElectronHub, OpenAI, Anthropic, OpenRouter, UnrealHQ Managed API, DeepSeek, Google AI Studio, Mistral, Groq, AI21, AI/ML API, Fireworks, Cohere, Moonshot, NanoGPT, Chutes, or Custom for any OpenAI-compatible endpoint. Switching provider restores the model you last used with it (or the provider default). |
| API Key | — | Your provider API key (encrypted at rest, masked in UI). One key per provider; all stored keys are listed below the field and can be removed individually. |
| Model | — | The AI model name (e.g., gpt-4o, claude-3-5-sonnet). The box offers a searchable list fetched from your provider with your stored key. |
| Temperature | 0.7 | Creativity, 0.1–2.0. Lower = focused/predictable. Higher = creative/varied. |
| Reply length | 600 | How long one reply may be, in tokens (~4 characters each), 50 to 4000. 600 fits one Discord message. Other front ends call this "max response length"; it is not the context size. |
| Context | 30 messages | How much of the chat the bot remembers per reply, counted in messages (5 to 200) or in tokens (1,000 to 1,000,000; as many recent messages as fit). Raise it for longer memory, lower it to save tokens. |
| Custom Base URL | — | For self-hosted or custom OpenAI-compatible endpoints (HTTPS). Use the full API root the provider documents, not just its domain, and the provider's own model name (for example, GLM through Z.AI is base URL https://api.z.ai/api/paas/v4, or https://api.z.ai/api/coding/paas/v4 for a GLM Coding Plan key, with model glm-5.3; the z-ai/glm-5.3 form is OpenRouter's name for it and only works with an OpenRouter key). |
The Save API Settings button sits at the bottom of that box, and it saves only that box. Pick the provider, paste the key, type the model, and press it: the provider you chose, the provider the key is saved under, and the model name's format all have to agree, or the bot goes looking for a key that isn't there.
All settings can also be changed via Discord commands (/setkey, /setmodel, /settemp, /setlength, /setcontext); /settings shows them. Discord settings and website settings are the same thing once your Discord is linked.
. _ -, and it can't match someone else's/housekey <provider> <key> (deleted at once, like /setkey); /housekey model <id> picks its model, /housekey off pauses it, /housekey shows it.uhq- token, or any provider's key — open Attach a key you already have on the bot's card, paste it, pick where it's used (every server, or only one), and it becomes the bot's fallback for everyone who talks to it there. It never shows to them and can be pinned, moved, or removed like any other keyuhq- token, your remaining credits and today's usage are shown here tooYou own your data. UnrealHQ gives you two big buttons in your Control Room settings for exercising your rights under GDPR (and just as a matter of basic respect):
Download a JSON file containing everything associated with your account: characters (with their prompts decrypted), conversations and memory summaries, bots, personas, and settings. For safety the export lists which providers you have keys for, but never the API key values themselves. Perfect for backups or if you want to migrate your work somewhere else.
Wipes your account and all associated data from UnrealHQ. This is irreversible — there's no soft-delete or grace period. Requires typing "DELETE" and your password to confirm. All of your running bots stop and are unregistered (their tokens are removed from our store), characters and avatars are deleted, all conversations are removed, and your login is invalidated immediately.
Not sure what a particular bot answers to? @Bot !commands replies with its live list — built-in commands, the character's own, and whatever its creator switched on from a command book — grouped by category.
Commands starting with / below are typed as plain text (or sent in a DM) — @mention the bot unless the channel has auto-respond on. /setkey and /link are picked up by every bot in the channel with or without a mention, and never stored in history. Commands starting with ! also need a mention or reply.
| Command | Description |
|---|---|
/setkey [provider] <key> [base-url] | Set your API key (provider defaults to electronhub; custom needs an HTTPS base URL). The message is deleted in servers. |
!provider | List all provider names |
/prompt [message] | Server admins, the bot's creator and UnrealHQ admins: a private file showing exactly what this bot would send to the model from this channel — persona, lore, memories, notes, the history it would include — with a token estimate. Nothing is sent to the model. |
/setmodel <model> [here|bot] | Change your model: default, or for this bot in this channel (here), or for this bot everywhere (bot). /setmodel clear here|bot removes an override; bare /setmodel shows what applies. |
/settemp <0.1-2.0> | Set creativity/temperature |
/setlength <100-4000> | Set maximum reply length in tokens |
/setcontext <5-200> or /setcontext 32k tokens | Set how much of the chat the bot remembers, in messages or tokens |
/settings | View all your current settings (also !settings) |
/reload | Refresh character data from database (requires Manage Channels, Manage Server or Administrator) |
| Command | Description |
|---|---|
/link <code> | Link this Discord account to your UnrealHQ account (code from the Control Room) |
/unlink | Disconnect your Discord account |
/whoami | Show which UnrealHQ account you are linked to |
/persona [name|off] [everywhere] | List personas, pick one for this channel (a DM counts as its own channel, so a persona set there stays in that DM), or turn it off; add everywhere to set your default for every channel |
Available when the bot owner turns on Moderation Tools; each requires the matching Discord permission. See Moderation Tools for the full table: /purge, /slowmode, /timeout, /untimeout, /kick, /ban, /unban, /warn, /warnings, /clearwarnings.
| Command | Description |
|---|---|
!memory (!mem) | View memory stats for this channel |
!summarize [count] [keep] (!sum) | Manually summarize messages (defaults 50 / 10) |
!creatememory 40 | Turn the last 40 messages into a memory in your memory book (needs a linked account and your own key) |
!creatememory <link> <link> [chat] | Same, from one message link to another; add chat to keep the memory to this channel only |
!creatememories auto 40 [chat] | A memory every 40 messages here, on its own, into your book (per account, per bot, per channel). auto off stops it, auto shows the status |
Changing these requires Manage Channels, Manage Server or Administrator.
| Command | Description |
|---|---|
!auto | Show the channel's auto-respond status (anyone) |
!auto on/off | Toggle auto-respond mode |
!auto cooldown <0-300> | Minimum seconds between auto-responses |
!auto chance <1-100> | Response probability percentage |
!auto keywords add|remove|list|clear [word] | Only auto-respond when a keyword appears |
Beyond the system commands above, what a bot answers to is up to its creator. Commands like !relationship or !msg come from the creator's command book in The Library and are switched on per character — so two bots can have completely different command sets, and a bot with no command book has only the system commands. To see exactly what a bot can do, @mention it with !commands (or !help) and it lists everything it currently answers to, grouped by category.
These are real Discord slash commands (they show up in the / picker). Account commands reply privately (only you see the response).
| Command | Description |
|---|---|
/delete [count] | Delete the bot's last N messages (1–50, default 1) from Discord and from history (requires Manage Messages permission) |
/hide [count] | Hide (exclude) the bot's last N messages from context without deleting (requires Manage Messages permission) |
/auto | Reply to every message in this channel (requires Manage Channels) |
/ping | Only reply when mentioned or replied to (the default) (requires Manage Channels) |
/random [chance] | Reply unprompted at the given percent chance, default 25 (requires Manage Channels) |
/link code:, /persona [name:], /whoami | Slash versions of the account commands above; work in servers and in bot DMs |
/creatememory [last:] [from:] [to:] [about:] [scope:] [auto:] | Make a memory from the last N messages or a from–to range of message links; private reply with the draft |
Back up your chat history from the Unforgettable. Each channel can be exported individually in two formats:
Bring your existing conversations to UnrealHQ! Unforgettable (into a Discord channel) and The Parlor (into a new web chat) both accept SillyTavern JSONL and JSON (array or wrapped chat/messages format). The importer auto-detects the format.
The Atelier supports TavernCardV2 (and V3-style) JSON import and export of saved characters. Import a character card and all fields come across — description, personality, scenario, example dialogue, system prompt, post-history instructions, tags, codex entries (character_book), and alternate greetings.
PNG cards work too. Choose the character's .png straight from your SillyTavern characters folder: the card embedded in the image (the chara or ccv3 chunk) is read in, and the picture itself is uploaded as the avatar with the hidden card text stripped out, so nobody can pull your description or codex back out of the avatar file.
Migrating a whole roster? The Bulk Import card in The Atelier's Import/Export panel takes a pile of files at once — TavernCard .json, SillyTavern .png cards, and bare World Info lorebooks — and turns each into a private draft. A lorebook with no card becomes a draft named after the file, carrying just its codex. Only a name is required to save a character now, so you can work in passes: dump everything in, then come back to each draft for its description, personality and polish. A description (or personality) is only demanded at the moment you flip a character public, because a public character needs an identity to play; the tagline is what the Lobby card shows.
Two-file characters merge themselves. SillyTavern often ships a character as a pair: the card in one file, the lorebook in another. When both are in the same batch and the names line up (or the batch is exactly one card plus one lorebook), the lorebook's entries land inside the card's draft instead of becoming their own character. An unmatched lorebook still becomes a draft, but its result line asks "is this lore for…?" with a merge button. And if a shell already slipped through, open the real character and use Merge In a Draft in the Import/Export panel: the shell's codex moves over, its text fills any empty fields (never overwriting yours), and the shell is deleted.
Got an existing codex file? Click "Import Codex (.json)" in The Atelier. It handles all common World Info formats, including older ones with different field names. Choose to merge with existing entries or replace them entirely.
/setkey (or in the Control Room, if your Discord is linked). Without a key the bot replies with setup instructions when addressed, and silently skips you in auto-respond channels./setmodel)/settemp doesn't control length — max tokens does; set it in Control Room settings or with /setlength)/setcontext) so the bot sees more historyNo — think of the bot as the character card itself. One character powers exactly one bot, and its codex, memory and commands travel with it. What you can do is invite that one bot to as many servers as you like (the way Clyde or any other public bot lives in thousands of servers). If a character is already driving another bot it shows as "used by" in the dropdown; unlink it there first if you really want to move it. You can still swap which of your characters a bot uses until you Lock the binding.
Use the Invite button in the Command Center. If you created your own invite link in the Discord Developer Portal, that works too.
With your own API key, not from us — your only limits are your provider's rate limits and your API budget (web chat in The Parlor is rate-limited to 15 messages a minute). UnrealHQ Managed API tokens do have limits: each plan has a daily token cap and a prepaid credit balance, and the bot tells you verbatim when you've hit either.
No. The bot uses each message sender's own API key. If someone doesn't have a key set, the bot replies with quick setup instructions when they address it (and silently skips them in auto-respond channels). Everyone who wants the bot to respond to them needs to set their own key with /setkey, or ask the admin for a managed token.
There is no support email — contact the platform admin on Discord. The same goes for invite codes, managed tokens, password resets and raising your quotas.