positioning

The gap

If your UI is a settings form, use a general component library. If your UI is “an agent is thinking, running tools, and waiting for approval,” you need primitives those libraries skip — and you may not control the stack.

Honest comparison

Library Strength Where it fails this job
AI SDK Elements Best-in-class agentic React vocabulary React + Tailwind + AI SDK coupling
assistant-ui Mature React chat runtime Install-based; not copy-paste HTML ownership
Agno Agent UI Ready chat app for AgentOS Next.js template, not a portable primitive set
daisyUI chat Pure CSS, framework-agnostic Requires Tailwind; no tool/approval vocabulary
agent-ui Agentic primitives in plain HTML/CSS/JS Small MVP; you compose rich objects yourself

What stays true

Source visible
Every preview has a canonical snippet. No hidden framework layer.
Host owns execution
Components render state. They never execute tools or imply approval.
Native first
Without JavaScript, semantic HTML and normal forms still make sense.
Any stack
htmx, Rails, Astro, Next, or a static prototype an agent just generated.

Next step

Copy the chat-with-tools starter, or let an agent follow the AI setup path and llms.txt.