Dev & Engineering terminal-uisession-visualizationflow-graphwasmrusttime-travel

Zoetrope

Watch a Claude Code session as a live flow graph — main agent, subagents and tool calls — in your terminal or browser.

FollowAgents review · FARS-2.1
Recommended
89/ 100 5-point scale 4.5 / 5
1 2 3 4 5 6
1Trust23 / 29 · 4.0/5

A purely read-only transcript visualizer: the README states read-only and no network, and Cargo.toml's dependency tree contains no HTTP client (tokio without its net feature); manifest comments and feature gating cross-corroborate, so least privilege and external effects are near full marks. Deductions: transcripts may contain code, secrets and prompts; the README only asserts 'nothing leaves your machine' without discussing exposure when opening third-party transcripts in the WASM frontend; dependencies get --locked and publish dry-run but no cargo audit/deny job; the author is named but the publisher is unverified.

2Reliability12 / 14 · 4.3/5

The manifest, CI (fmt/clippy/test on three OSes, --locked, a no-default-features core check, msrv, package dry-run) are mutually consistent, and the crate/command naming (zoetrope/zoe) is explained identically in several places — full marks for self-consistency. Deductions: tolerance for unknown/malformed JSONL records is a narrative promise; the parser source and concrete error-message design are not in the provided evidence. Dependencies come from crates.io and are locked, so availability is good.

3Adaptability18 / 18 · 5.0/5

Targets a clear audience (Claude Code users); installation spans Homebrew, cargo, prebuilt binaries and browser; multi-OS/multi-arch; it explicitly flags that the JSONL format is undocumented and internal, and degrades rather than crashes. Trigger semantics (no-arg follow, directory, file, --follow, inspect) are crisply defined. No basis for deductions found.

4Convention16 / 18 · 4.4/5

Excellent information architecture: a well-partitioned README with docs/DESIGN.md and docs/ARCHITECTURE.md behind it; install notes cover four paths; the zoetrope-vs-zoe naming is annotated consistently across manifest, CD workflow and Homebrew formula; MIT license present, with an allow-list include and packaging CI. Deductions: version is still 0.1.0; CHANGELOG.md is generated by release-plz and its actual content is not in evidence; maintenance rests on a single individual (bus factor 1) with only a general PRs-welcome statement.

5Effectiveness13 / 13 · 5.0/5

A standalone, immediately usable visualizer: terminal/browser flow graph plus headless zoe inspect; four install routes; zero network, zero config, reads local files on demand, so cost is near zero; clear marginal value over eyeballing raw JSONL. No deductions identified.

6Verifiability7 / 8 · 4.4/5

Key claims are traceable: 'zero network' is framed as a cargo-tree-checkable property; design invariants point at named documents; CD builds from the exact release tag and signs assets (sha512/GPG). README claims interlock with the manifest and CI. Deductions: docs/DESIGN.md, ARCHITECTURE.md and the parser source are absent from this evidence set, so cross-source corroboration is limited to manifest and workflow level; fact/inference separation is good (e.g., the undocumented-format caveat is explicit).

Evidence confidence: Low Reviewed Sep 07, 2026 Reviewed revision 1cbf6072ef05
Before you use it
  • Transcript JSONL may contain code, prompts, and secret fragments; before opening a third-party transcript in the WASM browser build, confirm the content is safe to expose.
  • Claude Code's JSONL is an undocumented internal format; after upgrades the tool degrades silently rather than erroring, which can mean silently missing nodes — do not treat the graph as a complete audit view.
  • 'Zero network' is a checkable claim (cargo tree); verify it yourself locally or audit Cargo.lock before trusting it.
  • Single-maintainer project at 0.1.0; APIs and packaging may shift quickly. Pin a specific tag in production and verify the GPG/sha512 signatures.
Review evidence [1][2][3][4][5]
See the full review method →

What does this agent do, and when should you use it?

Zoetrope is an open-source Rust tool that reads the JSONL transcripts Claude Code writes under ~/.claude/projects/ and draws each session as a live graph in your terminal. The graph shows the main session, the subagents and workflow groups it spawns, and the tools each one runs, updating as the session progresses. It can replay a finished run paced by the session's own timestamps or follow a running one at its live edge, and a headless zoe inspect command prints the session tree without a TTY. The same portable core compiles to WebAssembly and runs in the browser. The tool is strictly read-only, makes zero network requests, and treats the transcript as an immutable event log so seeking backwards reproduces the session exactly.

The zoe binary tails Claude Code's JSONL transcript files, parses each line defensively, and folds them into a derived model: one node per agent (main session, subagents, workflow groups with nested children), with status, current tool, tool count and output tokens on every card, and tool calls surfacing as chips (e.g. ⚒ bash ×5, resolving to ✓ or ✗). It keeps content time and presentation time separate: replay is paced by transcript timestamps (default 8.0x speed, adjustable via --speed) while a live session pins at the live edge and folds in appends. The timeline is indexed by event rather than wall-clock, so you can scrub, pause, step between prompt eras, or jump back to live, and seeking backwards shows the graph exactly as it stood. zoe inspect <file.l> prints the whole tree headlessly. Clicking an agent opens its provenance: the prompt that spawned it, surrounding reasoning, its model, and every tool call with timings; the i key opens a session info overlay (mode, permissions, queued ops, file edits, last prompt). The camera supports Overview/Follow modes (o/f), panning (h j k l), zoom (+/-/0), centering (c), and manual relayout (r).

  1. A developer running a long Claude Code session who wants to watch in real time which subagents the main agent spawned and which tools each is running
  2. An engineer reviewing a colleague's shared transcript offline, replaying it with zoe <file.l> at native or accelerated pace
  3. A maintainer who needs a session structure dump in CI or a non-TTY environment, using zoe inspect for plain-text tree output
  4. A privacy-conscious user who drops a transcript into the hosted web app at zoetrope.furkankly.dev, knowing everything stays local
  5. Someone debugging prompt behavior who clicks a subagent to inspect the exact prompt, model, and per-call timings behind it
  6. An impatient reviewer toggling gap compression with s to skip dead air and watch only meaningful activity

What are this agent's strengths and limitations?

Pros
  • Verifiable privacy: no HTTP client anywhere in the dependency tree and tokio without its net feature — provable via cargo tree; strictly read-only, it never mutates your transcripts
  • Exact time travel: the model is a pure function of facts seen so far, so seeking backwards reproduces the moment precisely (tool counts fall, agents un-finish) rather than approximating
  • One engine, three frontends: native terminal (zoe), headless output (zoe inspect), and browser WASM (zoetrope-web) behave identically
  • Resilient to format change: Claude Code's JSONL format is undocumented and internal; unrecognized records are skipped and malformed lines never take down the session
  • Deep provenance: every agent exposes the prompt that spawned it, its model, and all tool calls with timings, not just outcomes
Limitations
  • Tied to the Claude Code ecosystem: it only reads Claude Code's internal, undocumented JSONL format, so a format change can break rendering until the tool is updated
  • Observation only: it does not control, modify, or drive agents — it is purely a viewer with no way to intervene in a session
  • The browser frontend must be compiled to wasm32 yourself (bash web/scripts/build-wasm.sh) or used via the author-hosted site at zoetrope.furkankly.dev
  • Presentation options like gap compression mean replay pacing can diverge from real time, requiring a deliberate tradeoff with the s key

How do you install or deploy this agent?

Any one of three routes:

  1. Homebrew (macOS/Linux):
brew install furkankly/tap/zoetrope
  1. Cargo (needs a Rust toolchain):
cargo install zoetrope
  1. Prebuilt binaries: download the archive for your platform from GitHub Releases (macOS Apple Silicon/Intel, Linux musl arm64/x86_64, Windows x86_64), unpack it, and put zoe on your PATH.

Or build from source:

git clone https://github.com/furkankly/zoetrope
cd zoetrope
cargo build --release
./target/release/zoe

No install at all: open https://zoetrope.furkankly.dev/app in your browser.

How do you use this agent?

Prerequisite: JSONL session transcripts written by Claude Code under ~/.claude/projects/ on your machine. Common invocations:

zoe                          # follow the current project's live session
zoe <dir>                    # follow another project's session
zoe <file.l>             # replay a recording from the start
zoe <file.l> --follow    # open a recording at its live edge
zoe <file.l> --speed N   # playback speed (default 8.0)
zoe inspect <file.l>     # print the session tree and exit (no TUI)

Key controls: space play/pause; [ ] step between prompt eras; End or g jump to live; s toggle gap compression; mouse drag to seek; o/f switch Overview/Follow camera; h j k l pan; +/-/0 zoom; c center on selection; click a node for its detail panel; i session info overlay; ? full help; q or ctrl-c quit.

FAQ

Does it consume API credits or cost anything to run?
No. Zoetrope only reads transcripts Claude Code has already written locally; it calls no model APIs and makes no network requests.
Is my session data uploaded anywhere?
No. It is read-only and network-free by design (no HTTP client in the dependency tree, verifiable with cargo tree); the browser version also processes dropped transcripts locally.
What happens when Claude Code changes its JSONL format?
The format is undocumented and internal. Zoetrope is built to degrade rather than break: unknown records are skipped, missing fields fall back, and a malformed line is never fatal. Report rendering oddities on GitHub issues.
Can I use it without a terminal?
Yes. zoe inspect <file.l> prints the session tree without a TTY, or drop a transcript onto the browser app at zoetrope.furkankly.dev/app for the same graph.
Can it pause or intervene in a running Claude Code session?
No. It is strictly read-only: it can observe, replay, and time-travel through a session, but it cannot alter the agent's behavior or history.

Compare agents like this one

The same FARS review applied across the shortlist this agent qualifies for.

Related agents