Directed evolution for code

Define the goal.
AI gets it done.

One agent builds it. A second, much tougher one compares it to something real you picked — without being told which is which. It keeps going, try after try, until yours is the one that wins.

Sign in with Google · runs in your CI · results arrive as pull requests

A landing page · 3 generations vs. a page you admire
Gen 1
Gen 2
Gen 3
The benchmark
Hero
lost
lost
won
Sign-up
lost
lost
won

Judged blind against a page you admire — the critic is shown both and asked which one it would actually finish signing up to.

Gen 1
Gen 2
Gen 3
The benchmark
Three-quarter
lost
lost
won
Front
lost
lost
won

Judged blind against the manufacturer’s photograph — two cameras on the same model, so a generation can’t win by getting one angle right.

Gen 1
Gen 2
Gen 3
The benchmark
Context & rules
CONTEXTmodelreadwritesearch38%lost
CONTEXTmodelrulesreadwritesearch66%lost
CONTEXTmodelrulesreadwritesearchretry91%won
CONTEXTmodelrulesreadwritesearchretry94%
Tool failure
CONTEXTmodelreadwritesearch11%lost
CONTEXTmodelrulesreadwritesearch47%lost
CONTEXTmodelrulesreadwritesearchretry84%won
CONTEXTmodelrulesreadwritesearchretry88%

What improves is the harness — the context boundary, the rules inside it, the tools wired to the model and the retry path when one fails. Scored on cases the builder never saw.

Gen 1
Gen 2
Gen 3
The benchmark
At speed
lost
lost
won
Into the corner
lost
lost
won

Judged blind against a shipped racing game, on the things a still frame cannot fake — wheel blur, weight on the outside tyre, the dust a slide throws.

Why it works

Creation is cheap.
Selection is what produces quality.

Anything can generate a first draft. What makes work good is being measured against something real, repeatedly, by something that isn't trying to please you.

A benchmark that's real

Named, fetchable, comparable — a competitor's live page, an actual photograph, a published score. Given something vague, a critic invents a comparison and approves everything.

A critic that judges blind

Separate context from the builder, labels stripped, shown both. If it can pick out yours, the generation lost — and it says exactly what gave it away.

Generations, unattended

Each round feeds the last verdict back to the builder. It runs for hours without you, and you read the result rather than supervising the process.

Traps that catch a hollow win

Where it ships, what varies, what budget. Three questions that stop a loop winning the comparison while shipping something you can't use.

Getting started

Nothing to install.

Your code never leaves your repository. MacroEvo sends the brief and receives the results — the work happens in your CI, on your key or your Claude subscription.

01

Sign in

Google sign-in. No password to manage, nothing to download.

02

Connect a repository

Install the GitHub App on the repos you choose. It sees only what you select, and you can revoke it from GitHub at any time.

03

Name the benchmark

The reference worth beating, and the three trap questions. This is the part that decides whether any of it works.

04

Let it run

Watch generations converge on the dashboard. Take the pull request when it wins.

Point it at something you've been losing to.

The loop doesn't stop at good enough. It stops when the critic can't tell yours from the real thing.