A terminal UI for reading Claude Code session JSONL files. Built with Go and Bubble Tea.
Reads session logs from ~/.claude/ and renders them as a scrollable conversation with expandable tool calls, token counts, and live tailing.
- Go 1.25+
- A Nerd Font patched terminal font
go install github.com/kylesnowschwartz/tail-claude@latestOr build from source:
git clone git@github.com:kylesnowschwartz/tail-claude.git
cd tail-claude
go build -o tail-claude .tail-claude --updateOr manually:
go install github.com/kylesnowschwartz/tail-claude@latestRun tail-claude to open the most recent session. If the session is stale (>12 hours), the session picker opens instead.
Pass a path directly to skip discovery:
tail-claude ~/.claude/projects/-Users-kyle-Code-foo/session.jsonltail-claude [flags] [session.jsonl]
--dump Print rendered output to stdout (no interactive TUI)
--expand Expand all messages (use with --dump)
--width N Set terminal width for --dump output (default 160, min 40)
--update Update to the latest version via go install
-v, --version Show version
-h, --help Show this help
? toggles keybind hints in any view. Ctrl+z suspends the TUI (resume with fg).
List view
| Key | Action |
|---|---|
j / k |
Move cursor down / up |
↑ / ↓ |
Scroll viewport 3 lines |
J / Ctrl+d |
Page down (half page) |
K / Ctrl+u |
Page up (half page) |
G / g |
Jump to last / first message |
Tab |
Toggle expand/collapse current message |
e / c |
Expand / collapse all Claude messages |
Enter |
Open detail view |
d |
Open debug log viewer |
t |
Open team task board (when teams exist) |
y |
Copy session JSONL path to clipboard |
O |
Open session JSONL in $EDITOR |
s / q / Esc |
Open session picker |
Ctrl+c |
Quit |
Detail view
| Key | Action |
|---|---|
j / k |
Next / previous item (or scroll) |
↑ / ↓ |
Scroll viewport 3 lines |
J / Ctrl+d |
Page down |
K / Ctrl+u |
Page up |
G / g |
Jump to last / first item |
Tab |
Toggle expand/collapse current item |
Enter |
Drill into subagent trace / toggle expand |
q / Esc |
Back to list (or pop subagent stack) |
Ctrl+c |
Quit |
Debug log viewer
| Key | Action |
|---|---|
j / k |
Move cursor down / up |
↑ / ↓ |
Scroll viewport 3 lines |
J / Ctrl+d |
Page down |
K / Ctrl+u |
Page up |
G / g |
Jump to last / first entry |
Tab |
Expand/collapse multi-line entry |
f |
Cycle level filter: All / Warn+ / Error |
/ |
Text filter (type to search, Enter to commit, Esc to cancel) |
y |
Copy debug log path to clipboard |
O |
Open debug log in $EDITOR |
q / Esc |
Clear text filter (first press) / back to list |
Ctrl+c |
Quit |
Session picker
| Key | Action |
|---|---|
j / k / ↑ / ↓ |
Navigate sessions |
G / g |
Jump to last / first session |
Tab |
Toggle preview expansion |
b |
Toggle worktree sessions (when worktrees exist) |
Enter |
Open selected session |
y |
Copy session JSONL path to clipboard |
D |
Delete session (with confirmation popup) |
q / Esc |
Back to list |
Ctrl+c |
Quit |
Click the fingerprint icon to copy the session UUID. Click ? in the footer to toggle keybind hints.
Requires just for task running.
just check # build + vet + staticcheck
just test # run tests
just run # build and launch TUI
just race # build with race detector
just dump # render latest session to stdout
just release # tag, push, create GitHub releaseParsing heuristics ported from claude-devtools. See ATTRIBUTION.md.