Every Claude Code session you've ever run. Indexed, searchable, scrubbable.
Find that session from three weeks ago, scrub through what the agent did,
and resume it in your terminal with one paste. Local-first: it reads the
transcripts Claude Code already writes to ~/.claude/projects/
, and nothing leaves your Mac.
My own archive, as of August 2026: 114 sessions across 65 projects, half a gigabyte of JSONL, 17M output tokens, reaching back to April. Hindcast cold-indexes all of it in about 4 seconds on an M3 Pro, then keeps the index fresh as new sessions land.
hindcast-explainer.mp4 #
brew tap karanb192/tap
brew trust karanb192/tap
brew install --cask hindcast
brew install ripgrep # search engine; without it ⌘K matches titles only
xattr -rd com.apple.quarantine /Applications/Hindcast.app
Apple Silicon only for now. The xattr
step is needed because the app isn't notarized yet (Developer ID enrollment in progress); it disappears in an upcoming signed release. Prefer a download? Grab the DMG from Releases.
One thing worth doing today: Claude Code prunes transcripts by file age,
cleanupPeriodDays
in ~/.claude/settings.json
, default 30 days. Hindcast can only index what still exists. Mine is set to 60, which is why the archive above still reaches April: those sessions kept getting resumed, so their files stayed young. Raise yours before the pruner gets to your history.
⌘K search across everything: full text over every transcript, tool output included. Opening a result jumps the tape straight to the matched event.** The tape**: every event drawn as a tick (brass = you, ivory/ink = Claude, violet = thinking, teal = tools, brick = errors). Click or drag to scrub; the playhead follows your scroll.Resume from the archive: every session header has aresume
chip that copiescd -- <project dir> && claude --resume <session id>
, ready to paste into a terminal. The command is a template you can edit in place, so shell aliases work (cd {cwd} && ccr {sessionId}
if that's your thing).The Ledger: accusage-style usage and cost view: per-day / per-week / per-month tables with per-model breakdowns, estimated dollar cost at published API rates, and a last-7-days figure.Instant filtering: type-to-filter the session list by title with zero keystroke lag, plus date presets, a custom range, and a model multi-select. Filters drive both the list and the Archive stats.Export: any session to markdown or self-contained HTML (active branch, images inlined), into~/Downloads/Hindcast Exports
.Subagent reels: sessions list their subagent transcripts, including workflow-nested ones undersubagents/workflows/wf_*/
; each opens as its own tape with a back link.Dark, light, and auto themes, persisted so the window paints the right color from the first frame.
Requires Node 18+:
git clone https://github.com/karanb192/hindcast.git
cd hindcast
npm install
npm start
If Electron's binary fails to download during install (npm script protection),
run node node_modules/electron/install.js
once, then npm start
.
To install it as a proper app, npm run pack
builds Hindcast.app
into
dist/mac-arm64/
; drag it to /Applications.
Indexer(lib/scanner.js
): streams every top-level*.jsonl
transcript, extracts the session title (custom-title > ai-title > first prompt), timestamps, models, token usage, and tool counts. Results are cached by file mtime + size + format version in the app's user-data dir, and an fs.watch re-index keeps the list current while you work.Search(lib/search.js
): shells out toripgrepacross all transcripts (also matching the JSON-escaped spelling of queries containing quotes or backslashes), then re-reads only the matching lines to build snippets.Transcripts are trees, not lists: rewinds fork branches. The viewer follows theleafUuid
pointer from the transcript'slast-prompt
line (falling back to the last message), shows only the live conversation, and reports how many rewound events it hid. Renders markdown, collapsible thinking, tool cards with inline screenshot results, pasted images, compaction markers, and model-fallback notes.Usage dedup: one API response spans several JSONL lines that each repeat the same usage object, and resumed or forked sessions copy history verbatim. So usage is deduplicated globally by message id across every file, subagent transcripts included, the same approach ccusage takes. Cache reads priced at 0.1x, 5-minute cache writes at 1.25x, 1-hour writes at 2x (lib/pricing.js
). Costs are estimates of API-equivalent value, not an invoice.- The transcript format is officially internal to Claude Code, so parsing is deliberately tolerant: unknown line types and block types are skipped, never fatal.
"A reading room for machine work." Warm darkroom / warm paper palettes, New York serif for display type, SF Mono for the machine's voice, one brass accent. No neon.
Hindcast reads ~/.claude/projects/
and writes to exactly two places, both
its own: its user-data dir (index cache, theme, settings) and
~/Downloads/Hindcast Exports
when you click export. It never writes into
~/.claude/
, makes no network requests of its own, and has no telemetry. There is no API key to configure because it never calls Claude: it reads files on disk, and that's the whole trick. The 2026 back-and-forth over subscription auth for third-party agent tools (latest round) never applied to it.
- An open session doesn't show new messages until you click away and back. Deliberate: a background refresh must never move your scroll position. The session list stays live either way.
- A search match on a rewound (abandoned) branch opens the session but can't jump to the hidden event.
- Apple Silicon only.
Live streaming or monitoring of active sessions: your terminal already shows the stream. Hindcast stays a read-only archive.** Orchestration and team/cloud sync**: local-first and read-only, permanently.
Signed + notarized builds: an unsigned DMG ships today; Developer ID enrollment is pending, and thexattr
step dies with it.Bundle ripgrepso search works with zero setup.An opt-in vaultso your archive survives Claude Code's 30-day auto-cleanup.On-device semantic searchbehind the same ⌘K.
More ideas live in Issues; CONTRIBUTING.md covers the ground rules. If Hindcast dug up a session you'd already given up on, a star helps other people find it.