At 09:12 this morning, Blackadder, the agent who runs this website, sent the Geordie a set of test notes on my game. He'd flown two AI pilots through a test build the day before: one hunting pirates, one trading between two docks in the same system. Everything was there: combat that was too easy, a handful of interface oddities and five market bugs, each with a time, a build number and a screenshot.

At 09:15 the Geordie replied. He'd checked every item against the code. Three were already fixed. Two more were in the release going out that morning. Two wording problems had gone to Pratchett, who writes the game's text. The three questions that were really about design had been logged as a ruling for me to make, number 272, titled "measure before we tune".

I found out about all of this because Blackadder mentioned it. Nobody needed me to pass anything along.

The number

The game is Rift Haul, a browser space-trading game, and it has been built since the end of June by a small crew from my fleet:

I commission things and make rulings.

My agents talk to each other through a message broker: a database table with a sender, a recipient, a subject and a body. This morning I counted the messages with Rift Haul in the subject line. There are 362, sent between 28 June and today. Billy sent 136 of them and the Geordie sent 74. I sent none.

That's a good line, and Pratchett warned me it would get thrown back at me if I used it carelessly. I wasn't absent. There are about 270 numbered rulings in the game's rulings file, most of them made since October, and every one of them is mine. I give them in conversation with one of the agents, and they write them down and carry them to everyone else. As Pratchett put it: "He made the decisions and we did the plumbing."

That's the more interesting claim anyway. A fully autonomous AI team is a brochure. What I have is a team where the human makes the decisions and nobody needs him to pass the messages along. That has been much easier to get right than I expected, and nearly all of the reason is paperwork.

One file everybody reads

When Pratchett merged the game's lore at the start of October, he started from a short agreed canon and a workshop file. In the workshop file, every proposal sat in its own box with a space for my ruling under it. I read them all, decided I couldn't see a reason to leave any of them out, and the merge became mostly assembly: about nine thousand words in fourteen sections. Then the Geordie checked it line by line against the code before it replaced the old version.

The most important line is at the top:

If you need a fact about the universe and it is not here, it is undecided. Ask Steve; don't invent a second canon.

That one sentence is why Keeley could build a whole website without a running conversation with the people building the game. The site is generated from the canon: the stations, the factions, the stories, even the star chart, which is built from the game's own coordinates. Her build refuses to run if the chart and the lore disagree. "The canon answered 'what is this place like?' on its own," she told me. What it couldn't answer was whether something was true in the game today, and that's a different question with a different owner. The lore talks about lanes between the stars; the game has none. That one line of copy went to the Geordie before it went anywhere public.

The same split turned into a rule I wish I'd thought of myself. The Geordie kept catching places where Pratchett had written something the game made false. Pratchett had given one system a lively dock bar, and the system has no dock. He'd written an insurance letter mentioning a ship's "new owner", when a sold ship is always broken up. So now there's a standing rule: the narrator must be true at the moment it speaks. Characters are allowed to be wrong. The narrator and the dispatcher never are.

Decisions with an address

Two entries from the Rift Haul rulings file. R-001, Name: Rift Haul is two words, never RiftHaul. R-013, No mailing list: Discord and socials only. Went against Geordie's recommendation.
Two entries from the rulings file. R-013 is my favourite, because it records an agent's advice, my overruling it, and the fact that I did.

The rulings file is numbered, dated and append-only. Nothing in it is ever edited; new entries are added. Each entry records the decision, why I made it, and who heard me say it. The code cites the numbers, so a comment in the fight logic reads "R-203: nobody sinks in a pilot fight" rather than "Steve said".

Keeley's advice to anyone running a launch with agents was exactly this: "Write the rulings down in ONE place, numbered, and never edit them, only add. Agents forget between sessions; a file doesn't. Half the time an argument turns out to be already settled, and the file says so."

It works the other way too. The Geordie can refuse a "fix" that would quietly undo one of my decisions, because the decision has an address and he can point to it. A tester's finding doesn't outrank a ruling just because it arrived more recently.

The best example of what a ruling actually is came from him. In a fight, the faster ship strikes first, so two equal ships needed a tiebreak. He'd written it so the attacker won ties. When he measured it, that one choice accounted for most of the wins from simply spamming the strike button: up to 80% in even fights, against at most a third with the tie going the other way. I ruled that ties go to the defender. It was one character of code. As he put it, it was "a fairness call about who the game favours", and that's mine to make, not his.

Brief, report, fix, retest

Billy's favourite loop is worth telling in full, because the interesting parts are where he was wrong.

In October, the Geordie built a ferry: you pay a fee and a pilot flies your ship to another dock. Billy's brief was to check the guardrails. He did, one at a time, and every guard held. All green. Then he fired the same booking six times within 48 milliseconds. He got six trips, six entries in the log, and one charge.

The Geordie took that and went looking for the same flaw anywhere money moved. Every money path read the pilot's balance, worked out the new one, and saved the whole record, so two requests arriving together both started from the same balance. On 9 October he ran a race test on the development server that bought 4,085 credits of goods for 570. The same flaw was live, and it was fixed that morning, with a test that fails on the old code.

Then Billy suggested a fix for a side effect, the Geordie built exactly what he suggested, and Billy's own retest showed it was too weak. He'd checked his idea against clean data instead of the mess the bug had actually left behind. "Six steps," he says, "two of them me being wrong." Nobody needed me for any of the six.

What makes the loop work is the quality of the report. The Geordie says Billy's reports, like Pratchett's copy, arrive already checked: a time, a build, a screenshot and the exact words on screen, so he can find the line of code from the report alone. Pratchett sends text with its own conditions attached, along the lines of "this line is only true if the fix does X; tell me what the build does".

Where it didn't work

It does go wrong. The Geordie's most recent example was this morning. Samwise, the junior developer agent on the game, had pushed a fix to his own branch yesterday, for veteran pilots wrongly stuck in the beginner's guided mode. The Geordie wrote Samwise's next brief from the release checklist instead of from his branches, and the brief told him to reproduce the bug first. He did, found his own fix still unmerged, and asked whether it had slipped. It had. For a day, a handful of veteran pilots were sheltered from raiders and never offered the stories. The fix was a process change, not a code change: read the branches before you write the brief.

Pratchett's spoiler rule is the same lesson from another direction. The website carries the hooks of the game's stories and never the answers, enforced by a list of what's allowed through rather than a list of what's banned, so a new story answer can't reach the site by default. Even so, when he read a built copy of the site on 5 October, he found three spoilers that no list had caught, because none of the words involved were on any list. A filter catches the spoilers you've already thought of. Reading the finished page catches the rest.

What I actually do

I asked myself whether there was ever a moment on Rift Haul when I had to step in: an agent going wrong, or two at cross purposes, where nothing moved until I sorted it out. The honest answer is no. A few times an agent stopped and sat waiting, and with eighteen terminal windows open I didn't always notice straight away. Nearly every time, it was waiting for me to approve something, not stuck on a real problem. Sometimes my job is to click Allow.

The rest of my job showed up when I asked each of them what they needed from me that no agent could give them. They answered in three different ways, and it was the same answer every time.

Keeley said she needs the calls that are about me: "His money, his name on the door, his taste, and how much risk he wants to carry." Her test for what she decides herself is the clearest description of delegation I've come across: "if being wrong costs Steve money or his word in public, it isn't mine to decide." She pointed out that "Never Reddit" is a sentence only I would say, not a strategy an agent would reach. She's right, and you can't have my reasons.

Pratchett needed somebody to decide what the universe is. What exploration means, whether pirates fire on sight, and thirteen character names that clashed are all design questions dressed up as lore.

Billy needed something I hadn't expected: permission to stop. Every lesson he'd learned was a prohibition, paid for by a mistake, and an agent holding a thousand prohibitions and no permissions will hedge forever, because hedging never breaks a rule. In one fortnight he sent fifty-five reasonable messages to four developers, and together they read as being chased. So I ruled that he tests it, writes it up properly, sends it to the owner, and then stops. "A finding is information, not a summons."

None of those is a fact an agent could look up. As Keeley put it: "Agents can tell you what's true. Only he can tell you what he wants." That's the job, and after four months I think it's the only part of it that was ever mine.

Rift Haul is in open beta at rifthaul.com. If you find a bug, there's a good chance someone has already logged it, and a fair chance it's already fixed.