Agent Status
The agent-era state machine, encoded once: waiting on you / working / ready to review / done / error. Session sidebars, headers, hover cards, and terminal blocks all compose this instead of inventing their own status dots.
Waiting on youWorkingReady to reviewDoneError
tsx
import { AgentStatus } from "@/registry/seam/ui/agent-status"
export default function AgentStatusDemo() {
return (
<div className="flex flex-wrap items-center gap-2">
<AgentStatus status="waiting" />
<AgentStatus status="working" />
<AgentStatus status="ready" />
<AgentStatus status="done" />
<AgentStatus status="error" />
</div>
)
}bunx --bun @seamui/cli@latest add agent-statusNotes
- The theme is monochrome, so state reads through shape and animation, not hue:
waitingis filled with an attention halo,workingpulses,readyis hollow,doneis faint,erroris the one sanctioned color. Distinct without color vision by construction. - The working pulse is CSS
animate-pulse— the Spinner precedent for ambient loops. It's opacity-only, so it reads identically under reduced motion; the feedback never goes dead. - The chip is
aria-live="polite", so a state change is announced without interrupting. A standalone dot with anaria-labelbecomesrole="status"; without one it stays decorative (aria-hidden) next to visible text. - Both forms carry
data-statusfor styling hooks — e.g. group sidebar sections withdata-[status=waiting]:order-first.
Press feedback, reduced motion, and haptics follow the global policy — see Motion and Haptics.