Read-only Beads console for Paseo: project progress, ready and waiting work, the critical chain, and a whole-project board, read through bv.
Supported platforms: macOS, Linux.
From the plugin's README
br/bd.bv, then the
selected source's .beads/metadata.json; if identity or routing remains inconclusive, detail
reads are disabled rather than guessed.bv's; the plugin only
reshapes them.bv renders without a plugin update but without bespoke styling for new values.bv define and what
the data's structure says. Statuses are Beads' built-in set (open, in_progress, hooked,
blocked, deferred, draft, pinned, closed, tombstone); a custom status declared in a
project's .beads/policy.yaml is shown verbatim under Other status, not guessed to be ready
or done. Groups follow parent links, never type names or id patterns. Labels are the project's
own vocabulary: they are shown and counted as written, a label carried by every open item is
set aside as uninformative, and no label is given a meaning — so there is no buil…npmjs · Paseo 0.9+
paseo plugin add npm:beads-viewer@0.2.0GitHub · Paseo 0.8 fallback
paseo plugin add cuongntr/paseo-beads-viewer --ref 47227c7b5bb7fd98fee1652a1c9038214c14df94Git security status and fallback installation are pinned to commit 47227c7b5bb7.
From the plugin's README
paseo plugin add cuongntr/paseo-beads-viewer
paseo plugin ls beads-viewer # expect beads-viewer running
Update to the latest release with paseo plugin update beads-viewer. If the panel does not
appear, paseo plugin logs beads-viewer shows why; the most common cause is bv missing from
the daemon's PATH.
Releases before 0.2.0 used the plugin id paseo-beads and the npm package paseo-beads. That id
belongs to another plugin on paseo.cafe, so this one is now beads-viewer. If you installed an
earlier release, remove it first with paseo plugin remove paseo-beads.
To run a local checkout instead:
npm install && npm run typecheck && npm test
paseo plugin install /absolute/path/to/paseo-beads-viewer
After editing source, run paseo plugin reload beads-viewer.
README
A read-only Beads console for Paseo workspaces. For the workspace you are in it shows how far along the project is per parent issue, what is in progress, what can start now, how the project's own labels spread over open work, and the critical chain of dependencies; a whole-project board by work state; execution tracks; risks; issue search; Markdown-rendered issue detail; and a composer attachment source for Beads issues.
The plugin never invokes a mutating br or bd command. There is no claim, close,
update, or create path in the code. bv may refresh its own compatibility export while
loading a bd/Dolt workspace, so bv calls are serialized per workspace.
Shown on a made-up demo project.
Overview: progress per parent, what is in progress, held and ready now, the project's labels over open work, and the critical chain.
Board: one column per work state in the order work moves, filtered by parent or label, each column with its definition.
Plan: bv's parallel execution tracks, containers left out.
Risks: stuck and parked work, alerts by severity, and the keystones that unblock the most.
>=0.8.0 (daemon and app).bv analysis CLI on the daemon machine's PATH.
Verified against bv v0.25.0.br or bd. The tracker CLI matching the project must
also be on the daemon PATH for issue detail and for issue types and assignees; everything
else works without it.Everything else degrades gracefully: a missing bv, a workspace without a .beads source,
and an empty-but-healthy project are three distinct, clearly labelled states.
paseo plugin add cuongntr/paseo-beads-viewer
paseo plugin ls beads-viewer # expect beads-viewer running
Update to the latest release with paseo plugin update beads-viewer. If the panel does not
appear, paseo plugin logs beads-viewer shows why; the most common cause is bv missing from
the daemon's PATH.
Releases before 0.2.0 used the plugin id paseo-beads and the npm package paseo-beads. That id
belongs to another plugin on paseo.cafe, so this one is now beads-viewer. If you installed an
earlier release, remove it first with paseo plugin remove paseo-beads.
To run a local checkout instead:
npm install && npm run typecheck && npm test
paseo plugin install /absolute/path/to/paseo-beads-viewer
After editing source, run paseo plugin reload beads-viewer.
npm install
npm run typecheck
npm test
Mobile audit — a hit here is a bug:
rg -n "document\.|window\.|localStorage|navigator\.|<[a-z]+[ >]|className=|onClick=" client/
| Contribution | Where |
|---|---|
Workspace panel beads ("Beads Viewer") |
Workspace tab bar and the Explorer |
| Command Center: Open Beads Viewer | Workspace context |
| Command Center: Refresh Beads Viewer | Workspace context; re-reads bv then opens the panel |
Slash command /beads |
Opens the panel for the current workspace |
Slash command /bead <issue-id> |
Opens the panel with that issue selected |
| Attachment source Beads issue | Composer attachment picker |
server/ code touches Node, the process table, or the filesystem.
Client code imports no Node module.spawn using a literal argv and an absolute executable
path resolved by scanning PATH directly. shell is never enabled, so no input can be
interpreted as a shell operator.paseo.workspaces.ref(id).refresh()), never from client input, and must be an existing
absolute directory.bv --version,
bv --robot-triage, bv --robot-plan, bv --robot-alerts, bv --robot-graph,
bv --robot-search,
<tracker> --db <validated-route> list --status all --fields id,issue_type,assignee --format csv,
and <tracker> --db <validated-route> show --json -- <id>. br reads also pass
--no-auto-import --no-auto-flush. Bare bv is never invoked. Neither tracker argv takes any
user input beyond the validated route and, for show, a pattern-checked issue id.-- so an id
can never be read as a flag.bv calls clear inherited BEADS_DIR, BEADS_DB, BEADS_JSONL, and BD_DB values so
daemon-level environment configuration cannot redirect a workspace read. Tracker detail calls set those
variables only to the validated route..beads/*.jsonl or a Beads SQLite/Dolt database. It reads
only .beads/metadata.json to bind tracker identity to bv's selected source; issue data comes
from CLI output. bv itself may refresh a bd compatibility export, so its calls are serialized.bv --robot-* is the authority for ranking, recommendations, execution tracks, alerts, cycle
detection, and velocity. The plugin derives only each issue's work state (from its status and
its still-open blockers) and the longest remaining dependency chain, because bv's own counts
treat dependency-blocked work as unblocked and containers as ready; see the design doc. bv and its source_authority, freshness, and data_hash are shown as
reported.br/bd.bv, then the
selected source's .beads/metadata.json; if identity or routing remains inconclusive, detail
reads are disabled rather than guessed.bv's; the plugin only
reshapes them.bv renders without a plugin update but without bespoke styling for new values.bv define and what
the data's structure says. Statuses are Beads' built-in set (open, in_progress, hooked,
blocked, deferred, draft, pinned, closed, tombstone); a custom status declared in a
project's .beads/policy.yaml is shown verbatim under Other status, not guessed to be ready
or done. Groups follow parent links, never type names or id patterns. Labels are the project's
own vocabulary: they are shown and counted as written, a label carried by every open item is
set aside as uninformative, and no label is given a meaning — so there is no built-in "needs a
human". To keep agents off some work, use bv's own BV_ROBOT_NOT_READY_LABELS, which the
panel's bv reads inherit.br ready and br blocked):
Ready — status open, and nothing it depends on is still open. Waiting — status
open, but a dependency, or one of its parent's, is still open; a parent's dependency on its
own children does not count. In progress — in_progress or hooked. Held — status
set by hand to blocked, deferred, draft or pinned. Other status — a custom status.
Done — closed. Each Board column shows its definition under its title.+N more, and a project past 2000 issues drops closed issues from the payload
first and says so. If the graph read fails, the panel falls back to the triage and plan
working set and says so. It is read-only: no drag, no drop, no status change.Scanned 24 Sep 2026, 20:13 UTC from cuongntr/paseo-beads-viewer.