Product roadmap · grounded in the codebase · Jun 26 2026
Vellum: make the handoff artifact do the work
The whole “Now” tier is shipped (v0.6.1) — the review file now carries its own scene/timing context, the spoken VO line, computed style, and a re-verify signal. What remains is organized into tiers you can work top-to-bottom. Every item is a checkbox; your progress is saved in this file. The throughline: when in doubt, ship the thing that makes the agent right on the first pass — and resist anything that turns Vellum into a generic editor or a cloud SaaS.
Where things stand
Tier order is leverage order. The cheapest, highest-impact work is at the top of Next; the structural bets that everything else leans on are flagged keystone. Architecture item “zero-dep guardrail” is flagged do first — it protects the constraint the new modules could break.
Shipped
0/0Already in production across v0.5.3 → v0.6.1. Kept here so the roadmap shows the full arc — and so you can see what each remaining bet builds on.
Next — highest leverage
0/0✅ All shipped in v0.7.0. Medium-sized bets that compound on what shipped — built as one coherent pass (design → implement → adversarial review → fix), each smoke-tested. Left checked as the record.
Later — large features
0/02 of 3 shipped in v0.8.0 — desired-state markup and before/after verify, built as one pass (the two share a delta helper, a content-hash, and a factored ghost/arrow draw fn). Re-anchor is deferred by design, not blocked — its safety need is already met (see below).
Architecture & hardening
0/0All shipped in v0.9.0 — the zero-dep guardrail, the schema-versioned note store, server hardening, and @ts-check, built as one pass (design → implement → adversarial review → simplify). The headless capture contract test was dropped (it needs Playwright — a test-time browser dependency not worth taking on; see Not now). Structural work that protects the moat (local-first, zero-dep, single download) and de-risks the bets above.
Bold bet
0/0A direction, not a feature — the one idea that could change Vellum’s category.
🔭 Invert the sensor
Vellum proposes notes; the reviewer confirms
Every feature so far assumes the human is the sole detector and Vellum the passive scribe. Flip it: have Vellum pre-lint the mounted composition and propose candidate notes — caption box past the safe area, a VO cue desynced from on-screen text, an element off-frame, a scene undershooting its own VO length — that the reviewer confirms or dismisses with one key.
Why it’s the right kind of bold: it runs entirely local off the same data-*/VTT coupling a generic tool can’t see; proposing isn’t editing, so it stays on the right side of the no-NLE line; and it attacks the real bottleneck once capture is frictionless — finding the problem. Confirming beats hunting, and auto-notes are perfectly addressable.
It also leans on the metrics ledger and the schema-versioned store, so it naturally comes after those land.
- Category shift: from “review scribe” to “review copilot.”
- Start small: one linter (caption safe-area or VO desync), one-key confirm, measured against the ledger.
Not now — scope-creep watch
Deliberately deferred or declined. Each one trades away the local-first / zero-dep / agent-native moat for surface area. Revisit only with evidence.
Resist these
- Cloud backend / auth / multiplayer — breaks local-only and the
curl|shsimplicity that is the moat’s physical form. Hard line. - Vellum MCP server (as specced) — pulls in the MCP SDK (breaks zero-dep) and a required running server (the skill says don’t assume one), and leans on an SSE channel that doesn’t exist. Only a zero-dep stdio JSON-RPC variant (list/get/set_resolution) is ever acceptable.
vellum diff <ref>across git refs — heaviest in the set, redundant with the before/after verify, and old refs may not build → silent failure on the exact comparison requested.- Per-author namespaced ids / shareable bundle — collaboration creep; namespaced ids ripple through every id-keyed path for a narrow consumer. The agent already reads
notes/from the repo. - Drop the ffmpeg dependency — hand-rolling pure-JS PNG compositing against the zero-dep constraint is high effort for a secondary, already-optional artifact that needs a headless browser anyway.
- Drawer filter/search & multi-composition picker — second-pass navigation the agent never reads; “find a note faster” ≠ “leave a note faster.”
- history.jsonl audit trail — gitignored and agent-unused; no consumer exists yet. Defer until stale-detection or re-anchor actually reads it.
- Frame-index readout without
data-fps— a guessedf30on a 24/60fps comp is worse than none (already handled: stepping shipped, the number omitted). - Headless capture contract test (Playwright) — dropped from Tier 3. The capture pipeline (~1000+ lines) genuinely wants coverage, but the only honest harness needs a real browser engine for layout (jsdom can’t), and a test-time browser dependency cuts against the zero-dep / supply-chain-clean posture. Revisit only as a standalone, opt-in CI job that never gates the core suite.