By 8 October Brackenmere had a village, weather, seasons and sword moves you pressed on purpose. It did not yet feel like a place that carried on without you.
That morning, while another session relaid the village for the third time, I opened a fresh one with a question rather than a feature: "Can you look through the current game performance and visual element here?... If we are double loading or triple loading or doing some unwarranted passes in code to make it not as performant, then we should definitely fix those."
And the part I cared about more: "I'm not a game designer, but I'd like to understand things like I know we've added bloom that I didn't really understand before." I asked it to "take what I've asked you and understand the meaning behind it to look elsewhere on what else we could do to make this an immersive experience that the user feels part of a world."
Six in the morning by the chapel after the stream: the low sun glows round the keep and stops at every roof.
What the research found
The first half of the research was reassuring: nothing was drawn twice by accident. One thing dominated: on my Mac, High was drawing at twice the screen's resolution, and that alone made a quarter of the frames stutter.
One of the two screenshots the research was judged from. It also noticed how much of the frame the guidance card takes.
Under the hood At pixel ratio 2 the drawing buffer was 2880 x 1800, and 50 of about 195 frames took over 20 ms. Turning off AO, freezing shadows or hiding the HUD changed nothing. At 1.5, none did. With the cap and a shadow cadence, draws fell from 635 to 460.
The second half was what I had asked for: a glossary (bloom, ambient occlusion, frame pacing) and a long list of the tricks games use. Cloud shadows drifting over fields. Sun shafts at a low sun. Eyes adjusting at a doorway. People glancing at you. A hit that pauses for a split second so it lands.
"Okay, talk me through all this now. What do you want me to do to see if 1.5 looks acceptable? How do I do that?" It showed me how, and I looked. "1.5 is fine. Maybe we just set 1.5 as the maximum here and not allow 2, which had jumps and stutters."
Then the list. "You've kind of put yes to everything here apart from number 17 and 18, and I agree with everything here. It's hard to know on 17 or 18 until I actually see what it looks like, of course." Those two, a far landmark and a tilt-shift miniature look, were built so I could judge them in the game, the second behind a settings toggle.
Weather that is not uniform
The list missed the thing I noticed most. "Have we also looked at the weather and how we can just make that a little bit more realistic?" I described what I meant: "with the fog, there'll be like moments when there's patches of less dense fog and denser fog... And maybe with rain, it could like, there could be a bit of a swell with the wind at one point, so it changes direction briefly, things like that."
The agent read the code and agreed: each weather spell had one wind, one rain intensity and fog the same thickness everywhere. But everything already read that one shared wind, so changing it in one place would move the trees, smoke, rain and the wind's sound together. Nine weather pieces followed, from wind that veers and surges to fog banks, squalls, sun breaking through overcast, mist that lifts with the morning, storm beats and fronts you can see coming.
"Yep, let's do all of them and just add them in to the queue as needed."
Before: mist at eight in the morning, the same thickness everywhere until the spell ends.
After: the same morning, the mist lifting as the sun climbs.
A queue, and too many agents
Twenty-seven pieces was too many to hold in one agent's head. "As we've got quite a lot now in this queue that is purely in your memory, I'm wondering whether to convert your order and processes to Solo MCP to-dos." Each piece became a todo with its own plan, reviewed by a Codex agent, then an owner in its own worktree, a review and a check in the running game.
Then I went out. "I'm going to be away from keyboard, so any blockers I'm happy to go with your recommendations." And on download size: "Don't worry about JS ceilings. I'm happy for our file size to grow and take longer to load up the initial game... It's just performance in the game that I care more about than the actual asset download size."
Early in the afternoon I asked for more: "I'd like to load up actually maybe up to seven so we can start to be more performant and get through this backlog quicker."
That was a mistake. Within half an hour, from another session: "I'm worried about them sharing heavy playwright tests and competing and reloading each other's work before one's got a chance to kind of take a screenshot." Then, plainly: "It's absolutely killing my CPU."
I did not want to be the scheduler. "I don't really want to be in charge of doing all this. Can you tell the parent agents of these subagents to orchestrate what gets what resources." We settled on a steady state: "I think I like the 3 owners + 1 reviewer, that seems sensible, lets keep that."
Once it calmed down I asked the better question. "What is the heavy slot used for? What actually runs the heavy slot and why are we running it?" And: "is it possible to run less heavy load tests here, or are they all needed? ... if we cut down the amount of times these need to be run, then we are going to save ourselves not only CPU but also time as well." Each piece dropped to focused tests and only the browser tests its plan named; the full suite would run once, on the merged branch.
Left before, right after: near grass round the hero on High and Medium, bending away underfoot.
Landing it
The pieces landed one after another through the afternoon ("can we push periodically as well, to ensure we are saving this to github accordingly"), and that evening the whole stream went to main.
Under the hood 320 commits between the research and the merge. On the merged branch 592 of 593 browser tests passed; the one failure failed the same way at the stream's start commit.
The owners left notes on what they could not judge: sun shafts that read as a halo rather than streaks, a lit room at midnight half a stop too bright. My last question of the night: "All that 'needs your eyes' are they recorded somewhere? I wont remember that, a solo mcp todo or something?" It became one todo, with every check and the URL to open.
Eight in the evening, before and after: the sun gets a glow in the haze, and the grass thickens at your feet.
Under the hood The download grew by about a fifth (793 KB to 956 KB of compressed JavaScript) and the village went from 124 to 180 shader programs. All of them compile while loading: none after the world is ready.
What I took from it
Asking what makes a game feel real got me further than asking for any one feature. None of these pieces is big. Together they are why the village feels alive when you stand still in it: cloud shadows crossing the fields, a crow lifting off a hedge, mist burning off the mere.
The other lesson was about the agents. More owners did not make it faster; it made my Mac grind. Three owners and a reviewer, with fewer test runs, finished the queue by evening.