@yyyeader/claude-recall
v1.3.2
Published
Search and resume Claude Code sessions across all projects
Maintainers
Readme
The Problem
You've been deep in a Claude Code session — debugging, architecting, iterating. You close the terminal, switch projects, and when you come back:
$ claude --resume abc123
No conversation found with session ID: abc123Claude Code's /resume only searches the current directory. If you're not in the exact same folder where the session was created, it's invisible.
You know the session exists somewhere in ~/.claude/projects/, but good luck finding it manually across dozens of encoded directories.
The Solution
npm install -g @yyyeader/claude-recallclaude-recall debug # Find that debugging session from last week
claude-recall # Browse everything with fzf
claude-recall -j | jq # Pipe JSON to your own toolsclaude-recall scans all your Claude Code sessions, lets you search by keyword, and gives you the exact command to resume — from any directory.
Quick Start
1. Install
npm install -g @yyyeader/claude-recall2. Add the shell wrapper (recommended)
Add to your ~/.zshrc or ~/.bashrc:
cr() {
local cmd
cmd=$(claude-recall "$@" 2>/dev/null | tail -1)
if [ -n "$cmd" ] && echo "$cmd" | grep -q "^cd "; then
eval "$cmd"
fi
}3. Use it
cr # Browse all sessions with fzf
cr e2b # Search + select + auto cd + resume
cr terraform # Find that infra session from days agoOne command. Search, select, resume. Done.
All Options
claude-recall [keyword] Interactive search (fzf)
claude-recall -l [keyword] List mode (no interaction)
claude-recall -j [keyword] JSON output (for scripting)
claude-recall -p <project> Filter by project name
claude-recall -n <number> Limit results (default: 50)
claude-recall -h HelpHow It Works
Claude Code stores sessions as JSONL files in ~/.claude/projects/, with directory names like:
-Users-you-projects-my-cool-app → /Users/you/projects/my-cool-appThe catch? - could be a path separator OR part of a directory name (e2b-infra, my-cool-app). Simple string replacement breaks.
claude-recall uses a greedy path resolution algorithm: it tries the longest possible directory name first, checks if it exists on disk, and falls back to shorter segments. This correctly resolves ambiguous paths like:
-Users-you-work-e2b-infra → /Users/you/work/e2b-infra (not /work/e2b/infra)Then it stream-parses each JSONL file, extracts user messages as summaries, and presents everything through fzf for instant fuzzy search.
Requirements
- Node.js >= 18
- fzf — optional but recommended (falls back to built-in selector)
Contributing
Issues and PRs welcome. This is a simple tool — the best contributions are bug fixes, platform compatibility improvements, and better session parsing.
License
MIT
