Let an agent write the video.
A Vawe film is one HTML page: CSS, Web Animations, SVG, canvas or three.js. An agent already writes all of that well, so it never learns a private format and never guesses at a schema. If something it would naturally write fails, that is a bug in the engine, not in the agent.
One command, one loop.
bin/vawe runs everything. new starts a film from a template, dev renders a half-size, silent draft and checks it, critique lays out the frames to look at, and ship renders the final at 60fps with motion blur and audio. A wrong flag exits with the list of valid ones, so an agent corrects itself in one step instead of reading source.
bin/vawe new launch # page.html + brief.md bin/vawe dev films/launch/page.html bin/vawe critique films/launch/page.html bin/vawe ship films/launch/page.html
The writer never grades its own film.
A critique runs in a session that did not write the page, and bin/vawe judge prepares the key frames and the rubric for a fresh session to score. A pass is never self-recorded. The agent that wrote the film fixes only the seconds the critique named and renders those seconds again, not the whole film.
Skills teach the parts that are not defaults.
The repo ships skills an agent loads on demand: vawe-brief turns a request into a brief, vawe-page writes the page, vawe-critique looks at a render as a fresh session, and vawe-reference matches a reference video. AGENTS.md holds only what an agent would get wrong on its own: the page contract, the motion rules that are not its defaults, and the first-draft habits it should not ship.
Wire it into an agent.
Clone the repo, install, and let bin/vawe doctor name any missing tool with the install line for your system. Then point the agent at AGENTS.md and ask for a film.
npm install bin/vawe doctor # names each missing tool bin/vawe new hello
Why the draft matches the final.
The page runs under a virtual clock, so a moment the agent approves in a draft is the same moment in the final.