The flame graph

The same run as the event log, laid against time. It answers the question no log answers quickly: where did the time go?

The Trace pane showing a minimap above a time axis, with the session span across the top and kernel:run, cognet:tick, cognet:phase:invoke and kernel:engine spans nested beneath it

Every bar is a span the runtime opened and closed. Width is duration, and nesting is what spawned what — so the picture is the run's actual structure, not an arrangement chosen for display.

The stack

A turn nests the same way every time:

session                        the whole conversation
└─ kernel:run                  one wake
   └─ cognet:tick              one pass of the loop
      └─ cognet:phase:invoke   the phase that calls a model
         └─ kernel:engine      the call itself, named with its model

Reading down tells you which layer owns the time. Reading across tells you how many turns it took. A kernel:run with several cognet:tick children is an agent that went round more than once — it acted, saw the result, and thought again.

The minimap above the axis is the whole session; the panel below is whatever window you have selected in it. On a long run that is the difference between a wall of slivers and a readable graph.

Shapes worth recognising

The picture is legible before you read a single label.

A tight sequence of short spans is a healthy loop — call, act, call, done.

One enormous bar with nothing under it is an agent thinking with no tools. Usually the tools were never in scope, which the engine pane will confirm in a second.

A staircase of near-identical spans is a loop that is not converging: the same phase, the same duration, over and over, because each pass learns nothing the last one didn't.

Long gaps between spans are time nobody is accounting for — usually a capsule command waiting on something outside the agent.

Why it is trustworthy

The spans come from kernel:* telemetry, which the runtime emits around every engine call, tool and command. It is not sampled and not reconstructed from log lines — a bar exists because the runtime opened a span, and its width is the duration it recorded.

That also means it works for any agent. A custom cognet gets the same graph as a stock one without knowing this pane exists.


Next: Engine — what the model received inside that biggest bar.