Find and resume past Claude Code sessions from the terminal. Interactive fzf browser with preview pane.
Project description
claude-browse
Find and resume past Claude Code sessions from the terminal. Interactive fzf browser with a preview pane, fuzzy search across folders and first messages, one-key resume.
[demo GIF goes here — 10–15s: open, filter, preview, resume]
claude-browse
Sessions >
45m ago team-ops 22msg finalize pre-flight smoke tests ###abc…
3h ago claude-br 7msg roadmap for shipping v1 ###def…
Apr 19 sales 14msg draft proposal for acme co ###ghi…
Apr 17 web 3msg why is signup failing on safari ###jkl…
...
No network. No accounts. No API calls. It reads ~/.claude/projects/ and
gives you a fast way to find and resume conversations. That's it.
Install
With pip (recommended once the package is on PyPI)
pip install claude-browse
From source
git clone https://github.com/fortytwode/claude-browse.git
cd claude-browse
./install.sh
External dependency — fzf
claude-browse uses fzf for the
interactive UI. Install it once via your system package manager:
brew install fzf # macOS
sudo apt install fzf # Debian / Ubuntu
sudo dnf install fzf # Fedora / RHEL
sudo pacman -S fzf # Arch
sudo apk add fzf # Alpine
claude-resume is a plain terminal prompt — it works without fzf.
Requirements
- Python 3.9+
- fzf (for
claude-browseonly) - Claude Code (obviously — otherwise there are no sessions to browse)
Usage
claude-browse — interactive TUI
claude-browse # most recent 100 sessions
claude-browse --all # every session you've ever run
claude-browse --here # only sessions started in the current directory
claude-browse --no-canonicalize # show raw cwds (see "Cross-machine" below)
While the TUI is up:
| Key | What it does |
|---|---|
| Type | Fuzzy-filter on date, folder, first message |
| ↑ ↓ | Move between sessions |
| Shift-↑ Shift-↓ | Scroll the preview pane |
| Enter | Resume (yolo — --dangerously-skip-permissions) |
| Ctrl-S | Resume in safe mode |
| Esc | Quit |
claude-resume — keyword resume without the TUI
claude-resume <session-id> # resume by exact UUID
claude-resume <keyword> # search sessions, pick, resume
claude-resume --last [N] # pick from N most recent (default 10)
claude-resume --yolo <keyword> # resume with skip-permissions
claude-resume --here <keyword> # only sessions from current dir
claude-resume <kw> -- --model sonnet # extra flags passed through to claude
Useful when you remember a keyword from the conversation and don't want to leave your shell.
Why
Claude Code already has claude --resume, which pops up a picker listing your
recent sessions. claude-browse is better at two things:
- Fuzzy search across all your sessions, not just the last few. Type any word from any past conversation, any folder name, any relative date — find it.
- Preview before you resume. See where the conversation ended up (latest messages first) so you pick the right thread, not a stale one.
If you live in tmux and start a lot of Claude Code sessions across
different projects, this is the tool.
Cross-machine setup (Mac ↔ Linux)
If you sync ~/.claude/projects/ between a Mac and a Linux box (Syncthing,
rclone, etc.), session cwds recorded on one machine won't match the other
(/Users/<name> vs /home/<name>). By default claude-browse
canonicalizes both to $HOME, so the same project shows up once, not
twice. Pass --no-canonicalize to see raw paths.
For custom path aliases (corporate devcontainers, Windows drives, etc.), set an environment variable:
export CLAUDE_BROWSE_PATH_ALIASES="/workspaces/repo=$HOME/repo"
# multiple pairs separated by :
export CLAUDE_BROWSE_PATH_ALIASES="/Volumes/Work=$HOME/work:/mnt/c/code=$HOME/code"
Short folder names
If your sessions all live under a monorepo, you can set
CLAUDE_BROWSE_FOLDER_PREFIXES to strip common prefixes from the folder
column:
export CLAUDE_BROWSE_FOLDER_PREFIXES="monorepo/apps/:monorepo/lib/"
Troubleshooting
fzf: command not found
Install fzf via your package manager (see Install section above).
No sessions found
You haven't run claude yet — or your sessions are in a non-standard
location. claude-browse reads ~/.claude/projects/. If yours is elsewhere,
file an issue.
Original folder no longer exists
The directory you ran that session from has been deleted or moved. You can
still resume with claude --resume <session-id> manually from any cwd.
Resume opens but the session looks empty
The session file may be in a different encoded-directory than Claude Code
expects for the current cwd. See the cross-machine section for context. A
proper fix is on the roadmap as part of the claude-sync companion tool.
How it works
Claude Code writes each session as a JSONL file under
~/.claude/projects/<encoded-cwd>/<uuid>.jsonl. claude-browse walks that
directory, extracts metadata (date, folder, first user message, message
count), and hands it to fzf. When you pick one, it cds back to the
session's original cwd and runs claude --resume <uuid>.
No data leaves your machine. No telemetry. No API calls. The whole thing is ~500 lines of stdlib Python.
See ROADMAP.md for what's planned, what's out of scope, and
the direction for the paired claude-sync and claude-browse-web projects.
Contributing
Small, focused PRs welcome. See CONTRIBUTING.md for how to run tests and what's in/out of scope.
License
MIT — © 2026 Shamanth Rao
Related work and future products
This is the free, local, single-machine tool. The paid companion products (cross-device sync + mobile/web browsing + AI search across sessions) are tracked in ROADMAP.md. If you want to know when they ship, star the repo or open a discussion — a waitlist will go up close to launch.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file claude_browse-1.2.2.tar.gz.
File metadata
- Download URL: claude_browse-1.2.2.tar.gz
- Upload date:
- Size: 33.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
202ce4e02b2f675f8ca24fd36916eb8361c4f109a65d32a4a69bb013e4a07b91
|
|
| MD5 |
72e258d30eb34066d37c5a937943b87f
|
|
| BLAKE2b-256 |
3ea544fc5bc5761ddc2e2e5f56bedf80e847c8a8852e765c3ac67c6949d66648
|
Provenance
The following attestation bundles were made for claude_browse-1.2.2.tar.gz:
Publisher:
publish.yml on fortytwode/claude-browse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
claude_browse-1.2.2.tar.gz -
Subject digest:
202ce4e02b2f675f8ca24fd36916eb8361c4f109a65d32a4a69bb013e4a07b91 - Sigstore transparency entry: 1431567149
- Sigstore integration time:
-
Permalink:
fortytwode/claude-browse@69f423f6f6424765c76a13acead6f383837598e8 -
Branch / Tag:
refs/tags/v1.2.2 - Owner: https://github.com/fortytwode
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69f423f6f6424765c76a13acead6f383837598e8 -
Trigger Event:
release
-
Statement type:
File details
Details for the file claude_browse-1.2.2-py3-none-any.whl.
File metadata
- Download URL: claude_browse-1.2.2-py3-none-any.whl
- Upload date:
- Size: 22.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3f57b4f16ab93a4d9e36cbe32ec1e148c7f79bf5a4084b0da03fa7c12611a0b
|
|
| MD5 |
c18cd924da119c7b4207c0c06c0e4133
|
|
| BLAKE2b-256 |
cc0b56aa6fa2f6aa343c310e65a618d283b02a4287d41068ee8359b562c85ec8
|
Provenance
The following attestation bundles were made for claude_browse-1.2.2-py3-none-any.whl:
Publisher:
publish.yml on fortytwode/claude-browse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
claude_browse-1.2.2-py3-none-any.whl -
Subject digest:
e3f57b4f16ab93a4d9e36cbe32ec1e148c7f79bf5a4084b0da03fa7c12611a0b - Sigstore transparency entry: 1431567237
- Sigstore integration time:
-
Permalink:
fortytwode/claude-browse@69f423f6f6424765c76a13acead6f383837598e8 -
Branch / Tag:
refs/tags/v1.2.2 - Owner: https://github.com/fortytwode
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69f423f6f6424765c76a13acead6f383837598e8 -
Trigger Event:
release
-
Statement type: