Skip to main content

Monogram: Live Parameters

Monogram shipped the first AI with an interactive visual interface. I explored how we can steer conversations visually on the application.

July 2026

Context

Monogram shipped the first AI with a visual interface.

Monogram’s model is optimized to craft intuitive interfaces on the fly bespoke to the prompt and the content being shown. Ask for a cookie recipe and it builds a recipe screen. Ask it to compare two cars and it builds a comparison. These visual UIs allow us, as humans, to process information thousands of times faster than reading a chat window.

It’s why I can’t stop using it.

Problem

Steering on Monogram gets tricky

Monogram knows how to answer a question visually. But a lot of the questions we ask rarely arrive fully thought out. When you go looking for something, you usually can’t name exactly what you need. If you could, you wouldn’t have the gap in the first place.

For example, I ask “What are the best sushi restaurants around me?”…followed by “a little more upscale”…followed by “for a party of five”. That first answer is a starting position, the real job is steering it toward the version that fits my constraints. Sometimes, I don’t even know what my constraints are until I see them in front of me. That’s how people discover. We look at our choices, talk through them, and narrow. It's kinda serendipitous.

But for Monogram, this means generating a whole new interface for each question I ask. The visual interface I was reasoning against disappears, and my train of thought goes with it. Every turn becomes fragile. This begged the question:

How might we let the interface refine with the conversation instead of being rebuilt on every turn?

Before proposing anything, I needed to fully understand how Monogram builds a fresh UI for every prompt.

Exploration

Every affordance becomes a control

Monogram doesn’t generate pixels, it assembles a fixed catalog of native components, styled by a design system and described in a protobuf contract. Bounded composition, not generative rendering.

The model owns which components and what content while the app owns how they look. So my solution had to live inside that grammar and add no new primitives. The design needed to be sensitive to the model behind it.

I ran hundreds of prompts and watched how it reasoned. A pattern surfaced. In every request, the model reasons quietly with a set of adjacent values. Assuming through the ambiguity.

I like the Lucid Air. How does it compare to other EVs?

Which EVsWhat to optimise forRangePriceSeats0–60Charge timeEfficiency

Model reasoning

Ask “give me some movies to watch with my friend,” and before it returns anything, it’s already reasoning through a set of parameters. A genre, a length, how many, a mood, where.

That was the solution space. Every significant value the model reasoned with should become an affordance. And every affordance should become a control.

DESIGN.md

Solution

Live Parameters

The important values the model reasoned with becomes a control in a dock beneath the content. A stepper for the batch, a segmented control for texture and units. Editing one refines the content in place.

Compare EVs. Live Parameters on an EV comparison: adding the Rivian R1S births a third column and every judgment pill re-evaluates against the new set, then the Family lens moves “Best for you” to the seven-seat R1S.

Live Parameters