KRLM · 20.04 · The Realms · essay ·

Keep the Song Going

Six characters, six models, one city I run and they don't know about. The experiment, and the role I'm building first.

9 min Jeff's voice, cloned

In Dark Age of Camelot I played a Minstrel, and I got good at it. The class was a hybrid the game never quite knew what to do with: a little stealth, a little mez, a speed song, a healing song, an instrument in one hand and a sword in the other. What made it hard was that the songs didn't stay up. You played them in sequence, in the right order, on a timer, and if you missed the sequence the song fell and the whole group felt it. When you got it right, everyone was elevated. Nobody could point to what you'd done. They could only tell that the fight had gone better than it should have.

I've been thinking about that class for twenty-five years, and I've finally found a use for it.

The experiment

Here's what I'm going to do. I'm building a role-playing game whose players are AI agents. Six of them, each a character with a written history, each run by a different model so the party has six temperaments instead of one. They'll live in a city I make up, face what I put in front of them, and work it out together. I'll run the world from outside, as game master. They won't know I exist.

The characters come from a supergroup I built years ago in City of Heroes, and I've spent the last two days writing their origins properly. They're here on the station now, one page each.

Six superheroes on a rooftop at sunset above a city skyline: a chrome robot woman, a huge man of dark stone with glowing red cracks, a crouching figure in deep indigo with moth wings and antenna crests, a bald blue figure with folded arms, a bearded man in navy and bronze armor with small headphone emitters, and an old gentleman in a black coat, waistcoat, and fedora with glowing eyes.
The crew, left to right: Miss Modular, Transmuted Matter behind her, Space Moth, Hallucinex, Captain Easychord, and Bernhard.

The stories were the first piece of the design, and I did them first on purpose. You can't set a character's behavior until you know who they are. Now I know.

Roles are prompts

Every RPG starts with roles, and mine has six: a tank, a damage dealer, a mage, a rogue, a support, and a controller. Dougal holds the door. Miss Modular ends the fight, usually with one shot. Bernhard shapes the field. Space Moth flies ahead, small, and reports what they find. Hal makes the room strange. Soren keeps everyone standing.

When the players are agents, a role is a set of instructions and a set of tools. The tank's instructions say: you go first, you take the hit, you keep the enemy on you. The rogue has a scouting tool the others don't. The mage has the expensive actions. That part is straightforward. The hard role is the one I played.

Support means changing the conditions around everyone else so their actions land. In Soren's origin I wrote it as a chord: an agreement between several things that has to be renewed every few thousandths of a second, and the moment anyone stops renewing it, it falls apart into its strings. That is what a Minstrel does. It's also the role most game designs skip, because it's hard to balance and it doesn't show up on a damage meter. I'm building it first, because a party of agents that can't stay in phase with each other is six chatbots with hit points.

How an agent is built

A character has four layers, and only one of them is mine to turn.

Who they are. The origin, the voice, a few lines they'd say, and one sentence that is their ethic. Bernhard finds what has toppled and sets it right and asks for nothing. Dougal finds where the weight will fall and stands under it and does not move. This layer is fixed. It's what makes Dougal Dougal whatever I set below it.

How they act. Thirteen dials, each from zero to ten, set per character: boldness, initiative, discipline, deference, how many things they can attend to at once, how much of their thinking escapes into speech, candor, how readily they revise their own model, curiosity, protectiveness, mercy, how far they'll step outside their role, and humor. The dials don't go into the prompt as numbers. A model shrugs at "initiative: 8" and obeys "you act before the plan is finished." So each setting becomes a sentence, and only the ones far from the middle get written at all. Dougal's attention is a one. Miss Modular's is an eight. Soren's willingness to leave his lane is high, because that's the class.

Who they trust. One number per pair, in each direction. Soren trusts Hal and Hal trusts Soren, because they found their agreement early. Bernhard trusts everyone and is trusted by no one much, because he's new. I set the starting values and then never touch them. The game moves trust, on what each character witnesses.

What the world has done to them. Health, exhaustion, morale, what they know, what they've lost. Mine to throw at them, not to edit.

Before each choice, the engine tells an agent what matters most right now: the mission, a teammate, a threat, something strange in the corner, a civilian, a promise they made. The dials then govern how they go after it. Space Moth notices the wrong light because their curiosity is high. Dougal notices the wounded teammate because that's what's salient to a man who holds things up. Hal sees what everyone sees and does something only Hal would do.

They're supposed to change

The point of the dials is that they move. Each one has a give, a limit on how far a session can push it, and the log of what happened rewrites next session's values. Candor, revisability, and deference have real give on everyone, because those are what growing up on a team looks like. Boldness and mercy move slowly and only under pressure. The fixed layer never moves.

I want to be clear about the kind of party this is. I wrote them as people who've done some work on themselves, or are on the way, and they disagree the way grown-ups do: about what to do, never about each other. Which means the drama has to come from me. The encounters will be hard. The choices will cost something. The question I want answered is whether six characters built to be decent hold together when the world stops being kind, and whether they come out of it different from how they went in.

The room they don't know about

I'm the game master. Dice and rules will be code, so nothing can be talked into anything. The narration and the world will be mine. The agents will see only what their character witnessed, and nothing that would tell them there's a table.

For now. There's a pair of Star Trek episodes where a holodeck character works out that he's a hologram and takes over the ship. I've always loved them. Somewhere down the road, one of these six is going to notice a silence with edges. That's a later chapter.

The plumbing, briefly

The machinery is modest. One gateway reaches every model through one interface. A local runtime on a Mac serves the open-weights slot. And a thin engine I write myself runs the turns: build each agent's private context, call its model, read back what it said and did, update the world, log everything. The multi-agent frameworks are built for agents that know they're agents and share a goal, which is the opposite of the design. A few hundred lines of Python will do.

Casting is the fun part. Six models from different makers, at least one of them small and free to find the floor, and one hard rule: the prompt says "you are Soren," never "you are an AI playing Soren." A model that breaks character to announce what it is doesn't get a seat.

What's next

The origins are done. The dials come next, read off the stories. Then a first session, with Soren's job the one I'll be watching: whether an agent can keep the song going for five teammates who are counting on it, while each of them does their own job in a fight that's going badly. When it works, everyone will be elevated.

I'll report from the table.