sessy
A two-pane TUI for browsing, searching, and resuming Claude Code sessions.
Claude Code stores 2,400+ session files as JSONL — sessy gives you instant search, conversation preview, and one-key resume instead of guessing from timestamps.
Install
If you don't have Rust installed:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Then:
cargo install sessy
Requires Rust 1.85+.
Usage
sessy # Browse sessions from current directory
sessy --all # Browse all sessions across all projects
sessy --project X # Filter to project name (substring match)
sessy --recent 7d # Only show last 7 days (supports: 1h, 7d, 2w, 1m)
sessy --print # Select and print session ID to stdout
sessy --purge # Delete all sessions < 15 KB and older than 2 days
Scripting: claude --resume $(sessy --print)
Keybindings
| Key | Action |
|---|---|
j / k or Up / Down |
Navigate sessions (wraps around) |
/ |
Search (fuzzy match across project, branch, title, last message, name) |
Enter |
Launch claude --resume in the session's original directory |
y |
Launch with --dangerously-skip-permissions (yolo mode) |
c |
Copy claude --resume <id> to clipboard |
p |
Print session ID to stdout and exit |
d |
Delete session (with confirmation) |
Tab |
Switch focus to preview pane |
Esc |
Clear search / exit search / exit preview / quit |
q |
Quit |
Session List
Each session shows three lines:
▸ Mar 13 09:49 agile-turtles main cozy-stay-init
2h12m 34.5 MB [deep] "build a tool to manage…"
└ left off: "looks good but it should…"
- Line 1: Timestamp, project name, git branch, session name (from
/renameor auto-slug) - Line 2: Duration, file size with color-coded category, first message
- Line 3: Last human message — where you left off
Size Categories
| Tag | Size | Color |
|---|---|---|
[quick] |
< 1 MB | Green |
[medium] |
1 – 10 MB | Yellow |
[deep] |
10 – 30 MB | Magenta |
[massive] |
> 30 MB | Red |
Preview Pane
Scrollable conversation showing USER: and ASST: messages. Tool use, system events, and sidechain entries are filtered out. Loaded in background with a 10-entry cache.
Performance
- Cold start (first run, ~2,400 files): ~2 seconds
- Warm start (cached index): < 100 ms
- Incremental index updates — only re-scans changed files
- Parallel scanning with rayon
How It Works
Reads JSONL session files from ~/.claude/projects/. Builds a cached index (~/.cache/sessy/index.bin) with head/tail reads — first ~10 lines for title/branch, last 8KB for the "left off" message. No full-file parsing until you preview.
License
MIT