From lux-dev
Display a beads issue board in the Lux window with filterable table and detail panel. Use when the user asks to "show beads", "show the board", "show issues", "beads board", "beads UI", "display backlog", "show my work", or wants to visually browse project issues. Also triggered by "issue board", "task board", "kanban", "backlog view", or "bd ready in lux".
How this skill is triggered — by the user, by Claude, or both
Slash command
/lux-dev:beadsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Display beads issues in a filterable list/detail table in the Lux window.
Display beads issues in a filterable list/detail table in the Lux window.
Run bd list --status=open,in_progress --json via the Bash tool to get live issue data from DoltDB. If the user asks for all issues, run bd list --all --json instead. If the command fails or returns empty output, tell the user: "No beads data available. Check that bd is configured for this project." and stop.
Parse the JSON array output. Each object has fields: id, title, description, status, priority, issue_type, owner, created_at, updated_at. Use these defaults for missing fields:
title: "", status: "open", priority: 4, issue_type: "task"description, owner, created_at, updated_at: ""From the parsed issues, filter and sort:
status is "open" or "in_progress" (default). If the user asks for all issues, skip this filter.in_progress issues float to top, then by priority ascending (P1 first), then by updated_at descending (most recent first) within equal groups.Build three parallel arrays (same length, same order):
rows — main table rows, one per issue:
[id, title, status, "P{priority}", issue_type]
detail.rows — detail panel fields for each issue:
[id, status, "P{priority}", issue_type, owner_or_empty, created_at[:10], updated_at[:10]]
Truncate created_at and updated_at to the first 10 characters (date only, e.g. "2026-03-09").
detail.body — description text for each issue:
description or "No description."
Collect unique status and issue_type values for combo filter items.
Call the show_table MCP tool with:
scene_id: "beads-<project>" where <project> is the current directory name (e.g. "beads-lux", "beads-quarry"). This gives each project its own tab.
title: "Beads: <project>" (e.g. "Beads: lux")
frame_id: "beads-<project>" — isolates the board in its own frame so it doesn't replace other content.
frame_title: "Beads: <project>" — display title for the frame tab.
columns: ["ID", "Title", "Status", "P", "Type"]
rows: the main table rows from Step 2
filters:
[
{"type": "search", "column": [0, 1], "hint": "Filter by ID or title..."},
{"type": "combo", "column": 2, "items": ["All", "<status-1>", "<status-2>"], "label": "Status"},
{"type": "combo", "column": 4, "items": ["All", "<type-1>", "<type-2>"], "label": "Type"}
]
where the "items" arrays are "All" followed by the sorted unique status or issue_type values from the issues.
detail:
{
"fields": ["ID", "Status", "Priority", "Type", "Owner", "Created", "Updated"],
"rows": detail_rows,
"body": detail_bodies
}
After show_table returns a value starting with ack:, the board is live. If it returns timeout, tell the user the display server did not respond. Otherwise, tell the user:
If the user asks to refresh, or after running any bd command (close, update, etc.), re-run bd list --json via the Bash tool and call show_table again.
npx claudepluginhub punt-labs/claude-plugins --plugin luxCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.