A terminal UI tool for browsing and deleting Claude Code chat history.
Fork note: this fork adds
ChatManager.ts, a non-interactive Bun CLI that exposes the same browse/delete capabilities through flags instead of a TTY — so it can be driven by scripts or an AI agent. See Non-interactive CLI below.
Claude Code stores conversation logs as JSONL files under ~/.claude/projects/ and provides no tools to manage/clear AI session history, which makes it painful to go back to something. This tiny app provides an interactive console interface to explore those conversations by project, view details, and delete ones you no longer need.
- Browse conversations grouped by project
- View conversation title, date, and first message
- Inspect conversation details
- Delete conversations (with confirmation prompt)
- Keyboard-driven navigation
- Download the 2MB binary from the releases page (MacOS arm64 or win-x64)
chmod +xthe binary- run the binary
./ClaudeChatManager(if Gatekeeper prevents you from launching it on a Mac, open "System Settings → Privacy & Security", scroll down to "Security", click "Open anyway" next to the app)
Use arrow keys to navigate, Enter to view details, Delete/Backspace to remove a conversation, and Esc to go back.
- .NET 10 SDK or later
I don't have access to a Linux machine at the moment (only Mac/Win) so haven't built a linux version. If you'd like to run on Linux, - install .NET SDK and build it your self
dotnet build --project ClaudeChatManagerRun from sources
dotnet run --project ClaudeChatManagerTo publish a compiled native AOT binary:
dotnet publish ClaudeChatManager -c ReleaseA flag-driven Bun port of the same browse-and-delete functionality, designed to be driven by scripts or an AI agent (no TTY required). Single file, zero runtime dependencies.
bun ChatManager.ts list # all projects (chat count, size)
bun ChatManager.ts list <substring> [--limit N] # conversations in matching project(s)
bun ChatManager.ts show <id> # details (id = session-id prefix)
bun ChatManager.ts delete <id...> [--yes] # delete by id; dry-run without --yes
bun ChatManager.ts prune <filters> [--yes] # bulk delete; dry-run without --yesprune filters: --project <s> --older-than <days> --max-messages <n> --title <s> --keep-last <n>. At least one filter is required — refusing to prune without filters is a deliberate safety guard.
Global flags: --json (machine-readable), --yes / -y (actually delete; default is dry-run).
Safety properties: all deletes are dry-run by default; prune without filters refuses to run; companion subagent directories are only removed when their name exactly matches the session-id stem (so directories like memory/ are never touched).