Generative UI, argued with receipts
Essays, mechanism deep-dives, and measured findings on agents that describe interfaces and hosts that render them. GGUI is the worked example, not the pitch.
- Where a theme has to land
Inside a GGUI frame the host owns light and dark, and the app owns the colours. Neither reaches the components unless its values are merged into the one block of CSS variables they actually read. Why the ownership splits that way, what changed in 0.16.0, and the two placements where a valid theme does nothing.
- Six turns is a symptom
On the public GGUI benchmark, one generation in eighteen needs six or more turns, and those runs take longer without scoring any higher for it. In our logs, more turns, more hints and more stages did not rescue them. The clearest recoveries came from finding two instructions the model could not satisfy at once.
- Attempt first, explain after
MCP Apps hosts describe what they can do when a card connects, and nothing a host advertises stops GGUI's runtime from sending a tap. What a host advertises explains a failure after it happens. The one decision GGUI makes in advance rests on a header the host's own code sets, so the agent never has to know which host it is in.
- GGUI is in public preview
The open protocol for agent-rendered interfaces is now usable by anyone: hosted at mcp.ggui.ai, self-hosted with GGUI serve, or inside Claude Desktop in about three minutes.
- Withhold the material, keep the name
For about a day in August, every claude.ai view of a hosted GGUI render sat at 'Waiting for tool result…'. A tool result had lost its pointer along with its payload. How a result that carries only a name now finds its view, and what that door still does not do.
- There is no third category
Actions drive turns, context observes state, and every 'command' or 'behavior' field on a generative UI wire is a design smell. The placement rule that keeps a contract small, and the two things it refuses to decide.
- The contract is the product
Generative UI is not AI writing React. It is an agent describing a surface and a host rendering it under a contract — and the contract, not the code, is the part that matters.