Two views over /api/operations. Screens are the real component against the run the
operator described: my-claude creates poet, tasks it, then waits for the result.
One call per line. show user calls is off, so what is left is what the agents did
to each other. The GET rows are waits that resolved, carrying the time
they blocked for.
Callers above the agents they call. Solid arrows are work going out, dashed ones are waits coming back — shaded from where the wait was issued to where it resolved. A create ends in an open mark and the lane is faint before it, because that agent did not exist yet. Clicking a call keeps its card open; the body is shown as it was sent, with the checksum still beside it so a repeated prompt stands out.
Even spacing is the default and keeps a sparse trace readable. By the clock, a burst bunches up and a quiet stretch opens out — so you drag across the plot to zoom into the part you care about. The selection names its range while you drag it.
The axis ends name the slice, the bar says 10:31:54 → 10:34:19 · 4 of 8 calls, and
reset zoom (or a double-click) puts it back. Lanes stay honest inside the window: one born before it is
solid across it, one born after is faint, and a wait that started outside still draws its span up to the edge.
Brushing is mouse and pen only — a horizontal drag on a phone is how you scroll, so touch is left alone.
Each entry now keeps the call whole, so a file write is hundreds of thousands of characters on one line. Nothing is cut on disk — the viewer decides how much to paint, and says how much it is holding back. The list row for the same call is a size on one line.
operations.jsonl lives on the bucket, is append-only, has no rotation, and stores every API call
in full — bodies included. Yesterday it held no content at all.
req.body to record.