Claude Code: fuzzy-search every session you've ever had

Two weeks ago Claude and I worked out why our staging deploys were flaky. Today it's happening again, and the answer is sitting in some session transcript on my disk. Which one? No idea. I remember a phrase from the conversation, not a session title.

Claude Code's own picker doesn't help here. claude --resume lists recent sessions for the current project, by title. If the title doesn't ring a bell, you're done. The transcripts themselves are JSONL files under ~/.claude/projects/, so the fallback is grepping JSON-encoded lines by hand and copy-pasting session ids into --resume. I did that maybe three times before deciding it was a tooling problem.

The palette

I run my agents inside herdr (the terminal-native agent multiplexer from the previous post), so I built the fix as a herdr plugin: herdr-agent-palette. Press a key, type what you remember, land where it was said. It fuzzy-searches your live panes and their scrollback too, but the section that fixed this particular pain is sessions: every Claude Code session on disk, searched by full transcript content. Not titles. Content.

The palette searching "staging deploy flaky" across sessions: a list of sessions on the left, each led by how long since it last moved and an open/closed marker, and a transcript preview on the right with the matched words highlighted.

Each row leads with how long since the session last moved and whether it's still open () or already closed (); the preview shows the conversation with the query highlighted. Enter jumps to an open session's pane, and resumes a closed one in a fresh workspace, cwd set to where it ran. So: type staging deploy flaky, hit Enter, and ask the two-week-old session "that deploy fix, apply it here too".

That last part is what changed how I use it. Old sessions stopped being an archive I dig through and became something I casually jump back into.

It's a self-contained curses TUI, Python standard library only, with a clean-room fzy-style matcher that folds diacritics (Matejcek matches Matějček, which matters more than you'd think in a Czech codebase). Install is one command; the keybinding and the resume-command override (useful if you run multiple accounts) are in the README.

The transcripts were on disk all along. All they were missing was a search box.