Agent Skill · SigNoz

signoz-modifying-dashboards

Modify an existing SigNoz dashboard — add or remove panels, edit a panel's query, threshold, or unit, rename the dashboard, change a panel type (graph ↔ table ↔ value), rearrange the layout, add or edit variables, or update tags. Make sure to use this skill whenever the user says "add a panel to my dashboard", "change the query on this panel", "remove the latency widget", "rename my dashboard", "update the filters", "rearrange the layout", "add a variable", "change panel type from graph to table", or otherwise asks to change something on a dashboard that already exists — even if they don't say "modify" or "edit" explicitly.

Provider: SigNoz Path in repo: plugins/signoz/skills/signoz-modifying-dashboards/SKILL.md

Skill body

Dashboard Modify

Prerequisites

This skill calls SigNoz MCP server tools (signoz:signoz_get_dashboard, signoz:signoz_update_dashboard, signoz:signoz_list_dashboards, signoz:signoz_list_metrics). Before running the workflow, confirm the signoz: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 fall back to raw HTTP calls or hand-edit dashboard JSON without the MCP tools.

When to use

Use this skill when the user asks to:

Do NOT use when:

Instructions

Step 1: Identify the target dashboard

Determine which dashboard the user wants to modify. If the user provides a dashboard name, UUID, or it is clear from context (e.g., an @mention or auto-context providing a dashboard resource), use that.

If the target dashboard is ambiguous:

  1. Call signoz:signoz_list_dashboards to list existing dashboards. Paginate through all pages — check pagination.hasMore in the response. If hasMore is true, call again with offset set to pagination.nextOffset and repeat until all pages are exhausted. Never stop at the first page.
  2. Present matching candidates to the user and ask which one to modify.

Step 2: Fetch the current dashboard state

Call signoz:signoz_get_dashboard with the dashboard UUID to retrieve its full configuration. This is mandatorysignoz:signoz_update_dashboard requires the complete post-update state, not a partial patch. Never skip this step.

Examine the response to understand:

Step 3: Plan the modification

Based on the user’s request, plan the changes.

Confirm with the user before applying if:

Destructive means data loss or silent behavior change. Even if the user says “just do it quickly,” a brief confirmation (“I’ll remove ‘Memory Fragmentation’ permanently — OK?”) takes seconds and prevents irreversible mistakes. User urgency does not override this guardrail.

Non-destructive changes proceed directly: renaming, adding a single panel, changing a unit, adding a variable, changing panel type (the query is preserved), adjusting layout, adding thresholds.

Compound modifications: When a request involves multiple changes (e.g., remove a panel + add a panel + rename), plan all changes against the fetched state and apply them as a single update. Do not apply and re-fetch between changes.

Step 4: Apply the modification

Merge the planned changes into the full dashboard JSON from Step 2.

Modification rules:

Dry-run modified panels (mandatory). Before signoz:signoz_update_dashboard, call signoz:signoz_execute_builder_query for each modified panel. Translate the widget’s builder.queryData[] / queryFormulas[] into the endpoint’s queries[].{type, spec} envelope: each queryData[i]{ type: "builder_query", spec: { name, signal, filter: {expression}, groupBy, aggregations } }; each queryFormulas[i]{ type: "builder_formula", spec: { name, expression } }. Preserve the original name (A, B, …) on every builder_query.spec — formula expressions reference inputs by that name (e.g., A * 100 / B), and dropping it makes the dry-run diverge from the saved panel. The endpoint cannot consume widget JSON directly. See the “Mandatory dry-run before update” guardrail for the conditions, the bool-filter footgun, and why this catches what the JSON diff cannot. Server error or unexpected empty result = fix the panel JSON before update.

Call signoz:signoz_update_dashboard with the dashboard UUID and the complete modified dashboard JSON.

Step 5: Report the result

Briefly tell the user what was changed. Offer further modifications if relevant.

Guardrails

Examples

User: “Add an error rate panel to my Redis dashboard”

Agent:

  1. Calls signoz:signoz_list_dashboards (paginates all pages) — finds “Redis Overview” dashboard with UUID abc-123.
  2. Calls signoz:signoz_get_dashboard with UUID abc-123 — gets full configuration with 8 existing panels.
  3. Calls signoz:signoz_list_metrics to find available Redis error metrics.
  4. Creates a new graph widget (with UUID, all required fields, and a formula query for error rate), adds a layout entry at the next available y position, and adds it to the appropriate row’s panelMap.
  5. Calls signoz:signoz_update_dashboard with the full modified JSON (all 9 panels).
  6. Reports: “Added an ‘Error Rate’ graph panel to your Redis Overview dashboard under the Overview section. Want me to adjust anything?”

User: “Change the latency panel from a graph to a table on my API dashboard”

Agent:

  1. Identifies “API Monitoring” dashboard from context, calls signoz:signoz_get_dashboard.
  2. Finds the panel titled “Request Latency” — if multiple panels could match, confirms with user: “I found ‘Request Latency’. Convert that one to a table?”
  3. Changes panelTypes from "graph" to "table", adds columnUnits and columnWidths if missing, keeps the query intact.
  4. Calls signoz:signoz_update_dashboard with the full modified JSON (all panels preserved).
  5. Reports: “Changed ‘Request Latency’ from a graph to a table. Want me to adjust column widths or add column units?”

User: “Remove the CPU panel and rename the dashboard to ‘Service Health’”

Agent:

  1. Fetches the dashboard via signoz:signoz_get_dashboard.
  2. Finds the “CPU Usage” panel. Confirms: “I’ll remove the ‘CPU Usage’ panel and rename the dashboard to ‘Service Health’. Proceed?” (Removal is destructive — always confirm.)
  3. User confirms.
  4. Removes the widget from widgets, its layout entry, and its panelMap reference. Leaves all other panel positions unchanged (the frontend grid closes gaps automatically). Updates title and name to “Service Health”.
  5. Calls signoz:signoz_update_dashboard with the full modified JSON.
  6. Reports: “Removed the ‘CPU Usage’ panel and renamed the dashboard to ‘Service Health’. Anything else to adjust?”