The demo. A real Claude Code session in a seeded folder with two clients, recorded with VHS, and not one slash command typed. "morning, where are we with Nestlé?" is answered from the handoff (the agent names the files it read); "the client came back: no em-dash…" becomes a dated line; "now IKEA, what's due this week?" switches project scope and saves a schedule change; "that's all for today, wrap up" triggers the close ritual from the skill's description, which proposes a rule for the pattern seen on four dates, writes it on "yes", updates both backlogs and writes the handoff; a second session the next morning answers from all of it. Four scene clips sit in the README next to the claims they prove; the full 68-second session is in .github/assets/demo-full-session.mp4. Reproducible: tools/demo/seed.sh · demo.tape · cut.py.
Fixed. session-end.sh printed "SessionEnd hook … failed: Hook cancelled" after every /exit and every claude -p: it read stdin with a bare cat that Claude Code never closed. Now a one-second select.
Recorded. Claude Code 2.1.258 treats .claude/memory/MEMORY.md as a sensitive file — the first edit per session asks, regardless of allow rules and even in auto mode. docs/specs/claude-code.md documents it; D14 keeps the path and says it out loud.