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".
From lux-devnpx claudepluginhub punt-labs/claude-plugins --plugin luxThis skill is limited to using the following tools:
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Optimizes cloud costs on AWS, Azure, GCP via rightsizing, tagging strategies, reserved instances, spot usage, and spending analysis. Use for expense reduction and governance.
Display beads issues in a filterable list/detail table in the Lux window.
Read .beads/issues.jsonl using the Read tool. If the file does not exist, tell the user: "No beads database found. Run bd init to set up beads for this project." and stop.
Each line is a JSON object that may include: id, title, status, priority, issue_type, description, assignee, owner, created_at, updated_at. Use these defaults for missing fields:
title: "", status: "open", priority: 4, issue_type: "task"description, assignee, 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.priority ascending (P1 first), secondary sort by updated_at descending (most recent first).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, assignee_or_empty, 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")
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", "Claimed By", "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-read the JSONL and call show_table again.