How to write an AI character card that works, field by field
The short answer
- A card is text the app pastes into every prompt. Description, personality, and scenario go in every time. The first message goes in once. Example dialogue drops out when the chat fills the context.
- The first message decides the most. The model copies its length, voice, and formatting for the rest of the chat.
- Short cards win. Keep the permanent fields under 2,000 tokens. Long cards fail in the same way: half rules for the model, half backstory the character would never mention.
What each field does
The fields come from the Character Card V2 and V3 specs, so a card made for one app opens in another. What matters is when each field reaches the model.
- Description. Who they are: appearance, manner, history, what they want. Sent with every message, so it costs tokens for the whole chat. Plain prose, a few paragraphs.
- Personality. One or two lines, also sent every time. If the description already covers it, leave it empty.
- Scenario. Where the chat starts and what stands between you. Also permanent: if it says "they have just met", it still says so 200 messages later.
- First message. The character's opening turn, sent once. See the next section.
- Example dialogue. Short exchanges that show how the character talks. Sent only until the real conversation needs the space.
- Creator notes. For the person reading the card, never sent to the model. Model suggestions and content warnings go here.
- System prompt and post-history instructions. Overrides for the app's own prompt. Use them only when you know what the app sends by default. Rules for the model do not belong in the description.
Two placeholders work in every field: {{char}} becomes the character's name and {{user}} becomes yours. Use them instead of names, so the card survives a rename and a change of persona.
The first message sets the style
The model treats the first message as the example of a good turn. A 600-word opener produces 600-word replies. An opener in the character's voice, in the present tense, with one concrete thing happening, produces replies like that.
- Length: 150 to 300 words. Longer openers cause "every reply is a wall of text".
- Voice: the person, tense, and formatting you want back. Actions in asterisks and speech in quotes, if that is what you want.
- An opening for you: end on a question, an interruption, or a choice.
- Nothing for {{user}}: write none of your own lines or actions, or the model learns that writing your part is normal.
Example dialogue
Two or three short exchanges show register better than any adjective: sentence length, slang, how much the character says versus does. Start each exchange with <START> and prefix lines with {{char}}: and {{user}}:. Three ways it goes wrong:
- The model quotes the samples back. Write samples about situations the real chat will not reach.
- The character only works because of the samples. They are dropped first when the history grows. Anything the character must never lose goes in the description.
- {{user}} gets the most words. The model imitates whoever talks most. Keep your side of each sample to a line.
Your token budget
A token is about four characters of English, so 1,000 tokens is roughly 750 words. The hosted apps cap cards at 1,000 to 1,500 tokens because their models hold only 8,000 or so. With your own key the window is rarely the limit, but the card still costs money on every message and dilutes what the model attends to. Keep the permanent fields under 2,000 tokens, and cut in this order:
- Instructions to the model. "Never speak for {{user}}", "stay in character", "respond in detail". These fill most long cards and belong in a system prompt, if anywhere.
- Adjective lists. "Kind, witty, brave, loyal" gives the model nothing to act on. One habit beats five adjectives: "answers questions with a question of her own".
- Backstory the character would not mention in the first hour. Move it to a lorebook entry keyed to the words that should trigger it. It then costs nothing until it matters.
Fix: the character speaks and acts for you
The model writes your lines because the card showed it your lines. Cut every action or speech by {{user}} from the first message and the examples, then shorten the first message; a long opener invites the model to fill the space with both sides. If it persists, describe the character rather than lecture the model: "she waits for {{user}} to answer" does more than a paragraph of rules.
Fix: the character agrees with everything
Chat models are trained to be agreeable assistants. A card that gives the character nothing to want produces an assistant in costume. What gives a character a spine:
- A want that conflicts with yours, something they are trying to get from the conversation that you might refuse.
- Refusals as character, not as rule. "He does not discuss his brother" works. "Never reveal secrets to the user" does not.
- Third person. Users report that a card and persona in the third person, with no privileged main character, make the model far more willing to push back, mislead, or say no.
- A first message in which they already disagree with something.
Fix: the character contradicts itself
Usually the description, scenario, and first message were written at different times and disagree about age, setting, or relationship, and the model picks one per reply. Read the three in a row before saving. The other version is escalation: a description that is mostly appearance and "seductive" adjectives drifts to romance in three messages whatever the scenario says. Describe what they do all day, and pace the relationship in the scenario and the first message.
Format, and letting an AI draft it
Current models read plain prose best, and it costs the fewest tokens. Compact list formats such as PList still work. W++ and bracket-heavy pseudo-JSON spend tokens on punctuation; the community stopped recommending them. Whatever you choose, use one format for the whole card. An AI can write the first draft, but its drafts are long, even, and adjective-rich, and users who compare report that a 500-token hand-written card beats a 10,000-token generated one. Cut a generated draft by half, replace each adjective list with one habit, and write the first message yourself.
Diagnosing a card you downloaded
Most people import a card rather than write one, and then it behaves badly. Open it and read the description. If half of it is rules for the model, the card was built for a hosted platform with no system-prompt field, where creators stuff everything into the description; delete the rules and keep the character. If the description is three thousand words of history, cut it to what matters today and move the rest to a lorebook. If the first message is huge, trim it; the replies shrink with it. Only then blame the model.
Before you save
- Description, scenario, and first message agree on age, place, and relationship.
- The description contains no instructions to the model.
- The first message is under 300 words, in the voice you want back, and ends with something to react to.
- Nothing in the first message or the examples is said or done by {{user}}.
- The permanent fields total under 2,000 tokens; any token counter will tell you.
- Backstory not needed on message one lives in a lorebook.
- One format throughout.
- Model suggestions and warnings sit in the creator notes.
Where to put the card
LonelyTavern is a bring-your-own-key character chat app for iPhone and Android. It imports V1, V2, and V3 cards as PNG or JSON, keeps a lorebook embedded in the card, and its editor has every field above, with the overrides under Advanced. Characters and chats stay on the device. Free, no account, no ads, 18+.
Related guides: Which API key you need for AI roleplay · all guides.
Sources
- Character Card V2 spec and V3 spec: field definitions, which fields reach the model, the placeholders and the
<START>marker - SillyTavern docs: Character Design: permanent versus temporary fields, the first message setting style and length
- JanitorAI: tokens (under 1,500 permanent tokens on an 8,000-token model) and bot creation guide; SpicyChat: tokens and context (900 to 1,100 tokens); Character.AI: Definition (32,000 characters, front-loaded)
- Gemini API: tokens: about four characters per token
- r/SillyTavernAI: instructions in descriptions, AI-written cards, what makes a good card, third person and yes-men, descriptions versus lorebooks; r/CharacterAI: contradicting fields (user reports)
SillyTavern, JanitorAI, SpicyChat, Character.AI, and Google are independent products of their respective owners. LonelyTavern is not affiliated with or endorsed by any of them. Limits and advice were read from their pages on September 17, 2026 and may have changed since.
