hindcast
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Fail
- os.homedir — User home directory access in lib/scanner.js
- fs module — File system access in lib/scanner.js
- child_process — Shell command execution capability in lib/search.js
- fs module — File system access in lib/search.js
- fs module — File system access in main.js
- os.homedir — User home directory access in scripts/audit-corpus.js
- fs module — File system access in scripts/audit-corpus.js
- child_process — Shell command execution capability in scripts/resume-cmd-test.js
- fs.rmSync — Destructive file system operation in scripts/resume-cmd-test.js
- fs module — File system access in scripts/resume-cmd-test.js
- child_process — Shell command execution capability in scripts/resume-live-test.js
- execSync — Synchronous shell command execution in scripts/resume-live-test.js
- fs.rmSync — Destructive file system operation in scripts/resume-live-test.js
- os.homedir — User home directory access in scripts/resume-live-test.js
- fs module — File system access in scripts/resume-live-test.js
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Browse, search & replay every Claude Code session on your Mac. Local-first session viewer, timeline scrubber & cost tracker (ccusage alternative).
Every Claude Code session you've ever run. Indexed, searchable, scrubbable.
A local-first macOS app to browse, search, and replay your Claude Code sessions, with a timeline scrubber and a cost ledger.
A Mac desktop app that reads the transcripts Claude Code already writes to~/.claude/projects/ and turns them into a browsable archive: a home view with
your stats (tokens, tools, models, cadence heatmap), full-text search across
every session with ⌘K, and a per-session "tape" you can scrub through like
film footage.
Everything stays on your Mac. The app only ever reads local files. It never
sends messages, never drives sessions, and never touches the API or Agent SDK.
It is designed to stay within Anthropic's Terms of Service and to be safe with
any Claude Code subscription, unlike interactive wrapper tools affected by the
April 2026 restriction on Agent SDK chat with subscription accounts.
The 30-second film
https://github.com/user-attachments/assets/80c5f6c9-7117-465e-886e-5626873f99c2
Install
brew tap karanb192/tap
brew trust karanb192/tap
brew install --cask hindcast
xattr -rd com.apple.quarantine /Applications/Hindcast.app # one-time fix until the app is notarized
Apple Silicon only for now. The xattr step is needed because the app isn't
notarized yet (Developer ID in progress); it disappears in an upcoming signed
release. Prefer a download? Grab the DMG from
Releases.
You'll also want ripgrep
(brew install ripgrep); without it, full-text search quietly falls back
to title-only matching.
Run from source
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 intodist/mac-arm64/; drag it to /Applications.
How it works
- Indexer (
lib/scanner.js): streams every top-level*.jsonltranscript,
extracts the session title (custom-title > ai-title > first prompt),
timestamps, models, token usage (deduplicated by message id: one API
response spans several JSONL lines that each repeat the same usage object),
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 live while you
work. - Search (
lib/search.js): shells out to ripgrep across all transcripts
(also matching the JSON-escaped spelling of queries containing quotes or
backslashes), then re-reads only the matching lines to build human-readable
snippets. Opening a result jumps the transcript to the matched event,
including matches inside tool output. - Transcript: sessions are trees (rewinds fork branches); the viewer
follows theleafUuidpointer from the transcript'slast-promptline
(falling back to the last message) and shows only the live conversation,
reporting how many rewound / subagent events it hid. Renders markdown,
collapsible thinking, tool cards with inline screenshot results, pasted
images, compaction markers, and model-fallback notes. The format is
officially internal to Claude Code, so parsing is tolerant: unknown line
types and block types are skipped, never fatal. - 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. - Filters: date presets (24h / week / month / year) plus a custom
date-only range, and a model multi-select (any-of). Filters drive both the
session list and the Archive stats. - Themes: dark, light, and auto (follows macOS). The resolved theme is
persisted so the window paints the right color from the first frame. - The Ledger: ccusage-style usage and cost view: per-day / per-week /
per-month tables with per-model breakdowns, estimated dollar cost at
published API rates (lib/pricing.js: cache reads 0.1×, 5m writes 1.25×,
1h writes 2×; legacy 3.x models and Bedrock/Vertexxx.anthropic.ids priced
too), by-model totals, and a last-7-days figure. Usage is emitted as
per-message records at index time and deduplicated globally by message id
across every file, including the copied history in resumed/forked sessions
and every subagent transcript, so nothing is double-counted (the same
approach ccusage takes). Costs are estimates of API-equivalent value, not an
invoice. - Export: any session exports to markdown or self-contained HTML
(active branch, images inlined in HTML) into~/Downloads/Hindcast Exports. - Subagent reels: sessions list their subagent transcripts
(<sessionDir>/subagents/agent-*.jsonl); each opens as its own tape with
a back link.
Design
"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.
Known limitations
- A search match on a rewound (abandoned) branch opens the session but cannot
jump to the hidden event.
Non-goals
- Live streaming/monitoring of active sessions: Claude Code's own terminal
already shows the stream; duplicating it adds nothing. Tools that go further
are interactive wrappers sending messages via the Agent SDK, which Anthropic's
ToS (April 2026) restrict on subscription accounts. Hindcast stays a
read-only archive; the index refreshing as sessions land is as live as it gets. - Orchestration and team/cloud sync: local-first, read-only, nothing leaves
the machine.
Not yet built
- Semantic search (RAG) alongside exact search
- Signed + notarized DMG for one-click installs (
npm run packbuilds a local
unsigned .app today)
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found