npx skills add ...
npx skills add signoz/agent-skills --skill signoz-explaining-dashboards
npx skills add signoz/agent-skills --skill signoz-explaining-dashboards
Explain what an existing SigNoz dashboard shows in plain operational language — the panels, queries, variables, and what to watch for on each. Make sure to use this skill whenever the user asks "explain this dashboard", "what does my [X] dashboard show", "walk me through the panels", "what should I watch for on this dashboard", or "help me understand this dashboard", or otherwise asks for an interpretation of a dashboard's contents — even if they don't say "explain" explicitly. Also use it when someone is onboarding to a service and wants to understand what its existing observability looks like.
This skill calls SigNoz MCP server tools (signoz_get_dashboard,
signoz_list_dashboards). Before running the workflow, confirm the
signoz_* tools are available. If they are not, the SigNoz MCP server
is not installed or configured — run signoz-mcp-setup first to initialize or
repair the MCP connection. Do not guess at a dashboard's contents from its
title alone.
Use this skill when the user asks to:
Do NOT use when:
signoz-modifying-dashboardsUse a supplied id or a dashboard resource that includes its id directly.
For any name-only request, call signoz_list_dashboards and resolve the name to
an id, matching on spec.display.name. Cover the whole listing — narrow with
the filter argument, re-run unfiltered when it comes back empty, and page by
raising offset by limit until you have covered total. Never pass a
dashboard name to signoz_get_dashboard or conclude it is missing from the
first page.
If multiple dashboards match, present the candidates and ask which one to explain.
Call signoz_get_dashboard with the dashboard id. This is mandatory — you
need the complete JSON to explain the dashboard accurately. Never guess based on
the title alone.
Examine the response to understand:
spec.display.name, .description, tags — the dashboard identity and author-provided contextspec.variables — dashboard-level filters (dropdowns the user can change)spec.panels — a map keyed by panel id: the panels, their plugin kinds, titles, and queriesspec.layouts — Grid entries placing panels in the 12-column grid via content.$refspec.display.title — the section a panel belongs toStructure your explanation in this order:
1. Overview — One paragraph summarizing the dashboard's purpose, what it
monitors, and what data sources it draws from (metrics, traces, logs). Mention
the tags if they provide useful context.
2. Variables and filters — Explain each variable:
spec.name, the $handle queries reference) and what it filters — for a
signoz/DynamicVariable that is plugin.spec.name on plugin.spec.signalsignoz/DynamicVariable (auto-populated from telemetry),
signoz/QueryVariable (query-driven dropdown), signoz/CustomVariable
(configured choices), or a TextVariable (free-form input)allowMultiple) and an "ALL" optionfilter.expression —
changing that variable dropdown would not affect those panels, which can be
confusing3. Panel-by-panel walkthrough — Group panels by Grid section: walk
spec.layouts in order, using each Grid's spec.display.title as the section
header and following its spec.items (by y then x) to the panels they
$ref. For a single untitled Grid, walk panels in position order and organize
by logical theme. For each panel:
kind:
signoz/TimeSeriesPanel, signoz/NumberPanel (single value),
signoz/TablePanel, signoz/BarChartPanel, signoz/PieChartPanel,
signoz/HistogramPanel, signoz/ListPanel (raw rows)signoz/BuilderQuery, explain the signal, aggregation, filter.expression,
and groupBy. For a signoz/CompositeQuery, explain each member and how the
formula combines them. For ClickHouse SQL or PromQL, translate the query
intent into plain English.plugin.spec.formatting.unit so the user knows how to read the valuesFor panels with complex queries:
4. Dashboard health observations — After the walkthrough, note any structural issues you spotted:
spec.panels that no grid item references (they never render)5. Coverage gaps — Based on what the dashboard actually monitors, note significant observability areas that are absent. Only mention gaps that are directly related to the technology or domain the dashboard covers — do not speculate about unrelated areas. Frame as suggestions: "You may want to consider adding panels for X to cover Y."
Surface up to 3 follow-up intents based on what the explanation surfaced — things like running a specific panel's underlying query, filling a coverage gap, or wiring an alert for an actionable threshold the user has not yet alerted on. Use your judgment; do not pad to 3.
Skip follow-ups when the user was clearly just onboarding to the dashboard ("what is this?") and showed no further intent. No chips beat wrong chips.
signoz_get_dashboard to get the full
configuration. Never explain based on the dashboard title or listing alone.spec.display.title to group panels, not layout
coordinates. Those titles are the section headers the dashboard author intended.signoz_list_dashboards before concluding a
dashboard does not exist.signoz-modifying-dashboards.User: "Explain my PostgreSQL dashboard"
Agent:
signoz_list_dashboards (paginates all pages) — finds "PostgreSQL
Overview" dashboard with id abc-123.signoz_get_dashboard with id abc-123 — gets full configuration.host_name (dynamic, filters by
host.name) and database (dynamic, filters by postgresql.database.name).
Both support multi-select."User: "What does each panel on this dashboard show?" (with dashboard context provided via @mention or auto-context)
Agent:
signoz_get_dashboard — gets full configuration.User: "Help me understand this LLM monitoring dashboard — I'm new to it"
Agent: