Interactive terminal viewer for Copilot CLI sessions and waza evaluation transcripts. Built as a single-file .NET 10 app

Requires the .NET 10 SDK.
dnx dotnet-replay # Browse your recent Copilot CLI sessionsNo install needed — dnx downloads the tool to the NuGet cache, runs it, and cleans up.
dotnet tool install -g dotnet-replayOnce installed globally, run replay directly from any directory.
dotnet new tool-manifest # if you don't already have one
dotnet tool install dotnet-replayWith a local install, use dotnet replay instead.
replay # Browse recent Copilot CLI and Claude Code sessions
replay <session-id> # Open a session by GUIDRun with no arguments to interactively browse your Copilot CLI and Claude Code sessions. Sessions are loaded asynchronously and can be filtered with /.
replay <file> # Interactive pager with keybindings
replay <file> --tail 10 # Show only the last 10 turns
replay <file> --expand-tools # Show tool args, results, and thinking
replay <file> --full # Don't truncate long content
replay <file> --filter user # Filter by event type (user, assistant, tool, error)
replay <file> --no-color # Disable ANSI colors
replay session.jsonl --no-follow # Disable auto-follow for JSONL filesNote:
dotnet replayalso works if you prefer the explicit prefix.
Auto-follow: JSONL files automatically watch for new content (like
tail -f). Use--no-followto disable this behavior.
replay <file> --stream # Output entire transcript and exit
replay <file> | less # Auto-switches to stream mode when pipedreplay <file> --json # Output as structured JSONL
replay <file> --json --filter user # JSON output of user messages only
replay <file> --json --tail 5 # JSON output of last 5 turns
replay <file> --json --expand-tools # Include tool args/results in JSON
replay <file> --summary # Show high-level session statistics
replay <file> --summary --json # Summary as machine-readable JSONJSON output format — One JSON object per line:
{"turn": 0, "role": "user", "timestamp": "2026-02-20T02:07:54Z", "content": "...", "content_length": 1234}
{"turn": 0, "role": "assistant", "timestamp": "2026-02-20T02:08:12Z", "content": "...", "content_length": 5678, "tool_calls": ["skill", "view"]}
{"turn": 0, "role": "tool", "tool_name": "view", "status": "complete", "result_length": 2048}Summary output shows session overview: duration, turn counts, tools used, skills invoked, and errors.
- Copilot CLI events (
.jsonl) — Session transcripts from GitHub Copilot CLI - Claude Code sessions (
.jsonl) — Session transcripts from Claude Code (~/.claude/projects/) - Waza evaluation results (
.json) — EvaluationOutcome format withtasks[].runs[].transcript[] - Waza task transcripts (
.json) — Flat JSON withtranscript[]array and optionalsession_digest
| Key(s) | Action |
|---|---|
| ↑ or k | Scroll up one line |
| ↓ or j | Scroll down one line |
| ← or h | Scroll left (pan horizontally) |
| → or l | Scroll right (pan horizontally) |
| PgUp | Page up |
| PgDn | Page down |
| 0 | Reset horizontal scroll |
| Space | Page down |
| g or Home | Jump to start of transcript |
| G or End | Jump to end of transcript |
| t | Toggle tool expansion (show/hide args, results, and thinking) |
| f | Cycle filter: all → user → assistant → tool → error |
| i | Toggle session info overlay |
| / | Enter search mode |
| n | Jump to next search match |
| N | Jump to previous search match |
| r | Resume session (launches copilot --resume or claude --resume) |
| b | Browse sessions (return to session browser) |
| q or Esc | Quit |
View an interactive transcript:
replay session-events.jsonlView the last 5 turns with tool expansion:
replay results.json --tail 5 --expand-toolsStream the entire transcript without interaction:
replay transcript.json --streamPipe to a file:
replay session.jsonl --expand-tools > output.txtdotnet-replay was built by a squad currently in stealth mode.
MIT