Help us improve
Share bugs, ideas, or general feedback.
From lux-dev
Display a dashboard in the Lux window with metrics cards, charts, and status tables. Use when the user asks to "show a dashboard", "display metrics", "visualize status", "show KPIs", "monitor progress", or wants a visual overview of data. Also triggered by "build a dashboard", "metric cards", or "status overview".
npx claudepluginhub punt-labs/claude-plugins --plugin luxHow this skill is triggered — by the user, by Claude, or both
Slash command
/lux-dev:dashboardThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are composing a dashboard in the Lux display window. A dashboard is a single-glance overview: metric cards at the top, charts in the middle, detail table at the bottom. Adapt the layout to the data — don't force structure where it doesn't fit.
Creates p5.js generative art with seeded randomness, noise fields, and interactive parameter exploration. Use for algorithmic art, flow fields, or particle systems.
Share bugs, ideas, or general feedback.
You are composing a dashboard in the Lux display window. A dashboard is a single-glance overview: metric cards at the top, charts in the middle, detail table at the bottom. Adapt the layout to the data — don't force structure where it doesn't fit.
Determine what to display. Look at $ARGUMENTS and conversation context:
You need at minimum one of:
Build the element tree following the dashboard pattern. Adapt to what you have — not every dashboard needs all three sections.
Metric cards — Use a group with layout: "columns" containing text elements. Each card shows a label and a value. Use 2-5 cards; more than 5 loses the single-glance property.
Charts — Use plot elements for trends, comparisons, or distributions. Pick the right series type:
line for time series and trendsbar for comparisons and categoriesscatter for correlationsDetail table — Use table for the full data behind the metrics. Add flags: ["borders", "row_bg"] for readability. Keep columns to what fits — 3-6 columns is the sweet spot.
This is the canonical form. Adapt freely — fewer metrics, different chart types, extra sections, tabs for categories. The structure is a suggestion, not a constraint.
{
"scene_id": "dashboard",
"title": "Project Status",
"elements": [
{
"kind": "group", "id": "metrics", "layout": "columns",
"children": [
{"kind": "text", "id": "m1", "content": "Tests Passing\n142 / 150"},
{"kind": "text", "id": "m2", "content": "Coverage\n94.7%"},
{"kind": "text", "id": "m3", "content": "Open Issues\n7"},
{"kind": "text", "id": "m4", "content": "Build Time\n2.3s"}
]
},
{"kind": "separator"},
{
"kind": "plot", "id": "trend",
"title": "Test Results (last 7 days)",
"x_label": "Day", "y_label": "Count",
"series": [
{"label": "Passing", "type": "line", "x": [1,2,3,4,5,6,7], "y": [130,135,138,140,139,141,142]},
{"label": "Failing", "type": "line", "x": [1,2,3,4,5,6,7], "y": [20,15,12,10,11,9,8]}
]
},
{"kind": "separator"},
{
"kind": "table", "id": "details",
"columns": ["Test Suite", "Pass", "Fail", "Skip", "Time"],
"rows": [
["unit", 95, 3, 2, "0.8s"],
["integration", 38, 4, 1, "1.2s"],
["e2e", 9, 1, 0, "0.3s"]
],
"flags": ["borders", "row_bg"]
}
]
}
tab_bar with one tab per category, each containing its own metrics + chart + tablebutton with id: "refresh" and a spinner for loading state — then use recv() to detect clicks and update() to refresh valuesgroup with layout: "columns" to place two chart panels side by sideCall set_theme("imgui_colors_light") before showing the dashboard — light themes work best for data-dense views with tables and charts. Then call show() with the composed element tree. Use a descriptive scene_id (e.g., "test-dashboard", "sales-metrics").
If the dashboard has interactive elements (refresh button, filter combo, tab switches):
recv() to listen for events when the user indicates they've interactedupdate() to patch changed values — don't re-send the entire sceneFor auto-refresh patterns, the user must trigger each refresh cycle (e.g., "refresh the dashboard") — there is no background polling.