Every Agent UI & Frontend comparison and buyer's guide for building AI agents — 9 pieces and counting. Each is a head-to-head or a “best X for Y” roundup with a sources-backed verdict.
One Rust process now matches 32 Python API servers. The lesson isn't 'Rust is fast' — it's that everyone was optimizing the wrong layer of the serving stack.
When a model streams a tool call, the arguments arrive as half-written JSON. The teams that struggle treat it as corruption to repair. It's a valid prefix to complete — and the naive fix is quietly O(n²).
The field for making an agent 'speak UI' has split into two camps — your codebase owns the components, or the protocol does. Which repo you reach for is really a bet on who controls the widget.
SSE hands you a Last-Event-ID header that looks like free stream resumption. It isn't — it's a cursor with nothing behind it. The real fix is the one decision everything else follows from.
The SSE-vs-WebSockets debate misses the real problem. An agent doesn't emit a token stream — it emits typed events. Design the envelope first; the transport falls out.
MCP wired agents to tools and A2A wired them to each other. The last hop — the agent talking to a human's screen — was still hand-rolled in every app. AG-UI is the standard for it.
They look like three flavors of the same thing. They're not — each is built around a different execution model, and that hidden choice is what makes streaming chat trivial in one and a fight in the others.
Three self-hosted chat UIs that look interchangeable on a feature checklist — but each one is really built for a different person, and picking the wrong one means fighting the grain forever.
They all surface when you Google "AI chat UI for agents," but they own three different layers — and the ones worth shipping often stack rather than swap.