cd /news/developer-tools/show-hn-hindcast-search-replay-and-r… · home topics developer-tools article
[ARTICLE · art-92081] src=github.com ↗ pub= topic=developer-tools verified=true sentiment=↑ positive

Show HN: Hindcast (search, replay, and resume any Claude Code session on Mac)

Hindcast, a new Mac app by developer Karan B, indexes, searches, and replays every Claude Code session locally, reading transcripts from ~/.claude/projects/ without sending data off-device. As of August 2026, the developer's own archive contains 114 sessions across 65 projects, half a gigabyte of JSONL, and 17M output tokens, cold-indexed in about 4 seconds on an M3 Pro. The app offers full-text search, a scrubbable event tape, one-paste session resume, usage and cost tracking, and export to markdown or HTML, and is available via Homebrew or DMG for Apple Silicon.

read5 min views1 publishedAug 11, 2026
Show HN: Hindcast (search, replay, and resume any Claude Code session on Mac)
Image: source

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.

── more in #developer-tools 4 stories · sorted by recency
── more on @hindcast 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/show-hn-hindcast-sea…] indexed:0 read:5min 2026-08-11 ·