Templates you can hand to an agent.
The engine and the app are hand-built. The template library is where an agent earns its keep: the shipping Alpine chart pack and the Weekly Pulse hero were written by a coding agent working the same files and CLI you get. Here’s the loop, with receipts.
The loop is file-based. The agent proposes a layout as a .m0c candidate — the geometry string, labels, and exactly one question. The human opens the file in the app, looks at the rendered geometry, and writes one verdict back into the same file. The file is the conversation log.
Rejected candidates are never mutated — they stay frozen with the verdict that judged them, and the fix forks to a new file. What accumulates is an append-only corpus of graded layouts: what worked, what didn’t, and why. That corpus is public: m0saic-sandbox holds every session, candidate by candidate, with the agent’s question and the human’s verdict — de-identified, read-only, and the best place to see what a good template loop actually looks like.
{
"format": "m0c",
"version": 1,
"m0": "3[1{1},8(>,F,>,>,F,>,>,F),1]",
"size": { "width": 1280, "height": 800 },
"labels": {
"0.1": { "text": "header" },
"0.2.2": { "text": "kpi-value" },
"0.2.5": { "text": "sparkline" }
},
"agent": {
"question": "Sparkline band: keep 1/8 height, or widen to 1/6?",
"response": "1/8 — the card breathes. Accepted."
}
}Deterministic
Same string, same bytes. A verdict granted yesterday is still true today — nothing shifts under the reviewer between iterations.
Text-first
The whole layout is one string an agent can emit, diff, and reason about. No canvas to click, no binary blobs, no screen scraping.
Validator-enforced
isValidM0String proves the geometry before a human ever looks. An invalid layout can’t even reach review.
The Alpine pack below shipped from exactly this loop.
KPI Card
@m0saic/alpine/kpi-card/v2
One number that matters, counting up, with its change and a sparkline underneath. The card a weekly update is built from.
npx m0saic make @m0saic/alpine/kpi-card/v2 -w 1280 -h 800 -o kpi.mp4
Heatmap
@m0saic/alpine/heatmap/v2
Activity over time as a grid of cells — the contribution calendar, pointed at any data you have.
npx m0saic make @m0saic/alpine/heatmap/v2 -w 1280 -h 800 -o heatmap.mp4
Leaderboard
@m0saic/alpine/leaderboard/v1
A ranked top-N with gold, silver, and bronze badges and count-up values — the card a creator posts on results day.
npx m0saic make @m0saic/alpine/leaderboard/v1 -w 1280 -h 800 -o leaderboard.mp4
Timeline
@m0saic/alpine/timeline/v2
Milestones on a spine — a date, a title, and a line for each — for a roadmap or a founding story, at any canvas.
npx m0saic make @m0saic/alpine/timeline/v2 -w 1280 -h 800 -o timeline.mp4
Commit Feed
@m0saic/alpine/commit-feed/v2
A scannable feed of notable commits — kind icons, area chips, authors, reviewers — with a signal status bar.
npx m0saic make @m0saic/alpine/commit-feed/v2 -w 1280 -h 708 -o commits.mp4
The protocol needs no special access — any coding agent that can write files can drive m0saic. Or skip the agent and type the string yourself.