Timeline

Shows when each step of a run happened.

Run

  • Run run_8f2a9112.6sPassed
    Run run_8f2a91
    StepStarted atTookStatus
    Plan0ms0.8sPassed
    Search orders820ms3.3sPassed
    Read policy4.1s1.2sPassed
    Draft reply5.3s5.9sPassed
    Check tone11.2s1.4sPassed

    passeddefault

  • Run run_8f2a9210.4sFailed
    Run run_8f2a92
    StepStarted atTookStatus
    Plan0ms0.8sPassed
    Search orders820ms9.0sWarning
    Issue refund9.8s0.6sFailed

    failed

  • Run run_8f2a937.6sRunning
    Run run_8f2a93
    StepStarted atTookStatus
    Plan0ms0.8sPassed
    Search orders820ms3.3sPassed
    Draft reply4.1s3.5sRunning

    running

  • Run run_8f2a949.4sWaiting on you
    Run run_8f2a94
    StepStarted atTookStatus
    Plan0ms0.8sPassed
    Search orders820ms3.3sPassed
    Approve refund4.1s5.3sWaiting on you

    waiting

States

  • Run run_8f2a915.3sPassed
    Run run_8f2a91
    StepStarted atTookStatus
    Plan0ms0.8sPassed
    Search orders820ms3.3sPassed
    Read policy4.1s1.2sPassed

    rest

  • Run run_8f2a915.3sPassed
    Run run_8f2a91
    StepStarted atTookStatus
    Plan0ms0.8sPassed
    Search orders820ms3.3sPassed
    Read policy4.1s1.2sPassed

    open

  • Run run_8f2a91
    Run run_8f2a91
    StepStarted atTookStatus

    loading

  • Run run_8f2a91

    No steps yet.

    Run run_8f2a91
    StepStarted atTookStatus

    empty

Usage

When to use it
Use
One run's steps on one clock: an agent's plan, its tool calls and its reply, nested by depth.
Use
Finding where the time went and which step broke.
Use
A live run, with now ticking once a second and the running span growing.
Not for
Many runs compared by duration. Use Table.
Not for
A number over time. Use Chart.
Not for
The steps of a plan that has not run. Use Item.

Rules

7 rules
Must
Give start and end in milliseconds from the run's start; leave end out while the span runs or waits. Because the track, the ticks and every duration share one unit picked from the total, and a timestamp or seconds would set a scale a thousand times off.
Must
Pass now, ticking once a second, while any span runs or waits. Because an open span runs to now, so without it a running step has no width and the total stops.
Must
Mark a failed step status: 'fail' and a slow one 'warn'; never colour a span any other way. Because only trouble takes colour, so the coral bar and its word are what the eye finds in a long trace.
Must
Mark a step held for a person status: 'waiting', with waitingLabel when it is not you. Because a waiting step is a hollow capsule to now with its word, so it never reads as a slow step that is working.
Should
Nest tool calls under the step that made them with depth, one level per call. Because the indent and its guide line make the names a tree, so a slow call is read with the step it slowed.
Should
Put the tool name or an ID in meta and costs or tokens in figure, never in the label. Because meta sets mono at 0.8 and figure tabular figures at the column's end, and both drop on a narrow card so the name keeps its room.
Never
Wrap a Timeline in a Card; it is the card, or takes frame="none" inside one. Because a card around a card is two edges where one closes the group.

State order

5 states, highest first
1
loading
2
empty
3
open
4
hover
5
rest

Accessibility

5 checks
The timeline is a named section; the rows are a list, or a listbox of options with onSpanClick.
Each row is named "Search orders, started at 0.8s, took 3.3s, warning"; the drawing is aria-hidden.
A screen-reader table carries step, start, duration and status for every span.
Trouble is never colour alone: the status column names it, and the row's name says it.
Bars are ink at 45%, 3.3:1 on paper; durations are text-2, 5.5:1, or the status word colours.

Keyboard

3 keys
Tab
With onSpanClick, enters the rows at the open span.
Arrow Up / Down, Home, End
Moves between spans.
Enter / Space
Opens the focused span.

Edge cases

6 edge cases
A step with no width
Its bar keeps a 4px capsule, and its duration still shows.
A bar ending at the total
Its duration sits before the bar, inside the track.
Narrow card
The name takes two fifths, meta and figure drop, the status column goes and the bar and its duration carry the outcome.
Long run
The ticks pick one unit from the total (ms, s, min, h) and fall on whole steps of it.
Reduced motion
A running bar jumps once a second instead of gliding.
Dark theme
The bars, washes and status colours take their dark values; the open bar turns near-white.

API

8 props
label
string
spans
TimelineSpan[]
now
number
activeId, onSpanClick
string, (span) => void
maxHeight
number
loading
boolean default false
footer
ReactNode
frame
'card' | 'none' default 'card'

Tokens

18 tokens
--shell
#f1f1f0
--paper
#ffffff
--line-faint
rgb(5 5 5 / 0.06)
--line
rgb(5 5 5 / 0.10)
--line-strong
rgb(5 5 5 / 0.45)
--ink
#050505
--fail
#e35e49
--warn
#d98a0b
--fail-text
#b23c29
--warn-text
#8a5a00
--hover
rgb(5 5 5 / 0.06)
--pressed
rgb(5 5 5 / 0.10)
--row
36px
--label-col
160px
--type-label
500 13px/1.35 var(--font-sans)
--type-caption
400 12px/1.35 var(--font-sans)
--type-code-xs
400 calc(12px * var(--mono-scale))/1.35 var(--font-mono)
--space-3
12px

Install

For your coding agent

GitHub

Please star me pookie

141

A new design system every week

Leave your email before you copy the prompt.