Agent Plan
An agent's steps on a glass tube that fills to the one running. Done, failed and skipped steps, substeps, findings.
New in 1.6.Built on Icons.
- In progress: Reproduce with TZ=Europe/Berlin
- Not started: Find why addDays is an hour short
- Not started: Step by calendar day in src/date.ts
- Not started: Replace the millisecond math with setDate
- Not started: Keep the addDays(date, days) signature
- Not started: Re-run the suite
Installation
npx shadcn@latest add https://neonkit.heyaadi.com/r/agent-plan.jsonUsage
import { AgentPlan } from "@/components/ui/agent-plan"
<AgentPlan
title="Fix the failing date test"
steps={[
{ title: "Reproduce with TZ=Europe/Berlin", status: "done", meta: "1 failed" },
{ title: "Step by calendar day in src/date.ts", status: "active" },
{ title: "Re-run the suite" },
]}
/>Examples
Stopped by a failure
The light stops at the failed step, which says why. Steps after it are skipped, not pending.
With findings
Descriptions carry what a step found; meta carries the number. The active step shows a live timer when it has no meta.
API reference
AgentPlan
| Prop | Type | Default |
|---|---|---|
steps | PlanStep[]{ id?, title, label?, description?, status?, meta?, substeps?, content? } | None |
title | ReactNodeHeading above the steps. Also names the list. | None |
readout | ReactNodeReplaces the count of done steps. null hides it. | "2 of 4" |
timer | booleanLive timer on the active step when it has no meta. | true |
color | NeonColorPalette name or hex. Failed steps are always red. | inherited |
PlanStep
| Prop | Type | Default |
|---|---|---|
title | ReactNodeWhat the step does. | None |
status | "pending"The tube lights up to the furthest step that started. | "pending" |
description | ReactNodeA line under the title: what it found, why it failed. | None |
meta | ReactNodeRight-aligned value. | None |
substeps | { title, status?, meta? }[]A short checklist under the step. | None |
content | ReactNodeAnything else under the step, such as the tool calls it made. | None |
label | stringPlain text for announcements when title isn't a string. | None |
Accessibility
- An ordered list; the running step has aria-current="step" and every step and substep starts with its status in words.
- A polite live region announces Step 3 of 4 and the step's name when the active step changes, Plan complete at the end, and where it stopped on a failure. Nothing is announced on mount.
- Under prefers-reduced-motion the tube fills instantly and the active node holds still.