what's next, as a committed file

One roadmap.yaml per project says what you are doing, in what order, and how far along it is. nextup rolls status up from the issues, opens issues an agent can pick up, and renders the same file for the team and for the public.

npx @hansenexus/nextup init --pages

Phases carry time

Phases are ordered and may name a quarter, nothing finer. now / next / lateris derived from one pointer, current_phase, never written by hand.

Status is derived

Once an item has issues, its status comes from them: closed → done, labelled → in progress, all blocked → blocked. A manual status on a linked item fails validation.

A date needs a source

Only milestones carry day-dates, and only with who committed to it and when. Undated milestones render as drafts. A computed date is not a date.

status, rolled up from GitHub
$ nextup status
done         p0-simcore           4 closed, nothing opendone         p0-save-envelope     #4 closed, nothing openin-progress  p1-garage-loop       #7 in progress (2 open, 1 closed)planned      p1-first-screens     2 task(s) not dispatched yet (0 closed)proposed     p2-staff             manual status since 2026-09-07 P1 · now      2/5 done      next: P2 · 0/2

For agents

nextup next lists the frontier; nextup dispatch <item>opens one issue per task with acceptance criteria, verification commands andBlocked-by: lines, ready only where blockers are closed. A read-only MCP server answers the same questions in a lane.

Dispatch → · MCP →

For the public

build --audience public writes a whitelisted JSON feed — no issue numbers, owners or notes — plus a static page. Render it with the React component or the web component, on any site, in any locale the file carries.

Sites → · GitHub Pages →