A four-state agent-run timeline — every step a measured segment on the run's own clock, coloured by kind, retries nested inside the step they re-attempt, tokens generated per step on a second track, and a wall-time-versus-generation mix apportioned by largest remainder so the shares add to exactly 100.
Preview in your theme
Loading preview…
This component is part of Pro
The install command, prompt and concept map are included with a Pro license — one purchase unlocks every Pro component, forever.
status=“ready” — 10 steps and 3 nested attempts on one 60-second clock. Colour is the kind of work, the dashed edge and its glyph are the outcome; the second track is tokens generated per step. Switch the mix to “Tokens” and the same run reads completely differently: retries are 13% of the clock and 0% of the tokens.
Agent run
Fix the off-by-one in window_end · issue #4812
run_7f31c9a2 · Atlas 4 Opus · 400K context · $6.00 / M generated tokens
Wall clock
1m 00.0s
10 steps · 3 nested attempts
Generating
30.6 s
51.0% of the run · 4 model steps
Waiting
29.4 s
49.0% of the run · tools, retries, overhead
Tokens out
4,500
$0.027 · 154 tok/s decoding
Thinking21%12.6 s
Tool call35%20.9 s
Retry13%7.6 s
Error handling10%6.0 s
Final answer20%12.0 s
Between steps1%900 ms
Wall time apportioned by largest remainder over 1m 00.0s — the six shares add to exactly 100%. Tool call leads at 35%.
Run · 10 steps · 3 attempts nested under 1 of them
4.4 s
8.2 s
shell.run · pytest -q
⊘
6.0 s
10.2 s
12.0 s
✕
✕
6401,2309501,680
010s20s30s40s50s1m
Tokens generated per step · peak 1,680 on “Patch note + summary” · bar height is the count, bar position is the step's own window
Step 5 of 10 · shell.run · pytest -qTool call
16.4 s → 29.5 s · 13.1 s · 21.8% of the run · no tokens · 3 attempts
3 attempts · landed on the third
30.6 s of this 1m 00.0s run — 51.0% — was the model generating tokens; the other 49.0% was tool calls, attempts and the clock between steps. The longest step is “shell.run · pytest -q” at 13.1 s (21.8% of the run). 1 of 10 steps had to be re-attempted, and 9.3 s — 15.5% of the run — went on attempts that did not land, plus their backoff. Retries are 13% of the clock and 0% of the tokens: re-running a tool call costs time, not generation. Each of the 4 model steps paid 340 ms of time to first token — 1.4 s of the run before a token appeared, and the 154 tok/s above is measured net of it. 3 of the 13 steps and attempts on the clock did not land — 2 failed, 1 cancelled — so colour still says what the work was while the dashed edge and its glyph say how it ended. Click a segment, or Tab to the lane and use the arrow keys, to read any step.
10 steps over 1m 00.0s · 30.6 s generating (51.0%) · 4,500 tokens out · $0.027. Offsets are on the run's own clock. Shares are of the 1m 00.0s wall clock; the 1.5% between steps belongs to no step.
Step
Kind
Status
Start
Duration
Share of run
Tokens
Detail
1. Plan the fix
Thinking
ok
0 ms
4.4 s
7.3%
640
3 sub-goals · reproduce, locate, patch
2. repo.grep · window_end
Tool call
ok
4.5 s
1.5 s
2.6%
none
17 hits across 6 files
3. file.read ×4
Tool call
ok
6.1 s
1.8 s
3.0%
none
src/agent/window.py and 3 neighbours
4. Locate the regression
Thinking
ok
8.1 s
8.2 s
13.7%
1,230
diffs the last two commits against the failing case
5. shell.run · pytest -q
Tool call
ok
16.4 s
13.1 s
21.8%
none
3 attempts · landed on the third
Attempt 1 of 3 · attempt 1
Tool call
failed
16.4 s
3.8 s
6.3%
none
exit 137 · sandbox OOM-killed
Attempt 2 of 3 · attempt 2
Retry
failed
20.9 s
3.8 s
6.4%
none
exit 137 · sandbox OOM-killed
Attempt 3 of 3 · attempt 3
Retry
ok
25.6 s
3.8 s
6.4%
none
exit 1 · 3 failed, 214 passed
6. web.search · pytest exit 137
Tool call
cancelled
29.6 s
1.1 s
1.8%
none
cancelled by tool policy · egress denied in this sandbox
7. Read traceback · classify failure
Error handling
ok
30.7 s
6.0 s
10.0%
950
off-by-one on the inclusive window bound
8. file.write · src/agent/window.py
Tool call
ok
36.8 s
760 ms
1.3%
none
1 file · +4 −3
9. shell.run · pytest -q
Tool call
ok
37.7 s
10.2 s
17.0%
none
exit 0 · 217 passed
10. Patch note + summary
Final answer
ok
48.0 s
12.0 s
20.0%
1,680
diff, rationale and the follow-up it did not take
onStepSelect is wired: click a segment, or Tab into the lane and press Enter. Last selection: nothing yet
status=“empty” — the run exists and has recorded nothing on the clock yet. Told apart from loading and from a failed fetch, and it says which input it is waiting for.
Agent run
Fix the off-by-one in window_end · queued, no steps yet
run_7f31c9a2 · Atlas 4 Opus · 400K context · $6.00 / M generated tokens
No steps on the clock yet
This chart needs a run whose steps carry measured offsets — startMs and endMs on the run's own clock — not a list of statuses. As soon as the first step reports one, the axis, the mix and the token track derive themselves.
status=“loading” — a deterministic skeleton of the same two tracks, aria-hidden, no timers involved.
Agent run
Fix the off-by-one in window_end · issue #4812
run_7f31c9a2 · Atlas 4 Opus · 400K context · $6.00 / M generated tokens
Loading agent run
status=“error” with onRetry — drop the prop and the button disappears rather than sitting there doing nothing. The header keeps the run id and the model: those are known before the trace is.
Agent run
Fix the off-by-one in window_end · issue #4812
run_7f31c9a2 · Atlas 4 Opus · 400K context · $6.00 / M generated tokens
Couldn't load this run
The trace store didn't respond.
Try again fired 0 times — wire it to your own refetch.