Stageshow
Stageshow is a skill that helps your agent make better faux UI.1 Most good models can do this now without a dedicated skill, but the results often look sloppy and heavy-handed, and that's the gap Stageshow is for.
I've made a lot of these by hand, and they take far longer than they should. No single part is especially hard, but there are a hundred small decisions and every one of them shows. Stageshow is my attempt to write those decisions down, so an agent can make them too.
Getting started
npx skills add benjitaylor/skills --skill stageshowThat adds the skill for any agent: Grok Build, Claude Code, Codex, Gemini, etc. Then ask for something small: one interaction, in one product, at one size.
A small looping demo for our homepage hero: someone assigns an issue to a teammate.The agent reads the skill, starts from the closest example, builds the demo, then films it and fixes what it finds. What you get is an ordinary React component, so you can put it anywhere and change it like the rest of your code.
It still may not nail it in one shot. The first pass is usually a big step up from what an agent makes on its own, but most demos still take me a few rounds of feedback.
What's in it
SKILL.mdreferences/examples/kit/scripts/The playground
The skill also comes with a playground. Run it from the skill's folder:
npm install
npm run devIt has every example in the skill, the kit's parts on their own, and a set of comparisons: the same thing done badly and done well, side by side. They're there for the agent as much as for you. "Don't shrink the whole app into a card" is easy to agree with and easy to skip, but much harder to ignore once you see both side by side.
What the skill teaches
The skill is built around one sentence:
It reads as a real product, simplified to what the viewer needs, framed with intent, and every motion has a cause.
Faux UI from agents tends to go wrong in the same few ways. The most common are too much (real words in every cell, packed tight), too little (a wireframe that doesn't read as a product) and boxed (the whole window shrunk into a card, like a pasted screenshot). Then there's flat, where everything has the same weight, and bland, where the brief's style never shows up.
Here's one demo going from the first to the last, the way the agent builds it: someone assigns a support conversation to Maya.
Left to itself, an agent drifts toward the first. It knows what a support inbox contains, so it fills every row. The skill has it keep only the words the story needs and use placeholder lines for the rest, so the inbox still looks full without asking you to read it. It also decides the crop first, so it doesn't waste time building things nobody will see.
How a demo is built
Every demo is a stage: a canvas with a design size. Its contents are drawn from state, and a script changes that state one beat at a time. The cursor is part of the stage, and it aims at things by name.
async function script(a: Act<S>) {
await a.click({ at: "share" }); // arcs there, presses
await a.set({ open: true }); // resolves once painted
await a.wait(2000); // the payoff holds
await a.click({ at: "close" });
await a.set({ open: false });
await a.move({ x: 600, y: 300 }); // back where it began
}Parts stay mounted while they transition, so they can move in and out instead of popping. Positions are measured, so the cursor lands in the right place and overlays line up at any size. And the kit handles the motion that's hard to get right by hand, like a number that rolls only the digits that changed, a card flying into a slot, or a message forming out of the text field.
There's also a camera, so a stage can push in on the important bit and pull back out. It sits on top of the scene, so you don't have to change the scene to use it.
A look is a theme, a palette and how many real words there are. They're props on the stage, and they work by swapping the kit's colours, so a scene is written once and every look follows.
A look can also come from your own design system. The kit's colours, type, radii and spacing are all design tokens, so the agent reads your product's tokens and maps them onto the kit's. The demo then uses your real colours, fonts and corner radii, and sits next to the actual product without looking like a mock-up of it.
How the agent works
The skill gives the agent a workflow. Most of it happens before any code is written.
| Step | What gets decided |
|---|---|
| 1. Medium | Still or animation, looping or playing once, where it sits on the page and at what size. |
| 2. Look | Light, dark, blueprint or glass; one accent or mono; the chrome the product really has, and its real icons. |
| 3. Story | How it feels to use, a flow through an app, or what the system does on its own. Then three to five beats. |
| 4. Examples | The closest gold example, copied and made the brief's product: what is cropped, what straddles what, one gutter. |
| 5. Screen | The few real strings, and placeholder lines for everything else. |
| 6. Choreograph | Beats that overlap, groups that stagger, and a loop that ends exactly where it began. |
| 7. Rehearse | Film it, read every frame, check it at phone width, watch the loop seam. Then hold it next to the closest gold example. |
Why checks matter
Agents increasingly check their work, but usually by reading the code back or taking a screenshot once it has settled. Neither shows the motion in between, which is where the bugs often are: a pill that hops 4px on its way in, or one frame where everything has faded out. Stageshow has the agent film the demo instead, as a contact sheet of the whole sequence with a report that flags anything it can measure, and then watch the playback for what a report can't catch.
Making Stageshow
To test it, I'd give a fresh agent the skill and a short prompt, and nothing else. Then I'd give the same prompt to an agent without the skill, so I could compare the two side by side.
Whenever something looked off, I resisted fixing it myself. Instead, I'd write down what was wrong, update the skill, and run the whole round again from scratch. I did this a lot.
Below are some examples. Without Stageshow, even the best models go overboard. Sometimes the result is close, and one detail makes it look sloppy, like a clumsy cursor or a fake iOS status bar. Sometimes it's worse, with elements overlapping or out of line. With it, I get something much closer to what I'd make myself. It's opinionated, though, and a lot of it is just my taste.2
“A static illustration for Hookline's API docs, in blueprint style: how a webhook travels from Hookline's servers to a customer's endpoint, fails once, is retried, and is acknowledged.”
“A static dark bento grid of four tiles for Kanso, a project management app, for one dark section of its homepage. Greyscale, very little text, premium and quiet: one tile shows a piece of the app, the others a stat, an object and a small diagram.”
“An animated hero for Draftwell, an AI writing assistant that is a native Mac app: the user selects a paragraph, asks Draftwell to make it shorter, and the rewrite streams in and replaces the original. Loops.”
“An animated hero for Signalboard, a product analytics tool: a wide dashboard with several charts, something spikes on one chart, and the view pushes in on that chart to show the tooltip and an annotation explaining the spike, then eases back out. Loops.”
“An animated landing page demo for Hearth, a team chat app, on iPhone: a message arrives on the lock screen, the user taps it, Hearth opens to the conversation, and they send a quick reply. Crop the phone: it runs off the edge of the frame, never shown whole. Loops.”
“An animated homepage section for Tandem, a scheduling tool: someone books a meeting in Tandem's web app on a laptop-sized window, and a moment later the invitee's phone shows the invitation and they accept it. Crop the phone so it runs off the edge of the frame, never shown whole. Loops.”
Rules alone only got so far. An agent told to run a window off the edge of the frame barely does it. Shown an example that does, it gets it right. So the skill ships with examples to copy from. Here's a tour, starting with the two things nearly every demo has: a window and a cursor.
Windows
The window is usually the hero, so its chrome is the first thing that tells you what you're looking at. Put an address bar on a native Mac app and the whole picture reads as made up. There's no kind prop: the chrome follows from what you pass, and the traffic lights sit in exactly the same spot in every one.
Glass
For a product page there are lighter browsers too. Glass is frosted, so it takes the colour of whatever is behind it.
Quiet
The quiet browser (chrome="card") is one white card under a long soft shadow, for when the rest of the page is already busy.
macOS 26
A product shown on the newest macOS gets the newer window: bigger lights, a floating sidebar and the tall toolbar.
Cursors
A cursor should move like a hand: shallow arcs timed by distance, with presses you can see. Pick one style for a whole site, so every demo on a page points the same way, and the script doesn't change between them.
It also changes shape as it crosses into an element, like a real one would. Each element says which cursor it wants, so the script doesn't have to.
Hero demos
Then the demos themselves, all made with Stageshow, starting with hero demos: the big animated story at the top of a homepage.
Feature cards
Small cards that show one feature, for a grid of them.
Phones
Phones are driven by touch instead of a cursor, so the motion is different.
Annotations
Sometimes a demo needs to point at something: what a point on a chart means, where an event went, which setting changed what. I try to keep these to a minimum, though. The product should still be the main thing, and each line should say one thing.
Grids
Bento grids usually go wrong by treating every tile the same. Each one gets its own little window, and the section ends up reading as a wall of screenshots. Stageshow plans the grid as one picture instead: only a third to a half of the tiles show UI, window chrome appears once, and no tile sits next to another of the same kind.
Real products
Products you already know are the hardest test, because any wrong detail jumps out. Most of these started from a single sentence.
Limitations
The checks catch mistakes, not dull ideas. A demo can pass every one and still not be worth watching, so you still have to look at it yourself.
It also can't draw, so anything that needs illustration or photography is better made by hand and dropped in.
Most of the rules started as a note on a real demo, like "the shadow is too harsh" or "this title isn't centred." Once a note is in the skill, every demo after it gets it for free. You can do the same: when you correct a demo, ask the agent to add the note to the skill.
For now
Model taste is getting better with every release, and I suspect a skill like this is only useful for a while, since much of what it teaches and includes could soon come built in.
Some of it already has. Early on in making this, the references had rules a newer model simply didn't need, like keeping the traffic lights the right size, and as the models improved those rules quietly stopped doing anything.
Others have held up across every model I've tried, mostly the ones about framing and motion. Models are perfectly capable of getting those right, but they don't seem to know that they matter until something tells them.
Until then, it helps, and every demo made with it is a small, well-built example of this kind of UI, which is the sort of thing models learn from. If it plays a small part in making itself unnecessary, that's fine by me.
If you want to give it a go:
npx skills add benjitaylor/skills --skill stageshowFootnotes
-
The products shown in the demos, along with their names, logos and interfaces, belong to their owners. The demos are illustrations made for this post and aren't affiliated with or endorsed by them. ↩
-
Taste sounds mysterious, but most of it is small decisions made over and over until you know which ones hold up. That's why it can be written down. It also means Stageshow is my taste, not a neutral one. ↩