LoreChat

How to write a character card that stays in character

Updated September 3, 2026

Three fields, three different jobs

The single most common mistake is writing the same thing three times. Description, personality and scenario are all sent to the model, so repeating yourself across them costs tokens and buys nothing.

The description is who the character is: appearance, occupation, what they want, what they will not do, and the handful of facts that would come up in the first hour of knowing them. Prose or tight lists both work. Write it as information rather than praise — "Runs the only forge in a town that hates her" is worth a paragraph of adjectives.

The personality is how they behave: temperament, speech habits, what makes them go quiet, what makes them sharp. Keep it short and behavioural. "Answers questions with questions when cornered" changes replies; "complex and mysterious" does not, because it tells the model to be vague.

The scenario is the situation, not the character: where you are, when, and what is already in motion when the first message lands. It is also what the story director reads, so it is worth being concrete here even if you keep everything else terse.

The first message sets the terms

The opening message is the strongest example of voice the model will ever see, because it is the only one it wrote in the character's own words with nothing preceding it. Whatever you do there — present tense or past, actions in italics or not, long paragraphs or clipped ones — is the format it will copy for the rest of the chat. Choose deliberately.

Do two things with it. Put the reader somewhere specific: a place, a time, one sensory detail that is not weather. Then end with an opening — a question, an offered hand, a door left ajar. A first message that closes every thread leaves the reader nothing to answer, and the first exchange is where a chat is usually lost. Two or three paragraphs is plenty.

Example dialogue, formatted properly

Example dialogue lives in mes_example and teaches voice by demonstration. The convention is a <START> line beginning each exchange, then alternating lines prefixed {{user}}: and {{char}}:. The macros matter: {{char}} is replaced with the character's name and {{user}} with your persona's name when the prompt is built, so examples written with macros stay correct for every reader.

Two or three short exchanges beat one long one. Pick moments the description cannot state: how the character deflects a compliment, how they behave when they are wrong, what their humour sounds like. Do not deliver plot here — examples are a voice sample, not history, and anything in them risks being treated as something that already happened.

  • <START> on its own line to open each exchange
  • {{user}}: for the human's line, {{char}}: for the character's
  • Two or three short exchanges, each showing a different register
  • No plot, no lore dumps, no facts you have not put in the description

Alternate greetings make a card replayable

A card with one opening has one story in it. Alternate greetings are extra first messages you choose between when a chat begins, and each one can put the same character in a completely different situation: met as a stranger, met as an old enemy, met the morning after something went badly. Up to twenty are imported and kept.

Write three or four, and make them genuinely different starting positions rather than rewordings of one scene. Only the greeting you pick is sent, so they cost nothing at runtime: this is the cheapest depth you can add to a card.

Lorebook keys and scan depth

A lorebook holds world detail as entries with trigger keys, and an entry is injected only when one of its keys appears in the recent conversation. Recent means the last scan_depth messages, which defaults to 4. That default is what people forget: a key mentioned six messages ago is out of range, so an entry that worked in testing goes quiet later in a long scene.

Choose keys the way a reader would say them, including variants: a place name, its nickname, the demonym. Avoid keys so common they fire constantly — the character's own name is the classic mistake. Mark an entry constant when it must always be present, such as a rule that defines the setting, and do that sparingly, because constants are paid for on every request. Selective entries need a secondary key as well as a primary one, which keeps an entry from firing on a word that means two things. Keys written as /pattern/flags are treated as regular expressions for cards you imported yourself.

Everything the lorebook inserts shares a token_budget, 2048 by default. When more entries match than fit, the budget decides what survives — so forty overlapping entries are not richer than twelve precise ones, just less predictable.

Keep the token cost honest

Description, personality, scenario and example dialogue are sent with every request, for the whole chat. A card that is too large crowds out the conversation itself, and the character starts forgetting what happened twenty messages ago because there is no room left for it. If a line does not change how the character answers, cut it.

Push detail into the lorebook instead, where it is paid for only when relevant. Pinned messages and memory notes feed long-term memory and the story director keeps a running summary, so facts established in play do not need pre-loading into the card.

Test with regenerate and swipe

The only way to know whether a card works is to chat with it. Regenerate the same reply a few times and swipe between the versions: consistent versions mean the card is steering, wildly different ones mean it is not saying enough. Watch for the character narrating instead of speaking, agreeing with everything, or drifting out of voice — each points at a weak field, usually personality or example dialogue.

Then test the edges. Say something the character should refuse, and see if they refuse. Mention a lorebook key and check the entry arrives. Start a fresh chat from each alternate greeting, since a greeting that contradicts the scenario shows up immediately. Two rounds of this beat another paragraph of description.

How the story director reads your scenario

When a chat starts, the story director drafts a plan from the card: a premise, four to eight beats that rise in tension, and a twist that stays hidden until its beat. It keeps a running summary as the chat grows and steers each reply toward the current beat, and it can be turned off per chat.

It works mostly from the scenario, which is a good reason to write one with a situation in it rather than a mood. "A tavern in a fantasy town" gives the director nothing to escalate. "She has three days to repay a debt to people who do not take coin" gives it a clock, a pressure and an obvious place for a twist. Leave the ending unstated — the director invents the twist, and it is better at that when you have not already written one into the description.

FAQ

How long should a character card be?

Long enough to constrain behaviour and no longer. A few hundred words of description, a short behavioural personality, a concrete scenario and two or three example exchanges is plenty for most characters. Everything you write is sent with every reply, so extra length is paid for continuously.

Should I use plain prose or a structured format in the description?

Either works. Prose reads better and models handle it fine; structured lists are easier to edit and audit for repetition. What matters more than the format is that each line adds a fact or a constraint rather than restating the last one.

Why does my character break character after a while?

Usually the card is being crowded out by a long chat, or the personality field is too abstract to steer anything. Trim the card, make the personality behavioural, add example dialogue showing the voice under pressure, and pin the messages that established anything important.