A NES emulator, built from scratch in TypeScript. Zero runtime dependencies. Zero lines of human-written code.
Just the| 1P Keyboard | |
|---|---|
| D-Pad | ↑↓←→ |
| A / B | ZX |
| Start / Select | EnterShift |
| 2P Keyboard | |
|---|---|
| D-Pad | WSAD |
| A / B | JK |
| Start / Select | TG |
| Gamepad | |
|---|---|
| D-Pad | D-Pad / Left Stick |
| A | Button 2 (○/B) |
| B | Button 1 (×/A) |
| Start | Button 10 (Start/Menu) |
| Select | Button 9 (Select/Back) |
| Other | |
|---|---|
| Fullscreen | F |
| Save (Slot 1~4) | 1~4 |
| Load (Slot 1~4) | Shift+1~4 |
12,616 lines of TypeScript. 1,572 tests. Zero runtime dependencies. Verified against the NES hardware specification.
Everything you just played was built by Claude Code — running a self-driving loop that executes the full GitHub Flow without human intervention. The emulator is what you see. The harness is why it exists.
The human just starts the loop. The machine does everything else.The first four days were almost entirely about the harness. Getting an AI to run a sustainable development loop — branching, committing, opening PRs, reviewing its own code, merging, and picking up the next Issue — turned out to be the hardest part.
Shell scripts and event-driven hooks orchestrate the cycle: worker completes Issue → writes flag → Stop hook fires → loop-helper runs /clear → fresh session picks up next open Issue. Code review runs 7-angle finders under a bot identity. Stuck protocol drafts PRs back after 30 min. Auto-recover restarts from crashes.
All existing NES emulator source code — 15 known repositories, any language, any license.
Pre-tool-use hooks block WebFetch URLs matching the deny list. A structural constraint, not an airtight seal — WebSearch results and local files are not blocked.