Skill v1.0.2
currentLLM-judged scan95/100+1 new
version: "1.0.2" name: bv description: "Beads Viewer - Graph-aware triage engine for Beads projects. Computes PageRank, betweenness, critical path, and cycles. Use --robot-* flags for AI agents."
BV - Beads Viewer
A graph-aware triage engine for Beads projects (.beads/issues.jsonl in current br workspaces, with .beads/beads.jsonl supported for legacy/bd workspaces). Computes 9 graph metrics, generates execution plans, and provides deterministic recommendations. Human TUI for browsing; robot flags for AI agents.
Why BV vs Raw Beads
| Capability | Raw Beads JSONL | BV Robot Mode | |
|---|---|---|---|
| Query | "List all issues" | "List the top 5 bottlenecks blocking the release" | |
| Context Cost | High (linear with issue count) | Low (fixed summary struct) | |
| Graph Logic | Agent must compute | Pre-computed (PageRank, betweenness, cycles) | |
| Safety | Agent might miss cycles | Cycles explicitly flagged |
Use BV instead of parsing Beads JSONL directly. It computes graph metrics deterministically.
CRITICAL: Robot Mode for Agents
Never run bare `bv`. It launches an interactive TUI that blocks your session.
Always use --robot-* flags:
bv --robot-triage # THE MEGA-COMMAND: start herebv --robot-next # Minimal: just the single top pickbv --robot-plan # Parallel execution tracksbv --robot-insights # Full graph metrics
The 9 Graph Metrics
BV computes these metrics to surface hidden project dynamics:
| Metric | What It Measures | Key Insight | |
|---|---|---|---|
| PageRank | Recursive dependency importance | Foundational blockers | |
| Betweenness | Shortest-path traffic | Bottlenecks and bridges | |
| HITS | Hub/Authority duality | Epics vs utilities | |
| Critical Path | Longest dependency chain | Keystones with zero slack | |
| Eigenvector | Influence via neighbors | Strategic dependencies | |
| Degree | Direct connection counts | Immediate blockers/blocked | |
| Density | Edge-to-node ratio | Project coupling health | |
| Cycles | Circular dependencies | Structural errors (must fix!) | |
| Topo Sort | Valid execution order | Work queue foundation |
Two-Phase Analysis
BV uses async computation with timeouts:
- Phase 1 (instant): degree, topo sort, density
- Phase 2 (500ms timeout): PageRank, betweenness, HITS, eigenvector, cycles
Always check status field in output. For large graphs (>500 nodes), some metrics may be approx or skipped.
Robot Commands Reference
Triage & Planning
bv --robot-triage # Full triage: recommendations, quick_wins, blockers_to_clearbv --robot-next # Single top pick with claim commandbv --robot-plan # Parallel execution tracks with unblocks listsbv --robot-priority # Priority misalignment detection
Graph Analysis
bv --robot-insights # Full metrics: PageRank, betweenness, HITS, cycles, etc.bv --robot-label-health # Per-label health: healthy|warning|criticalbv --robot-label-flow # Cross-label dependency flow matrixbv --robot-label-attention # Attention-ranked labels
History & Changes
bv --robot-history # Bead-to-commit correlationsbv --robot-diff --diff-since <ref> # Changes since ref
Other Commands
bv --robot-burndown <sprint> # Sprint burndown, scope changesbv --robot-forecast <id|all> # ETA predictionsbv --robot-alerts # Stale issues, blocking cascadesbv --robot-suggest # Hygiene: duplicates, missing deps, cycle breaksbv --robot-graph # Dependency graph export (JSON, DOT, Mermaid)bv --export-graph <file.html> # Self-contained interactive HTML visualization
Scoping & Filtering
bv --robot-plan --label backend # Scope to label's subgraphbv --robot-insights --as-of HEAD~30 # Historical point-in-timebv --recipe actionable --robot-plan # Pre-filter: ready to workbv --recipe high-impact --robot-triage # Pre-filter: top PageRankbv --robot-triage --robot-triage-by-track # Group by parallel work streamsbv --robot-triage --robot-triage-by-label # Group by domain
Built-in Recipes
| Recipe | Purpose | |
|---|---|---|
default | All open issues sorted by priority | |
actionable | Ready to work (no blockers) | |
high-impact | Top PageRank scores | |
blocked | Waiting on dependencies | |
stale | Open but untouched for 30+ days | |
triage | Sorted by computed triage score | |
quick-wins | Easy P2/P3 items with no blockers | |
bottlenecks | High betweenness nodes |
Robot Output Structure
All robot JSON includes:
data_hash- Fingerprint of the source JSONL issue file (verify consistency)status- Per-metric state:computed|approx|timeout|skippedas_of/as_of_commit- Present when using--as-of
--robot-triage Output
{"quick_ref": { "open": 45, "blocked": 12, "top_picks": [...] },"recommendations": [{ "id": "bd-123", "score": 0.85, "reason": "Unblocks 5 tasks", "unblock_info": {...} }],"quick_wins": [...],"blockers_to_clear": [...],"project_health": { "distributions": {...}, "graph_metrics": {...} },"commands": { "claim": "bd claim bd-123", "view": "bv --bead bd-123" }}
--robot-insights Output
{"bottlenecks": [{ "id": "bd-123", "value": 0.45 }],"keystones": [{ "id": "bd-456", "value": 12.0 }],"influencers": [...],"hubs": [...],"authorities": [...],"cycles": [["bd-A", "bd-B", "bd-A"]],"clusterDensity": 0.045,"status": { "pagerank": "computed", "betweenness": "computed", ... }}
jq Quick Reference
bv --robot-triage | jq '.quick_ref' # At-a-glance summarybv --robot-triage | jq '.recommendations[0]' # Top recommendationbv --robot-plan | jq '.plan.summary.highest_impact' # Best unblock targetbv --robot-insights | jq '.status' # Check metric readinessbv --robot-insights | jq '.cycles' # Circular deps (must fix!)bv --robot-label-health | jq '.results.labels[] | select(.health_level == "critical")'
Agent Workflow Pattern
# 1. Start with triageTRIAGE=$(bv --robot-triage)NEXT_TASK=$(echo "$TRIAGE" | jq -r '.recommendations[0].id')# 2. Check for cycles first (structural errors)CYCLES=$(bv --robot-insights | jq '.cycles')if [ "$CYCLES" != "[]" ]; thenecho "Fix cycles first: $CYCLES"fi# 3. Claim the taskbd claim "$NEXT_TASK"# 4. Work on it...# 5. Close when donebd close "$NEXT_TASK"
TUI Views (for Humans)
When running bv interactively (not for agents):
| Key | View | |
|---|---|---|
l | List view (default) | |
b | Kanban board | |
g | Graph view (dependency DAG) | |
E | Tree view (parent-child hierarchy) | |
i | Insights dashboard (6-panel metrics) | |
h | History view (bead-to-commit correlation) | |
a | Actionable plan (parallel tracks) | |
f | Flow matrix (cross-label dependencies) | |
] | Attention view (label priority ranking) |
Integration with br/bd CLIs
BV reads from .beads/issues.jsonl created by current br workspaces and from .beads/beads.jsonl created by legacy bd workspaces:
br ready --json # Show actionable beadsbr sync --flush-only # Export current br state to JSONL
Legacy bd workflow:
bd init # Initialize beads in projectbd create "Task title" # Create a beadbd list # List beadsbd ready # Show actionable beadsbd claim bd-123 # Claim a beadbd close bd-123 # Close a bead
Integration with Agent Mail
Use bead IDs as thread IDs for coordination:
file_reservation_paths(..., reason="bd-123")send_message(..., thread_id="bd-123", subject="[bd-123] Starting...")
Graph Export Formats
bv --robot-graph # JSON (default)bv --robot-graph --graph-format=dot # Graphviz DOTbv --robot-graph --graph-format=mermaid # Mermaid diagrambv --robot-graph --graph-root=bd-123 --graph-depth=3 # Subgraphbv --export-graph report.html # Interactive HTML
Time Travel
Compare against historical states:
bv --as-of HEAD~10 # 10 commits agobv --as-of v1.0.0 # At tagbv --as-of "2024-01-15" # At datebv --robot-diff --diff-since HEAD~30 # Changes in last 30 commits
Common Pitfalls
| Issue | Fix | |
|---|---|---|
| TUI blocks agent | Use --robot-* flags only | |
| Stale metrics | Check status field, results cached by data_hash | |
| Missing cycles | Run --robot-insights, check .cycles | |
| Wrong recommendations | Use --recipe actionable to filter to ready work |
Performance Notes
- Phase 1 metrics (degree, topo, density): instant
- Phase 2 metrics (PageRank, betweenness, etc.): 500ms timeout
- Results cached by
data_hash - Prefer
--robot-planover--robot-insightswhen speed matters