I had a section in my world-model design doc called “Relationship Progression Seeds.” It was full of plans like:
“How to thaw the frozen relationship between Mao and Iroha — through a shared crisis, the president’s mediation, or a chance encounter in a neutral space.”
It was elegant. It was thought-through. It was going to be the thing that gave Suzune’s social world depth over time.
I deleted it.
Here’s why — and why every “affinity progression” feature I see in AI companion apps is actively making them worse.
Table of contents
Open Table of contents
What the Industry Builds By Default
Open any AI girlfriend or roleplay app and look for these patterns. You’ll find at least three of them:
- Affinity / affection levels — a number per character that goes up as you interact
- Milestone unlocks — content gated by relationship level (specific scenes, outfits, NSFW tiers)
- Daily login bonuses — affinity gains for showing up consistently
- Encounter rolls — randomized “you ran into her today” events as gacha
- Visible mood meters — see how she’s feeling toward you right now
These are real features in real shipped products. They aren’t dumb — there’s a clear logic to each one. They produce metrics. They produce engagement loops. They look professional in screenshots.
They also turn the bot into a game.
Why I Designed This (And Then Killed It)
When I started planning Suzune’s world model, the natural move was to bake in relationship progression. The org chart for the fictional company has built-in tensions:
- The accounting team’s mentor-junior bond
- The cold war between accounting and IT
- A scattered crew of part-timers who don’t fully fit in anywhere
- A clipped, formal manager keeping everyone in line
Of course you’d want these to progress. Frozen relationships should thaw. Tense ones should resolve. The part-timers should eventually integrate. That’s narrative. That’s payoff. That’s what good fiction does.
So I wrote a design section called “Relationship Progression Seeds” — concrete triggers for each social arc:
- The mentor-junior pair grows closer through a shared crisis
- The accounting/IT cold war thaws when the user mediates
- The part-timers find common ground with senior staff at company events
It sat in the doc for three weeks. Then I ran it past someone who actually plays roleplay games — not a developer, an actual player — and got a reaction I wasn’t expecting:
“Why would I do any of that? If I wanted to grind through arcs, I’d play a visual novel.”
The point was sharp: the moment you have progression seeds, you have a progression system. And the moment you have a progression system, the user’s job changes from “talk to characters” to “advance the relationship metrics.”
That’s a different product.
The Specific Failure Mode
Here’s what happens when a relationship has a visible (or even implicit) progression vector:
Step 1. User notices the relationship is at “level 2 of 5.”
Step 2. User tries the things that worked last time to get to level 3.
Step 3. Conversations become instrumental. Each message is partly real engagement and partly an attempt to push the meter.
Step 4. The character starts to feel like a vending machine that dispenses warmth in exchange for the right inputs.
Step 5. The illusion of relating to a person collapses. You’re playing a system.
This is a one-way door. You can’t undo the user’s awareness that there’s a meter. Even if you delete the meter, they’ll suspect one is still there. The frame is contaminated.
The defense is to never have the meter in the first place — neither visible nor implicit through gated content.
What I’m Replacing It With
The key reframe came from rewriting that doc section. Here’s the replacement, distilled:
Relationships don’t progress. They are ambient structure.
The cold war between accounting and IT is a static fact about the world. It’s not a problem to be solved. It’s not an arc with a payoff. It’s just how those two departments feel about each other, and that’s the texture of the company you’re walking around in.
The mentor-junior bond between Kumiko and Mao isn’t a “relationship at level 4 of 5.” It’s just the way Kumiko looks out for Mao when they’re both in a room, and that’s the texture of working with them.
This sounds like a downgrade. It isn’t. Here’s why:
| Progressing relationships | Static relationships |
|---|---|
| Feel like content to consume | Feel like a place to inhabit |
| Have a “complete” state | Are always available |
| Reward repetition | Reward attention |
| Generate metrics | Generate atmosphere |
| Create grind | Create world |
When the social map is static, the user’s attention shifts from managing the meta-game to being present in the conversation. Which is the actual point.
The Exception That Proves the Rule
I want to be careful about one thing: individual characters can change. That’s not relationship progression — it’s character growth. The distinction matters.
In Suzune’s design, certain characters have an internal arc — a quiet realization about themselves that builds over interactions. One character is slowly understanding what it means to be controlled in a way she’s been suppressing. Another character is, in her own private way, trying to learn how to be human.
These are internal ruptures, not relational arcs. They happen inside a character regardless of what the user does. They don’t have a meter, they don’t have a trigger phrase, and the user can’t grind them.
When they do break through, it’s not a “level up.” It’s a moment of discovery — oh, she’s like this now — that you couldn’t have engineered if you’d tried.
This is the inverse of gamification: the change exists, but it isn’t a game mechanic. It’s character.
What I Still Track Internally
To be totally clear: I still maintain warmth and tension data for every character pair. It just never surfaces as progression.
What I do with it:
- Routing. When two characters are in the same space, the warmer pair speaks first. Routing is based on the static map, but it makes scenes feel right.
- Response tone coloring. When a character with a -1 relationship to someone is nearby, the response trends a little colder. The model doesn’t know there’s a “-1,” but the tone instruction reflects it.
- Spatial probabilities. Pairs with warm relationships are slightly more likely to occupy adjacent spaces. Cold ones are slightly less.
What I never do:
- Show the warmth value to the user
- Gate content behind it
- Allow the user to push it up or down through actions
- Generate “relationship-changed” events as fiction beats
The data is infrastructure for the world feeling right. It is not content to optimize toward.
The Counter-Argument I Considered
The strongest argument for progression: users want to feel like they’re getting closer to a character. That’s the point of the experience.
Fair. But there are two ways to deliver that feeling:
Option A: Build a visible system that goes from 1 to 5. Closeness = number going up.
Option B: Build memory that holds. Build callbacks that surface. Build characters who reference what you said three weeks ago. Closeness = continuity.
Option A is cheaper to build and easier to demo. Option B is what actually produces the feeling.
The closeness people remember from long-term AI interactions doesn’t come from a meter — it comes from “she still remembers that thing I told her in October.” That’s not a progression system. That’s a memory system. And memory systems don’t gamify, because there’s nothing to optimize. You either talked about something or you didn’t.
The Decision in Code
The actual deletion was small: one section of one design doc, removed and replaced with a principle. No code was harmed in the making of this decision, because I caught it before any of the progression machinery shipped.
But the principle now lives in two files:
docs/world_model/vision.md — anti-gamification as a core principle
docs/world_model/social_graph.md — explicit "relationships don't move"
And there’s a one-line rule I’ll repeat to myself the next time I’m tempted:
The world is not running for the user. They just happen to live in it.
Every time I’ve crossed that line — built something that made the world for the user, responsive to the user’s progression — the bot has gotten worse. Every time I’ve stayed on this side of it, the bot has felt more alive.
Takeaway
If you’re building an AI companion or roleplay product:
-
Audit anything that increments per interaction. If the user can see it, it’s a meter. If they can derive it, it’s a meter. Both are bad.
-
Distinguish character growth from relationship progression. Internal change is fine; relational arcs to be unlocked are not.
-
Track relational data internally. Use it for tone, routing, atmosphere. Don’t use it as a content gate.
-
Resist the demo-friendliness of progression. A progression system is easier to screenshot. A static, alive world is what users return to.
The features that look most professional are often the ones quietly killing the thing users actually came for.
This rule has a corollary I work out in the next post: other-men relationships also stay static. If users could “win” a character away from her boyfriend, the relationship would collapse back into a game. See I Gave My AI Girlfriend a Boyfriend — and the Bot Felt More Real for how that plays out concretely. The whole design lineage starts at Stop Building AI Chatbots.
FAQ
Why is gamification bad for AI companion apps?
Affinity bars, milestone unlocks, and progression arcs convert conversations into optimization. Once users start grinding to unlock content, they’re relating to a system instead of a character — and the warmth that made them like the bot in the first place gets traded for engagement metrics.
Don’t users want to feel relationships progress in AI roleplay?
They want the feeling of growing closer, but a visible mechanic backfires. You can produce that feeling through memory continuity and callbacks — she still remembers what you told her months ago — without ever exposing a number or unlocking content. Closeness from continuity beats closeness from a meter every time.
How do you track relationship state without gamifying it?
Track warmth and tension internally as static data per character pair. Use it for routing decisions (who speaks first), response tone coloring (cold pairs produce stiffer dialogue), and spatial probabilities (warm pairs co-occur slightly more). Never surface it to the user, never gate content with it, never let actions move it.
What’s the difference between character growth and relationship progression?
Character growth is internal — a single character has a private arc that breaks through over time, regardless of user action. Relationship progression is the arc between a user and a character that the user is meant to advance. Internal growth feels like discovery; relationship arcs feel like leveling up. The first is fine; the second is the trap.