Sean Ren Product Designer, AI Experiences

Enter passcode

This portfolio is shared by invitation.

Skip to the case study

RelayDelegate to many coding agents. Decide only what needs your judgment.

A review model for managing multi-agent orchestration: how work moves between agents, how it gets checked, and when an engineer steps in.

Role
Research & Interaction Designer
Design Engineer
Timeline
Aug 2026 – Present
Platform
Desktop and iPhone
Research
Four interviews, three concept tests, competitive analysis
Tools
Figma, Cursor, Claude Code
Team
Solo project

Overview

Agents scale.
A person’s attention doesn’t.

Problem
Engineers hand tasks to coding agents, step away, and come back to code they didn’t watch being written. The engineers I talked to were already running several at once across branches, so the work had become managing the agents.
Design question
How might one engineer stay in charge when agents write more than anyone can read?
Key insight
Most agent changes don’t need approval. Another agent can verify them, or someone just needs to know they happened.
What I designed
The concept and the prototype: the track that shows every agent at once, the calls a person answers, and a Lock Screen version for when they step away.

Process

It started as an IDE extension for one agent.

First interviews
I interviewed four engineers. They didn’t trust an agent’s work until they had checked it themselves, by rerunning it, restating what they asked for and getting a teammate to look. So I started with something closer to an IDE extension than a standalone product.

Before version one: a sketch, the flow and wireframes

  1. Whiteboard sketch

  2. User flow

  3. Wireframes

Version one
A review panel that checks an agent’s work against the project spec. A staff engineer told me most work starts from a casual request, and a formal spec is rare.
Version two
A guided view of what the agent did while you were away. An industry research engineer told me they actually run several agents at once, and the staff engineer had said the same. That was the turning point.
With Claude Code
I gave it all my research and asked about running many agents. It brought a lot of new features, but the design wasn’t consistent, and the solution looked like AI slop you could see anywhere.
Paper sketches
I drew how a race would work, listed what the design still had to answer, and wrote rules for prompting.

The race, sketched, with my prompting rules

My notes on the AI iterations

Version three
That became the track: every agent is a lane on one screen, and a baton goes up when one needs you. A process validation engineer asked for two more things: every conclusion traces back to its source, and every decision shows what it will affect.

Orchestration

Agents pass the work along like a relay.

A lane runs plan, build, test, review, land, and the result of each handoff decides who acts next.

Putting every agent on one track

How does a person see all of them, and which one needs them?

Turned downOne review per agent, version two

Version two: a guided review of one agent's work beside the code.

Version two reviewed one agent at a time, so every new agent meant another review.

ChosenLanes on one track

8
Safari address autofill Plan agent workingrelay/safari-autofill
2
3DS timeout retry Plan agent workingrelay/3ds-retry
5
Decline analytics Plan agent workingrelay/decline-analytics
0 handoff checks0 sent back and fixed by agents0 sent to you

Three lanes start at Plan. Every handoff is a check by the agent receiving the work.

Why
The research engineer’s team already checked agent output with integration tests, an agent review and code-owner approval, so I made the check part of the handoff. Agents catch each other’s mistakes before a person is asked.

Handoff outcomes

Settled by agents
The check passes, or the work is sent back and comes back fixed.
Worth knowing
Something changed and someone should hear about it. It goes on a list and interrupts nobody.
Needs a person
Product calls, disagreements between agents and anything irreversible. Engineers can change these rules, except that last one.
Lane conflicts
My sketch asked how to picture branches that conflict. Two lanes can pass alone and fail together, so the Land agent tests them together before either lands, and a clash comes to a person as a call.
Independent verification
Agents on the same model can miss the same bug. So before a change to money or data lands, a replay check runs real traffic through it.

Decisions

The hard part is how often agents should ask.

Too often, and approving becomes a reflex. Too rarely, and problems land with nobody having looked.

Escalation

Separating what to know about from what to approve

The obvious design was an approval inbox, where every change waits for a yes.

Turned downAn approval inbox

Approving becomes the job, and the real decisions get lost in it.

ChosenBatons for decisions, Worth knowing for the rest

From agents

Waiting for the next update

Your hand0

Nothing needs you yet.

Eight agents report as they work. Relay sorts every update before it reaches you.

Why
The staff engineer gave me the example I kept coming back to: a new database table is something to know about, with nothing to approve.

Explainability

Showing evidence before a recommendation

The Test agent says the flaky test is timing. The Review agent says it’s a race.

Turned downA vote with a confidence score

It hides that the agents disagree, and it doesn’t tell the person what to check.

ChosenEvidence first, then a recommendation

InvestigateLane 6Waiting 4 min

Test agent and Review agent disagree about the flaky test.

Relay won’t recommend a side while its own agents disagree. Check first, or decide.

Test agent

It’s timing. With one retry, 10 of 10 runs pass.

Review agent

It’s a race. The order total can change after Pay is pressed.

Relay suggests a check before anyone decides.

1Fix the raceSide with Review agent. Build agent locks the total while paying.
2Keep the retrySide with Test agent. Review agent logs the race as a known risk.

Relay doesn’t take a side yet.

Why
An Android engineer I interviewed only trusted a fix they’d seen fail and then pass, so Relay runs the test 20 times before it recommends anything.

Answering

Reading your own words back

The options come from the agent, and sometimes none of them is right.

Turned downA text box straight to the lane

A misread answer only shows up in review.

ChosenYour words, read back before they ship

DecideLane 1Unblocks 2 lanes

What should customers see when the bank flags fraud?

1“Your card was declined. Try another card or contact your bank.”Recommended
2“We couldn’t verify this payment. Contact your bank.”
3Ask Maya, product manager

The receiving agent reads your answer back before it reaches the lane.

When no option is right, the field takes your own words.

Why
Engineers correct agents in their own words, like a frontend engineer I interviewed who restated every requirement. So the Plan agent checks your answer against the spec first.

Other decisions about what reaches whom

  1. Decision provenance

    Each one names who checked what, and where it came from.

  2. Friction for irreversible actions

    Most answers wait in an undo tray. Dropping a table takes a press and hold, and the card says first what it will affect.

  3. Priority by impact

    Newest first would bury the answer that moves the most work.

  4. Ownership routing

    Calls go to whoever owns the code, instead of every pull request to every teammate.

Every decision in full, with its research, craft and build, is in the full case study.

Management

Once agents are running, the job looks like a manager’s.

Autonomy

Letting a track record decide what agents can settle

Most tools set this up front, by tool and command.

Turned downPermissions set up front

It says what an agent may run, and nothing about how well it has judged.

ChosenOffered from their record, by kind of call

Let agents settle Pick calls?

Agents would have answered all 7 of your last Pick calls the same way you did. When more than one fix works, they’d settle it and tell you under Worth knowing.

Matched 7 of 7
Every call comes to you

Each time you answer, Relay notes whether the agents would have picked the same. On Pick calls, they matched your last seven.

Why
Once agents have matched your answers at least nine times in ten, Relay offers to hand that kind of call over. Product calls and anything irreversible stay with a person, and a line under your hand shows what’s been handed over.

Mobile

Answering from your phone

Most of what’s left for a person is picking an answer, and that doesn’t need a big screen.

Calls are collected

Calls gather into one stack, sorted by how many lanes they free up. Worth knowing never buzzes. It waits in one quiet line.

Escalation timeout
A call moves to your phone when you step away. After 25 minutes it goes to whoever owns that code or copy. If nobody owns it, the lane waits, because nothing lands without an answer.
Recovery flows
People and agents both get things wrong, so each stage has its own way back: in the air, on the lane, on main, and after agents made the call.

Compared

Today’s tools run agents in parallel, then hand the work back to you.

I went through Cursor, OpenAI Codex, GitHub Copilot, Claude Code and Google Antigravity. They’re shipped products and Relay is a concept, so I only compared how the work is managed.

Triage
Claude Code’s agent view is the closest to what I wanted: sessions sorted by what needs input, with the question on the row. It can’t say why this one needs you, or what’s waiting on it. In Relay a call comes with its reason, and the one that frees the most lanes comes first.
Claude Code’s agent view: sessions listed under Needs input, Working and Completed, with the waiting question on the row.
Claude Code’s agent view, from its docs.
Output review
Cursor’s Agents Window gives you the agent’s summary next to the code. That’s the agent describing its own work, and you still have to picture what changed for the customer. Relay shows each fix the way it would ship.
Cursor’s Agents Window: a sidebar of agents, an agent’s summary of what it changed and tested, and the code.
Cursor’s Agents Window, from its changelog.

Lane 4, three forks in German

German overflows the payment panel. Pick a fix.

AShorter copy

Zahlung49,00 €
•••• 4242
Karte abgelehnt. Andere Karte nutzen.
49,00 € bezahlen

All checks pass

locales/de/checkout.json+1 −1

− "decline.generic": "Ihre Karte wur…

+ "decline.generic": "Karte abgelehn…

BWrap to two lines

Zahlung49,00 €
•••• 4242
Ihre Karte wurde abgelehnt. Versuchen Sie es mit einer anderen Karte.
49,00 € bezahlen

Panel grows on small phones

decline-message.css+2 −1

− white-space: nowrap;

+ white-space: normal;

+ min-height: 2lh;

CCut off, full text on hover

Zahlung49,00 €
•••• 4242
Ihre Karte wurde abgelehnt. Versuchen Sie es mit einer anderen Karte.
49,00 € bezahlen

Hides most of the message

DeclineMessage.tsx+2

+ style={{ textOverflow: "ellipsis" }}

+ title={message}

Test agent caught German overflowing the payment panel, and Build agent tried three fixes, each on its own branch.

Mobile
GitHub Mobile’s Live Activity: a task in progress with a button to view the pull request.
GitHub Mobile, from its changelog.
GitHub Mobile’s Live Activity tells you how a session is going, and Claude Code’s Remote Control lets you answer from the Claude app. I wanted the question already in the notification, with its answers one tap away.

Results

Relay goes on show at the Fall Symposium.

I’m presenting it there and walking visitors through the prototype.

Feedback
A staff engineer gave the first version high praise compared with their company’s own internal tool.
What I learned

Both premises that fell over were mine, and each fell the first time an engineer saw the design. Next time I’d ask for a real example of their day before showing a screen.

With Claude Code, the features came fast and none of the screens were ready to use. It got useful once the research, the sketches and the rules came first.

What I’d watch first
How often people open the evidence before taking a recommended answer. When that drops, they’ve started approving without reading.

To be continued…