Dashboards·terminal · desktop·MIT
bw-peek
Open a Beadwork ticket in a pane beside the transcript from a button under the reply.

bw-peek shows Beadwork tickets inside Claude Code. When a reply names a ticket id such as adf-c50, a dim row of buttons appears under it; click one and a pane opens beside the transcript with the ticket’s status, title, description and comments. /bw <id> opens the same pane from the prompt. Nothing is added to the model’s context and nothing is written to Beadwork.

What it does
- Buttons under replies. One button per distinct id, in order of first mention, up to six before
+N more. An id only gets a button when it is a real ticket: full ids (think-1pp) are checked against the board of the repository their prefix is registered to, from any directory, and bare ids (c50,wxh.5) against the board of the repository the session runs in. A short stoplist keeps words liketheorjsonfrom lighting up, and ids with an unknown prefix (sha-256) draw nothing. - The pane. A digest row with status, priority, type, labels, assignee, due or deferral date and created or closed dates. Then the title,
parent,blocked byandblocksas buttons, the children with a closed count, the close reason, the description collapsed to eight rows, and each comment as a 50-character digest with a[ + ]to expand it. Every ticket id inside those texts is a button too, and arecentrow at the bottom is the trail back. - Search. The box at the top takes a full id, a bare local part, or a pasted
bw show adf-c50. A partial id draws Beadwork’s list of candidates as buttons. A missing ticket says so. - Five settings under
pluginConfigs["bw-peek@bw-peek"].options:mention_buttons,bare_mentions,mention_cap,collapsed_rowsanddigest_chars.
pull-request-pane does the same job for GitHub pull requests and issues, and linear-mod for Linear. bw-peek is the version for Beadwork boards.
Install
Needs Claude Code 2.1.287 or later, plus Beadwork’s bw command on PATH. Beadwork is a command-line ticket tracker whose board lives in the repository (bw init) and whose tickets are read with bw show. jq is optional and makes reading the board’s id list cheaper. Buttons for ids of other repositories need bw 0.13.0 or later with the registry turned on (registry: { auto: true } in ~/.bw).
claude plugin marketplace add iautom8things/bw-peek
claude plugin install bw-peek@bw-peek
Restart the session. Run /bw adf-c50 to open a ticket, /bw alone to open the pane with the search box focused, or click an id button under a reply. Escape closes the pane and ctrl+x tab moves the keyboard into it. The pane docks beside the transcript from 110 columns and draws inline above the prompt below that.
How it works
Everything the pane shows comes from the bw command run locally in the session’s working directory: bw registry list --json once at session start, bw config get prefix before every board read, bw list --all --json | jq -r ".[].id" (or the plain bw list --all listing without jq) for the session board’s ids and bw -C <path> list for another registered repository’s the first time a reply names its prefix, bw show <id> --json for a ticket with a 20-second timeout, and bw list --parent <id> for its children. The plugin opens no network connection of its own; whatever bw does is up to Beadwork.
The tool.call hook watches Bash only. After a command has run, it checks whether the text matches bw create, bw delete or bw import and, if so, re-reads the board’s id list so a new ticket’s bare id gets a button. It never changes or blocks a command. The list is also re-read when a reply is drawn and it is older than two minutes, always in the background: a redraw never waits on bw.
Mentions are found in ui.render on each assistant message with a regex built from the known prefixes, plus a bare-id pattern checked against the board’s id set. The author measured the whole hook at well under a millisecond per redraw against a 500-ticket board. The model’s text is untouched and no rule asks it to format ids, so the cost in tokens is zero.
A ticket shown again within 30 seconds is not re-fetched; the Refresh button always is. The plugin store keeps the last ten tickets that resolved, across sessions, for the recent row; a forget button clears it.
Limitations
- The pane does not draw on mobile: that surface has no text input for the search box, so the hook passes there.
- Bare ids resolve only against the board of the current directory. In a directory without
bw initthey stay plain text; full ids still open through the registry. - A full id stays plain text until its board has been listed, then the reply redraws with the button. A board
bwcannot list keeps the ids it had, or draws them unchecked if it was never read. - The registry is read once at session start, so a repository registered mid-session gets its buttons after a reload or in the next session. Without the registry, or on a bw older than 0.13.0, only the session repository’s ids get buttons.
- Children of a ticket from another repository are listed only when the registry names exactly one path for its prefix.
- Early access. The author notes that the function-hooks API moves between Claude Code releases.
More mods
The whole directory →agent-flow
Every subagent of the session in a live tree beside the transcript. Zero tokens.
todos
The repo's TODOs and FIXMEs above the prompt at session start, newest first.
budget-guard
Warns at 80% of a cost or plan-window limit you set, then refuses tool calls past it.
bullswarm
Quota meters for every agent CLI, and Claude subagents routed to the pool with surplus.
