Prefer to listen? I made a podcast version.
The whole case study, minus the scrolling.



Designing an AI that understands intent, not interfaces.
Designing an AI that understands intent, not interfaces.
Designing an AI that understands intent, not interfaces.
Timeline
Timeline
June - August 2026
June - August 2026
My Role
My Role
Lead Researcher, UX Design
Lead Researcher, UX Design
Focus
Focus
Agentic interactions
Agentic interactions
Prefer to listen? I made a podcast version.
The whole case study, minus the scrolling.
About the project
About the project
Imagine walking into a grocery store, asking the clerk for a loaf of bread, and being told: "Sorry, this is the vegetable aisle. Go outside, guess which door leads to the bakery, and ask again."
That was Loop’s AI experience.
Imagine walking into a grocery store, asking the clerk for a loaf of bread, and being told: "Sorry, this is the vegetable aisle. Go outside, guess which door leads to the bakery, and ask again."
That was Loop’s AI experience.
The Wrong-Door Problem
The Wrong-Door Problem
We had built four brilliant, hyper-capable, task-specific AI agents: Loop Chat, Loop Charts, Loop Voice, and Loop Sheets.
The problem was, we had also given each of them its own front door.
We were operating under an aggressive “ship-first” culture, so whenever a new capability worked, we shipped it. Each one came with its own entry point, and before long, we had quietly accumulated eight different doors scattered across the platform.
Loop Chat for open-ended analysis and broad questions.
Loop Charts for building widgets and dashboards.
Loop Voice for running scheduled verbal debriefs out loud.
Loop Sheets for financial modelling and projections.
On paper, this looked beautifully organized. Each agent had a job. Each job had a place. But People don't log into a product at 9 AM thinking about system architecture. They think about what they need to get done.
Our landing agent, Loop Charts, looked enough like a general-purpose assistant that users naturally asked it all sorts of things. 6% of landing sessions were out-of-scope requests that it simply refused.
Then they tried again somewhere else.
Our telemetry made the pattern pretty hard to ignore. Users moved from Charts to Chat nearly twice as often as they went the other way: 51 cases versus 30.
In other words, people were landing on the main screen, making their best guess, getting rejected, and then trying to figure out where they were supposed to go.
Drag and see all the 7 entry points in the older version:
We had built four brilliant, hyper-capable, task-specific AI agents: Loop Chat, Loop Charts, Loop Voice, and Loop Sheets.
The problem was, we had also given each of them its own front door.
We were operating under an aggressive “ship-first” culture, so whenever a new capability worked, we shipped it. Each one came with its own entry point, and before long, we had quietly accumulated eight different doors scattered across the platform.
Loop Chat for open-ended analysis and broad questions.
Loop Charts for building widgets and dashboards.
Loop Voice for running scheduled verbal debriefs out loud.
Loop Sheets for financial modelling and projections.
On paper, this looked beautifully organized. Each agent had a job. Each job had a place. But People don't log into a product at 9 AM thinking about system architecture. They think about what they need to get done.
Our landing agent, Loop Charts, looked enough like a general-purpose assistant that users naturally asked it all sorts of things. 6% of landing sessions were out-of-scope requests that it simply refused.
Then they tried again somewhere else.
Our telemetry made the pattern pretty hard to ignore. Users moved from Charts to Chat nearly twice as often as they went the other way: 51 cases versus 30.
In other words, people were landing on the main screen, making their best guess, getting rejected, and then trying to figure out where they were supposed to go.
Drag and see all the 7 entry points in the older version:

Saddest Finding:
A customer named Flavia wanted to edit an ad-spend plan. She asked the landing agent. It rejected her.
Two minutes later, she manually switched to Chat and tried again.
Rejected again.
The frustrating part? The platform actually supported what she was trying to do. The capability existed. It was just hiding behind the wrong door.
Flavia closed the tab and left.
Saddest Finding:
A customer named Flavia wanted to edit an ad-spend plan. She asked the landing agent. It rejected her.
Two minutes later, she manually switched to Chat and tried again.
Rejected again.
The frustrating part? The platform actually supported what she was trying to do. The capability existed. It was just hiding behind the wrong door.
Flavia closed the tab and left.
Slide 1
01 / 06
Uncovering the Real Behavior
Uncovering the Real Behavior
Before you can fix human behavior, you have to filter out the ghosts.
I wanted to understand just how deep the problem went, so I started with three months of telemetry: 1,776 interactive sessions across 473 real users.
The first thing I learned had nothing to do with our users.
It was about our data.
When I pulled the raw session logs, the numbers looked impressive. Lots of activity, lots of “sessions,” lots of people apparently using the product.
Except... nearly half of them weren't people.
Before you can fix human behavior, you have to filter out the ghosts.
I wanted to understand just how deep the problem went, so I started with three months of telemetry: 1,776 interactive sessions across 473 real users.
The first thing I learned had nothing to do with our users.
It was about our data.
When I pulled the raw session logs, the numbers looked impressive. Lots of activity, lots of “sessions,” lots of people apparently using the product.
Except... nearly half of them weren't people.
The 49% Ghost Traffic
I cross-referenced the session timestamps with browser activity in PostHog. 49% of the traffic had no pageviews, cursor movements, or other signs of a human being anywhere near the product.
It turned out to be automated report runs and internal evaluation scripts quietly doing their thing in the background.
Half of our “active users” were machines talking to machines.
So I stripped out the ghosts and went back to the data.
And that's when things got interesting.
A few of our strongest assumptions didn't survive the cleanup.
I cross-referenced the session timestamps with browser activity in PostHog. 49% of the traffic had no pageviews, cursor movements, or other signs of a human being anywhere near the product.
It turned out to be automated report runs and internal evaluation scripts quietly doing their thing in the background.
Half of our “active users” were machines talking to machines.
So I stripped out the ghosts and went back to the data.
And that's when things got interesting.
A few of our strongest assumptions didn't survive the cleanup.


The last one told us they weren't ignoring us.
Our silence had simply outlasted their patience.
And these weren't harmless little moments of friction. When a real user hit one of these soft dead-ends, 61% didn't return within 24 hours.
First impressions were also the most fragile: 22% of first-time users hit a dead-end, compared with 15% of returning users.
The more I looked at the data, the less this felt like an AI reliability problem. The intelligence was there. We were losing people in the moments where the product failed to get out of its own way.
The last one told us they weren't ignoring us.
Our silence had simply outlasted their patience.
And these weren't harmless little moments of friction. When a real user hit one of these soft dead-ends, 61% didn't return within 24 hours.
First impressions were also the most fragile: 22% of first-time users hit a dead-end, compared with 15% of returning users.
The more I looked at the data, the less this felt like an AI reliability problem. The intelligence was there. We were losing people in the moments where the product failed to get out of its own way.
Fixing the Visual Identity Crisis
Fixing the Visual Identity Crisis
Moving from four separate dialects to a single, atmospheric design language.
Fixing the interaction logic was only half the job.
We had four agents built by four different teams, at four different points in time. Naturally, they had developed their own personalities.
Chat felt like a sparse messaging app.
Charts looked like the main landing page who would solve it all.
Sheets had gone full retro spreadsheet.
They could all speak to the same user, but visually, they didn't look like they belonged to the same agentic layer of the same product.
Switching between them wasn't just a mental tax anymore. It was a visual mess. So we started exploring what a shared Loop language could look like.
Moving from four separate dialects to a single, atmospheric design language.
Fixing the interaction logic was only half the job.
We had four agents built by four different teams, at four different points in time. Naturally, they had developed their own personalities.
Chat felt like a sparse messaging app.
Charts looked like the main landing page who would solve it all.
Sheets had gone full retro spreadsheet.
They could all speak to the same user, but visually, they didn't look like they belonged to the same agentic layer of the same product.
Switching between them wasn't just a mental tax anymore. It was a visual mess. So we started exploring what a shared Loop language could look like.


While doing our visual experiments. We kept coming back to three ideas:
Atmosphere over containers. Moving away from utility-heavy gray cards toward glass, depth, and the Powder Steel palette.
Data as the hero. Letting the information itself take center stage instead of wrapping everything in layers of UI.
A brand that reacts. Turning the Loop mark into a dynamic status light that could breathe, shimmer, and settle depending on what the AI was doing.
While doing our visual experiments. We kept coming back to three ideas:
Atmosphere over containers. Moving away from utility-heavy gray cards toward glass, depth, and the Powder Steel palette.
Data as the hero. Letting the information itself take center stage instead of wrapping everything in layers of UI.
A brand that reacts. Turning the Loop mark into a dynamic status light that could breathe, shimmer, and settle depending on what the AI was doing.
The many faces of one front door
From early explorations to the final look and feel for our agentic layer.
From early explorations to the final look and feel for our agentic layer.








Final version:


Designing for Two Audiences: Humans + LLMs
This exploration also changed how we thought about our design system.
With an agentic interface, the design system isn't just a library that helps human designers make consistent screens. It's also a set of constraints that helps the AI make consistent decisions.
Our system had 8 foundations, 17 primitives, and 14 compositions. But the more interesting part was how we documented them.
We started writing the guidelines almost like render rules, specific enough that an LLM could follow them without having to interpret our intentions.
This exploration also changed how we thought about our design system.
With an agentic interface, the design system isn't just a library that helps human designers make consistent screens. It's also a set of constraints that helps the AI make consistent decisions.
Our system had 8 foundations, 17 primitives, and 14 compositions. But the more interesting part was how we documented them.
We started writing the guidelines almost like render rules, specific enough that an LLM could follow them without having to interpret our intentions.












Unlock full design system walkthrough on call with me
The Architecture Call: Super Agent
The Architecture Call: Super Agent
The Architecture Call: Super Agent
Scope should be the platform's problem, not the user's homework.
Scope should be the platform's problem, not the user's homework.
With the research and visual foundations set, we faced a crossroad: silently route prompts behind the scenes while keeping the separate interfaces, or consolidate everything into a single front door?
We chose full consolidation: Super Agent.
With the research and visual foundations set, we faced a crossroad: silently route prompts behind the scenes while keeping the separate interfaces, or consolidate everything into a single front door?
We chose full consolidation: Super Agent.

Instead of asking users to pick a door, we built one single conversational input.
When a user types a prompt, Super Agent classifies the underlying intent—metric lookup, report generation, financial analysis, plan edits, or diagnosis and dispatches the request to the right backend capability automatically
Instead of asking users to pick a door, we built one single conversational input.
When a user types a prompt, Super Agent classifies the underlying intent—metric lookup, report generation, financial analysis, plan edits, or diagnosis and dispatches the request to the right backend capability automatically
Designing for Human Friction
Designing for Human Friction
Turning the little moments where people gave up into something the interface could actually fix.
Turning the little moments where people gave up into something the interface could actually fix.
By this point, the telemetry had given us a pretty good list of where people were getting stuck.
So instead of designing the Super Agent around a collection of features, we designed it around those moments of friction. Each interaction pattern had a specific problem behind it.
By this point, the telemetry had given us a pretty good list of where people were getting stuck.
So instead of designing the Super Agent around a collection of features, we designed it around those moments of friction. Each interaction pattern had a specific problem behind it.
01: Keep the Work Where You Can See It
01: Keep the Work Where You Can See It
The friction: AI-generated work has a bad habit of disappearing into the conversation.
A chart, table, or financial plan might be exactly what you need for the next question, but a few messages later, it's already buried somewhere above. Users were scrolling back and forth to find what they were looking at, breaking their train of thought in the process.
The idea: Give the work its own place.
We introduced a persistent split canvas: conversation on the left, generated artifacts on the right.
Dashboards, sheets, reports, and other outputs could render there in real time. Opening or modifying an artifact brought it back into that space, so the thing you were working on never disappeared just because the conversation moved forward.
The chat could keep moving. The work stayed put.
The friction: AI-generated work has a bad habit of disappearing into the conversation.
A chart, table, or financial plan might be exactly what you need for the next question, but a few messages later, it's already buried somewhere above. Users were scrolling back and forth to find what they were looking at, breaking their train of thought in the process.
The idea: Give the work its own place.
We introduced a persistent split canvas: conversation on the left, generated artifacts on the right.
Dashboards, sheets, reports, and other outputs could render there in real time. Opening or modifying an artifact brought it back into that space, so the thing you were working on never disappeared just because the conversation moved forward.
The chat could keep moving. The work stayed put.


Before


After
02: Make Waiting Feel Honest
02: Make Waiting Feel Honest
The friction: The AI took an average of 74 seconds to respond. That's a long time to stare at a spinner.
We saw users disappear during those gaps, often because they had no idea whether the product was still working or had quietly given up.
The idea: Show the work instead of pretending the wait isn't happening.
We replaced the spinner with the Loop Log, a live stream showing what the agent was actually doing:
Resolved data sources → Ranking insights by impact
Each step could include timing, row counts, and inspectable SQL when users wanted to dig deeper. The point wasn't to make the AI look busy.It was to make the wait legible.
The friction: The AI took an average of 74 seconds to respond. That's a long time to stare at a spinner.
We saw users disappear during those gaps, often because they had no idea whether the product was still working or had quietly given up.
The idea: Show the work instead of pretending the wait isn't happening.
We replaced the spinner with the Loop Log, a live stream showing what the agent was actually doing:
Resolved data sources → Ranking insights by impact
Each step could include timing, row counts, and inspectable SQL when users wanted to dig deeper. The point wasn't to make the AI look busy.It was to make the wait legible.


Before


After
03: Don't Make People Type What They Could Tap
03: Don't Make People Type What They Could Tap
The friction: Open-ended clarification questions were responsible for 17% of session deaths.
The agent would ask for a parameter, leave a blank box waiting for an answer, and essentially hand the work back to the user.The idea: Make the next step obvious.
When Super Agent was roughly 90% sure what the user meant, it offered lightweight Clarification Cards with single-tap options specific stores, date ranges, platforms, and so on.
But there was one rule we wouldn't compromise on: Clarification should never become a roadblock.
The cards were always skippable and never blocked the composer. If the user ignored one, the agent simply proceeded with its best stated assumption:
“Proceeding using the last 30 days of data…” The interface could ask for help without demanding it
The friction: Open-ended clarification questions were responsible for 17% of session deaths.
The agent would ask for a parameter, leave a blank box waiting for an answer, and essentially hand the work back to the user.The idea: Make the next step obvious.
When Super Agent was roughly 90% sure what the user meant, it offered lightweight Clarification Cards with single-tap options specific stores, date ranges, platforms, and so on.
But there was one rule we wouldn't compromise on: Clarification should never become a roadblock.
The cards were always skippable and never blocked the composer. If the user ignored one, the agent simply proceeded with its best stated assumption:
“Proceeding using the last 30 days of data…” The interface could ask for help without demanding it


Before


After
04: Put the Interesting Question Within Reach
04: Put the Interesting Question Within Reach
The friction: Diagnosis was our marquee demo feature the kind of thing we loved showing off. In actual usage, though, it appeared in only 2% of first queries. Meanwhile, 66% were simple lookups and another 30% were report-building requests.
It was tempting to conclude that people just didn't care about diagnosis.But we had another hypothesis:
Maybe they just didn't know to ask for it.
So instead of teaching users a new vocabulary, we brought the capability to them.Every metric result got an inline follow-up suggestion:
Why did this change? One tap turned a passive number into an investigation.
The friction: Diagnosis was our marquee demo feature the kind of thing we loved showing off. In actual usage, though, it appeared in only 2% of first queries. Meanwhile, 66% were simple lookups and another 30% were report-building requests.
It was tempting to conclude that people just didn't care about diagnosis.But we had another hypothesis:
Maybe they just didn't know to ask for it.
So instead of teaching users a new vocabulary, we brought the capability to them.Every metric result got an inline follow-up suggestion:
Why did this change? One tap turned a passive number into an investigation.


Before


After
And Then It Started Looking Like One Product
And Then It Started Looking Like One Product
Bringing four agents, one design language, and a whole lot of thinking together. Some more parts of the whole design system:
Bringing four agents, one design language, and a whole lot of thinking together. Some more parts of the whole design system:








What I Took Away
What I Took Away
Three things stuck with me after this project.
Three things stuck with me after this project.
01: Data hygiene is design work.
Before designing for behavior, make sure you're actually looking at human behavior.
02: The best AI interfaces don't make users work like AI.
The more the system understands intent, the less users should have to understand the system.
03: Designing for AI made us better at designing for humans.
When machines became consumers of our design system, ambiguity stopped being good enough.
01: Data hygiene is design work.
Before designing for behavior, make sure you're actually looking at human behavior.
02: The best AI interfaces don't make users work like AI.
The more the system understands intent, the less users should have to understand the system.
03: Designing for AI made us better at designing for humans.
When machines became consumers of our design system, ambiguity stopped being good enough.
The system behind Super Agent
The system behind Super Agent
The system behind
Super Agent
A closer look at the components, patterns, and interaction states that make up the Super Agent experience.
A closer look at the components, patterns, and interaction states that make up the Super Agent experience.
View the full system →
















