AI Portfolio Lab Tools Games Blog Feedback
All Posts

Curiosity Held. Trust Had to Be Earned.

I ran premise tests before building a fifty-citizen AI town. Curiosity and sociability drove behavior exactly as expected. Trust, built as a static personality trait, didn't replicate on the held-out roster.

2 min read
aisimulationjev

When Matthew Berman dropped a video showing Jev running a live decision lab across fifty AI citizens, I was watching it thinking this is exactly what I want to build. A town. You broadcast a message. Fifty people decide whether to investigate, join, warn their neighbors, or stay home.

I wanted to add two things I hadn’t seen: stakes on each option, and trust erosion. If the broadcaster lies four times, nobody shows up for the fifth announcement. That was the idea.

Before I wrote the server or the UI, I ran premise tests. Two Python scripts against the actual API to check whether the model could hold what I was asking it to hold.

Traits held. Curiosity drove investigating by 32 to 52 percentage points. Sociability drove joining by 46 to 73. Both replicated on a held-out roster with a different seed. Clean.

Trust-as-static-trait didn’t replicate. A citizen’s trust level baked into their personality description produced inconsistent results across seeds. The held-out roster told a different story than the original.

That failure was a design error I needed to correct before building anything.

The revised model treats trust as a record. Each citizen keeps a count per broadcaster: how many messages heard, how many turned out true, how many false. No personality dial, just accumulated history.

It works the way I wanted. At zero lies, join rate sits around 88%. One lie drops it to 38%. Two lies brings it to 18%. Four lies and 98 to 100% of citizens ignore the next announcement. The erosion is gradual, then total.

Join rate by lies the broadcaster has told: around 88% at zero lies, 38% after one, 18% after two. No value is given for three lies, and at four lies 98 to 100% of citizens ignore the next announcement.

The tests also caught the phrasing. “May or may not be true” in the announcement framing was pushing investigate rates to 94%. Removed. One phrase, invisible unless you check.

The UI came after all of that. The server handles one broadcast at a time, one Jev request with fifty Choice questions, fifty decisions, 0.28 to 0.5 seconds. The map animates. Each citizen shows where they ended up and what they trust now.

Curiosity is a stable feature of a character. Trust is a ledger of what’s actually happened. Building the second one as if it were the first would have given me a town where lying works fine so long as your starting stats are high enough.

The premise tests caught that before any of it shipped.