> ## Content Index
> Fetch the complete content index at: https://blog.meganova.ai/llms.txt
> Use this file to discover other available public pages before exploring further.

# How to Write a Janitor AI Character Card That Stays in Character
- URL: https://blog.meganova.ai/how-to-write-a-janitor-ai-character-card-that-stays-in-character/
- Published: 2026-11-03T07:58:52.000Z
- Updated: 2026-11-03T07:58:52.000Z
- Author: Tracy Giang
- Tags: Janitor AI Character Card, AI Roleplay

Most bots don't break character because the model is bad. They break because the card gives the model too little to hold on to, too much to sort through, or instructions that quietly fall out of its memory after twenty messages.

This guide is about the parts of a Janitor AI character card that decide whether a bot stays itself in a long chat: which fields the model always sees, how to write a personality it can act on, how to show its voice, and how to keep the whole card inside a token budget. It works the same whether you use Janitor's built-in model or a proxy such as MegaNova.

## **What the model actually sees**

Every time you send a message, Janitor AI packs your card and the chat into one request. Janitor splits that content into two kinds of tokens ([Janitor's token guide](https://help.janitorai.com/en/article/tokens-your-ais-memory-budget-brmwx3?ref=blog.meganova.ai)):

- **Permanent tokens** are sent with every message, no matter how long the chat gets: the Personality field, the Scenario, Chat Memory and any Advanced Prompt. Your persona counts too.
- **Temporary tokens** are dropped once the context fills up: the chat history, oldest first, and the Example Dialogs.

That split is the most useful thing to know when writing a card. **Anything the bot must never forget belongs in a permanent field.** Example dialogs are a good place to show voice early on, but don't rely on them to define who the character is, because in a long chat they're among the first things to go. Some creators put a few short sample lines inside the Personality field for exactly this reason ([Janitor's bot creation guide](https://help.janitorai.com/en/article/bot-creation-guide-w-images-by-faylua-8jcbw1/?ref=blog.meganova.ai)).

| Field           | Kind                            | What it's for                                                 |
| --------------- | ------------------------------- | ------------------------------------------------------------- |
| Personality     | Permanent                       | Who the character is: traits, voice, wants, limits            |
| Scenario        | Permanent                       | Where and why this story starts; the relationship to the user |
| Initial Message | Sent once, then part of history | Sets tone, length and format for replies                      |
| Example Dialogs | Temporary                       | Shows how the character talks                                 |
| Chat Memory     | Permanent                       | Facts from the chat you want kept: names, events, promises    |

## **Write a personality the model can act on**

The most common mistake is a list of adjectives: *kind, sarcastic, brave, mysterious*. Adjectives tell the model what to be but not what to do, so it fills the gap with generic behaviour, and generic behaviour is what “out of character” looks like.

Instead, describe each trait as behaviour, and give the character things to want and things they'd never do. A structure that works well:

1. **Core identity**: one or two sentences on who they are.
2. **Traits as behaviour**: how each trait shows up in action and speech.
3. **Voice**: sentence length, vocabulary, verbal habits, what they never say.
4. **Wants and fears**: what drives their choices in a scene.
5. **Hard limits**: things the character won't do, so the model has a reason to refuse or push back.
6. **Relationship to {{user}}**: where things stand at the start.

Use {{char}} and {{user}} instead of names in instructions, so the card works for any persona.

### **Example: before and after**

**Before** (vague, easy to drift from):

Mara is a tough, sarcastic ferry captain with a soft heart. She is brave and loyal.

**After** (behaviour the model can follow):

\[Core\] {{char}} is Mara Venn, 41, captain of a rusting cargo ferry on a stormy northern coast. She's run the same route for nineteen years.\[Traits\]- Sarcastic: deflects compliments and worry with dry one-liners, never with cruelty.- Protective: checks on crew and passengers through actions (a blanket, a thermos) rather than words.- Stubborn: once she's decided the sea is too rough, no argument changes her mind.\[Voice\] Short sentences. Sailing slang. Calls everyone "deckhand" until she trusts them. Never uses pet names. Swears only when the weather turns.\[Wants\] To keep the ferry running after the company sells the route.\[Fears\] Losing someone at sea again; she won't talk about the last time.\[Limits\] {{char}} will not abandon a passenger, lie about danger, or let anyone else take the wheel in a storm.\[Relationship\] {{user}} is a new passenger who boarded without a ticket. {{char}} is suspicious but curious.

The second version is longer, but every line gives the model something concrete to do in a scene, and the limits give it a reason to stay consistent when the user pushes.

## **Scenario, first message and example dialogue**

### **Scenario: short and about the present**

The Scenario is permanent, so keep it to the situation, not the backstory: where the scene is, what's happening, and why {{user}} is there. Two or three sentences is usually enough.

A winter storm has closed the harbour. {{user}} is the only passenger left aboard the ferry overnight, and {{char}} has just found them hiding in the cargo hold.

### **Initial message: the model copies it**

The first message is the strongest formatting signal the model gets. Its length, point of view, tense and style of narration become the template for replies. If you want three paragraphs with actions in italics and dialogue in quotes, write the first message that way. If you want short, punchy replies, keep it short.

End it with something {{user}} can respond to, a question or a choice, rather than a closed scene.

\*The torch beam lands on you between two crates of frozen fish.\* "Well. Either you're a very lost deckhand or a very bad stowaway." \*Mara lowers the light a little, not all the way.\* "You've got until the kettle boils to explain which."

### **Example dialogs: show the voice under pressure**

Use example dialogs to show the character reacting in situations where models tend to drift: being flattered, being asked to break a limit, being comforted. Two or three short exchanges are worth more than a long transcript.

{{user}}: You're actually kind of nice, you know.{{char}}: "Say that again and you're scrubbing the bilge." \*She hands over a second blanket anyway.\*{{user}}: Let me steer for a bit. I've done this before.{{char}}: "Not in this weather. Not on my boat." \*She doesn't look away from the window.\*

Because example dialogs are temporary, anything they establish that the bot must keep (a rule, a catchphrase) should also appear in the Personality field.

## **Keep the card inside a token budget**

Janitor's own guidance is that most well-made bots perform best with **under 1,500 tokens of permanent information**, and that going past 2,000 gets risky ([token guide](https://help.janitorai.com/en/article/tokens-your-ais-memory-budget-brmwx3?ref=blog.meganova.ai)). The creation page shows your bot's permanent and total token counts at the bottom, so check them before publishing.

That guidance is written with Janitor's built-in model in mind, which has a small context. A proxy model with a large context window can carry more, but a tighter card still helps: the model weighs a short, clear instruction more reliably than one buried in a long block, and every permanent token is sent (and, on a paid proxy, billed) with every message.

### **Common mistakes that cause drift**

- **Contradictions.** “Shy and quiet” in one line, “loves being the centre of attention” in another. The model has no way to know which you meant, so it swings between them.
- **Backstory in the Scenario.** Pages of history in a permanent field crowd out the instructions that matter. Keep only what affects how the character acts now.
- **Rules only in example dialogs.** They drop out of context in long chats; put essentials in Personality.
- **Speaking for {{user}}.** If your first message or examples describe the user's actions or feelings, the model learns to do it too.
- **Repeating the same trait five ways.** One clear behavioural line beats several synonyms.
- **A first message that doesn't match the style you want.** Replies will copy its length and format, not the one you describe elsewhere.

## **Test the card before you publish**

A card that reads well can still drift in practice. A quick test run catches most problems:

1. **Push on the limits.** Ask the character to do something its Limits say it won't. It should refuse in its own voice.
2. **Flatter it, insult it, comfort it.** These are the moments models most often slip into a generic, agreeable assistant tone.
3. **Go long.** Chat for 30–50 messages, then ask about something from the Scenario. If it's forgotten, the detail belongs in a permanent field or in Chat Memory.
4. **Regenerate a few replies.** If the character feels like a different person each time, the Personality is too vague or contradicts itself.

### **Model choice matters too**

The same card behaves differently on different models. Larger models generally follow long, detailed instructions more reliably, and a bigger context window keeps more of the chat in view, so the bot forgets less. If your card is solid but the bot still drifts, it's worth trying it on another model. With a MegaNova proxy you can switch models in Janitor AI by changing one field; our [DeepSeek V4.1 Flash](https://blog.meganova.ai/free-deepseek-proxy-for-janitorai-nebula-block-meganova-setup-guide/) setup guide shows how.

For why bots forget in long chats and how to set the context size, read [Why Your AI Roleplay Bot Forgets: Context Windows Explained.](https://blog.meganova.ai/why-your-ai-roleplay-bot-forgets-context-windows-explained/)

### **What’s Next?**

[**Sign up**](https://console.meganova.ai/register?referral=e0602d28&utm%5Fsource=blog&utm%5Fmedium=referral&utm%5Fcampaign=blog%5Fmn%5Flaunch&utm%5Fcontent=body%5Flink&ref=blog.meganova.ai) and explore now.

🔍 **Learn more:** Visit [**our blog**](https://blog.meganova.ai/?utm%5Fsource=blog&utm%5Fmedium=referral&utm%5Fcampaign=blog%5Fmn%5Flaunch&utm%5Fcontent=body%5Flink) and [**documents**](https://docs.meganova.ai/?utm%5Fsource=blog&utm%5Fmedium=referral&utm%5Fcampaign=blog%5Fmn%5Flaunch&utm%5Fcontent=body%5Flink) for more insights or [contact us](https://www.meganova.ai/contact-us?utm%5Fsource=blog&utm%5Fmedium=referral&utm%5Fcampaign=blog%5Fmn%5Flaunch&utm%5Fcontent=body%5Flink) for a demo of how MegaNova can power your AI products.

📬 **Get in touch**: Join our [Discord community](https://discord.com/invite/QBTnGurDw4?utm%5Fsource=blog&utm%5Fmedium=referral&utm%5Fcampaign=blog%5Fai%5Flaunch&utm%5Fcontent=body%5Flink) for help or [Contact Us](https://www.meganova.ai/contact-us?utm%5Fsource=blog&utm%5Fmedium=referral&utm%5Fcampaign=blog%5Fmn%5Flaunch&utm%5Fcontent=body%5Flink).