{
  "schemaVersion": "1.0",
  "item": {
    "slug": "grafana",
    "name": "Grafana",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/ivangdavila/grafana",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/grafana",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/grafana",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=grafana",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/grafana"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/grafana",
    "agentPageUrl": "https://openagent3.xyz/skills/grafana/agent",
    "manifestUrl": "https://openagent3.xyz/skills/grafana/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/grafana/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Variables and Templating",
        "body": "Multi-value variable needs $__all in regex — or only first value used\n${var:csv} for comma-separated — ${var:pipe} for pipe-separated in regex\nVariable in query: $var or ${var} — different escaping per data source\n$__interval auto-adjusts to time range — use for aggregation window\nChained variables: child depends on parent — set \"Refresh\" to \"On time range change\""
      },
      {
        "title": "Prometheus Queries",
        "body": "rate() needs range vector — rate(requests_total[5m]) not rate(requests_total)\nrate() for counters, deriv() for gauges — rate handles counter resets\n$__rate_interval over hardcoded — adapts to scrape interval and dashboard range\nLabels in legend: {{label}} — multiple: {{instance}} - {{job}}\nRegex filter: metric{label=~\"val1|val2\"} — !~ for negative match"
      },
      {
        "title": "Panel Configuration",
        "body": "\"No data\" vs \"null\" are different — configure in display options\nThresholds work on last value — not all values in range\nMin/max must match your data range — auto-scaling can hide anomalies\nTime series for trends, stat for current value — choose visualization wisely"
      },
      {
        "title": "Alerting",
        "body": "Alert evaluates on server — not browser, query must work without variables\nVariables not supported in alerts — hardcode values or use templates\nMultiple conditions: AND is default — configure for OR if needed\nAlert state \"Pending\" before \"Firing\" — for duration, prevents flapping\nNotification channel must be configured — alert without channel = no notification"
      },
      {
        "title": "Dashboard Provisioning",
        "body": "JSON export includes data source UID — will fail if different on import\nUse data source variables — ${DS_PROMETHEUS} substituted at runtime\nProvisioned dashboards read-only by default — allowEditing: true in provisioning\nFolder must exist before dashboard provisioning — or import fails silently"
      },
      {
        "title": "Data Sources",
        "body": "\"Server\" mode proxies through Grafana — hides credentials from browser\n\"Browser\" mode direct from browser — faster but exposes URL/auth\nTest connection catches most issues — but not query-specific problems\nTLS skip verify for self-signed — but fix proper certs for production"
      },
      {
        "title": "Transformations",
        "body": "Order matters — transformations apply in sequence\nOuter join for combining queries — match on time or label\nReduce for aggregating time series — last, mean, max, etc.\nAdd field from calculation — combine metrics client-side"
      },
      {
        "title": "Common Mistakes",
        "body": "Time range selector affects variable queries — unexpected results with \"All time\"\nDashboard saved but datasource not — works locally, breaks on import\nAlert rule in dashboard vs Grafana alerting — different systems, don't mix\nPanel queries run on every refresh — high-cardinality queries slow dashboard\nAnnotation queries add DB load — use sparingly on busy dashboards"
      }
    ],
    "body": "Variables and Templating\nMulti-value variable needs $__all in regex — or only first value used\n${var:csv} for comma-separated — ${var:pipe} for pipe-separated in regex\nVariable in query: $var or ${var} — different escaping per data source\n$__interval auto-adjusts to time range — use for aggregation window\nChained variables: child depends on parent — set \"Refresh\" to \"On time range change\"\nPrometheus Queries\nrate() needs range vector — rate(requests_total[5m]) not rate(requests_total)\nrate() for counters, deriv() for gauges — rate handles counter resets\n$__rate_interval over hardcoded — adapts to scrape interval and dashboard range\nLabels in legend: {{label}} — multiple: {{instance}} - {{job}}\nRegex filter: metric{label=~\"val1|val2\"} — !~ for negative match\nPanel Configuration\n\"No data\" vs \"null\" are different — configure in display options\nThresholds work on last value — not all values in range\nMin/max must match your data range — auto-scaling can hide anomalies\nTime series for trends, stat for current value — choose visualization wisely\nAlerting\nAlert evaluates on server — not browser, query must work without variables\nVariables not supported in alerts — hardcode values or use templates\nMultiple conditions: AND is default — configure for OR if needed\nAlert state \"Pending\" before \"Firing\" — for duration, prevents flapping\nNotification channel must be configured — alert without channel = no notification\nDashboard Provisioning\nJSON export includes data source UID — will fail if different on import\nUse data source variables — ${DS_PROMETHEUS} substituted at runtime\nProvisioned dashboards read-only by default — allowEditing: true in provisioning\nFolder must exist before dashboard provisioning — or import fails silently\nData Sources\n\"Server\" mode proxies through Grafana — hides credentials from browser\n\"Browser\" mode direct from browser — faster but exposes URL/auth\nTest connection catches most issues — but not query-specific problems\nTLS skip verify for self-signed — but fix proper certs for production\nTransformations\nOrder matters — transformations apply in sequence\nOuter join for combining queries — match on time or label\nReduce for aggregating time series — last, mean, max, etc.\nAdd field from calculation — combine metrics client-side\nCommon Mistakes\nTime range selector affects variable queries — unexpected results with \"All time\"\nDashboard saved but datasource not — works locally, breaks on import\nAlert rule in dashboard vs Grafana alerting — different systems, don't mix\nPanel queries run on every refresh — high-cardinality queries slow dashboard\nAnnotation queries add DB load — use sparingly on busy dashboards"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ivangdavila/grafana",
    "publisherUrl": "https://clawhub.ai/ivangdavila/grafana",
    "owner": "ivangdavila",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/grafana",
    "downloadUrl": "https://openagent3.xyz/downloads/grafana",
    "agentUrl": "https://openagent3.xyz/skills/grafana/agent",
    "manifestUrl": "https://openagent3.xyz/skills/grafana/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/grafana/agent.md"
  }
}