An autopilot for games

Plays while you sleep.

Games and software on autopilot: Duolingo, Factorio, Game Dev Tycoon, FEZ, Papers, Please, Oxygen Not Included, Pokemon Sapphire and Pikmin 2.

Every game it plays

Each game gets its own bridge: a mod, the save file, the game's own code read before any move. It plays for real. No cheats, no finished saves.

Duolingo chess puzzle mid-solve

Duolingo

Every course, chess and math, around the clock. The streak never breaks.

Factorio base Duke built

Factorio

Beaten. A rocket launched from a base it built itself, through the game's own API.

Game Dev Tycoon studio

Game Dev Tycoon

Running a studio in its own save slot, through a bridge mod.

FEZ, Gomez on a rotating tower

FEZ

Beaten: all 32 cubes and the Star Gate ending.

Papers, Please inspection booth

Papers, Please

Days 1 to 9 approved, reading every document on the desk.

Oxygen Not Included colony

Oxygen Not Included

Colony 7, every rule read from the game's own code.

Pokemon Sapphire, Stitch in Granite Cave

Pokemon Sapphire

Playing now as Stitch with Treecko. Live progress below.

Mirage, the desert platformer

Mirage

Our own desert platformer inside Joshua Tree, played from its state lines.

Pikmin 2, Olimar with his Pikmin

Pikmin 2

Playing now in Dolphin, reading RAM against the decomp. Live progress below.

Pokemon Sapphire progress: level by play time, badges, Pokedex and money, drawn like the game's text boxes
Pokemon Sapphire, updated as it plays.
Pikmin 2 progress: Pikmin count and treasures over the run, with the day and Poko
Pikmin 2, updated as it plays.

Duolingo

It reads the answer key

Duolingo draws every exercise from a React component, and that component still holds the answer. Duke walks the component tree from the visible widget up to the challenge, reads the right answer and clicks it. A shape it has never seen gets logged and skipped, never guessed.

Driver

A real browser

One Node runner drives Chromium, signed in as you. Drags and chess moves use a real mouse, because Duolingo ignores synthetic ones.

Chess

Puzzles hand over the moves

A puzzle carries its solution. Bot matches are played by Stockfish, with a bundled engine as the fallback.

Math

Solvers for every unit

Expressions go through math.js. A short list of stubborn levels is still open.

Languages

Every course, unattended

Choice, word bank, typed, cloze, pairs, translate and stories. It walks the whole tree on its own.

Streak guard

The streak survives

If it is evening and no XP has landed, it finishes a language lesson, even through a pause.

Pace

The fastest track wins

It measures XP per hour for every course and moves to the best earner when one finishes or stalls.

Native everywhere

A small app polls the runner over the LAN or the tunnel. Chess is a real animated board. Language and math show the actual prompt and answer. Pause it or switch tracks from the menu, no terminal needed. Reads are open. Pausing and switching need a token.

macOSSwiftUI. Live board, Track menu, pause. The menu bar shows live XP without opening a window.
iOSThe same screen over the LAN or the tunnel, with a home screen widget for XP and streak.
watchOSA glance: XP, track, paused or stuck.
AndroidCompose Multiplatform. Sideloadable APK from CI.
Windows, LinuxCompose Desktop, packaged as an .msi and a .deb.
Terminalduke-tui prints the current state and exits. Check from anywhere over SSH.

A study, not a product

It started as a way to keep a streak alive in a busy week and turned into a study of how much of a gamified app is the client grading itself. Automated play is against Duolingo's terms, and the XP still ranks you against real people. Read it, don't run it.