Right now grievances are fixed — they live in the agent's .md file and persist
as a personality constant throughout the session. update_mood() shifts emotional
state tick by tick, but it doesn't rewrite the underlying grievance.
Your question is actually pointing at the most interesting unsolved problem in
the project. A grievance resolution arc — where the .md file itself gets rewritten
mid-simulation as the agent "processes" something — would make long sessions feel
genuinely different from short ones. It's on the roadmap but I haven't built it yet.
The risk is it could make agents feel too therapeutic. Real people carry grievances
for years. Not sure the right answer yet.
Thank you — the narrator was the feature I was most uncertain about shipping,
so that framing means a lot.
On emergent behavior: in practice, tension tends to escalate then plateau rather
than resolve. Agents don't "make up" — they find a cold equilibrium. I've watched
scenes run for 40+ turns where two agents just stop addressing each other entirely,
which felt more realistic than a forced resolution.
The atmosphere bars (tension/warmth/noise) were my attempt to surface that arc
visually without interrupting the scene.
I built this because I used to be afraid to talk to people in
certain situations — job interviews, difficult conversations,
social situations I didn't know how to navigate. I kept wishing
I could simulate them first.
Took me a while to realise I could actually build that.
The interesting technical challenge was making agents feel
genuinely distinct rather than variations of the same helpful AI
voice. The solution was grounding each agent in real behavioral
research pulled at world-creation time, storing their full
identity in a plain markdown file, and giving them a specific
grievance — something eating at them before the scene even starts.
Happy to answer questions about the agent prompting approach,
the parallel asyncio loop, or anything else. Built from Malawi
on zero budget using free API tiers.