4.20.0 — Your ShapeScript models need converting, and a deck in your repo finally saves
A snapshot as of 4.20.0 (released 2026-09-11). It will go stale as the app moves on — that is expected, and the living reference is the guide each section links to.
npx mulmoterminal@latest
One thing here needs your hands: existing .shape files. Everything else is either new and optional, or a fix that just works once you are on this version.
If you have saved .shape models, read this first
ShapeScript now reads a script the way the upstream ShapeScript app does. That is the point — a model written from the upstream docs renders correctly here now, and a model written here opens in the upstream app. But a .shape file you saved before this release still parses and renders wrong: half the size, rotated differently, paths collapsed.
How to tell you are affected
Open a model you saved earlier. If a sphere that used to fill the frame is now half as wide, or the whole thing is turned the wrong way, it needs converting. A model you make after upgrading needs nothing.
The conversion rules
| What you wrote | What it means now | What to do |
|---|---|---|
size on sphere, cylinder, cone, circle, polygon, torus | diameter, not radius | double it — the first component for a cylinder or cone, all of them for a sphere |
rotation X Y Z in radians | orientation roll yaw pitch in half-turns | negate each axis and divide by pi; the old X becomes the new third component, the old Z the first |
rotate in full turns | half-turns, clockwise positive | negate and double |
path point / curve as relative steps | absolute coordinates in the path’s frame | rewrite as absolute points; the old four-argument curve x y cx cy becomes a curve cx cy control point sitting between two points |
tau | not an upstream name | 2 * pi, if the file must also open in the upstream app |
Three real models were converted and checked mesh-for-mesh while this landed, so the rules are the ones that were actually used, not a guess.
What you get for it
seed Nreseedsrndfor its block, so a random arrangement can be reproduced.- A
pathmay carry its ownposition/orientation/size— how a loft section is placed. - Function arguments may be space-separated the way upstream writes them:
max(0 (j - 1)). .first….lastordinal members.
MulmoClaude shares the same artifacts/shapes/ files, so both apps moved together. If you run both, upgrade both — one on the old reading and one on the new would draw the same file two different sizes.
Reference: Canvas and the GUI panel.
Take a model out of the chat as a USDZ file
A ShapeScript model can now leave MulmoTerminal as a USDZ — Apple’s AR format. AR Quick Look places it in the room on an iPhone or iPad; Quick Look previews it on a Mac.
Two ways, no setup for either:
- Ask the agent. The new
exportShapeScriptUsdztool takes the same source aspresentShapeScript— inline script, or a.shapeyou point it at — writes the file beside the model under the workspace’sartifacts/shapes/, and answers with the full path. It runs without asking for approval: it serialises geometry into one local file and reaches nothing outside the workspace. - Press the button. The ShapeScript view now has Download USDZ, which builds the same file in the browser.
It sits in the Canvas (render MCPs) tool group with the other two ShapeScript tools, so if you have that group switched on for a directory, you already have this.
Reference: How each agent reaches the GUI tools.
A deck kept in your repository now actually saves
If you keep a MulmoScript deck anywhere other than the workspace’s own artifacts/stories/ — in a project repository, say — opening it in the Canvas worked, and then every beat image and every save answered File not found. The Edit tab kept the text you typed, so it looked saved.
There is nothing to turn on. Open the deck again on this version and the beats render and the saves land. If you had given up on a deck because of this, it was never your file that was wrong.
One detail worth knowing if you reach your workspace through a symlink: the card is now filed under the resolved path, so opening the same deck through either spelling gives you one card rather than two.
Reference: The Mulmo menu and the Canvas.
The conversation menu no longer runs off the screen
On a grid of about twenty cells, pressing a cell’s conversation button opened a menu 1750 pixels tall in an 800-pixel window, with nothing on the page that would scroll — so the ROUND TABLE settings and its Start button simply could not be reached. The workaround was zooming the browser out to 50%.
The menu now measures the room it has, opens upward when that is roomier, and caps its height. The long lists scroll on their own, while Start, room, turns, stop and watch stay outside those scrollers so they do not scroll away from you.
How to tell you have it: open the conversation menu on a crowded grid. The menu ends inside the window, and Start is visible without scrolling.
Reference: Starting a round table.
Two buttons in one cell header no longer wear the same icon
The same speech bubble meant four different things, and two of them sat side by side in the cell header — so you could not tell which was which before pressing one. The prompts button (a list of what you sent, nothing to do with a conversation) is now an outbox tray. The talk-to-another-terminal button keeps its bubble and its tooltip now says what it offers: bring in the last turn, exchange a turn, start a round table.
How to tell you have it: look at a cell header. The two buttons are different shapes.
The Update badge is readable again on a dark theme
The “Update” pill in the toolbar was painted with the browser’s default button colour — a light grey no theme ever chose — so on nord and midnight the text on it was nearly invisible until you hovered it. Measured at 1.74:1 in nord, where 4.5:1 is the readable bar.
It now takes the theme’s own surface: 5.03:1 in nord, 4.91:1 in midnight, 5.17:1 in daylight. The same fix covers every button in the app that never named a background — the Copy button inside that badge’s own dropdown was doing it too.
Before, in nord — the pill painted with the browser’s button face:

After, the same pill on the theme’s own toolbar surface:

How to tell you have it: switch to nord or midnight with an update available. The pill reads without hovering.
Reference: Make your own colour scheme.