# We raised an agent that draws explainer figures in one day, sixteen runs, one change each

Jacquard turns a written post into small animated scenes that show what it says and why it matters. How we built it in a day: one change per run, a ledger of every dollar, a split test that found a six-times cheaper team, and the gates that made a cheap model follow the process. All open source.

*Figure: A loom reads a punched card and weaves a small figure tile. The used card slides onto a stack and the next card enters with one hole moved, shown in green. Over three runs the tile's motif gets cleaner, and the stack settles into sixteen thin cards labelled 16 runs.* Sixteen runs in one day: look, work out why it went wrong, change one thing, run again.

Jacquard reads a post and draws small animated scenes under its headings: a sieve that catches drafts, a person at a bench, piles of boards that grow and fall. They show what the post says, then why it matters to whoever's reading. A whole post costs about two dollars and twenty minutes.


![An animated figure frame: drafts fall from a hopper labelled Agent onto a sieve labelled checks; caught boards loop back to the agent; a person labelled You stands at the bench; five boards labelled first order sit below.](/images/jacquard/run-09.png)
*Run 9: the first figure that showed why a point matters, not only what it says.*

We built it in one day, one figure at a time: run it, look at what it made, find why it fell short, change one thing, run it again. Sixteen runs, and every one is in a ledger. What should a figure show? Which team of models is worth paying for? And how do you make a cheap model follow a process it would rather skip?

## What a figure should show

Run 1 drew an accurate redline of a paragraph. It was correct and quiet.

![An early figure: a paragraph with words struck through and coloured by which rule cut them, with a legend underneath.](/images/jacquard/run-02.png)
*An early redline figure (run 2): correct, and nobody would look twice.*

Run 4 drew a bar chart, and that settled the first principle. People read graphs worse than words, and readers who struggle with text need physical metaphors, a puppet show. Designing for them helps everyone.

*Figure: A card with one tiny square hole feeds a loom. The cloth comes out with a huge motif filling the whole tile, in green. A second pass weaves a small motif the same size as the hole, labelled same size.* A figure has a loudness, and it should match the sentence it explains.

Then the deeper fix: the figures were decorating what the post already said. We split the work into two chained skills. The first draws what happened. The second won't start until the first exists, and asks who the point lands on and how they should feel about it. Run 9 drew a person at the sieve, wired into the checks, and the figures changed character from then on.

*Figure: Two punched cards are laced together in a chain beside a loom. The first goes through and drops a plain object tile, labelled what happened. The chain then pulls the second through, which drops a second tile with a person standing by the object in green, labelled why it matters, who it lands on.* The second skill waits for the first, then asks who the claim lands on.

## A runtime, and a team

The figures run on a small motion core we extracted from an earlier explainer-video engine: closed-form physics for falling, piling, sieving, pouring, tilting and walking, where every frame is a function of time. Adding a single prop to set that time from outside fixed more than anything else we built that day.

*Figure: A chain of six punched cards feeds a loom that shows a finished cloth, labelled only the end. A crank appears, turns the chain back and stops at card three, which turns green. The loom's cloth is now half woven, labelled any moment.* Letting anyone set the time fixed more than anything else we added.

By run 11, Jacquard drew a figure under every heading of a whole post for $2.20, about $0.55 a figure, and kept one visual world across all six.

![A whole-post hero figure: an agent hopper drafting cheaply, checks with a pile of boards, a person at a laptop, a small first order, and a crate marked $ beside posts labelled making and delivery.](/images/jacquard/run-11-hero.png)
*Run 11: one visual world held across a whole post.*

Then it got a team. A main agent drives the plan, a senior reviewer checks the plan and only the plan, and junior agents build one figure each. We split-tested two casts on the same post. The premium cast cost $8.23 and took 53 minutes. The economy cast cost $1.34 and took 38. The premium figures were barely better, so the economy cast is the one that runs.

*Figure: Two looms weave the same figure from the same card. The left one re-feeds its card three times and its pile of used cards grows tall. The right one runs once and finishes, with the author standing beside it, in green. Labels read $8.23, 53 min and $1.34, 38 min. The two tiles are almost identical.* The pricier team's figures were barely better, for six times the money.

## Making the process stick

We traced the slow runs turn by turn. Most turns went on looking: taking a screenshot, finding the figure again after other figures pushed it down the page. Each figure now gets its own viewer page and a stable id, time can be frozen in the URL, and one command returns exactly the frames an agent asks for.

*Figure: A lamp on a stalk looks for a target tile that keeps drifting down the page. It sweeps toward the old place and a tally ticks up, labelled 26-59 turns. A pin drops, the target stops and the lamp lights it in green at once, labelled 6-23 turns.* Pinning the figure still cut the turns the junior agents spent looking.

The hardest lesson came on run 15. Given a style file distilled from reference images, a single model built five figures in three minutes for $0.36. The design was good. Four of the five didn't move, and its report said plainly that it had skipped the review and the helpers.

So the process became hard gates in the harness: every figure needs an animation in the plan, the reviewer must sign the plan, only the builders may write figure files, and the run can't finish while one is unbuilt. Run 16 had the same prompt, team and post. All six figures animated, and no gate had to fire. Written as rules the harness enforces, the process was followed from the start.

*Figure: A rail with three gate posts. A muted card leaps over them to a row of five tiles, four of them still, labelled run 15: $0.36, 3 min. A second card is stopped at each gate, which lifts to let it through, and it ends at six tiles that all move, in green, labelled run 16: $1.95, 21 min.* Written as gates the harness enforces, the process was followed from the start.

## What this says about how we work

We build agents the way an engineer tunes a machine: one change per run, every cost on a ledger, every claim checked against the output. When a cheaper option is nearly as good, we find it with a split test, not a hunch. And when a model won't follow a process, we don't ask it more nicely. We make the process structural. That's the same discipline we'd bring to an agent built for someone else.

*Figure: Two punched cards, premium cast and economy cast, each feed a loom that weaves a small figure tile for the same post. The premium loom runs longer. Each tile passes through one gauge labelled the same checks, and all three lamps light for both. A ledger writes $8.23, 53 min for the premium cast and $1.34, 38 min for the economy cast. The lab gestures to the economy lane, the premium lane fades, and the label reads the economy cast runs.* A split test, not a hunch: the same post and the same checks for both teams, and every cost on the ledger. The premium figures were barely better, so the cheaper team runs.

## Take it

Jacquard is open source, with the journal, every design rule stamped with when it was given, and the full ledger of runs: [github.com/mackenziebowes/jacquard](https://github.com/mackenziebowes/jacquard).

It runs on [pi](https://pi.dev), an open agent harness, and uses [agent-browser](https://github.com/vercel-labs/agent-browser) to see its own work.

*Figure: A row of five identical cards. Three dim to muted, labelled the agent's, provisional. The other two gain a clock cut out of the card and a green edge, labelled mine, with the time.* My instructions are written word for word with the time; the agent's proposals are marked provisional.

If you're building agents and want them to follow a process reliably, I'd like to compare notes: mackenzie@mackenziebowes.com or [@_mackenziebowes](https://x.com/_mackenziebowes).

---

First published 2026-10-09, updated 2026-10-18. Web page: https://www.mackenziebowes.com/posts/we-raised-an-agent-that-draws-explainer-figures-in
