Internal SmartGift build of a Claude Code monitoring dashboard. Lanes: a durable unit of parallel agent work, one per working directory, tracked across session restarts. Managed lanes are git worktrees the dashboard provisions and can reset or remove behind a three-check destroy guard and a counted preflight; adopted lanes are directories you already own and are never destroyable. Pipelines: a lane moves through pipeline stages. A stage the agent declares with evidence renders green; a stage inferred from the tool-event stream renders dashed amber and never counts as done. Detection is forward-only within a 30-minute window, and never writes the declared stage. Workspace: one page at /run with a lane grid, the selected lane's pipeline, and a full Claude console behind a disclosure.
2.6 KiB
description
| description |
|---|
| Render an ordered timeline of one Claude Code session's events (every event type) with per-event durations and tool names, reconstructed from Agent Monitor data. Pairs PreToolUse with PostToolUse to compute tool durations and surfaces gaps, errors, and compaction points. Use when reconstructing what happened in a session step by step. |
Session Timeline
Reconstruct the chronological event timeline of a single Claude Code session.
Input
The user provides: $ARGUMENTS
- A session ID to time-line, or
- "latest" / "last" for the most recent session.
Data Sources
| Endpoint | Returns |
|---|---|
GET /api/sessions/:id |
session header: status, model, cwd, started_at, ended_at, cost, metadata (thinking_blocks, turn_count, total_turn_duration_ms) — and nested events |
GET /api/events?session_id=X |
the full event stream: event_type (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, Notification, Compaction, APIError, TurnDuration), tool_name, summary, data, timestamp |
Report Sections
1. Resolve & header
If "latest", GET /api/sessions?limit=1 to get the id, then GET /api/sessions/:id.
Print a one-line header: id, status, model, cwd basename, started_at → ended_at,
turn_count, total_turn_duration_ms, cost.
2. Build the ordered timeline
GET /api/events?session_id=X. Sort strictly by timestamp. For each event emit a
row with: relative offset from started_at (e.g. +00:03.412), event_type,
tool_name (when present), and a one-line summary.
3. Compute durations
Pair each PreToolUse with its matching PostToolUse (same tool_name, next
occurrence) and show the tool's wall-clock duration. For TurnDuration events use
the recorded duration directly. Flag any PreToolUse with no matching PostToolUse
as unclosed.
4. Annotate notable points
Mark APIError (❌), Compaction (⚠️ context compressed), SubagentStop
(subagent finished), Notification (ℹ️), and any timeline gap > 30s between
consecutive events as an idle window.
5. Tallies
Event count by type, total tool time vs. session wall time, and the longest single tool call.
Output
A Markdown table — offset | event_type | tool_name | duration | summary — in
strict timestamp order, preceded by the header line and followed by the tallies.
Durations in ms or mm:ss.mmm; currency as USD to 4 decimal places. Never invent a
duration when a PostToolUse is missing — label it unclosed. If the dashboard is
unreachable, tell the user to start it with npm start from the repo root.