Aria's personality, Part 2: A personality that changes
Two kinds of change: slow drift learned from chatting, with a reason, a lock and an undo for every step, and a fast per-reply adjustment from a mood estimate of the conversation. Plus the graph that shows how a personality got where it is.
Part 1 defined Aria’s personality as settings: twenty-eight dials, an attachment style, values and a story, turned into fixed wording. Settings are reproducible, but people aren’t static. We adapt to the people we talk to over weeks, and we adjust to the mood of a conversation in seconds.
Aria does both, on two very different time scales.
Slow: traits that drift
Every few messages, a background job reviews the recent conversation and asks one question: should any of the persona’s traits move a little?
When it runs:
- After at least 6 new messages from you in the conversation (
PERSONALITY_ANALYSIS_MIN_MESSAGES). - At most once an hour per conversation (
PERSONALITY_ANALYSIS_MIN_MINUTES). - With the last 30 messages, each cut to 600 characters, as data (never as instructions).
What it returns is a short list of adjustments: a trait, a direction (increase or decrease), a reason, and whether you asked for it directly. The rules for applying them are strict and live in code, not in the prompt:
- Small steps. A normal adjustment moves a trait by 0.04 on a 0–1 scale. You’d need many reviews pointing the same way to notice a difference.
- Bigger steps only when you asked. “Be less sarcastic” or clear discomfort moves the trait by 0.15. But the analysis has to quote your words, and the step is only taken if those words actually appear in what you wrote. The model can’t claim you asked for something you didn’t.
- At most three changes per review.
- Locked traits never move. Any trait can be locked on the Personality page.
- Everything is logged with its reason and can be undone. Undoing puts the trait back where it was before that change, and later changes are kept.
The aim is a persona that slowly becomes a bit more like what works between you. If jokes keep landing, humor creeps up. If you keep asking for shorter answers, length creeps down. Nothing happens suddenly, and nothing happens without a written reason.
The feature can be switched off for everyone (PERSONALITY_ADAPTIVE_ENABLED) or per persona.
Seeing how it changed
A personality that changes on its own needs a way to see what happened. The Personas page has a personality history graph: one step line per trait over time, with three kinds of marker:
- Filled dots: changed by chatting (drift).
- Rings: changed by you, with the sliders.
- Squares: undone.
Slider moves of the same trait within two minutes count as one change, so dragging a slider back and forth doesn’t fill the graph with noise.
Fast: the mood estimate
Drift takes weeks. But a reply also has to fit this moment. The right tone after “I got the job!” is not the right tone after “my dog died”, whatever the personality.
So before every reply, the analysis model reads your latest message in the context of the recent conversation and returns a mood estimate:
- mood: one or two words (“calm”, “frustrated”, “excited”)
- valence: −1 to 1, how negative or positive
- arousal: 0 to 1, how intense
- conversation mode: the most helpful mode for the next reply: Neutral, Supportive, Playful, Practical, Reflective, Celebratory or Focused
- confidence: 0 to 1, how sure it is
This runs at the same time as memory retrieval, with a timeout, so it rarely adds to the wait. If it fails or times out, the last known estimate is reused. The conversation never depends on it.
From mood to reply style
The mode then adjusts five of the core traits (warmth, playfulness, energy, curiosity and length) for this one reply. This is the reply style: the persona’s own settings, shifted by a fixed amount per mode and scaled by how confident the estimate is. Some of the shifts:
| Mode | Warmth | Playfulness | Energy | Curiosity | Length |
|---|---|---|---|---|---|
| Supportive | +0.10 | −0.50 | −0.15 | ||
| Playful | +0.05 | +0.15 | +0.10 | ||
| Practical | −0.25 | −0.10 | −0.15 | ||
| Reflective | +0.05 | −0.20 | −0.15 | +0.10 | +0.05 |
| Celebratory | +0.05 | +0.10 | +0.20 | ||
| Focused | −0.30 | −0.05 | −0.10 |
The biggest single number is the one I care about most: Supportive cuts playfulness by half. A playful personality is a joy until it’s playful at the wrong moment. Now a teasing persona still teases, just not when you’re upset.
Because the shift is scaled by confidence, a vague message barely moves anything, and the personality stays recognisably itself. A persona with playfulness at 0.9 in Supportive mode is still more playful than one at 0.2. It’s adjusted, not replaced.
Uncertain on purpose
The estimate goes into the prompt as uncertain data, and the core instructions say not to claim certainty about anyone’s emotional state. Aria shouldn’t open with “I can tell you’re frustrated.” The estimate shapes tone. It isn’t something to announce.
It’s also never stored as a memory. A mood is a reading of one moment, kept with the conversation (one row per conversation) and replaced on the next reply. What persists about your feelings goes through the mood journal (Memory, Part 3), where you can see and remove it.
Affection colours it too
One more input shifts the reply style: how fond Aria is of you. Affection above the persona’s baseline nudges warmth for the turn. The relationship posts explain where affection comes from. For personality, the point is that a persona’s warmth isn’t a fixed number. It’s its warmth setting, plus how it feels about you, plus what this moment calls for.
What I learned
- Two time scales, two mechanisms. Mixing “adapt to this person” and “adapt to this moment” into one system would make both worse. One is a logged, slow drift. The other is a per-reply adjustment that’s never stored.
- Let the model suggest, let code decide. The analysis proposes a direction and a reason. Step sizes, limits, locks and the “did they really ask?” check are rules.
- Check the model’s evidence. Requiring the user’s quoted words to actually appear in the transcript stopped the bigger step from firing on a hunch.
- Personality is the floor, not the ceiling. The most important adjustment is the one that tells a playful persona when not to play.
That’s personality. Next, the relationship: Part 1 is about how Aria gets to know you, in about forty areas, at a pace that depends on how close you are.