An fzf-powered session picker for
claude --resume.
ccsession lists every Claude Code session under ~/.claude/projects, lets
you fuzzy-find across all of your projects with a live preview pane, and
resumes the one you pick in its original working directory.
- Cross-project listing — every session from every project in one view, sorted by last activity.
- Three search modes — fuzzy (default), directory-only, and full-text grep over JSONL transcripts.
- Live preview — last 30 messages of the highlighted session, with timestamps and roles. In grep mode the matched query is highlighted in the preview so you can spot the hit at a glance.
- Faithful resume —
chdirs back to the session's originalcwdbefore exec'ingclaude --resume, so paths and tooling Just Work. - Single static binary — written in Go with only the standard library.
| Tool | Required for |
|---|---|
fzf |
interactive picker |
claude (Claude Code CLI) |
resuming sessions |
go install github.com/sorafujitani/ccsession/cmd/ccsession@latestVersion metadata is recovered from runtime/debug.ReadBuildInfo, so
ccsession --version works for go install builds as well.
Grab the ccsession_<ver>_<os>_<arch>.tar.gz for your platform from the
Releases page, extract
it, and drop the binary somewhere on your PATH:
tar xzf ccsession_0.1.0_darwin_arm64.tar.gz
install -m 0755 ccsession ~/.local/bin/If macOS Gatekeeper complains:
xattr -d com.apple.quarantine ~/.local/bin/ccsessionnix run github:sorafujitani/ccsession # one-off
nix profile install github:sorafujitani/ccsession # install into a profilebrew install sorafujitani/tap/ccsessionThe formula lives in
sorafujitani/homebrew-tap
and GoReleaser refreshes it on every tagged release. fzf is installed as a
dependency; the claude CLI must be installed separately.
ccsession # list -> fzf -> resume
ccsession list [--grep Q] [--regex] # emit TSV rows to stdout
ccsession preview [--query Q] [--regex] <id> # render the preview pane (Q highlighted)
ccsession resume <id> # chdir to the session's cwd, exec `claude --resume`
ccsession --version
ccsession --help| Key | Mode |
|---|---|
Ctrl-G |
grep — refilters by user/assistant content on every keystroke; matches are highlighted in the preview |
Ctrl-O |
dir — fuzzy match restricted to the directory column |
Ctrl-F |
fuzzy — default; matches across time / dir / label |
Enter |
resume the selected session |
Esc |
cancel |
ccsession listwalks~/.claude/projects/*/, reads the tail of each JSONL transcript in parallel, and prints one TSV row per session (id,epoch, relative time, cwd basename, label).fzfconsumes the TSV. The three key bindings swap fzf's matcher between fuzzy mode, directory-only mode, and grep mode (which reloads viaccsession list --grep <query>on every keystroke). The current query is also forwarded to the preview asccsession preview --query <query> <id>, which highlights its matches in the rendered messages.- On
Enter,ccsession resume <id>resolves the session's originalcwd,chdirs into it, andexecvesclaude --resume <id>so the resumed process fully replaces the picker.
nix develop # Go + fzf + gopls + goreleaser
go build ./cmd/ccsession
go test ./...goreleaser release --snapshot --clean --skip=publish
ls dist/nix build
./result/bin/ccsession --versionBug reports and pull requests are welcome at https://github.com/sorafujitani/ccsession. For larger changes, please open an issue first to discuss what you'd like to change.
