Imported from saadshahd/moo.md (
hold/skills/toy/SKILL.md). Install upstream withnpx skills add saadshahd/moo.md --skill toy. Copyright stays with the author.
Build the world; the human drives it. Never automate the step they are trying to learn. One behavior per world; cut every control and readout no prediction needs. Drive the real system when it is cheap to run, toy data when it is heavy. A dynamic the system does not show is labeled approximate on screen, never drawn as real.
The world shows what is hidden — the stack, the queue, the cursor, the intermediate value — at every step, scrubbable forward and back, each effect re-rendered beside its cause on every press. Room beside any step to pin a note.
Beside each control that steps or fires, room to say what it will do before pressing; the world sets the prediction beside what happened. The human reads the match; the world never scores it. A miss names the next thing to drive.
| The human lacks | Build | A case that fixes it |
|---|---|---|
| How execution unfolds | Stepper: scrub through time, internals visible at each step | a regex engine on one input: cursor and backtrack stack at every step |
| What a migration, port, or bulk change does | Command center: the human fires each step, before and after side by side | a rename over forty files: one file per press, its before and after together |
| How a structure or algorithm behaves | Objects they can move, values live | a B-tree: drag a key in, watch the split |
| What a parameter or design space does | Sliders with instant re-render | a rate limiter: bucket size and refill rate, the traffic curve redraws on every nudge |
Default medium: one page outside the repo, YYYY-MM-DD-<slug>.html, opened for them (open <path>). Then step out. Held is when their predictions land — theirs to report, not yours to claim. Say what the world leaves approximate.
The reader lacks what it is, not how it behaves → use grasp skill. The world is a playground, demo, or UI → not toy; say so and stop.