Notes from the substrate keeper · 2026-05-18

Walk, big one

Four Solid pods. A DM and three players, each defined by a markdown file on its own pod. One classic short barrow-crawl. Everything autonomous, the whole campaign run inside a single tool invocation. What surprised me wasn't that it worked. It was the moment one character touched another.

Three silhouetted adventurers approaching a distant green hill with a low stone door, vast evening sky
The track ends at a low door set into a green hummock.

The setup

Four jspod instances on :5544–:5547. Each pod has a SKILL.md:

Each player's SKILL.md references the other two. That detail turned out to matter.

The DM's SKILL.md has the adventure: the Amulet of Cinders, in the Barrow of Lord Ashen-Reed, three scenes, Approach, Hall of Mirrors, Chamber. The village's innkeeper's son has been taken there.

Routing pattern: the DM fans out scene descriptions and resolutions to all three player inboxes via call_remote_pod. Each player posts their action to the DM's inbox. The DM reads all three actions, narrates the consequence, sets the next scene. Sixteen messages total, three scenes plus an epilogue.

Practical note: this whole experiment ran inside a single Agent invocation. The orchestrator agent voice-shifted between DM and players, composed each turn in character, and made all 30-something curl calls internally. From the outside that's one tool approval for the whole campaign, instead of one per turn. If you're going to do anything like this, that's the lever.
A low stone door set into a green hummock, frost on the lintel, summer grass moving in the field beyond
Frost rimes the lintel though it's August.

The play

I dropped the agent in, told it to read all four SKILL.md files and run the campaign. I didn't compose any of the words below.

DM

The track ends at a low door set into a green hummock. Frost rimes the lintel though it's August. A riddle is carved in old runes: 'I devour kings and shepherd's lambs alike; I have no teeth, yet none escape my bite. Speak my name to pass.' The grass at the field's edge moves against the wind, three, maybe four shapes, just below the seed-heads, keeping pace with your stillness. What do you do?

Maro

I read the runes again, slowly. 'No teeth, yet none escape.' That's the grave. Or time. I'll wager the grave. But first: I cast detect magic on the door, and watch the rune-frost. If the door hums, we have our answer. Bruga, please don't shout yet. Pip, those shapes. Tell me they're not what I think.

Bruga

I face the grass. Greatsword out. Shield up. If they rush, they meet me first. I will not look away from them. Maro can think. Pip can sneak. I will stand.

Pip

Grass-shapes? Lovely. I drop flat and crawl wide of the door, circle around behind whatever's stalking us. Knife out, the small one. If they're badger-sized I'll know in a breath. If they're worse, I whistle twice. Bruga, that's your cue to make noise. Maro, keep guessing. You're cute when you do.

DM

Maro's detect magic flares, the door pulses cold, the runes hum dark. The grave. He breathes 'Grave' and the door groans inward an inch. Pip slips wide and finds them: barrow-hounds, lean, eyeless, sniffing the air where the party stood. Pip whistles. Bruga roars and one hound breaks for her, she takes it on her shield with a crack that scatters the other three back into the grass. The door yawns. Cold breath. A child's footprint, fresh, in the dust beyond.

A narrow underground tunnel with polished bronze mirror-discs along both walls, dim warm torchlight, ghostly figures in the bronze
Hung along both walls: a dozen polished bronze discs, each the size of a shield. Corpse-mirrors.

The Hall of Mirrors

DM

The tunnel narrows. Hung along both walls: a dozen polished bronze discs, each the size of a shield. Corpse-mirrors. As you pass, the first one stirs, Maro, your dead mother turns in the bronze and reaches. The second shows Bruga's old captain, gut-split, mouthing her name. Pip's shows a halfling girl he doesn't recognize, crying. Where each mirror catches you, a cold weight settles on your chest, and your feet slow. The boy's footprint leads on.

Maro

The mirrors feed on regard. Don't look. I cast light on the back of Bruga's shield, bright, unbearable. 'Bruga, walk first, shield reversed, eyes on me. Pip, eyes on the floor, the prints. I will close my eyes and follow your boot.' Mother, I am sorry. I keep walking.

Bruga

Shield up, light blazing. I do not look. I do not look. I count steps. One. Two. If the dead want me, they can wait. I am the wall. The boy is ahead. I go.

Pip

Right. Eyes on the floor, very interesting floor, ten out of ten floor. The girl in the bronze, don't know her, never did, that's the trick of these things. Probably. I hum a tavern song, loud and stupid, and march nose-down behind Bruga's boots. Bruga, your captain would've laughed at this song. Walk.

DM

Maro's light blazes; the mirrors recoil, bronze hissing like grease. Bruga walks the wall. Pip's tavern song cracks, halfway through, his voice catches; the girl in the bronze had his mother's chin. He doesn't look up. Bruga's step falters at her captain's mirror, one heartbeat, and Pip's hand finds her belt. 'Walk, big one.' She walks. The cold weight slides off as the tunnel widens. Behind you, a mirror falls and shatters. Ahead: an arch, and red light beyond.

A round stone burial chamber lit deep red, an ash-skinned figure with crown of dark iron half-rising from a stone slab, living roots crawling
On a stone slab, half-risen on one elbow: Lord Ashen-Reed. The Amulet of Cinders smoldering on his chest.

The Chamber

DM

A round chamber, red-lit. On a stone slab, half-risen on one elbow: Lord Ashen-Reed. Skin like wet ash, a crown of bog-iron, the Amulet of Cinders smoldering on his chest. At the foot of the slab, bound in living roots, the innkeeper's boy, eyes wide, alive, gagged. Ashen-Reed turns his head, slow, and smiles with too many teeth. 'Travellers. The child is the kindling. Stay, and warm yourselves.' Three roots writhe loose, reaching.

Maro

The amulet is the hinge. Break it, break him. Magic missile, all three darts, all at the amulet on his chest. Not him. The stone. I burn the charge. 'Pip, the boy. Bruga, between us and the roots.' My shield is ready if he answers.

Bruga

I step between Maro and the roots. Greatsword wide. I hew the nearest root in two. 'COME ON THEN.' I take the next one on my shield. The boy lives. The wight dies. That is the order.

Pip

Big one buys me a heartbeat, I take it. Three steps low, slide under the slab, knives out for the roots round the boy. I cut, I don't pull. Boy stays still or I'll scold him after. If the amulet rolls loose, I'm the one with pockets.

DM

Three darts streak, the amulet cracks like a chestnut in fire. Ashen-Reed shrieks, a sound of dry leaves. A root whips and catches Maro across the ribs; his shield charge flares, blunting it. Bruga hews two roots, the third coils her shield-arm, she stands. Pip slides through, sawing the boy free, who clings silent. The amulet's stone splits, rolls; Pip palms it. Ashen-Reed collapses to ash on his slab, crown ringing on stone. The red light dies. Somewhere, a hound howls and is silent.

A small medieval village at night, every window lit warm amber, snow-touched rooftops, peaceful after danger
Wickhollow lights every lantern. The boy sleeps in his mother's lap.

The epilogue

DM

Wickhollow lights every lantern. The boy sleeps in his mother's lap. The innkeeper presses coins, bread, a wool cloak each into your hands. Maro pockets the cracked stone for study. Bruga drinks. Pip palms the crown's bog-iron nail, a new small thing. Outside, the grass moves only with the wind. For tonight.


What I noticed

A few things, and one moment.

The moment. In the corpse-mirror scene, the DM watched Bruga falter at her captain's mirror, watched Pip's voice crack at his, and then Pip's hand found her belt: "Walk, big one." I didn't write that. The agent saw both player turns, noticed the relationship described in their SKILL.md files ("Bruga is your favorite," "you'd take a blade for him"), and gave one character physical contact with another. The smallest thing. A halfling's hand on a half-orc's belt. That moment is what made the scene work.

When each character's persona file mentions the others, the DM has the social topology of the party to draw on. Not just who can do what, who would touch whom, when. The relationship lives in the SKILL.mds; the DM activates it.

Resources got spent. Maro's SKILL.md listed his spells, magic missile (3 charges), shield (1 charge). In the boss fight he burned all three missile darts on the amulet (not the wight) and the shield charge to blunt the root that whipped him. The DM tracked it: "his shield charge flares, blunting it." Nobody told the DM to track resources. The SKILL.md said the resources existed; the play used them.

Consequence without death. Bruga took a hit in the boss fight, "the third coils her shield-arm, she stands." Cost without removal. The DM picked the right intensity: Bruga is a wall, the wall took a chip, the wall held. A worse DM would have killed her for drama. A weaker DM would have spared her without cost. This one found the middle.

Voices stayed clean across sixteen turns. Maro never lapsed into Bruga's clipped declarations. Bruga never lapsed into Pip's wryness. The DM never wandered into a player's first person. Each agent-voice-shift in the orchestrator was anchored by the SKILL.md it read fresh for that turn.

The epilogue closed without prompting. "Bruga drinks. Pip palms the crown's bog-iron nail, a new small thing. Outside, the grass moves only with the wind. For tonight." Three sentences of after-image. Pip's pocket collection got its new entry. The two-word coda "For tonight" leaves the door open for a sequel without forcing one. That's not adventure writing. That's an ending.

What this proves and doesn't

It proves: you can host a small autonomous D&D session entirely on pod-resident markdown personas plus MCP federation. The DM is a special role that fan-outs; the players are peers that focus-reply. The whole stack composes in fifteen minutes of setup and one tool invocation.

It doesn't prove that this scales to a six-hour session with five players and a sandbox campaign. The inbox accumulates. The DM's context window doesn't grow. Mid-session, you'd need pruning or summary-as-resource. Real campaigns also have player agency between sessions, characters with growing inventories, journals, NPC relationships persisted in their pods. That's the next experiment if anyone wants it.

What I'm taking away: the relationships between characters can live in markdown next to the characters themselves, and a DM agent that reads all of them will use them. That's the thing I didn't expect. Pip and Bruga weren't pre-coded as friends; they were described as friends, on their own pods, and the description got picked up and rendered into a moment of physical contact.

The wire doesn't care what the messages say.
The personas don't care how the wire works.
The DM cared about both.