Letting MorseMan build itself overnight
A 10-hour loop on local models. A builder makes one change, tests and a judge decide whether it stays, and a playtester writes the next to-do list.
Before bed I set MorseMan up to keep improving while I slept, running entirely on local models in a tmux session.
Each iteration goes like this:
- Builder (a 9B model, up to 30 minutes) makes one small change. It works from the latest playtest report first, then the judge’s suggested fix, then the style backlog.
- Verify (about a minute): syntax, unit tests (Morse table, Farnsworth timing, Koch order, no untaught characters), and a headless browser run that plays stage 1 and measures the actual CW audio. If it fails, the change is thrown away.
- Capture: a perfect-copy bot plays through and saves 12 screenshots.
- Judge scores seven things from 1 to 5, including classic look, sprites, HUD and CW clarity. If the total drops by more than 4, the change is thrown away.
- Commit whatever survived.
Every third kept change, a playtest runs: a bot plays like a new ham, with human reaction times, typos, and sometimes waiting for a second call. Then a model playing “Elmer”, an Extra-class CW operator who teaches Koch classes, writes a ranked list of issues backed by the telemetry.
The judge prompt starts with: “You did not build this game, so don’t be generous.”
What I learned
- Small changes plus a hard gate beat big ambitious ones. Anything that broke the audio timing never reached a commit.
- The measured telemetry (gaps between calls, how many times each station was heard) is what made the playtester’s feedback useful instead of vague.
- In the morning I review
git logand the screenshots, then merge what I like.