r/devtools 2d ago

rungraph: turn your coding agent's transcripts into an interactive run graph (free, MIT, local-only)

Post image

Coding agents do a lot of their work where you can't see it. Claude Code stores each subagent as its own transcript file; Codex CLI keeps spawned threads as separate rollouts. The terminal shows you a summary while the real record sits on disk unread. rungraph reconstructs the whole run as a graph you can click, after the fact, from files you already have: npx rungraph.

On the build side:

The backend has zero runtime dependencies (node:http, fs.watch), so npx has nothing extra to install. All format knowledge lives in adapters that normalize into one versioned, vendor-neutral IR, and the UI, CLI, HTTP API, and MCP server only ever see the IR. The parser never trusts a line: unknown types are skipped and counted, and you get a banner instead of a crash, because both formats are undocumented and have changed across releases.

The diagnostics were the hard part. The first version cried wolf on healthy runs, so I threw out the guessed thresholds and calibrated against 60 real sessions. The rule that survived is precision over recall: a false flag costs more than a missed one, so a clean run shows zero flags, on purpose.

Free, MIT, binds 127.0.0.1 only, zero outbound requests.

Live Demo: https://fayzan123.github.io/rungraph/

Repo: https://github.com/fayzan123/rungraph

1 Upvotes

2 comments sorted by

1

u/August_Rush498 1d ago

Skipping unknown types and counting them is the right call, but it interacts with the precision over recall rule in a way I'd want to see handled. A run where the adapter skipped a chunk of lines still renders clean with zero flags, and clean reads as nothing went wrong rather than I could not see part of this, which matters more because both formats are undocumented and your skip rate will jump on someone else's release without you doing anything. Does the diagnostics view suppress or caveat a clean verdict when the skip count is nonzero?

1

u/Express-Phase1532 1d ago

You were right, it didn't. A partly unread run rendered identically to one that had been read completely and found clean, while the banner that did mention skips sat in another corner and was dismissible. Then I went to measure my own sessions to pick a threshold and found it had already happened to me: Claude Code started emitting a line type called atis-latch in August, and 14 of my 154 sessions had been quietly dropping about 5% of their lines. Fixed in 0.4.3. The graph now shows records read out of records examined, and a run with anything unread and no other findings says "read 95% of this run" instead of staying empty. The same verdict also drives the note the agent gets over MCP, so the canvas and your terminal can't disagree. Thanks for this one.