The graph exposes agent structure that JSONL hides
Claude Code writes session transcripts under ~/.claude/projects/, but a line-oriented log is awkward when one main agent spawns subagents and workflows. Zoetrope folds those records into a graph. Each agent card shows status, the current tool, tool count, and output tokens. Tool calls appear beneath the agent, and the graph nests workflow children under their recorded parent. This is useful when the question is who did what, when, and under which prompt.
The timeline works for both recorded and running sessions. Give zoe a JSONL file and it replays from the start at a default speed of 8.0. Add --follow to begin at the live edge, or point it at a directory so it finds the newest session. You can pause, step between prompt eras, compress inactive gaps, and scrub backward. When the playhead moves back, completed agents become active again and later tool counts disappear.
Four install routes avoid running a service
Homebrew users can install from the author's tap. Rust users can run cargo install zoetrope, while release archives cover Apple Silicon and Intel macOS, Linux on arm64 and x86_64 with musl, and Windows x86_64. A hosted WebAssembly build accepts a transcript through the browser. The README says browser processing remains local, so trying the interface does not require an account or a server.
The native binary is called zoe. Running it with no arguments follows the newest session for the current project. zoe inspect <file.jsonl> prints the complete session tree without a terminal interface, which is handy over SSH or in saved diagnostics. Interactive controls cover pan, zoom, agent selection, a minimap, camera follow, and a session overlay with permissions, queued operations, edits, and the latest prompt.
What happened when we ran it
Our sandbox installed 112 Rust packages in 14 seconds. The build completed in 30 seconds, then cargo test ran for 13 seconds and reported 380 passed with 0 failed. That is the cleanest lab result in this review set so far. The measured checkout at commit 077707d contained 111 files, roughly 14,906 source lines, and occupied 16.9 MB.
The repository had 4 CI workflow files, no Dockerfile, and no conventional tests directory. The lack of a tests folder is not a lack of tests: Cargo found and passed 380 of them. We did not benchmark rendering speed, memory use on huge transcripts, terminal compatibility, or the WebAssembly build. The measured outcome establishes that the native Rust workspace installs, builds, and passes its available suite in a fresh unprivileged container.
No credentials or network service were needed for that path. Zoetrope says its dependency tree has no HTTP client and that Tokio is compiled without its networking feature. That claim is inspectable through cargo tree, although our supplied lab block did not independently audit network calls. The practical privacy boundary is still your machine account: transcript files can contain prompts, reasoning context, tool arguments, and file activity that other local users should not read.
Claude Code's internal format is the main fault line
The README is frank that Claude Code's JSONL format is undocumented. Zoetrope parses unfamiliar records defensively, skips what it does not know, tolerates missing fields, and avoids crashing on malformed lines. That is the right failure mode for a viewer, but graceful degradation may produce an incomplete graph. After a Claude Code update, an empty branch or missing tool can mean parser drift rather than an uneventful session.
Support is narrow by design. The repository's only open issue excluding pull requests, filed August 24, asks for Codex session rollouts as another transcript source. That request is evidence that Codex does not work today, not a delivery promise. The project was pushed on August 25, 2026, and v0.1.0 shipped on August 18. Development is current, though one first release cannot establish long-term compatibility.
Local replay helps review, but it is not a cost dashboard
Agent selection reveals the prompt that spawned a worker, reasoning around it, the model, tool calls, and their timings. That is strong material for debugging delegation or explaining why a session touched a file. The immutable event model also makes backward seeking credible: display time changes while recorded content time stays fixed. The design documentation describes a portable core shared by the terminal and browser frontends.
Output-token counts appear on cards, but Zoetrope's main abstraction is execution flow. ccusage is a better choice for totals and cost reports. Claude Code Usage Monitor focuses on burn rate and limit warnings. Claude DevTools reaches toward a broader visual diagnostic dashboard. Pick based on the question: graph structure and replay favor Zoetrope; budget and quota questions favor the usage tools.
The first release is already useful for one exact job
Zoetrope does not need a database, daemon, telemetry account, or Claude API credential. Our run's 380 passing tests back the careful event-folding design, and the prebuilt binaries remove Rust from the user setup. For a developer staring at a tangled multi-agent transcript, the graph and time travel can answer questions much faster than searching JSONL by hand.
The recommendation stays narrow. Keep sensitive transcripts protected, verify the graph after Claude Code upgrades, and do not assume skipped records are harmless. If your sessions are simple, the raw transcript or zoe inspect may be enough. If subagents and workflows are routine, the 30-second source build and local processing make Zoetrope an easy trial.

