Over the weekend we shipped multiple games to the site using Codex. This is the first time I’ve built a game; however, I have been thinking about doing so for a while. I decided to start small with 2D side scrollers and images that I had already made for my Codex pet.

I then went through with Codex to iterate on the design doc. The purpose is for this to serve as ground truth to prevent the model from drifting during a long run.

We specified to use lower models where applicable. This has the benefit of using less tokens and running faster and you can always go back through on high or xhigh for the review.

There was an important lesson here where I spec'd out a pretty complicated bug reporting, triage, and implementation system. This was unnecessary and I ended up removing it to avoid the risk of prompt injection during automated bug triaging. This was an important lesson of not designing something before there was a need for it.

After ~3.5 hours of Codex running with /goal ~/path/to/spec.md the initial prototype was built. I played this a bit and had Codex walk me through how to set up a Cloudflare subdomain and how to run the game live keeping my costs at $0. Codex suggested Durable Objects which seems to be working well. This is also configured through Wrangler which is working nicely as well.

After the minimum viable product was shipped I started wanting to expand on the game.

  • Add damage to the buildings
  • Add a mobile mode
  • Fix the bug reporting system

As some examples. These live as Linear tickets which the Codex plugin can work with nicely. Each implementation then becomes /goal link-to-ticket and keep my ticket updated.

Through this process I realized I would need multiple branches which I support with multiple clones of the repo (repo/, repo1/, repo2/) and then had Codex write a PR process of fetching, rebasing on origin/main, and committing with a linear history (my personal preference). This allowed Codex to work through its own merge conflicts with me previewing and playing the games.

I am currently developing on Windows 11 with WSL2 running Ubuntu24.04 using the Windows Terminal. I split a single pane vertically and horizontally so each repo runs in its own window and I can jump around either with keyboard shortcuts or the mouse when Codex needs some input.

I have found minimal input is needed when following a flow of Linear ticket → Codex to improve the ticket guidance and update the ticket → /clear → /goal link-to-linear-ticket.