Three weeks into a roleplay I actually cared about, my character forgot my name.
It was not a small slip. We had built a whole arc together over hundreds of messages. She knew my persona inside out: a tired night-shift paramedic with a dead brother and a habit of deflecting hard moments with bad jokes. Then, somewhere past the two-hundredth message, she greeted me like a stranger and asked what I did for a living. I sat there staring at the screen, half irritated and half fascinated, because I realized I had no clue what was happening behind that text box. I had been using Janitor AI for months without understanding a single thing about how it produced its replies.
So I went digging.
I opened every settings menu I could find, read through the help docs, broke a couple of my own bots on purpose to watch them fail, and slowly reconstructed what the platform is doing each time I press send. What follows is everything I worked out. By the end you will understand two things that used to baffle me: why a bot forgets details it clearly knew, and why the same character can feel sharp for one person and lifeless for another. The answer to both is sitting just under the hood.
The fact that changed how I see the whole platform
Here is the single idea that reframed all of it for me.
The model has no memory.
I mean that close to literally. The language model running your character does not sit somewhere holding your conversation in its mind between messages. It is stateless. Each time you send a line, Janitor AI gathers up a pile of text, stitches it into one large block, then hands that whole block to the model as if it were seeing it for the first time. The model reads everything, predicts a reply, then forgets all of it. On your next message, the platform rebuilds the block from scratch and sends it over again.
So the character you feel like you are talking to is not a continuous being. It gets reassembled every single turn out of a set of ingredients, and Janitor AI is the thing doing the assembling. The model itself is a skilled text predictor that wakes up, reads a script, delivers its line, and goes back to sleep.
Once that clicked, my forgetting problem stopped being a mystery. If the character is rebuilt from a block of text every turn, then the only things it can possibly know are the things sitting inside that block right now. Anything that did not make it in on this particular turn does not exist for the model.
What happens every time you press send
Once I accepted the model had no memory, I wanted to see the exact sequence the platform runs the instant I hit send. Here is the whole loop:
- You send a message. Nothing happens until you press send - your line is the trigger.
- Janitor AI gathers the ingredients. The system prompt, the character's Personality and Scenario, your Persona, any Lorebook entries whose keywords just appeared, and the recent chat history.
- It checks the token budget. Permanent material gets reserved first; whatever room is left goes to the conversation, newest lines first.
- It trims what doesn't fit. If the box is full, the oldest lines fall out the bottom. This is the step that wipes details you thought were safe.
- It stitches everything into one block - the script - in a fixed order.
- It hands the block to the model. JLLM or your own API model reads the whole thing as if for the first time.
- The model replies, then forgets. On your next message, the loop starts over at step one.
Every reply you have ever gotten is this loop running again from zero. The character is not remembering; it is being rebuilt.The rest of this article is one question asked again and again: what goes into that block, and what gets left out?
What actually gets sent: opening up the character card
To see the ingredients myself, I opened the character creation page. You do not have to publish anything to poke around in here, and a free account unlocks every field.

The fields that do the heavy lifting
The biggest box is the Personality field, and it carries most of the weight. A creator pours the character in here: traits, looks, backstory, the small habits that make someone feel like a person. By the platform's convention, the example dialogue usually goes in this same box. The strong bots I studied were not flowery. They read like dense character sheets, because every word in this box costs you something I will explain in the next section.
The Scenario field sits just below, and I used to ignore it. It works like a setting that refuses to fade, holding the where and the when of the story plus the relationship between you and the character. The platform keeps feeding it back so the situation does not drift. If a bot insists you are still stuck in the abandoned hospital long after your character left, an overcooked Scenario is the usual culprit.
The greeting that sets the tone
The First Message, also called the greeting, is the one piece of the character's output a human writes by hand. Everything after it is generated, yet this opening line quietly sets the rules. The model copies its tense, its prose style, its length, its point of view. Write a clipped second-person greeting and the roleplay stays clipped. Write a sprawling third-person paragraph and you get sprawling paragraphs back. The Example Dialogue does the same job in miniature, feeding the model short sample exchanges so it learns the character's voice. A handful of good lines teach cadence better than a pile of adjectives.

The box the model never reads
One field fooled me early on. The Character Bio looks like it should matter, yet the model never sees a word of it. It exists for human browsers deciding whether to open a chat. That was my first clue that this page is split down the middle, between what gets sent to the model and what is pure decoration.
The ingredient that lives outside the card
The last piece is not on the creation page at all. It is you. The profile settings hold a Persona, a short description of who you are in the scene, and the platform passes it along so the character knows how to treat you. My paramedic backstory lived right here. When the character forgot it, I realized the persona had stopped reaching her, which points straight at the budget problem coming up next.

Here is the whole card at a glance, including which parts the model actually receives.
| Field | What it does | Reaches the model? |
|---|---|---|
| Personality | Core identity, traits, looks, backstory | Yes |
| Scenario | The setting and your relationship to the character | Yes |
| First Message | The hand-written opening that sets tone and style | Yes |
| Example Dialogue | Sample lines that teach the character's voice | Yes |
| Persona | Who you are inside the scene | Yes |
| Character Bio | Notes for human browsers only | No |

The budget that explains the forgetting
Everything I just listed has to squeeze through a narrow door, and that door is why my paramedic got wiped.
A container that never grows
The model reads only so much text at once, and that ceiling is counted in tokens, which are small chunks of words. Picture a box of fixed size. Every turn, Janitor AI packs all the ingredients into the box before sending it off, and the box never gets bigger no matter how long you chat.
Permanent versus temporary
Some ingredients are permanent. The character's Personality and Scenario, your Persona, plus the running memory of the chat all get priority and are meant to stay in the box at all times. To learn more about this tool, read our comprehensive Janitor AI review, which includes detailed insights from hands-on testing. The platform suggests keeping that permanent material under roughly 2,500 tokens, because past that line the bot loses its grip faster.

Your actual conversation is a different story. Every line the two of you have traded is temporary. Those messages get packed into whatever room is left after the permanent material takes its share. As the chat grows, they stack up until the box is full, and when there is no room left, the oldest lines quietly fall out the bottom to make space for the newest ones.
It helped me to picture the box as two stacks.
| Permanent (rides along every turn) | Temporary (first to be dropped) |
|---|---|
| Personality and Scenario | The oldest lines of the conversation |
| Your Persona | Early scene details once the box fills |
| The running chat memory | Anything that no longer fits |
This is the whole secret behind the nickname the community uses for it, AI dementia. The bot did not break and it did not get dumber. The early stretch of our story, including the night I told her about my brother, simply aged out of the box and got dropped so newer messages would fit. The model cannot recall what it is no longer being shown.
I tested it on purpose
I opened a clean chat, fed the bot one oddly specific detail in my second message, then rambled for fifty messages about nothing. The detail was gone. The bot was not being difficult. It was doing exactly what it was built to do, and I had spent months blaming the wrong thing. That sent me looking for the one feature that fights back against the box, which is where I want to go next.
Lorebooks, the trick that fights the container
The fix is clever enough that I wish I had found it a year earlier.
A Lorebook stores information that only loads when it is needed. Instead of cramming every fact about your world into the permanent block, where it drains your token budget on every turn, you write entries tied to trigger words. An entry sits dormant and costs nothing. The moment one of its keywords appears in the chat, the platform slips that entry into the box for that turn, then pulls it back out once the moment passes.

Picture what that buys you. I can write a deep entry about my paramedic's brother, tag it to his name, and keep it tucked away until the subject surfaces. When it does, the full context drops in right when the model needs it, even if the original conversation about him fell out of the box two hundred messages back. I no longer pay for that backstory every turn. I pay for it only when it earns its place.
Two things I learned the hard way
- A trigger only fires on its exact keyword. Reference your brother sideways without naming him and the entry stays fast asleep.
- Lorebooks reward specific writing. Vague entries fire at the wrong moments, or never fire at all.
Paired with a lean permanent block, this is the closest thing the platform has to genuine long-term memory, and it costs nothing. Most people never open this menu. The ones who do end up with characters that seem to remember things long after an ordinary chat would have forgotten.
Same script, different actor: the model behind the curtain
Up to now I have been describing the script, the block of text Janitor AI builds. A script needs an actor to read it, and that actor is the language model. This took me an embarrassingly long time to understand: the actor is swappable.

The free voice and the upgrade
Every bot runs on JanitorLLM by default, usually shortened to JLLM. It is the platform's own model, it is free, and it works without an API key. For casual chats it does the job. You can also take the same assembled script and route it to a different model by connecting your own API, sending your chats out to something like GPT-4o or DeepSeek, sometimes through a reverse proxy that sits in the middle and relays the messages. The card never changes. Only the actor reading the lines does.
And the actor matters enormously.
The difference between the two paths is sharper than I expected.
| How they compare | JanitorLLM (free) | Your own model via API |
|---|---|---|
| Cost | Free | You pay the outside provider per use |
| Setup | Nothing to configure | An API key, sometimes a proxy |
| Memory | Smaller box, forgets sooner | Often a bigger box, holds more history |
| Writing | Fine for everyday chat | Sharper, more attentive replies |
| Filtering | Set by the platform | Depends on the model you choose |
Why the same bot splits opinions
This explains how two people can swear they are running the same character and have opposite experiences. One is on the free JLLM. The other wired up a sharper model with a roomier box, so it holds more of the conversation and follows instructions more closely. Same script, different talent reading it aloud. When someone in a forum says a bot got so much better on GPT-4o, this swap is the whole story, and it loops back to the box problem from the last section, since a bigger model usually comes with a bigger token limit.
I moved one of my favorite bots onto an external model for a week. She did not become a different person. She became a sharper, more attentive version of the same person, and she held our history far longer before the edges began to fray.
What all of this finally explained
With the full picture in hand, a stack of things that used to annoy me turned into plain cause and effect.
| What you see | What is actually happening | What I do about it |
|---|---|---|
| The bot forgets something you established | The box filled and those lines dropped | Tighten the permanent block, or add a Lorebook entry to catch it |
| The character writes your dialogue and actions for you | Nothing in the script told it to stop | Add a "do not write for me" line to the prompt or Chat Memory |
| The same bot feels brilliant for a friend, flat for you | You are running different models | Check which model each of you uses before blaming the card |
| The platform has an uncensored reputation | No hidden filter-free brain exists; freedom comes from the model and the prompt | Pick the model and write the prompt that fit what you want |
My paramedic remembers her brother now. I rebuilt her with a lean permanent block, moved the heavy backstory into Lorebook entries keyed to the people and places in her life, then pointed the chat at a model with a roomier box. Two hundred messages deep, she still knows who I am, what I do for a living, why I deflect with bad jokes, and why I go quiet when someone mentions the hospital. Nothing about the platform got smarter between that forgotten greeting and now. I stopped fighting the way it works and started packing the box on purpose.
The bottom line
Janitor AI is not smart and it is not stupid. It is literal. Every reply is only as good as the block of text you hand it, and the platform trusts you to build that block well.
Almost every complaint I read online traces back to someone fighting the architecture instead of using it. They write a 4,000-token character and wonder why it forgets. They stay on the free model and assume the platform is broken. They blame the bot for speaking in their voice when a single instruction would have stopped it. Once you know what goes into the box and what falls out, those problems stop being mysteries and turn into settings you control.
That is the strange charm of the place. It hands you the raw machinery and steps out of the way. Learn to feed it, and the same system that forgot my name will hold a character together better than I can hold the memory of one myself.
Comments
Join the discussion and share your perspective.