# sessy
A two-pane TUI for browsing, searching, and resuming [Claude Code](https://claude.ai/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:
```
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
| `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 `/rename` or auto-slug)
- **Line 2**: Duration, file size with color-coded category, first message
- **Line 3**: Last human message — where you left off
### Size Categories
| `[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