diff --git a/.agents/phases/todo/01_keyboard_kiosk_control/00_phase.md b/.agents/phases/todo/01_keyboard_kiosk_control/00_phase.md
new file mode 100644
index 0000000..318306e
--- /dev/null
+++ b/.agents/phases/todo/01_keyboard_kiosk_control/00_phase.md
@@ -0,0 +1,89 @@
+# Phase 01 — Keyboard-only control of the wall
+
+**Source:** `TODO.md` L3 — "Need keyboard shortcuts. This will be deployed on a kiosk mode linux client that won't have a mouse. Need to be able to fullscreen a mirror, switch between them easily, etc."
+**Story:** n/a
+**Context:** `.agents/PLAN.md` §2 A9 (hand-written ES modules, no framework), A10 (nothing from outside the origin), A13 (Playwright, `channel="chromium"`); `docs/kiosk-silverblue.md` (the target box: GNOME Kiosk + Firefox `--kiosk` pointed at `/watch`, set up over SSH with **no keyboard, no monitor, no console**); `src/mirror/static/watch.js`, `watch.html`, `share.js`, `mirror.html`, `app.css`
+
+## Objective
+
+Operate the whole product from a keyboard. On `/watch`: select a mirror, take it
+fullscreen over the wall, step to the next/previous, jump by number, mute, and get
+an on-screen list of the keys. On `/mirror`: start and stop a share without a
+pointer.
+
+Just as important: **remove the pointer-only affordances**. `.tile .actions` is
+`opacity: 0` until `:hover` (`app.css` L351–352) and the staged caption fades to
+`0.28` (L396–409) — on a kiosk with no mouse those controls do not exist, so a
+mirror can currently be neither un-muted nor exited once it is on stage.
+
+## Dependencies
+
+— (none). This is the first phase of the roadmap.
+
+## Tasks
+
+1. `01_keyboard_command_router.md` — one focus-aware keydown router on `/watch`
+ plus a keyboard "cursor" over the tiles (`j`/`k`/`↑`/`↓`).
+2. `02_wall_navigation_commands.md` — `Enter`/`f`, `g`, `n`/`p`, `1`–`9`, `m`
+ wired to the existing `stage()`/`unstage()` plumbing.
+3. `03_keyboard_reachable_tile_controls.md` — focus-visible affordances: every
+ hover-only control becomes reachable and legible without a mouse.
+4. `04_help_overlay_and_keyboard_e2e.md` — `?` help overlay, `/mirror` `s`/`x`,
+ a mouse-free Playwright suite, and the kiosk/README keyboard docs.
+
+## Key map (locked by the user for this phase)
+
+| Key | Scope | Action |
+|---|---|---|
+| `j` `k` `↓` `↑` | `/watch` | move the selection to next / previous tile (wraps) |
+| `Enter` `f` | `/watch` | stage the selected mirror fullscreen (`f` re-enters fullscreen when already staged) |
+| `g` | `/watch` | back to the wall (unstage) |
+| `n` `p` | `/watch` | stage next / previous mirror |
+| `1`–`9` | `/watch` | stage the Nth mirror in grid order |
+| `m` | `/watch` | mute / unmute the staged mirror |
+| `?` | `/watch` | toggle the help overlay |
+| `Esc` | both | `/watch` unstages (already exists); `/mirror` stops sharing (already exists) |
+| `s` `x` | `/mirror` | start / stop sharing |
+
+Never intercepted: any chord containing `Ctrl`/`Cmd`/`Alt`, and every key while an
+``, `