The problem
Claude Code writes a JSONL file for every session you run. After a few weeks you have hundreds of these files in ~/.claude/projects/. Every conversation, every tool call, every diff, every task — all recorded, all unsearchable.
I kept hitting the same wall: I knew I'd solved something two weeks ago, but couldn't find which session. No built-in search. No way to see token usage across projects. No overview of pending tasks. The data is right there on disk, and you can't do anything with it.
So I built Claude Code Sessions.
What it does
A Claude Code plugin that reads your session files (read-only) and gives you two interfaces:
11 skills you use directly in Claude Code:
-
/session-search "database migration"— full-text search across every session -
/session-stats— token usage, model distribution, tool breakdown -
/session-tasks— find pending and orphaned tasks across all projects -
/session-resume— generate a context recovery prompt from any past session -
/session-diff— compare two sessions side by side - Plus
/session-timeline,/session-list,/session-detail,/session-export,/session-cleanup,/session-delete
A web dashboard at localhost:3000:
Four views: Dashboard (summary stats, recent sessions, pending tasks), Sessions (sortable table with bulk operations), Search (full-text with context snippets), and Tasks (grouped by status with orphan detection). Click any session to see its full transcript, tool usage breakdown, and token consumption.
How it's built
Four TypeScript files, stacked in layers:
formatters.ts — pure utilities, no I/O
session-parser.ts — parses one JSONL file into structured data
session-store.ts — scans all sessions, aggregates, searches
server.ts — HTTP endpoints + static file serving
The same modules power all three interfaces. The skills import from session-parser and session-store. The dashboard API imports from the same modules. Each lib file also doubles as a CLI — bun run lib/session-store.ts search "query" works directly.
One codebase, three access patterns, no duplication.
The plugin also detects resumed sessions. When you use claude --resume, Claude Code creates a new JSONL file with no metadata linking to the original. I reverse-engineered three detection heuristics from the JSONL format to identify these and show a banner in the UI so transcripts don't look broken.
Install
Two commands:
/plugin marketplace add apappascs/claude-code-sessions
/plugin install claude-code-sessions@claude-code-sessions
No API keys. No config. It reads what's already on your disk.
For the dashboard:
bun run ui
# → http://localhost:3000
The repo is at github.com/apappascs/claude-code-sessions. MIT licensed.

Top comments (0)