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-status

Notes

  • The theme is monochrome, so state reads through shape and animation, not hue: waiting is filled with an attention halo, working pulses, ready is hollow, done is faint, error is 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 an aria-label becomes role="status"; without one it stays decorative (aria-hidden) next to visible text.
  • Both forms carry data-status for styling hooks — e.g. group sidebar sections with data-[status=waiting]:order-first.

Press feedback, reduced motion, and haptics follow the global policy — see Motion and Haptics.