PageRank for Your Technical Debt: How beads_viewer_rust Solves the Triage Trap
Moving beyond "Priority: High" with a graph-aware engine built for autonomous agent swarms.

gives swarms of agents the insight into what beads they should work on next to de-bottleneck the development process and increase velocity.
- The tool uses PageRank and graph theory to identify critical structural bottlenecks that manual triage often misses.
- A dedicated Robot Mode provides a machine-readable JSON pipe to direct autonomous AI agent swarms toward high-impact tasks.
- The system maintains technical debt history within the repository by storing issue states in Git-native JSONL files.
- This Rust-based port preserves a local-first architecture to ensure high-performance graph traversals and data sovereignty.
The End of the Loudest Voice
In complex software projects, a "High Priority" task is often just the loudest one, not the most critical. When human emotion dictates triage, structural bottlenecks hide in plain sight. beads_viewer_rust (bvr) treats your issue tracker like a search engine treats the web. By applying PageRank and Graph Theory to local-first .beads files, it identifies the "Articulation Points"—the quiet, unglamorous bugs that are actually holding up the entire dependency tree.
Built for the Agent Flywheel
This isn't just a terminal user interface; it’s a triage engine for the post-human era. bvr is specifically designed to tell AI agents exactly what to do next without a human project manager in the loop. The "Robot Mode" serves as an API for AI agent swarms, providing a machine-readable JSON/TOON pipe that allows LLMs to navigate dependencies mathematically.
The FrankenTUI: 11 Ways to See a Bug
When humans do need to look under the hood, bvr provides the "FrankenTUI." This highly dense, keyboard-driven interface offers 11 specialized modes. Users can seamlessly switch between standard Kanban boards, cycle detection matrices, and critical path visualizations, exposing the underlying graph structure that list-based trackers obscure.
| Feature | bvr (Beads Viewer Rust) | GitHub Issues / Jira |
|---|---|---|
| Data Sovereignty | Local-first (.beads folder), Git-native | Cloud-hosted, centralized APIs |
| Priority Logic | Graph metrics (PageRank, Betweenness) | Manual labels (High, Medium, Low) |
| Agent Compatibility | Native JSON/TOON pipe (Robot Mode) | Requires API scraping and context assembly |
| History | Git-native JSONL ledger | Database audit logs |
Rust, SQLite, and the Git-Native Ledger
Underneath the graph analysis is a hybrid storage engine prioritizing determinism. bvr reads .jsonl (JSON Lines) from .beads/ directories. By maintaining issue state in version-controlled files, the issue history is tied exactly to the code it describes. The transition to pure Rust ensures memory safety and provides the raw performance needed to run heavy $O(V+E)$ graph traversals instantly, while deferring more complex $O(V \cdot E)$ calculations to background threads.
Evolution of a Philosophy
The project represents a high-performance evolution of Steve Yegge’s original Go-based Beads ecosystem. As the original Beads moves toward a server-based architecture, creator Jeffrey Emanuel ported the logic to Rust to freeze the "classic" SQLite and JSONL architecture. This specific combination is what makes the Agent Flywheel possible, proving that sometimes the best way forward is to deeply optimize a proven, local-first foundation.

I (Jeffrey Emanuel) LOVE Steve Yegge's Beads project. Discovering it and seeing how well it worked together with my MCP Agent Mail was a truly transformative moment in my development workflows and professional life. This quickly also led to beads_viewer (bv), which added another layer of analysis to beads that gives swarms of agents the insight into what beads they should work on next to de-bottleneck the development process and increase velocity... Rather than ask Steve to maintain a legacy mode for my niche use case, I created this Rust port that freezes the "classic beads" architecture I depend on.