Browse, search, resume, and analyze your Claude Code sessions locally.
Claude Code stores session history as JSONL files in ~/.claude/projects/. This app turns that local history into a searchable SQLite index and a desktop dashboard for finding conversations, reopening work, and understanding token usage, model usage, cost estimates, and activity over time.
- Claude Code only
- Local-first
- No cloud backend
- No account
- No telemetry upload
- Find old Claude Code sessions fast
- See the latest activity first
- Preview transcripts before reopening them
- Resume a session with
claude -r <session-id> - Understand token usage, estimated cost, model mix, and active time
- Keep everything on your machine
uv tool install claude-session-dashboard
claude-session-dashboard-init
claude-session-dashboardor:
pipx install claude-session-dashboard
claude-session-dashboard-init
claude-session-dashboardgit clone https://github.com/Vinix24/claude-conversation-manager.git
cd claude-conversation-manager
./install.sh
./run.shinstall.sh will:
- Create a local virtual environment
- Install the app and its dependencies
- Build the initial SQLite index from
~/.claude/projects/ - Create convenience commands in
~/.local/bin/ - On macOS, install a
launchdjob that reindexes every 30 minutes and on file changes
If ~/.claude/projects/ does not exist yet, install still succeeds. The app opens with an empty state and you can reindex later after Claude Code has created local session files.
- Search sessions across projects
- Browse sessions in a folder tree
- Sort by newest first or oldest first
- Open a transcript preview with markdown rendering
- Resume in Terminal, iTerm, Warp, or by copying the manual command
- Export a session as Markdown or JSON
- Total tokens
- Estimated total cost
- Total sessions
- Active days
- Unique active time and summed active time
- Average active time per active day
- Top models used
- Daily tokens
- Daily cost estimate
- Daily active time
- Model usage over time
- Session size distribution
- Weekday and hour usage patterns
- Heaviest sessions table
By default the app reads Claude Code sessions from:
~/.claude/projects/That matches the standard Claude Code location. You only need to change it if you intentionally store Claude Code data somewhere else.
If the folder does not exist yet, the dashboard still launches. You will just see an empty state until Claude Code has written session history locally.
After installing, you can run:
claude-session-dashboardIf you installed via repo and prefer the script:
./run.shManual reindex:
claude-session-indexForce a full rebuild:
claude-session-index --forceConfiguration is stored at:
~/.config/claude-session-dashboard/config.yamlExample:
claude_projects_dir: ~/.claude/projects
project_filters:
skip_subdirs: scheduled_jobs, subagents
file_browser_root:
terminal: auto
window_width: 1560
window_height: 980Notes:
claude_projects_dir: override the default Claude Code sessions locationproject_filters: optional folder-name filters if you only want a subset of projects indexedskip_subdirs: folder names to ignore while scanningfile_browser_root: optional root for the built-in file browser panelterminal:auto,terminal,iterm,warp,vscode,system, orwindowscustom_css_path: optional custom CSS file to override branding colors and styles
Legacy config at ~/.config/claude-conversation-manager/config.yaml is still read automatically if it already exists.
Add a custom CSS file and point to it in config:
custom_css_path: ~/.config/claude-session-dashboard/custom.cssThat file is injected after the built-in styles, so your colors and typography override the defaults. The simplest way to rebrand is to override the CSS variables in the :root block.
Estimated cost is clearly labeled as an estimate.
- It is derived from recorded Claude model usage in your local session files
- It uses published Claude API token pricing for recognized models
- Unknown or synthetic model identifiers are excluded from the pricing estimate and tracked as uncovered tokens
The dashboard shows pricing coverage so you can judge how complete the estimate is for your local history.
This app does not require a separate token or cost tracking package.
- Claude Code session files already include usage metadata in current transcript formats
- The dashboard reads that local metadata directly from the JSONL files
/statuslinescripts can be useful for live terminal display, but they are not required for historical indexing or the dashboard
Runtime data stays out of the repo by default:
- Indexed database lives in
~/.claude/conversation-index.db - Config lives in
~/.config/claude-session-dashboard/config.yaml - Shell shortcuts live in
~/.local/bin/ - macOS auto-indexer plist lives in
~/Library/LaunchAgents/ - Local repo-only artifacts like
.venv/are gitignored
This app reads your local Claude Code history. It does not upload it anywhere.
- Python 3.10+
- Claude Code installed and in use
- A populated
~/.claude/projects/directory for full results - macOS for built-in
launchdauto-indexing and native AppleScript terminal integration - Windows works for browsing and dashboard usage; resume-in-terminal uses Windows Terminal or PowerShell when available
Linux browsing and dashboard usage work as well. Resume-in-terminal includes a Linux fallback for common terminal launchers, but the polished install path is still macOS-first today.
~/.claude/projects/ Claude Code JSONL session files
|
indexer.py Parses JSONL -> SQLite
|
~/.claude/conversation-index.db Search + analytics database
|
app.py + pywebview Desktop app
|
templates/index.html Dashboard and conversation manager UI
Main modules:
indexer.py: indexing, schema migration, and usage metadata extractionclaude_models.py: model normalization and pricing estimatesdashboard_data.py: normalized dashboard and detail payloadsapp.py: desktop API for the frontendtemplates/index.html: single-file UI
Make sure Claude Code has already written local transcripts to ~/.claude/projects/. If needed, run:
claude-session-index --forceNo. Current Claude Code transcript formats already include usage metadata in the JSONL files.
Yes:
claude -r <session-id>MIT

