Agent Loading States

Three ways to say an agent is busy: ThinkingShimmer sweeps light across a status line, AgentProgress pairs an activity glyph and verb with a running timer, and ReasoningText rotates phrases with cascade, swap or scramble transitions.

Reasoning Text

reasoning-text.tsx

Cycles through phrases beside an ASCII spinner, switching them with a cascade, a swap or a letter-by-letter scramble while a shimmer passes over.

Agent Loading States Reasoning Text preview width

Install

$ bunx --bun shadcn add @karaui/reasoning-text
@karaui not found? Add it to components.json
{
  "registries": {
    "@karaui": "https://karaui.kamisama-v0.my.id/r/{name}.json"
  }
}

@karaui is in shadcn's public registry directory, so the latest CLI needs no setup. On an older CLI, merge this into the existing file once and every @karaui/… install resolves.

API Reference

phrases?
string[]

Phrases cycled through while the agent works.

[ "Thinking", "Reading the context", "Connecting the details", "Forming a response", ]
variant?
"scramble" | "cascade" | "swap"

Animation used when the active phrase changes.

cascade
interval?
number

Milliseconds each phrase remains visible.

1800
shimmerDuration?
number

Seconds taken for one shimmer pass.

2.2
indicator?
ReactNode

Optional leading visual. Defaults to a terminal-style ASCII loader.

—
className?
string
—

Thinking Shimmer

thinking-shimmer.tsx

A single status line with light gliding across it, so the words stay legible for as long as the agent works.

Agent Loading States Thinking Shimmer preview width

Install

$ bunx --bun shadcn add @karaui/thinking-shimmer

API Reference

children?
ReactNode

Loading message shown to the user.

Thinking…
duration?
number

Seconds taken for one shimmer pass.

1.8
className?
string
—

Agent Progress

agent-progress.tsx

A small animated glyph, an action word and a ticking timer in tabular digits for jobs that take a while.

Agent Loading States Agent Progress preview width

Install

$ bunx --bun shadcn add @karaui/agent-progress

API Reference

label?
string

Verb describing the agent's current activity.

Churning
elapsedSeconds?
number

Controlled elapsed time in seconds.

—
initialSeconds?
number

Starting time for the internal timer, in seconds.

0
running?
boolean

Whether the internal timer should advance. Ignored when elapsedSeconds is provided.

true
className?
string
—

Composition

Pick the primitive that shows only as much progress as the agent can honestly report.

Message
└── MessageContent
    ├── ThinkingShimmer
    ├── AgentProgress
    └── ReasoningText

Note: Agent Activity takes over as soon as real events stream in. Todo List shows concrete progress once a plan exists. Streaming Response steps in when the first words of the answer appear.

How it works

A busy indicator should say work is happening without faking how far along it is. Pick the lightest signal the system can back up with what it really knows, and keep the wording steady until the state changes.

Updated