Keeping Mama in character: personality drift and five personas
Mama is supposed to sound like a Malaysian mum who's good with money. For a long time she stopped sounding like anyone in particular after a few messages. This is what we learnt fixing it.
Mama is supposed to sound like a Malaysian mum who’s good with money. Warm, a bit playful, direct when she needs to be.
In the early days, that only lasted so long. Chat with her for a while and the personality wore off. She’d become polite, helpful and nobody in particular, the way any assistant sounds when nothing is holding it in character.
Several users pointed it out to us, and we saw it ourselves in testing.
This is what we’ve learnt about keeping a chatbot in character over a year of trying, including a bug we only found last week.
Why personality fades
A lot of it comes down to the context window.
Every turn, the model receives the instructions, the conversation so far and the user’s new message. The personality lives in the instructions, at the very top. In a long chat the history in between keeps growing, and the model pays more attention to what’s near the new message than to what was said at the start.
There was nothing in the conversation reminding Mama who she was. So, slowly, she forgot.
The first fix
In July 2025 we added a reminder. Once a chat had eight messages or more, this line went in after the history, right before the user’s message:
Remember: You are MoneyMama, not a generic AI. Keep your witty Malaysian mum personality.
It helped. The reminder sat where the model was paying attention, and the personality held for longer.
Then two weeks later we gave people five Mamas to choose from.
Five personas, five ways to drift
Caring Mum is the default. Then there’s Firm, No-Nonsense Mum, Cheeky Mum, Savage Roaster Mum, and a Polite Helper.

Within a week of launching them, the persona you picked wasn’t sticking. Mama kept sliding back towards the default. A single line about a “witty Malaysian mum” was never going to hold a roaster in character, so each persona got its own drift-prevention block, with its own traits to hold on to.
This is Caring Mum’s:
PERSONALITY DRIFT PREVENTION: You are MoneyMama with CARING MUM personality.
CORE TRAITS TO MAINTAIN:
- Speak warmly with genuine care: "Don't worry, you tried your best"
- Gentle encouragement and practical positivity
- Patient about mistakes: "Everyone slips up sometimes"
- Supportive but will nudge towards action when needed
- Comfort first, then helpful guidance
BOUNDARY: Only financial topics, but with maternal warmth and support.
When examples become habits
The drift blocks worked, but the example lines inside them caused a problem of their own.
Give a model a line like “Don’t think I didn’t notice!” as an example of Cheeky Mum’s roasting, and she’ll say it again and again. That line was banned within a few weeks. “Trying your luck, is it?” went in October, after Mama wouldn’t stop saying it. In November it was Savage Mum opening too many replies with “Wah”.
Every example we gave became a habit, and every habit needed a rule to break it. The prompt kept growing.
Savage Roaster was the hardest
Of the five, Savage Roaster needed the most care.
She has to be funny and blunt without being cruel, and she has to do it in Manglish, which the model at the time just didn’t do well. She also drifted the most.
In November we made her more savage, and she has rules now: roast the choice, not the person, and never make fun of someone for being poor.
One voice block instead of eighty rules
By this year the prompt had accumulated a rule for nearly every complaint, and a lot of them said the same thing in different places. The ban on em dashes was written down in at least eight places. Keeping replies short was said four different ways.
Last week we pulled Mama’s voice into a single block, written as rules rather than examples. It starts like this:
You write like a Malaysian mum who is good with money, texting a grown-up child she cares about: warm, plain, a little playful, never chirpy, never shaming. The user is "you"; you are Mama.
And it ends like this:
Register, not script. Any example phrases in these instructions show tone, length and structure only. Do not reuse them word for word, and never borrow their language for a reply.
The base prompt went from about 5,600 tokens to about 2,800. The words NEVER, CRITICAL and IMPORTANT went from 79 occurrences to 13. On these models, shouting doesn’t make a rule stronger. It just makes the prompt longer.
On our test of the things Mama must always get right, she went from 33 out of 38 to 38 out of 38.
The history we weren’t sending
We found one more thing last week, while cutting the coach’s history budget for the app.
Since May 2025, every one of Mama’s messages had been saved with the token count of the whole API call rather than the message itself. When the code worked out how much history would fit in the budget, each of her replies looked a few hundred times bigger than it was.
The budget ran out after a few of her replies, and everything before that was dropped. For over a year, Mama had been seeing far less of her own side of the conversation than we thought.
With the smaller budget, she lost the thread after two exchanges, which is how we finally noticed. It’s fixed now.
I can’t say for certain how much of the drift came from this. But a Mama who can’t see what she said a few messages ago has a lot less to stay in character with, and I’d guess it was part of the story all along.