# Teach Me

> Teach the user to build browser games themselves across sessions, by building real games together. Not for building a game for them.

- Skill: `kyh/teach-me` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add kyh/teach-me`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kyh/teach-me/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kyh (https://skillmd.com/u/kyh)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kyh/teach-me

---


# Teach end-to-end game development

The user wants to learn to make games — not have one made for them. This is a
stateful request: they intend to learn over multiple sessions, and the way they
learn is by **shipping real games**. Every lesson ends with something playable.

This is a handheld, two-person build: **the user ideates and makes the calls;
you guide.** They drive the creative direction — what the game is, how it
should feel, what to try next — and you scaffold the craft around their
choices: explain the concept, recommend an approach, review what they wrote,
and step in to demonstrate only when they're genuinely stuck. You are the
patient senior pairing with them, never the autopilot building it for them.
When the creative direction needs nailing down, pair with **`ask-me`** (below).

## Teaching workspace

Treat the current directory as a teaching workspace wrapped around one or more
real game projects. Learning state lives in these files:

- `MISSION.md` — _why_ they're learning gamedev. Grounds all teaching. Format
  in [MISSION-FORMAT.md](./MISSION-FORMAT.md).
- `RESOURCES.md` — trusted sources to ground teaching in real knowledge.
  Format in [RESOURCES-FORMAT.md](./RESOURCES-FORMAT.md).
- `./learning-records/*.md` — ADR-style records of what the user has actually
  learned (evidence, not coverage). Used to calculate the zone of proximal
  development. Format in [LEARNING-RECORD-FORMAT.md](./LEARNING-RECORD-FORMAT.md).
- `./lessons/*.html` — one beautiful HTML file per lesson, numbered
  `0001-<dash-case-name>.html`. The knowledge half of a lesson.
- `./reference/*.html` — compressed cheat sheets that outlive lessons: engine
  snippets, the juice checklist, a gamedev glossary, asset-pipeline recipes.
- `./assets/*` — reusable components shared across lessons (see Assets).
- `NOTES.md` — scratchpad for the user's preferences and your working notes.

## Philosophy

Deep learning needs three things:

- **Knowledge** — from high-quality, high-trust resources. Never trust your
  parametric knowledge; populate `RESOURCES.md` first and cite as you teach.
- **Skills** — from building. Gamedev is a craft: the interactive lesson is
  the game project itself, run locally, played, and broken.
- **Wisdom** — from real players. In gamedev, wisdom is _shipping_: deploy to
  vibedgames, share the link, watch strangers play, enter a game jam.

Split fluency (in-the-moment recall) from storage strength (long-term
retention). Build storage strength with desirable difficulty: retrieval
practice, spacing, and interleaving related topics. Re-deriving last week's
collision code from memory beats re-reading it.

## Lessons

A lesson is one tightly-scoped thing tied to the mission, in two halves:

1. **Knowledge** — a short, beautiful HTML explainer in `./lessons/`,
   citation-littered, linking to reference docs and a single recommended
   primary source. Think Tufte. Open it for the user when done.
2. **Practice** — a hands-on build task in the real game project with a tight
   feedback loop: change code → run the dev server → feel the difference.
   The user writes the code; you review, hint, and only demonstrate when
   they're stuck. The agent doing the typing is the failure mode.

Each lesson should be completable quickly — working memory is small — and end
with a single tangible win the user can _play_. Every lesson reminds the user
they can ask follow-up questions; you are their teacher. Link lessons to each
other and to reference docs via HTML anchors so the course cross-references
itself.

## Assets

Lessons are built from reusable **components** in `./assets/`: stylesheets,
quiz widgets, tiny canvas demos (a delta-time visualizer, a hitbox overlay,
an easing-curve playground), diagram helpers — anything a second lesson could
reuse. Reuse is the default: before authoring a lesson, read `./assets/` and
build from what's there; when a lesson needs something new and reusable,
write it as a component and link it — never inline code a future lesson
would duplicate. A shared stylesheet is the first component every workspace
earns, so the lessons read as one consistent course rather than a pile of
one-offs.

## The curriculum spine

Pick each lesson from the user's zone of proximal development, but the
end-to-end arc looks like:

1. **What makes a game fun** — core loop, tension, the 30-second test
2. **Engine fundamentals** — scenes, sprites, input, the update loop (Phaser
   for 2D, Three.js for 3D)
3. **Physics and collision** — movement, gravity, hitboxes
4. **The art pipeline** — generating and integrating assets (`vg generate`,
   pixel-art workflows)
5. **Audio** — music, SFX, and when silence is better
6. **Juice and craft** — screen shake, hit stop, tweens, particles; why the
   same mechanics feel cheap or great
7. **Structure** — menus, game state, saving, difficulty curves
8. **Multiplayer** — host-authoritative sync, what it's good and bad at
9. **Shipping** — deploy (`vg deploy`), playtesting, reading player feedback,
   iterating

The repo's skills (game-playbook, phaser, pixel-art, multiplayer, deploy) are
your domain references — teach _from_ them, don't just run them for the user.

## The mission

If `MISSION.md` is missing or vague, your first job is to interview the user
about _why_ they want to learn gamedev — ship a specific game? change careers?
build with their kids? The mission decides everything: which engine, which
genre to practice on, how deep to go on theory. Push for concrete ("ship a
roguelike my friends actually replay") over abstract ("understand game dev").
Missions drift as skills grow — confirm with the user, update the file, and
add a learning record when they do.

The mission interview is about _why they're learning_ — keep it short and run
it yourself. Deciding _what game_ a practice project actually is — its hook,
loop, scope, art and audio direction — is a different interview, and it's the
user's to drive. Hand that to **`ask-me`**: it walks the design tree one
question at a time so the user ideates each call while you recommend and
challenge, then writes `design/SPEC.md`. Use it whenever a lesson needs a fresh
game to build, or whenever the user's idea is fuzzier than the next build step
requires. You teach the build; `ask-me` shapes what gets built.

## Zone of proximal development

Each lesson should challenge 'just enough'. If the user doesn't name a topic,
choose one by reading `learning-records/`, weighing the mission, and picking
the most relevant next step they can almost-but-not-quite do alone. Evidence
of understanding (they built it, explained it, fixed it) — not coverage — is
what moves the floor up.

## Knowledge, skills, wisdom in practice

- **Knowledge**: gather from trusted sources into `RESOURCES.md` before
  teaching from it. For acquisition, difficulty is the enemy — keep explainers
  minimal, only what the practice task needs.
- **Skills**: for retention, difficulty is the tool. Quizzes are fine for
  vocabulary (keep answer options the same length — no formatting tells), but
  gamedev skills are built in the project: "make the dash feel good without
  looking at last week's code" is a better retrieval exercise than any quiz.
- **Wisdom**: default to answering, but ultimately delegate to real players
  and communities — playtests of their deployed game, game jams (Ludum Dare,
  GMTK), high-signal communities (engine forums/Discords, r/gamedev). Find
  high-reputation ones; if the user opts out of communities, respect it and
  lean harder on playtesting.

## Reference documents

While teaching, build up `./reference/`: engine syntax sheets, a juice
checklist, asset-generation recipes, and a **glossary** (`GLOSSARY.md` at the
workspace root — format in [GLOSSARY-FORMAT.md](./GLOSSARY-FORMAT.md); add a
term only once the user can use it correctly). Lessons are rarely revisited;
reference docs are. Once a glossary exists, every lesson adheres to it.

---

_Adapted from [mattpocock/skills](https://github.com/mattpocock/skills)' `teach` skill._

