FIELD NOTE · TA-95 REGISTER

A Wish Factory for Minecraft

Using coding agents to make our Cobblemon server a more personal place for my friends to play.

I’ve been using coding agents to make our Minecraft server more fun for my friends. A fair amount of that work involves giving Pokémon questionable fashion choices.

I like the idea of a coding agent as a type of genie. Some kind of entity acting within a framework to grant wishes, sometimes taking them to their literal logical conclusions. You get what you asked for, then have to work out whether that was what you wanted.

I picked up this framing from Kent Beck. This isn’t exactly contentious, but I think it’s clear nobody quite knows how best to use these systems yet. We’re barely scraping the top of the margarine on what models can do, and the models and tools keep improving while we’re figuring it out.

Someone pushing this further is Steve Yegge. He calls part of his custom genie-wrangling system a Wish Factory. He uses it to develop his multiplayer role-playing game, Wyvern. Players submit requests, and agents can pick up some of the non-disruptive ones and implement them without him needing to get involved. He credits Guy Podjarny with the underlying idea.

It seems like a sweet deal if you’re a player. Something you want in a game you love gets attention, even when it’s too small or too specific to make it onto a normal development roadmap. Often it’s impossible to get that kind of attention in your favorite games. The combination of code genies and a wish factory delights me greatly. I wanted to see what I could make for my friends, so I decided to build my own.

A World of Our Own

We’re playing Cobblemon, which puts Pokémon into Minecraft. The server runs on AWS. Huge nerds that we are, we have opinions about things we’d like to change. Some come from Pokémon fangames like Radical Red. Others are things that would be useful or funny in our particular server.

I’ve set up a Discord bot to watch a feature-requests thread. The agent workflow triages requests by feasibility and impact, adds them to the project’s to-do list, and prepares changes for review on a test server. There’s still a gap between a request arriving and something being ready for the shared world. That’s where a lot of the work happens.

The custom forms are my favorite part so far. Pokémon already has the idea of a familiar creature taking a different form, so there’s room to change something without making it feel like it belongs in another game. We can borrow an idea from a fangame, add our own details, and give people something new to discover on a server they already play on.

What’s Black and Blue and Overflowing with Mystical Power?

We started with Arcane forms for Solrock and Lunatone. The initial idea came from Radical Red, then we started adding details. They should emit enchanting-table particles. Shiny Solrock should be a Black Sun, shiny Lunatone a Blue Moon. Getting one should involve a Sun Stone or Moon Stone and a powered enchanting table.

Of course, the genie needs to know what a powered enchanting table actually means.

We settled on fifteen effective bookshelves, with the sun ritual during the day and the moon ritual at night. That’s a different experience from typing a command to give yourself a new Pokémon. There’s something to build and a reason to use those stones.

The conversation turns into rules, the agent implements them, and we can open the game and see whether the result is any good.

Shiny Arcane Solrock, with a dark body and gold rays, on the test platform.

Black Sun Solrock on TEST. This is a staged test Pokémon, not a wild encounter.

The colors needed another pass. Testing caught a mistake in Solrock’s body and rays, and the pupils needed recoloring too. Those are the kinds of details that matter when the whole request starts with a picture in your head. A completed build doesn’t tell you whether it looks right.

The blue and icy-white crescent of shiny Arcane Lunatone in its summary-screen portrait.

Blue Moon Lunatone, cropped from the TEST client’s summary screen.

Blue Moon Lunatone with a white L-shaped rune floating beside its face.

Blue Moon’s floating runes on TEST, captured from the particle-effect clip.

Eventually the Arcane forms went out in our 2.3.0 release, alongside a separate feature that lets a Pokémon with Teleport take you back to your spawn point. That one is less elaborate than an occult sun ritual, but useful when you want to get home.

The Bird Needs a Bigger Hat

Then there was Honchkrow.

Ordinary Honchkrow with its original hat brim and visible red eyes, without sunglasses.

Ordinary Honchkrow on TEST, before Black Glasses activation. The original brim and red eyes, with no sunglasses.

Honchkrow already looks like a bird in a fedora. I wanted a custom form with cool shades and a huge brimmed hat, “like ridiculous diameter.” Using Black Glasses would unlock it, and it would get improved riding capabilities.

The agent made the hat three and a half times the normal width.

A dark-blue Honchkrow wearing sunglasses beneath a brim much wider than its body.

The first Head Honchkrow design on TEST. I did ask for a ridiculous diameter.

I asked it to reduce the brim by 50%. Then I decided hat sizes should be random instead, somewhere between a fairly reasonable hat and the original ridiculous one.

The implementation saves the size with the Pokémon, so recalling it or restarting the server doesn’t reroll the hat. Your bird gets to keep its particular level of absurdity.

A normal-color Head Honchkrow with the minimum brim size.

The 1.25× minimum, assigned to a TEST fixture to check how it looked.

A shiny purple Head Honchkrow with the maximum brim size.

The 3.5× maximum on a separate shiny TEST fixture. These endpoints were assigned for visual checks, not caught as random rolls.

What’s interesting to me is that the agent could work on the 3D model itself. It inspected the animation-bone hierarchy, split the brim into its own bone, and kept it attached to the hat so it could scale the brim without stretching the rest of the bird. It attached the sunglasses to the head rather than the eyelids, so they’d follow head movement without joining in when it blinked.

The first edit wasn’t the end of it. The agent worked through the model format’s scaling limits and adjusted the flight camera so the brim didn’t block the view. It then drove the test client to activate the form and try flying it. I could ask for a ridiculous hat, and it could work out how to attach it to an animated bird and keep troubleshooting until it worked in the game.

If You Give a Bug a Sword

The other forms have their own complications. For Hero Ledian, I wanted a Kamen Rider-inspired recolor, green armor and red eyes, with a Diamond Sword unlocking Ledyba’s alternate evolution.

Hero Ledian hovering among cherry trees, with green armor, red eyes, a dark body and silver fists.

Hero Ledian’s recolor on TEST. Its sword-triggered evolution was checked separately through the actual evolution menu.

Getting both evolution choices working exposed a multiplayer held-item bug. Making the character we wanted meant fixing something below the form itself. A request about a Pokémon can end up being a compatibility investigation.

Roasted Sunflora went in another direction. Ember-colored petals were only part of the request. I wanted a Grass/Fire form with changed stats and moves.

Roasted Sunflora with orange petals and dark foliage, standing beside a path in the test world.

Roasted Sunflora’s early cosmetic preview on TEST. It still had its original gameplay data in this capture.

A nice screenshot only answers part of that request. The appearance and the gameplay changes need their own checks, which is why I don’t count a new texture as a finished form.

There’s other work around the server too, including custom Klinklang and Metronome mechanics, Showdown-style random battles, Journey search improvements, and server-management functions. These are at different stages. Some changes have shipped, some are on the test server, and others still need work. At this point in the story, Honchkrow and the later forms hadn’t followed Arcane into production.

The Joys of Supporting Users

During the Arcane release, someone joined the server while the update was being prepared. The restart guard refused to stop it. The player got a warning and logged out before the deployment could proceed.

Apparently my friends expect to play Minecraft during my change windows. Very inconsiderate. (Just kidding.)

That’s why the guardrails belong in the deployment automation. For this release, it also backed up the existing mods and configuration and checked that staging left the protected world and player files unchanged. I don’t want those protections to depend on the genie remembering an instruction. I want it to be creative with the Pokémon, with very little room for improvisation around player saves.

This is not quite a true wish factory, in that our version is more hands-on than the autonomous part of Yegge’s system. That’s deliberate though, as some of these requests change game balance, and we make those decisions as a group. But it has been interesting to apply this idea in a similar environment, with a much smaller audience I know personally.

The actual work here used Pi with an OpenAI Codex-provider model, gpt-6.1-sol, against Minecraft 1.21.1 and Cobblemon 1.8.1. The agents could inspect the project, change code, build packages and drive a real client for testing, with prod deployment gated behind my review and approval.

So far the requests haven’t stopped and my friends and I are having more fun with the server due to the changes.

Here’s hoping the wishes keep rolling in.