Skip to main content

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-browse only)
  • 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

claude_browse-1.2.0.tar.gz (31.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

claude_browse-1.2.0-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

Details for the file claude_browse-1.2.0.tar.gz.

File metadata

  • Download URL: claude_browse-1.2.0.tar.gz
  • Upload date:
  • Size: 31.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for claude_browse-1.2.0.tar.gz
Algorithm Hash digest
SHA256 cefcf02a96d14b661c0c5017e75214e1b82549f7a37af1527b8fcff297ca6836
MD5 b2758f8e99504b221f4e195a275618ed
BLAKE2b-256 26c82c67ef8daa3712b97dbec2dc966bc8fad8a4f0d18cfcf3df99219a326854

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_browse-1.2.0.tar.gz:

Publisher: publish.yml on fortytwode/claude-browse

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file claude_browse-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: claude_browse-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 21.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for claude_browse-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a41db678af550b158574aef6f363dd3be9baf92e466eaa240271c2b767f4bcb3
MD5 b561237515c8c32cb18468dd924e035c
BLAKE2b-256 9850ceba5477759b1ff1ecda88bcde9a8c740f256abfa60082caa83e0b8c08cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_browse-1.2.0-py3-none-any.whl:

Publisher: publish.yml on fortytwode/claude-browse

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page