Claude-skill-registry bv
Beads Viewer - graph-aware triage engine for Beads issue tracker with 9 graph metrics (PageRank, betweenness, HITS, etc.), dependency-aware planning, and purpose-built robot protocol for AI agents.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/bv" ~/.claude/skills/majiayu000-claude-skill-registry-bv && rm -rf "$T"
skills/data/bv/SKILL.mdBV - Beads Viewer
A high-performance TUI and graph-aware triage engine for the Beads issue tracker. Treats your project as a Directed Acyclic Graph (DAG), computing 9 graph-theoretic metrics to surface hidden dependencies, bottlenecks, and optimal work ordering.
CRITICAL: Robot Mode Required for AI Agents
NEVER run bare
- it launches an interactive TUI that blocks your session!bv
# WRONG - blocks terminal with TUI bv # CORRECT - JSON output for agents bv --robot-triage bv --robot-plan bv --robot-insights
Always use
flags for machine-readable output.--robot-*
Quick Reference for AI Agents
The Mega-Command: Start Here
# THE SINGLE ENTRY POINT - returns everything you need bv --robot-triage
Returns:
: at-a-glance counts + top 3 picksquick_ref
: ranked actionable items with scores, reasons, unblock inforecommendations
: low-effort high-impact itemsquick_wins
: items that unblock the most downstream workblockers_to_clear
: status/type/priority distributions, graph metricsproject_health
: copy-paste shell commands for next stepscommands
Minimal Alternative
# Just the single top pick + claim command bv --robot-next
Why Use BV
Graph Intelligence vs. List Thinking
Traditional trackers treat issues as a flat list sorted by priority. BV sees your project as a dependency graph and answers questions like:
| Traditional Question | BV's Graph-Aware Answer |
|---|---|
| "What's highest priority?" | "What unblocks the most work?" |
| "What should I work on?" | "What's on the critical path with zero slack?" |
| "Is this issue important?" | "What's its PageRank? Betweenness? Does it bridge clusters?" |
| "Are we making progress?" | "Did we resolve cycles? Is density improving?" |
Use Cases
# "What should I work on next?" bv --robot-triage | jq '.recommendations[0]' # "What's blocking the most progress?" bv --robot-triage | jq '.blockers_to_clear' # "Can multiple agents work in parallel?" bv --robot-plan | jq '.tracks' # "Are there circular dependencies?" (structural bugs!) bv --robot-insights | jq '.Cycles' # "What changed since last release?" bv --robot-diff --diff-since v1.0.0
The 9 Graph Metrics
BV computes these metrics to surface hidden project dynamics:
| # | Metric | What It Measures | Actionable Insight |
|---|---|---|---|
| 1 | PageRank | Recursive dependency importance | Foundational blockers |
| 2 | Betweenness | Shortest-path traffic | Bottlenecks & bridges |
| 3 | HITS Hubs | Dependency aggregators | Epics/milestones |
| 4 | HITS Authorities | Depended-on utilities | Core infrastructure |
| 5 | Critical Path | Longest dependency chain | Zero-slack keystones |
| 6 | Eigenvector | Influence via neighbors | Strategic dependencies |
| 7 | Degree | Direct connection counts | Immediate blockers/blocked |
| 8 | Density | Edge-to-node ratio | Project coupling health |
| 9 | Cycles | Circular dependencies | Structural bugs (must fix!) |
Understanding the Metrics
PageRank (Foundational Blocks) High PageRank = bedrock of your project. Rarely user-facing features; usually schemas, core libraries, or architectural decisions. Breaking them breaks the graph.
Betweenness (Gatekeepers) High betweenness = choke point. Might be an API contract both mobile and server teams wait on. Delay here doesn't just block one thread—it prevents sub-teams from synchronizing.
HITS (Epics vs. Utilities)
- High Hub Score: Epics/Product Features that aggregate many dependencies
- High Authority Score: Utilities that provide value to many consumers
Critical Path (Keystones) Any delay on keystone tasks translates 1:1 into project delivery delay. These have zero "slack."
Cycles (Structural Bugs) Circular dependencies are logical impossibilities. They indicate:
- Misclassified dependencies
- Missing intermediate tasks
- Scope confusion (should be merged)
Command Reference
Triage & Planning
# THE MEGA-COMMAND: comprehensive triage bv --robot-triage # Minimal: just the top pick bv --robot-next # Parallel execution tracks (for multi-agent work) bv --robot-plan # Priority misalignment detection bv --robot-priority
Graph Analysis
# Full metrics: PageRank, betweenness, HITS, eigenvector, critical path, cycles bv --robot-insights # Label-based analysis bv --robot-label-health # Per-label health (healthy|warning|critical) bv --robot-label-flow # Cross-label dependencies, bottleneck labels bv --robot-label-attention # Attention-ranked labels bv --robot-label-attention --attention-limit=5
History & Change Tracking
# Bead-to-commit correlations bv --robot-history bv --robot-history --bead-history BV-123 # Single bead focus bv --robot-history --min-confidence 0.7 # High-confidence only # Changes since a reference point bv --robot-diff --diff-since HEAD~10 bv --robot-diff --diff-since v1.0.0 bv --robot-diff --diff-since "2024-01-01"
Sprint & Forecasting
# Sprint burndown bv --robot-burndown "Sprint 42" # ETA predictions with dependency-aware scheduling bv --robot-forecast all bv --robot-forecast BV-123 # Alerts: stale issues, blocking cascades, priority mismatches bv --robot-alerts # Hygiene suggestions: duplicates, missing deps, cycle breaks bv --robot-suggest
Graph Export
# JSON (default) bv --robot-graph # Graphviz DOT (for rendering) bv --robot-graph --graph-format=dot # Mermaid (for docs) bv --robot-graph --graph-format=mermaid # Focused subgraph bv --robot-graph --graph-root=BV-123 --graph-depth=3 # Interactive HTML visualization bv --export-graph graph.html bv --export-graph sprint.html --graph-title "Sprint 42"
Scoping & Filtering
# Scope to label's subgraph bv --robot-plan --label backend # Historical point-in-time analysis bv --robot-insights --as-of HEAD~30 bv --robot-insights --as-of v1.0.0 bv --robot-insights --as-of "2024-01-15" # Pre-filter with recipes bv --recipe actionable --robot-plan # Ready to work (no blockers) bv --recipe high-impact --robot-triage # Top PageRank scores bv --recipe bottlenecks --robot-plan # High betweenness nodes # Group triage output bv --robot-triage --robot-triage-by-track # By parallel work streams bv --robot-triage --robot-triage-by-label # By domain
Export & Reporting
# Markdown report with Mermaid diagrams bv --export-md report.md # Static site for stakeholder sharing bv --pages # Interactive wizard bv --export-pages ./dashboard # Local export bv --export-pages ./bv-pages --pages-title "Sprint 42 Status" bv --preview-pages ./dir # Preview locally
Understanding Robot Output
All Robot JSON Includes
| Field | Purpose |
|---|---|
| Fingerprint of beads.jsonl (verify consistency across calls) |
| Per-metric state: + elapsed_ms |
/ | Present when using ; contains ref and resolved SHA |
Two-Phase Analysis
BV uses async computation with intelligent timeouts:
| Phase | Metrics | Latency | Notes |
|---|---|---|---|
| Phase 1 | Degree, topo sort, density | Instant | Always available |
| Phase 2 | PageRank, betweenness, HITS, eigenvector, cycles | 500ms timeout | Check flags |
For large graphs (>500 nodes): Some Phase 2 metrics may be
approx or skipped. Always check the status field.
Caching
Results are cached by
data_hash. Repeat calls with unchanged beads.jsonl return instantly.
jq Quick Reference
# At-a-glance summary bv --robot-triage | jq '.quick_ref' # Top recommendation bv --robot-triage | jq '.recommendations[0]' # Best unblock target bv --robot-plan | jq '.plan.summary.highest_impact' # Check metric readiness bv --robot-insights | jq '.status' # Find circular dependencies (MUST FIX!) bv --robot-insights | jq '.Cycles' # Critical labels needing attention bv --robot-label-health | jq '.results.labels[] | select(.health_level == "critical")' # All bottleneck issues bv --robot-insights | jq '.bottlenecks'
Response Shapes
Triage Response
{ "quick_ref": { "total_open": 42, "actionable": 15, "blocked": 12, "top_picks": ["BV-123", "BV-456", "BV-789"] }, "recommendations": [ { "id": "BV-123", "title": "Refactor auth module", "score": 0.85, "reasons": ["High PageRank", "Unblocks 5 tasks"], "unblocks": ["BV-200", "BV-201", "BV-202", "BV-203", "BV-204"] } ], "quick_wins": [...], "blockers_to_clear": [...], "project_health": { "status_distribution": {...}, "priority_distribution": {...}, "graph_density": 0.045, "cycle_count": 0 }, "commands": { "claim_top": "bd update BV-123 --status in_progress" }, "data_hash": "abc123...", "status": {...} }
Plan Response
{ "plan": { "tracks": [ { "track_id": "track-A", "reason": "Auth system dependency chain", "items": [ { "id": "AUTH-001", "priority": 1, "unblocks": ["AUTH-002", "AUTH-003"] } ] } ], "summary": { "total_actionable": 8, "total_blocked": 12, "highest_impact": "AUTH-001", "impact_reason": "Unblocks 3 tasks" } }, "data_hash": "...", "status": {...} }
Insights Response
{ "bottlenecks": [{ "id": "CORE-123", "value": 0.45 }], "keystones": [{ "id": "API-001", "value": 12.0 }], "influencers": [{ "id": "AUTH-007", "value": 0.82 }], "hubs": [{ "id": "EPIC-100", "value": 0.67 }], "authorities": [{ "id": "UTIL-050", "value": 0.91 }], "cycles": [["TASK-A", "TASK-B", "TASK-A"]], "clusterDensity": 0.045, "stats": { "pageRank": {...}, "betweenness": {...}, "eigenvector": {...}, "hubs": {...}, "authorities": {...}, "inDegree": {...}, "outDegree": {...}, "criticalPathScore": {...}, "topologicalOrder": [...] }, "status": { "pageRank": { "state": "computed", "elapsed_ms": 12 }, "betweenness": { "state": "computed", "elapsed_ms": 45 }, "cycles": { "state": "computed", "elapsed_ms": 8 } } }
Recipe System
BV ships with 11 pre-configured recipes for common workflows:
| Recipe | Purpose |
|---|---|
| All open issues sorted by priority |
| Ready to work (no blockers) |
| Updated in last 7 days |
| Waiting on dependencies |
| Top PageRank scores |
| Open but untouched for 30+ days |
| Sorted by computed triage score |
| Recently closed issues |
| Closed in last 14 days (for changelogs) |
| Easy P2/P3 items with no blockers |
| High betweenness nodes |
bv --recipe actionable --robot-plan bv --recipe high-impact --robot-triage bv --recipe bottlenecks --robot-insights
Hybrid Semantic Search
BV supports text + graph metric hybrid search:
# Default text-only search bv --search "login oauth" # Hybrid mode with preset bv --search "login oauth" --search-mode hybrid --search-preset impact-first # Custom weights bv --search "login oauth" --search-mode hybrid \ --search-weights '{"text":0.4,"pagerank":0.2,"status":0.15,"impact":0.1,"priority":0.1,"recency":0.05}' # Robot JSON output bv --search "login oauth" --search-mode hybrid --robot-search
Presets:
default, bug-hunting, sprint-planning, impact-first, text-only
Environment defaults:
(text|hybrid)BV_SEARCH_MODEBV_SEARCH_PRESET
(JSON string)BV_SEARCH_WEIGHTS
Time-Travel: Snapshot Diffing
Compare project state across git history:
# View state at any git reference bv --as-of HEAD~10 bv --as-of v1.0.0 bv --as-of "2024-01-15" bv --as-of abc1234 # commit SHA # Diff changes bv --robot-diff --diff-since HEAD~10 bv --robot-diff --diff-since v1.0.0
What gets tracked:
- Issues: New, Closed, Reopened, Removed, Modified
- Fields: Title, Status, Priority, Tags, Dependencies
- Graph: New Cycles, Resolved Cycles
- Metrics: Δ PageRank, Δ Betweenness, Δ Density
History View: Git Correlation
BV correlates beads with commits using multiple strategies:
| Strategy | Weight | How It Works |
|---|---|---|
| Explicit Mentions | 0.5 | Commit message contains bead ID |
| Temporal Proximity | 0.25 | Commit during bead's active lifecycle |
| Co-Commit Analysis | 0.15 | Files frequently modified together |
| Path Matching | 0.10 | File paths match bead's label scope |
# Full history report bv --robot-history # Single bead focus bv --robot-history --bead-history BV-123 # Filter by confidence bv --robot-history --min-confidence 0.7 # Time range bv --robot-history --history-since "30 days ago"
Interactive HTML Graph
Generate self-contained HTML visualizations:
bv --export-graph graph.html bv --export-graph --graph-title "Q4 Sprint" bv --export-graph --graph-include-closed
Features:
- Force-directed layout (pan, zoom, filter)
- Node size by PageRank/betweenness/critical-path
- Color by status (Open=green, Blocked=red, etc.)
- Full-text search
- Path finder (click two nodes to find shortest path)
- Docked/floating detail panel
- Light/dark mode
- Works offline, no server required
Keyboard shortcuts:
? help, F fit all, R reset, L toggle light/dark, P path finder
TUI Features (for Humans)
Launch with bare
bv:
Views
| Key | View | Description |
|---|---|---|
| (default) | List | Split-view with list + details |
| Kanban Board | Columnar workflow view |
| Graph | ASCII/Unicode dependency visualization |
| Insights | 6-panel metrics dashboard |
| History | Git correlation timeline |
Navigation
| Key | Action |
|---|---|
| Navigate up/down |
| Navigate left/right (in board/graph) |
| Open in $EDITOR |
| Full-screen detail |
| Search |
| Cycle panels |
| Help |
| Quit |
Filtering
| Key | Filter |
|---|---|
| Open only |
| Closed only |
| Ready (unblocked) |
| By label |
| By time |
Actions
| Key | Action |
|---|---|
| Export to Markdown |
| Copy issue as Markdown |
| Time-travel (compare to git ref) |
| Toggle priority hints overlay |
| Cycle sort mode |
Composite Impact Scoring
BV computes multi-factor impact scores:
Impact = 0.30×PageRank + 0.30×Betweenness + 0.20×BlockerRatio + 0.10×Staleness + 0.10×PriorityBoost
When computed impact diverges from human-assigned priority, BV flags misalignment:
⚠️ CORE-123 has Impact Score 0.85 but Priority P3. Reason: High PageRank (foundational dependency) + High Betweenness (bottleneck) Recommendation: Consider escalating to P1.
Baseline & Drift Detection
# Check drift from baseline bv --check-drift # Exit codes: 0=OK, 1=critical, 2=warning # Get baseline info bv --baseline-info
Use
--check-drift in CI/CD to catch quality regressions.
Automation Hooks
Configure pre/post-export hooks in
.bv/hooks.yaml:
pre_export: - command: "validate-issues.sh" on_error: fail post_export: - command: "notify-slack.sh" on_error: continue env: CHANNEL: "#dev"
Hook environment includes:
BV_EXPORT_PATH, BV_EXPORT_FORMAT, BV_ISSUE_COUNT, BV_TIMESTAMP
Performance Characteristics
| Operation | Latency |
|---|---|
| Phase 1 metrics | Instant |
| Phase 2 metrics (<500 nodes) | <500ms |
| Phase 2 metrics (large graphs) | May timeout/approx |
| Cached repeat calls | Instant (by data_hash) |
Use
bv --profile-startup for diagnostics.
Integration with bd (Beads CLI)
BV reads from
.beads/beads.jsonl created by bd:
# Initialize beads bd init # Create issues bd create "Implement login" -t feature -p 1 # Update status bd update BV-123 --status in_progress # Close bd close BV-123 --reason "Completed"
Important:
.beads/ is authoritative state. Always commit it with code changes.
Ready-to-Paste AGENTS.md Blurb
## bv - Beads Viewer (Graph-Aware Triage Engine) bv is a graph-aware triage engine for Beads projects (.beads/beads.jsonl). Instead of parsing JSONL or hallucinating graph traversal, use robot flags for deterministic, dependency-aware outputs with precomputed metrics (PageRank, betweenness, HITS, eigenvector, critical path, cycles, k-core). **⚠️ CRITICAL: Use ONLY `--robot-*` flags. Bare `bv` launches an interactive TUI that blocks your session.** ### The Workflow: Start With Triage bv --robot-triage # THE MEGA-COMMAND: start here bv --robot-next # Minimal: just the single top pick ### Key Commands | Command | Returns | |---------|---------| | `--robot-triage` | Ranked recommendations, quick wins, blockers to clear | | `--robot-plan` | Parallel execution tracks with unblocks lists | | `--robot-insights` | Full metrics: PageRank, betweenness, cycles | | `--robot-label-health` | Per-label health (healthy\|warning\|critical) | ### jq Quick Reference bv --robot-triage | jq '.recommendations[0]' # Top pick bv --robot-plan | jq '.plan.summary' # Best unblock target bv --robot-insights | jq '.Cycles' # Circular deps (MUST FIX!) **Performance:** Phase 1 instant, Phase 2 async (500ms timeout). Results cached by data_hash.
Installation
curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/beads_viewer/main/install.sh?$(date +%s)" | bash