Zoetrope
在终端或浏览器中,将 Claude Code 会话实时呈现为流程图,看清主 Agent、子 Agent 与工具调用的全貌。
工具为纯只读的转录可视化器:README 明示 read-only、no network,Cargo.toml 依赖树中无 HTTP 客户端(tokio 未启用 net feature),manifest 注释与 feature 门控可交叉印证,最小权限与外部影响近乎满分。扣分点:转录文件可能含代码、密钥、提示词等敏感内容,README 仅泛称'数据不出本机',未讨论 WASM 前端打开他人转录的暴露面;依赖仅有 --locked 与 dry-run,无 cargo audit/cargo-deny 类检查;作者署名真实但发布者未经验证。
manifest、CI(fmt/clippy/test 三平台、--locked、no-default-features core check、msrv、package dry-run)相互一致,crate 名与命令名(zoetrope/zoe)在多处解释一致,自洽性满分。扣分点:对未知/畸形 JSONL 记录的容错是叙述性承诺,提供的文件中未见具体错误信息设计或解析器源码;依赖全部来自 crates.io 且锁定,可用性良好。
面向 Claude Code 用户这一明确受众,安装覆盖 Homebrew/cargo/预编译二进制/浏览器四条路径,支持 macOS/Linux/Windows 多架构,明确说明格式是内部未文档化格式并会降级而非崩溃,能力边界与触发语义(无参跟随、目录、文件、--follow、inspect)在 README 中清晰定义,均无扣分依据。
信息架构优秀:README 分区清晰并有 docs/DESIGN.md、docs/ARCHITECTURE.md 承接;安装说明含四条路径;命名(crate zoetrope vs 命令 zoe)在 manifest、CD 工作流、Homebrew formula 中一致注释;MIT 许可证文件齐全,含 allow-list 的 include 与打包 CI。扣分点:版本仍是 0.1.0,CHANGELOG.md 依赖 release-plz 生成、本次证据中未见实际内容;维护者为单人(bus factor 1),仅承诺接受 PR,无明确的维护承诺或响应机制。
产品是独立可用的可视化器:输出为终端/浏览器流图加 headless 的 zoe inspect,多种安装方式,零网络、零配置、按需读取本地文件,成本几乎为零;相较手工翻 JSONL 有明确边际价值,未发现扣分点。
关键主张可追溯:'零网络'指向 cargo tree 可验证的性质,设计不变量指向具体文档,CD 以发布 tag 精确构建并对资产做 sha512/GPG 签名,README 中的功能声明与 manifest、CI 配置多处可互相印证。扣分点:docs/DESIGN.md、ARCHITECTURE.md 与解析器源码未包含在本次证据中,跨源印证只能覆盖到 manifest 与工作流层面;事实与推断在文件中区分良好(如明确标注格式未文档化、属推断边界)。
- 转录 JSONL 可能包含代码、提示词乃至密钥片段;在浏览器版(WASM)打开非本人产生的转录前,请先确认内容可公开展示。
- Claude Code 的 JSONL 为内部未文档化格式,升级后渲染可能异常;工具承诺降级而非报错,意味着缺数据时可能静默少画节点,勿将其视为完整审计视图。
- '零网络'为可验证主张(cargo tree),但请在本地自行执行 cargo tree 或审计 Cargo.lock 后再采信。
- 单人维护、版本 0.1.0,API 与打包布局可能频繁变动;生产环境锁定具体 tag 并校验 GPG/sha512 签名。
这个 Agent 能做什么,适合哪些场景?
Zoetrope 是一个用 Rust 编写的开源工具,可读取 Claude Code 写入 ~/.claude/projects/ 的 JSONL 会话记录,并在终端中绘制实时的流程图。图中展示主会话、它派生的子 Agent 与工作流分组,以及每个节点运行的工具,随会话进行而实时更新。它既能回放已完成的会话(按记录自身的时间戳控制节奏),也能实时跟踪正在运行的会话;还提供 zoe inspect 命令,无 TTY 环境下也能打印会话树。同一核心编译为 WebAssembly 后可在浏览器中使用。整个工具完全只读、零网络访问,历史数据不可变,回退查看时能精确还原当时的状态。
运行 zoe 命令后,Zoetrope 监视(tail)Claude Code 的 JSONL 记录文件,逐行防御性解析,将其折叠为派生模型:每个 Agent 一个节点(主会话、子 Agent、含嵌套子节点的工作流组),每张卡片显示状态、当前工具、工具次数和输出 token,工具调用以芯片形式呈现(如 ⚒ bash ×5,完成后解析为 ✓ 或 ✗)。它维护内容时间与演示时间两个时钟:回放按记录时间戳推进(默认 8.0 倍速,--speed 可调),实时会话在 live edge 处持续追加;时间轴按事件而非墙钟索引,支持拖拽回溯、暂停、在提示区间(prompt era)间跳转,回退时图形精确还原到那一刻。zoe inspect <file.l> 无头打印整个会话树。点击任意 Agent 可查看其来源:生成它的提示词、推理、模型和带耗时的全部工具调用;i 键打开会话信息面板(模式、权限、队列操作、文件编辑、最后提示词)。相机控制支持 Overview/Follow 两种模式(o/f 键切换)、平移(h j k l)、缩放(+/-/0)、居中(c)和整理布局(r)。
- 运行长任务 Claude Code 会话的开发者,想在终端实时观察主 Agent 派生了哪些子 Agent、各自在跑什么工具
- 拿到同事分享的 transcript 文件、想离线回放并逐步审查某次自动化的工程师,可用 zoe <file.l> 按原速或加速回放
- 需要在 CI 或无 TTY 环境输出会话结构的维护者,可用 zoe inspect 生成纯文本会话树
- 关注隐私或合规的用户,在浏览器打开 zoetrope.furkankly.dev 拖入 transcript,数据完全留在本地
- 调试 prompt 行为的人,点击某个子 Agent 查看生成它的原始提示词、模型与每次工具调用的耗时
- 想快速跳过空闲时段的人,用 s 键切换间隔压缩,忽略死时间只看有效活动
这个 Agent 有哪些优点和局限?
- 隐私与安全可验证:依赖树中没有任何 HTTP 客户端,tokio 不带 net 特性,cargo tree 即可证明零网络;全程只读,不改动任何记录
- 时间旅行精确:模型是已知事实的纯函数,回退定位能精确还原那一刻的图形状态(工具数回退、Agent 取消完成),而非近似重放
- 同一引擎三端可用:终端原生(zoe)、无 TTY 头部输出(zoe inspect)、浏览器 WASM(zoetrope-web),行为一致
- 对格式变更健壮:Claude Code 的 JSONL 格式未公开文档且可能变化,未知记录被跳过而非致命报错,会话不会因此中断
- 溯源细节完整:每个 Agent 可查其生成提示词、模型、全部工具调用及耗时,而非只看结果
- 强依赖 Claude Code 生态:只能读取其内部未文档化的 JSONL 格式,格式变更可能导致渲染异常,需要等待适配或提交 issue
- 纯可视化工具:它不控制、不修改也不驱动 Agent,只是观察者,不能替代对会话本身的干预手段
- 浏览器版需自行编译 WASM(bash web/scripts/build-wasm.sh,仅 wasm32 目标),或依赖作者托管在 zoetrope.furkankly.dev 的在线版本
- 间隔压缩等展示选项意味着回放节奏可与真实时间不一致,需用 s 键在忠实节奏与跳过空闲之间取舍
如何安装或部署这个 Agent?
三种安装方式任选其一:
- Homebrew(macOS/Linux):
brew install furkankly/tap/zoetrope- Cargo(需 Rust 工具链):
cargo install zoetrope- 预编译二进制:从 GitHub Releases 下载对应平台的压缩包(macOS Apple Silicon/Intel、Linux musl arm64/x86_64、Windows x86_64),解压后将 zoe 放入 PATH。
也可从源码构建:
git clone https://github.com/furkankly/zoetrope
cd zoetrope
cargo build --release
./target/release/zoe无需安装:直接访问 https://zoetrope.furkankly.dev/app 在浏览器中使用。
如何使用这个 Agent?
前提:本机存在 Claude Code 生成的 JSONL 会话记录(位于 ~/.claude/projects/)。常用命令:
zoe # 跟踪当前项目的实时会话
zoe <dir> # 跟踪另一项目的会话
zoe <file.l> # 从头回放一份记录
zoe <file.l> --follow # 从 live edge 打开记录
zoe <file.l> --speed N # 回放速度(默认 8.0)
zoe inspect <file.l> # 无 TUI 打印会话树后退出
界面操作:space 播放/暂停;[ ] 在提示区间间跳转;End 或 g 跳到 live edge;s 切换间隔压缩;鼠标拖拽进度条定位;o/f 切换 Overview/Follow 相机;h j k l 平移;+/-/0 缩放;c 居中选中 Agent;点击节点打开详情面板;i 查看会话信息;? 查看完整帮助;q 或 ctrl-c 退出。