Browse and resume your Claude Code conversations from a tiny terminal picker.
Each conversation gets an emoji (keyword-based, stable), its first prompt as
title, the project it belongs to, and its age. Hit Enter to resume it with
claude --resume from its original working directory.
clres · 19/36 conversations ↑↓ move · Enter resume · t title · a all · q quit
🖥️ ✨ Terminal browser for Claude Code conversations my-tools 2m
🐛 ✨ Fix flaky integration test on CI backend 3d
📚 ✨ Sphinx docs landing page refresh docs-site 5d
...
git clone https://github.com/BelCorentin/clres ~/git/clres
~/git/clres/install.sh # adds `alias clres=...` to ~/.zshrcAdds a /clres slash command that lists conversations inside a session:
claude plugin marketplace add ~/git/clres
claude plugin install clres@clres| invocation | behavior |
|---|---|
clres |
interactive curses picker |
clres --all |
include tiny + headless convos (bare /model, sdk bots) |
clres --index |
haiku-title every untitled real conversation |
clres --summarize |
haiku-summarize every real conversation |
clres --list |
plain table (also used when piped) |
clres --json |
machine-readable dump |
/clres |
list inside a Claude Code session (plugin) |
↑/↓orj/k— move ·g/G— top/bottom · PgUp/PgDn/— search (title + project + summary),Enterkeeps filter,EsccancelsEnter— resume ·s— summary popup ·t— re-title ·q— quitm— flag/unflag 🔖 "might come back" on the highlighted sessionc— toggle the focused view (🔖-flagged + recent ⇄ recent + old)a— show hidden (tiny/headless) too
Each row shows the session's git branch (⎇ branch, @worktree if a linked
worktree) and a 🔖 when it's flagged to come back to.
The picker opens on the focused view: sessions you flagged 🔖 to come back
to (via m), plus anything touched in the last 24 h — so active work is never
hidden. c widens it to older sessions; a (or --all) additionally reveals
tiny/headless ones, dimmed. The 🔖 flag is a marker file at
~/.claude/comeback/<session-id>, so it persists across runs and machines.
Titles prefer the live session-state goal (~/.claude/goals/<sid>.json, written
by the session-state.sh hook) over the raw first prompt when no t-generated
title is cached — the same clean goal shown in the statusline, ntfy, and ccview.
--index (or t on a row) sends the first user prompt + last assistant
message of a conversation to claude --model haiku -p and caches the
returned title in ~/.cache/clres/titles.json (marked ✨ in the list).
--summarize (or s on a row) does the same for a 2-3 sentence summary,
shown in the status bar / a popup and included in search. Only real
conversations with ≥ CLRES_MIN_ENTRIES (15) transcript entries are
auto-indexed. The titler's own headless sessions are corralled into a
throwaway /tmp/clres-titler project and deleted, so they never pollute
the list or claude --resume.
Tunables (env): CLRES_MIN_TITLE (20 chars — hide shorter titles),
CLRES_MIN_ENTRIES (15), CLRES_MODEL (haiku).
Each conversation is tagged with a research-project slug (mindsentences,
distraction, lppreadlisten, fusion, sevenT, syntax, config, obsidian,
personal, else misc) inferred from its cwd → branch → title via the ordered
PROJECT_RULES table (mirrors ccview). Classified rows show the project
emoji + a coloured project label; p cycles a project filter (header shows
the active one). Search (/) still matches the raw cwd basename too.
Reads ~/.claude/projects/*/*.jsonl transcripts (honors
CLAUDE_CONFIG_DIR), takes the first real user prompt as the title
(slash commands are unwrapped, hook/system noise skipped), sorts by file
mtime. No dependencies beyond Python 3.10+ stdlib.