A 2nd-grade sandbox for feedback loops and cybernetics. Browser-based, no build step, no dependencies, no network calls.
▶ Play it · The report · Design notes · Build log
Sibling experiment: Feelings Island — same method, preschool social-emotional learning.
Andrej Karpathy gave a model the first paragraph of The Lord of the Rings, a 1M-token budget, and asked for a three.js render. Cara Engelbrecht ran the same shape at a preschool letter-A world and named what was missing: "almost no product or pedagogy direction."
This is the same shape with the pedagogy supplied first. Topic: feedback loops, 2nd grade.
A loop is when what you do comes back around and changes what you do next.
Two flavors, and only two:
- Loops that push back. Go too far and it pulls you home. (Thermostat, a full cup, your body sweating.)
- Loops that pile on. A little more makes even more, and more. (Snowball, microphone screech, a rumor, a fire.)
Not "negative feedback" and "positive feedback." Those words run backwards from a child's intuition — positive sounds good, and it's the one that burns your house down.
Each machine exists to serve one outcome. That link lives in the code: an activity here cannot be added without naming what a child could do because of it.
| Machine | Outcome it serves | Loop |
|---|---|---|
| 🏠 The Warm Hut | Point at a loop and say what comes back around | pushes back |
| 🔥 The Hungry Campfire | Tell pushing back from piling on | piles on |
| 💧 The Patient Pond | Say what a loop is trying to keep true | pushes back |
| 🗼 The Lighthouse With A Dial | Change what a loop wants and predict what happens | pushes back, and you can move the goal |
From docs/DESIGN-NOTES.md, written before any code:
Association would generate a thermostat and a snowball, because those are what "feedback loop" is associated with. It would be unlikely to generate changing the setpoint, because nothing about the phrase "feedback loop" suggests it. But it's the outcome that matters most.
The lighthouse is that outcome. It's the only machine whose goal a child can move — and the game asks them to predict before they touch it. The payoff line:
"You did not make the lamp brighter — you changed what the lamp wants, and the loop did the rest."
That is the moment a child stops being inside a loop and starts being able to look at one from outside.
From docs/LIVE.md. Playing the pond lesson, nothing happened. A dozen
rounds of fixes followed — hit radius, draw box, pixel conversion, cache headers, a real
circular import, a real temporal-dead-zone bug. None of it worked.
Then a bare listener was armed on the canvas:
{"rawClicks": 0}
Zero. The click tool had stopped delivering events to the page. The world was never broken. An hour went into debugging a working app with a broken instrument, and every fix "didn't work" for a reason that had nothing to do with the fix.
Karpathy's closing point in the post that started this is that models "can't easily audit their work because they aren't able to efficiently and natively perceive videos or play games within them." This hit that wall in the most literal way available: there was no way to tell "my click missed" from "my click was never sent."
Three of those dozen changes were real bugs worth keeping. Two were fixes to nothing.
The fix is now a test that runs first and fails loudly if clicks aren't reaching the canvas — so no future session spends an hour reading a dead instrument as facts about the world.
npm test # 18 headless tests: loop physics, and the design held honest
npm run play # walk the world in a terminalThe design tests are the interesting ones. They assert things like every outcome has a machine and every machine serves a real outcome, the sorting deck is balanced so guessing one pile is not a strategy, and the lighthouse is the only machine whose goal a child can move.
Four more Playwright walkthrough tests live in src/play.test.mjs (needs
npx playwright install chromium), including the pointer-is-connected check.
python3 -m http.server 8000
open http://127.0.0.1:8000/play/- Not tested with actual 2nd graders.
- This is a prompt experiment, preserved as built. It has deliberately not been polished after the fact — doing so would contaminate what the experiment was measuring.
MIT. See LICENSE.
