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.

37
sandbox sessions →
260+
graded candidates →
1 : 1 : 1
file : question : verdict

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.

candidate-014-sparkline.m0c · abridged
{
  "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
graded-candidate screenshot — comingan accepted candidate — verdict stored in the file
graded-candidate screenshot — cominga rejected candidate — frozen, with its fork

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.