A triage engine that computes graph metrics like PageRank and critical paths to identify project bottlenecks and optimize workflow.

Install

mkdir -p .claude/skills/bv && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/1698" && unzip -o skill.zip -d .claude/skills/bv && rm skill.zip

Installs to .claude/skills/bv

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Beads Viewer - Graph-aware triage engine for Beads projects. Computes PageRank, betweenness, critical path, and cycles. Use --robot-* flags for AI agents.
154 charsno explicit “when” trigger
Intermediate

Key capabilities

  • →Parses.beads/beads.jsonl files into dependency graphs
  • →Computes nine metrics (PageRank, betweenness, cycles, etc)
  • →Generates optimized execution plans for task triaging
  • →Identifies critical paths and bottleneck bridges

How it works

It runs graph-theory algorithms against a structured JSONL source to calculate nodes' importance and path dependencies deterministically.

Inputs & outputs

You give it
Triage task (e.g., 'what's blocking release')
You get back
Prioritized list of tasks based on metric calculations

When to use bv

  • →Identify top bottlenecks in a project
  • →Calculate the critical path for release
  • →Find circular dependencies in tasks
  • →Generate optimized execution plans

About this skill

BV - Beads Viewer

A graph-aware triage engine for Beads projects (.beads/issues.jsonl in current br and Dolt-backed bd workspaces, with .beads/beads.jsonl supported for legacy workspaces). Computes graph metrics, generates execution plans, and explains recommendations. Human TUI for browsing; robot flags for AI agents. Compare source, scope, configuration, reference time and metric status when checking repeatability.

Why BV vs Raw Beads

CapabilityRaw Beads JSONLBV Robot Mode
Query"List all issues""List the top 5 bottlenecks blocking the release"
Context CostFull issue recordsCompact summaries available; full graph output still grows with the project
Graph LogicAgent must computePre-computed (PageRank, betweenness, cycles)
SafetyAgent might miss cyclesCycles 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 here
bv --robot-next          # Minimal: just the single top pick
bv --robot-plan          # Parallel execution tracks
bv --robot-insights      # Full graph metrics

The 9 Graph Metrics

BV computes these metrics to surface hidden project dynamics:

MetricWhat It MeasuresKey Insight
PageRankRecursive dependency importanceFoundational blockers
BetweennessShortest-path trafficBottlenecks and bridges
HITSHub/Authority dualityEpics vs utilities
Critical PathLongest dependent chain in task countsPrerequisites supporting long chains; not delivery-time estimates
EigenvectorInfluence via neighborsStrategic dependencies
DegreeDirect connection countsImmediate blockers/blocked
DensityDirected edges / possible edges: E / (N × (N−1)) for N > 1Project coupling health
CyclesCircular dependenciesStructural errors (must fix!)
Topo SortPrerequisites-first order for acyclic graphsStructural order; readiness still requires lifecycle and dependency checks

Two-Phase Analysis

BV uses async computation with timeouts:

  • Phase 1 (instant): degree, topo sort, density
  • Phase 2: PageRank, betweenness, HITS, eigenvector, critical path, cycles, k-core, articulation points and slack. ConfigForSize selects per-metric budgets and size/density skips; this is not one 500 ms end-to-end deadline.

Check the capitalized metric keys in the metric-status object, such as .status.Betweenness. That object is top-level for --robot-insights, --robot-plan, --robot-priority and --robot-next, but --robot-triage carries it at .triage.status and --robot-triage --brief omits it entirely. Normal states are pending, computed, timeout or skipped; sampled betweenness reports computed with reason: "approximate". Treat an error or unknown state as unavailable. Cycle detection stores one representative per cyclic component, subject to limits, rather than every simple cycle.

Robot Commands Reference

Triage & Planning

bv --robot-triage              # Full triage: recommendations, quick_wins, blockers_to_clear
bv --robot-next                # Claimable pick with route, or an explicit no-action response
bv --robot-plan                # Parallel execution tracks with unblocks lists
bv --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|critical
bv --robot-label-flow          # Cross-label dependency flow matrix
bv --robot-label-attention     # Attention-ranked labels

History & Changes

bv --robot-history             # Bead-to-commit correlations
bv --robot-diff --diff-since HEAD~1 # Changes since an existing Git ref

Other Commands

bv --robot-burndown sprint-1  # Use an existing sprint ID for burndown/scope changes
bv --robot-forecast all       # Duration/velocity heuristic, not a scheduler
bv --robot-alerts              # Stale issues, blocking cascades
bv --robot-suggest             # Hygiene: duplicates, missing deps, cycle breaks
bv --robot-graph               # Dependency graph export (JSON, DOT, Mermaid)
bv --export-graph graph.html   # Self-contained interactive HTML visualization

Scoping & Filtering

bv --robot-plan --label backend              # Scope to label's subgraph
bv --robot-insights --as-of HEAD~30          # Historical point-in-time
bv --recipe actionable --robot-plan          # Pre-filter: ready to work
bv --recipe high-impact --robot-triage       # Pre-filter: top PageRank
bv --robot-triage --robot-triage-by-track    # Group by parallel work streams
bv --robot-triage --robot-triage-by-label    # Group by domain

Built-in Recipes

Purposes below are the built-in recipe descriptions bv --robot-recipes reports. "No blockers" is shorthand for the full readiness rule stated above: open or in progress, deferral elapsed, and direct plus inherited parent gates satisfied.

RecipePurpose
defaultDefault view showing all open issues sorted by priority
actionableIssues ready to work on (no open blockers)
recentIssues updated in the last 7 days
blockedIssues waiting on dependencies
high-impactIssues with highest blocking impact (PageRank)
staleOpen issues not updated in 30+ days
triageIssues sorted by computed triage score (high impact + unblocking potential)
closedRecently closed issues
release-cutRecently closed items for changelog generation
quick-winsEasy items with no blockers - good for quick progress
bottlenecksHigh betweenness nodes - potential project bottlenecks

Robot Output Structure

Issue-backed responses include data_hash, source_authority, authority_hash and scope_hash. Use these alongside the reference clock and effective configuration. --robot-insights, --robot-plan, --robot-priority and --robot-next include a top-level .status; --robot-triage puts the same object at .triage.status and emits no analysis_config; graph export and metadata commands such as capabilities have their own schemas. Use bv --robot-schema for command-specific contracts. Historical issue analysis includes as_of / as_of_commit.

Partial or unknown authority permits exploratory results but withholds proven picks and claim commands. A computationally ready issue must be open or in progress, have no future deferral, and have satisfied direct and inherited parent dependency gates. Closed/tombstoned predecessors satisfy gates; missing records do not. Candidate filters stay separate from this full-source dependency context.

A new claim additionally requires an open, unassigned, non-epic issue with no open children or configured not-ready labels, plus a usable live tracker route. Plans can include ongoing work; the first recommendation is not necessarily claimable.

--robot-triage Output

Selected fields, with illustrative values; the full response also includes source diagnostics and metric status:

{
  "triage": {
    "quick_ref": { "open_count": 3, "actionable_count": 1, "blocked_count": 0 },
    "recommendations": [
      { "id": "bd-123", "score": 0.85, "reasons": ["Unblocks 5 tasks"] }
    ]
  }
}

Other triage fields include .triage.quick_wins, .triage.blockers_to_clear, .triage.project_health and .triage.commands. Inspect .actions in --robot-next for a selected issue's typed live route.

--robot-insights Output

Selected fields; names and ID/Value casing are significant:

{
  "Bottlenecks": [{ "ID": "bd-123", "Value": 0.45 }],
  "Keystones": [{ "ID": "bd-456", "Value": 12.0 }],
  "Cycles": [["bd-A", "bd-B", "bd-A"]],
  "ClusterDensity": 0.045,
  "full_stats": { "pagerank": { "bd-123": 0.15 } },
  "status": { "PageRank": { "state": "computed" }, "Cycles": { "state": "computed" } }
}

jq Quick Reference

bv --robot-triage | jq '.triage.quick_ref'                 # At-a-glance summary
bv --robot-triage | jq '.triage.recommendations[0]'        # Top recommendation, not necessarily claimable
bv --robot-plan | jq '.plan.summary.highest_impact'        # Best unblock target
bv --robot-insights | jq '.status'                         # Check metric readiness
bv --robot-insights | jq '{status: .status.Cycles, cycles: .Cycles}' # Stored cycle representatives
bv --robot-label-health | jq '.results.labels[] | select(.health_level == "critical")'

Agent Workflow Pattern

# 1. Inspect priorities and cycle computation status
bv --robot-triage | jq '.triage.quick_ref'
bv --robot-insights | jq '{status: .status.Cycles, cycles: .Cycles}'

# 2. Ask for a live next action; metadata-free/historical/partial sources may refuse
NEXT=$(bv --robot-next)
printf '%s\n' "$NEXT" | jq '{actionable, id, diagnostic_top_pick, actions}'

# 3. Require the actual claim route before considering a mutation
printf '%s\n' "$NEXT" | jq -e '.actionable == true and .source_authority.claim_safe == true and (.actions.claim.argv | type == "array")'

The last check intentionally fails for a no-action response. Inspect .actions.show against the current tracker state, then use the returned .actions.claim.argv in its .working_directory only when a claim is intended. Execute the argument array directly (for example, Python subprocess.run(action["argv"], cwd=action["working_directory"], check=True)); do not split a shell string or substitute a namespaced display ID. Analysis does not reserve work or gua


Content truncated.

When not to use it

  • →General-purpose data parsing (non-beads projects)
  • →When manual dependency tracking is sufficient for small lists

Prerequisites

Beads project data files (.beads/beads.jsonl)

Limitations

  • →Robot mode usage is strictly required for agent integration
  • →Requires specific.beads project file structure
  • →Computation time scales with graph complexity

How it compares

It provides computed graph-theoretical insights (like critical paths) instead of just filtering or listing project issues.

Compared to similar skills

bv side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
bv (this skill)33moReviewIntermediate
reconciliation306moNo flagsIntermediate
sql-queries186moNo flagsIntermediate
senior-data-engineer219moReviewAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

reconciliation

anthropics

Reconcile accounts by comparing GL balances to subledgers, bank statements, or third-party data. Use when performing bank reconciliations, GL-to-subledger recs, intercompany reconciliations, or identifying and categorizing reconciling items.

30139

sql-queries

anthropics

Write correct, performant SQL across all major data warehouse dialects (Snowflake, BigQuery, Databricks, PostgreSQL, etc.). Use when writing queries, optimizing slow SQL, translating between dialects, or building complex analytical queries with CTEs, window functions, or aggregations.

1888

senior-data-engineer

davila7

World-class data engineering skill for building scalable data pipelines, ETL/ELT systems, and data infrastructure. Expertise in Python, SQL, Spark, Airflow, dbt, Kafka, and modern data stack. Includes data modeling, pipeline orchestration, data quality, and DataOps. Use when designing data architectures, building data pipelines, optimizing data workflows, or implementing data governance.

2179

dbt-transformation-patterns

wshobson

Master dbt (data build tool) for analytics engineering with model organization, testing, documentation, and incremental strategies. Use when building data transformations, creating data models, or implementing analytics engineering best practices.

690

powerbi-modeling

github

Power BI semantic modeling assistant for building optimized data models. Use when working with Power BI semantic models, creating measures, designing star schemas, configuring relationships, implementing RLS, or optimizing model performance. Triggers on queries about DAX calculations, table relationships, dimension/fact table design, naming conventions, model documentation, cardinality, cross-filter direction, calculation groups, and data model best practices. Always connects to the active model first using power-bi-modeling MCP tools to understand the data structure before providing guidance.

1161

senior-data-scientist

davila7

World-class data science skill for statistical modeling, experimentation, causal inference, and advanced analytics. Expertise in Python (NumPy, Pandas, Scikit-learn), R, SQL, statistical methods, A/B testing, time series, and business intelligence. Includes experiment design, feature engineering, model evaluation, and stakeholder communication. Use when designing experiments, building predictive models, performing causal analysis, or driving data-driven decisions.

952

Search skills

Search the agent skills registry