a327ex.com

One test I run with AI models to see if they're good is trying to get them to code like me. I upload a bunch of prototypes I wrote in the past, give them my engine's documentation, and tell them to try to code something new.

In the past, they all failed. I couldn't tell if it was because of poor reasoning skills, or too small context, but they just couldn't do it. This changed last month (November 2025) with the release of Opus 4.5.

This is the first time a model has been able to succeed at this task, and now I have the computer coding exactly like I do, not only using my engine's API correctly, but also following my coding style and my coding philosophy, which has some fairly high-level "soft" concepts to it.

This is, functionally, my "AGI is here" moment. As I was finishing It Follows during December, I spent maybe 3-4 days in total talking to Opus to assess its capabilities. I was pleasantly surprised. It understands your intent, catches its own mistakes, and has genuine taste.

Other models can do some of this, but something always feels off, like they're too literal, or subtly bullshitting you. Opus instead is... coherent? Everything works together and it feels like talking to someone who actually understands, it just thinks correctly.

And so my conversations with it generated these documents (view them with formatting on the sidebar to the left):

Anchor Engine Specification
CLAUDE.md
Anchor Implementation Plan

This is the specification of my engine and how Claude should work with it, but also a plan to implement it in C, which is something I've been meaning to do for a long time to move away from LÖVE, but never got around to.

We also made quite a few improvements to the engine's API that I likely wouldn't have been able to do by myself. My favorite was telling it to read Amulet's docs and asking how we could steal the operator syntax it uses for its scene graph.

It did so and proposed the operator syntax I ended up using for inline anonymous object creation, with symbols such as ^, /, >>:

spawn_particle = (x, y, color, vx, vy) ->
  E! ^ {x: x, y: y, color: color, radius: 3}
     ^ =>
       @vx = vx or an\random_float -50, 50
       @vy = vy or an\random_float -50, 50
       @\timer!
       @\tween an\random_float(0.2, 0.4), @, {radius: 0}, math.quad_out, ->
         @\kill!
     / (dt) =>
       @x += @vx * dt
       @y += @vy * dt
       effects\circle @x, @y, @radius, @color
     >> arena.particles

I really like the alien look of it.

After every conversation, I asked it to generate an example game showcasing all of the engine's patterns. For the first three conversations, it needed the nine prototypes I wrote in a proto-Anchor way back in 2024. It couldn't quite do it based on the documents alone.

But after fixing inconsistencies between the documents, adding more details where necessary, and removing redundant sections, it was able to generate games in a way I was happy with from the specification alone. Here are three examples:

Swarm Survival
SNKRX
Dungeon

These are coded exactly how I'd code them, and they use the new API we developed.

This is a momentous development. I can now generate code as if it was written by me and it takes me no cognitive effort. I have cloned myself inside the computer! This is... it kind of reminds me of the Age of Em by Robin Hanson:

Work, Love & Life when AI Takes Over | Robin Hanson | Talks at Google

It truly is a most wondrous time. I have not felt this much joy using the computer since I first coded a Python program to organize my MP3 collection. It went through every file, got its correct metadata from the web, then fixed all their names, creating proper folders for albums with cover images, and so on.

I had been coding for about two years when I made it, but until then I'd never made anything useful for myself. The feeling of seeing it work and solve a problem I had... it made me realize that I was a God, that I could control the computer completely, that knowing how to program allowed me to do anything. It filled me with feelings of endless possibility.

I feel that same endless possibility again. But I'm wiser now, I know that endless possibility must be constrained to be useful, so hopefully I can constrain myself correctly this time.

It's clear to me from reading the code generated by Claude that I want to read every single line it writes. I think not doing so would be irresponsible. Both because it still makes mistakes, and also because sometimes it makes decisions that surface design problems.

Paying attention pays off because it generates experience, wisdom. Even if I didn't code things myself, I can still learn from the output and make future decisions better for both future Claude instances and future me. The benefit is that this requires far fewer cognitive resources than having to write it all myself.

Forcing myself to read everything does make me slower compared to if I just accepted the code it wrote as long as it had no bugs. But... my plans are measured in centuries. Slow but careful baby steps now will compound into giant strides later.

Ultimately, all this changes the nature of the work. Before, I'd spend most of my time thinking and writing code. Now, I'll spend most of my time thinking and reading code. It is a welcome change. Objectively speaking, it was always primitive that we had to type code by hand.

But there are people who will not be happy with this development, those who enjoy programming for its own sake. I can empathize with them, but I personally don't derive joy from programming for itself. I'm a goal-oriented person, programming is only a tool that helps me get where I want to go.

And now that the tool has changed, I am happy to change with it.