A clean-room composition substrate for agent-authored video. Two groups under one umbrella:
runtime/(@work.books/gamut-runtime) — HTML Web Components that schedule and composite a video timeline. Authors write a single.htmlfile with<gm-doc>/<gm-timeline>/<gm-track>/<gm-clip>/<gm-scene>/<gm-audio>/<gm-shader>/<gm-adjustment>/<gm-include>elements. Animation lives inside<gm-scene>via the agent's HTML/CSS/JS (GSAP or anything else). The runtime registers the custom-element family with the browser; the DOM is the IR.cli/(@work.books/gamut-cli, binarygamut) — Imperative editing operations the agent can use without touching the composition HTML:gamut trim,gamut split,gamut cut,gamut concat,gamut move,gamut inspect,gamut lint,gamut verify,gamut preview,gamut transcribe,gamut render.hyperframes/(@work.books/gamut-hyperframes) — Vendored HyperFrames authoring docs + a tiny scene-side helper (onReady, canvas constants) for scripts inside<gm-scene>.
The previous CW XML format (vendored at vendor/workbooks/packages/cw-xml/) baked in enum-driven templates that substituted behavior for missing fields — intent="reveal" selected a tween recipe, kind="fade" selected a transition, mode="word-highlight" selected a caption renderer. The agent thought it specified motion; the runtime invented it. Every "reveal" looked the same. The format had no honest server-side counterpart.
gamut is the rebuild. No recipes. No enums. No fallbacks. The XML carries schedule + composition; the HTML scene carries animation. Guardrails come from a linter (structural checks) and a render-query verifier (RVST-style; loads the comp in a headless browser and reports what's actually visible). Every required attribute is required — missing fields are errors, never substituted defaults.
<!doctype html><html><head><scripttype="module" src="https://unpkg.com/@work.books/gamut-runtime"></script><linkrel="stylesheet" href="./styles.css"></head><body><gm-docfps="30" resolution="1920x1080" aspect="16:9"><gm-assetid="hero-vid" kind="video" src="footage/hero.mp4" /><gm-assetid="vo" kind="audio" src="audio/vo.mp3" /><gm-assetid="vo-words" kind="transcript" src="audio/vo.words.json" /><gm-timelineduration="12s"><gm-trackid="base" z="0"><gm-clipasset="hero-vid" in="2s" out="9s" start="0s" /></gm-track><gm-trackid="overlays" z="10"><gm-scenestart="0.5s" duration="3s"><h1class="title">Cut from evidence.</h1><scripttype="module">import{onReady}from"@work.books/gamut-hyperframes/ready";onReady(()=>{gsap.from(".title",{y: 60,opacity: 0,duration: 0.6,ease: "back.out(1.6)"});});</script></gm-scene></gm-track><gm-trackid="grading" z="20"><gm-adjustmentstart="0s" duration="12s" filter="contrast(1.05) saturate(1.08)" /></gm-track><gm-trackid="audio-vo" z="0"><gm-audioasset="vo" start="0.5s" duration="11s" volume="1.0" /></gm-track></gm-timeline></gm-doc></body></html>See the plan file for the full architecture and phase plan.