57dc91585d
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.
62 lines
2.6 KiB
Markdown
62 lines
2.6 KiB
Markdown
---
|
||
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.
|