
In CodeRabbit's latest episode of The Merge, I sat down with Simon Farshid, founder and CTO of Assistant UI, an open-source library for building AI chat and agent interfaces. We talked about the hidden work behind those interfaces, the growing importance of product judgment, and the coding-agent loop Simon runs with CodeRabbit.
Assistant UI gives React developers customizable components for AI chat and handles the underlying work, including streaming responses, conversation state, attachments, message editing, voice, and connections to agent backends.
The library was born out of Simon's hackathon project. He kept reaching for the same chat interface across his experiments and startup ideas, so he built one. "I didn't plan to make it into a startup," he said. "It was something that I needed myself."
Turns out, plenty of other developers had the same problem. Assistant UI now shows up in well over 2,000 open-source GitHub repositories and gets 1.4 million npm downloads a month, including package updates.
The hard part is the state
“Building chat interfaces seems very easy,” Simon said. “The hard part is state management.”
A chat box looks simple until the response starts. Text streams in while Markdown is still rendering. A user may attach a file, edit an earlier message, stop a run, or switch to voice. Every action changes what appears on screen and the conversation state underneath it.
People arrive with habits formed by ChatGPT, Claude, and other polished AI products. They expect an embedded agent to respond smoothly and let them interrupt or correct it without losing the conversation.
Assistant UI manages the runtime state and common chat behavior so teams can focus on the interactions their product actually needs.

The last 20% is where taste matters
When our conversation turned to coding agents, Simon focused on the work that remains after a clear specification becomes code.
“You get 80% of the work done with 10% of the effort,” Simon said. “All the alpha is in the remaining 20%.”
For Simon, taste is practical. It shows up in a clean API, a useful interaction, or a feature that solves a recurring problem without forcing every team into the same design. He tests new patterns in customer codebases, then brings the ones that hold up into the main library.
The review loop running on Simon’s machine
Towards the end of the episode, Simon described a review loop that pairs his coding agent with CodeRabbit.
“One really cool loop is having an agent look at the CodeRabbit errors and then fixing them and pushing updates,” he said.
By “errors,” Simon meant the findings CodeRabbit surfaces during review. In the loop he described, his coding agent fixes straightforward findings and pushes an update. When a finding is less certain, the agent summarizes it for Simon, who decides what should be changed before the next review.
He is experimenting with similar loops elsewhere in his workflow. Many of them run overnight, including one that checks Assistant UI's documentation file by file and updates anything that has fallen behind.

Simon calls this way of working “lean forward.” AI can get a project most of the way there with little effort. However, he says, engineers must stay involved in the remaining work, where product judgment, careful review, and attention to detail make all the difference in the final product.
Watch the full episode of The Merge for our conversation about Assistant UI's open-source beginnings, the future of generative interfaces, and the development loops Simon is already putting to work.




