[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-grafana-slo-optimize":3,"mdc--gk24dc-key":34,"related-repo-grafana-slo-optimize":1613,"related-org-grafana-slo-optimize":1720},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"slo-optimize","optimize Grafana SLO timeline trends","Analyzes Grafana SLO timeline trends via gcx and produces data-backed advisory recommendations:\nobjective tuning, alerting sensitivity review, label visibility, or window adjustments.\nUse when the user wants to analyze SLO performance trends and receive improvement suggestions.\nTrigger on phrases like \"optimize my SLO\", \"SLO improvement suggestions\", \"tune my SLO\",\n\"SLO performance analysis\", or \"should I change my SLO objective\".\nFor SLO status overview use slo-check-status.\nFor investigating breaching SLOs use slo-investigate.\nFor creating or modifying SLO definitions use slo-manage.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"grafana","Grafana","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fgrafana.jpg",[12,16,19,20],{"name":13,"slug":14,"type":15},"Observability","observability","tag",{"name":17,"slug":18,"type":15},"Performance","performance",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Analytics","analytics",430,"https:\u002F\u002Fgithub.com\u002Fgrafana\u002Fgcx","2026-07-12T07:43:38.690627",null,29,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"A CLI for managing Grafana Cloud resources. Optimized for agentic usage.","https:\u002F\u002Fgithub.com\u002Fgrafana\u002Fgcx\u002Ftree\u002FHEAD\u002Fclaude-plugin\u002Fskills\u002Fslo-optimize","---\nname: slo-optimize\ndescription: |\n  Analyzes Grafana SLO timeline trends via gcx and produces data-backed advisory recommendations:\n  objective tuning, alerting sensitivity review, label visibility, or window adjustments.\n  Use when the user wants to analyze SLO performance trends and receive improvement suggestions.\n  Trigger on phrases like \"optimize my SLO\", \"SLO improvement suggestions\", \"tune my SLO\",\n  \"SLO performance analysis\", or \"should I change my SLO objective\".\n  For SLO status overview use slo-check-status.\n  For investigating breaching SLOs use slo-investigate.\n  For creating or modifying SLO definitions use slo-manage.\nallowed-tools: Bash\n---\n\n# SLO Optimizer\n\nAnalyze SLO timeline trends, compute statistics over the past 28 days, and generate advisory\nrecommendations backed by real metric values. Never modify SLO definitions directly — route to\nslo-manage when the user wants to apply a recommendation.\n\n## Core Principles\n\n1. Use gcx commands exclusively — do not call Grafana APIs directly.\n2. Trust the user's expertise — skip explanations of what SLOs or burn rates are.\n3. Use `-o json` for agent processing of structured output; default format for user display.\n4. Show graph output for timeline data so the user can see the trend visually.\n5. Every recommendation MUST include supporting data (current values, projected values, or\n   historical comparisons). No generic advice without numbers.\n6. This skill is advisory only. Route to slo-manage for any changes the user wants to apply.\n\n## Prerequisites\n\ngcx configured with a context pointing to the target Grafana instance.\n\nIf the user does not supply a UUID, list available SLOs first:\n\n```bash\ngcx slo definitions list\n```\n\nAsk the user which SLO to analyze if the target is ambiguous.\n\n## Optimization Workflow\n\n### Step 1: Retrieve SLO Definition\n\n```bash\ngcx slo definitions get \u003CUUID> -o json\n```\n\nExtract and note:\n- `spec.name` — display name\n- `spec.objectives[0].value` — current objective (e.g., 0.999)\n- `spec.objectives[0].window` — compliance window (e.g., 28d)\n- `spec.query.type` — ratio | freeform | threshold\n- `spec.query.ratio.groupByLabels` — dimensional labels (may be empty)\n- `spec.alerting` — fastBurn \u002F slowBurn configuration (may be absent)\n- `spec.destinationDatasource.uid` — datasource UID for metric queries\n\n### Step 2: Fetch 28-Day Timeline\n\n```bash\n# Default graph output for user display\ngcx slo definitions timeline \u003CUUID> --from now-28d --to now\n\n# JSON output for statistical analysis\ngcx slo definitions timeline \u003CUUID> --from now-28d --to now -o json\n```\n\nParse the JSON output to extract SLI values across the time series. Compute:\n- `mean_sli` — average SLI over the 28-day window\n- `min_sli` — lowest observed SLI point\n- `max_sli` — highest observed SLI point\n- `std_dev` — variability indicator\n\nIf timeline returns no data (NODATA), note it and skip to Step 3 for current status.\n\n### Step 3: Get Current Status (Wide Format)\n\n```bash\ngcx slo definitions status \u003CUUID> -o wide\n```\n\nExtract from the wide output:\n- Current SLI value\n- Error budget remaining (%)\n- Burn rate (current)\n- SLI_1H and SLI_1D snapshots\n- Status: OK | BREACHING | NODATA\n\n### Step 4: Query Raw SLI Metrics (When Timeline Is Insufficient)\n\nWhen timeline data is sparse (\u003C 7 days of points) or all NODATA, query raw metrics directly\nusing the datasource UID from Step 1:\n\n```bash\n# SLI window metric (primary trend signal)\ngcx metrics query -d \u003Cdatasource-uid> \\\n  'grafana_slo_sli_window{grafana_slo_uuid=\"\u003CUUID>\"}' \\\n  --from now-28d --to now --step 6h\n\n# Success and total rate for ratio SLOs\ngcx metrics query -d \u003Cdatasource-uid> \\\n  'grafana_slo_success_rate_5m{grafana_slo_uuid=\"\u003CUUID>\"}' \\\n  --from now-28d --to now --step 6h\n\ngcx metrics query -d \u003Cdatasource-uid> \\\n  'grafana_slo_total_rate_5m{grafana_slo_uuid=\"\u003CUUID>\"}' \\\n  --from now-28d --to now --step 6h\n```\n\nThe recording rules label these series with `grafana_slo_uuid` (not `slo_uuid`).\nAn empty result is not proof of a data gap — first rule out label, UUID,\ndatasource, and time-range mismatches (these series live on the SLO's\ndestination datasource, and a new SLO has no history yet). A bare\n`grafana_slo_sli_window` query discriminates quickly: series present means\nthe selector is wrong; none at all points to a new SLO or the wrong\ndatasource.\n\nIf the datasource UID is not in the definition, resolve it:\n\n```bash\ngcx datasources list --type prometheus\n```\n\nIf the filtered list comes back empty, the stack may leave the `type` field\nblank in list payloads (known issue) — rerun without `--type` and pick the\nPrometheus datasource by name, or use the UID from\n`.spec.destinationDatasource.uid` directly.\n\n### Step 5: Analyze Trends\n\nClassify the pattern using the timeline data from Steps 2 and 4:\n\n**Sustained decline** — SLI trending downward for 7 or more consecutive days. Compute the\nslope over the last 7 days vs. the preceding 7 days to confirm direction.\n- Recommendation trigger: investigate underlying service degradation; a window adjustment will\n  not fix a declining service.\n\n**Periodic dips** — SLI drops recur at regular intervals (e.g., every weekend, every night).\nLook for temporal correlation in the min points.\n- Recommendation trigger: window adjustment (e.g., 7d → 28d smooths weekend traffic spikes)\n  or objective reduction if the dips are expected.\n\n**Sudden drops** — Step-change in SLI at a specific timestamp (deployment, config change).\nIdentify the onset timestamp and estimate error budget consumed by the event.\n- Recommendation trigger: check alerting is configured; if budget consumed > 20% by a single\n  event, consider tighter fastBurn thresholds.\n\n**Budget exhaustion rate** — Project when the error budget will reach 0 based on the current\nburn rate from Step 3. Formula:\n  `days_until_exhausted = budget_remaining_pct \u002F (burn_rate * 100 \u002F window_days)`\n- Recommendation trigger: if \u003C 7 days remain, flag as urgent; route to slo-investigate.\n\n### Step 6: Generate Advisory Recommendations\n\nProduce numbered recommendations. Each recommendation requires:\n1. A specific change (what to do)\n2. Supporting data (why — current value vs. proposed value)\n3. Expected outcome\n\n**Objective tuning**\n\nObjective changes need enough history to be trustworthy: a `mean_sli` computed\nover less than 7 days of data reflects startup noise as much as real\nperformance. With shorter history, still report the numbers, but frame any\nobjective recommendation as provisional pending adequate history and say when\nenough data will exist to confirm it. And when the SLO is chronically\nbreaching, lead with investigation (slo-investigate) before proposing a lower\ntarget — a persistent breach can mean a service problem to fix, not a target\nto relax.\n\nIf `mean_sli \u003C objective - 0.005` (more than 0.5 pp below the objective):\n- Suggest lowering the objective to `floor(mean_sli * 1000) \u002F 1000` (rounded down to 3 dp).\n- Include: current objective, observed mean SLI, proposed objective.\n- Rationale: the SLO is chronically breaching due to an unrealistic target.\n\nIf `mean_sli > objective + 0.010` (more than 1 pp above the objective):\n- Suggest tightening the objective toward `mean_sli - 0.005`.\n- Include: current objective, observed mean SLI, proposed objective.\n- Rationale: the SLO is trivially satisfied; tighten to reflect achievable performance.\n\n**groupByLabels addition (ratio query type only)**\n\nIf `spec.query.ratio.groupByLabels` is empty or absent:\n- Recommend adding dimensional labels such as `cluster`, `service`, `endpoint`, or\n  `status_code` depending on what labels exist in the underlying metric series.\n- Rationale: without groupByLabels, all dimensions are collapsed — the SLO cannot identify\n  which dimension is causing a breach.\n\n**Alerting configuration**\n\nIf `spec.alerting` is absent or empty:\n- Recommend configuring fastBurn (page) and slowBurn (ticket) alerts.\n- Example thresholds: fastBurn `burnRateThreshold: 14.4` over 1h (consumes 2% budget\u002Fhour),\n  slowBurn `burnRateThreshold: 1` over 6h.\n\nIf alerting is configured and current burn rate (from Step 3) has been above 2x for the past\n7 days (compare burn rate from status with recent timeline values):\n- Recommend reviewing alerting thresholds — existing alerts may not be firing despite sustained\n  budget drain.\n- Include: current burn rate, alert threshold from definition, observed duration above 2x.\n\n**Window adjustment**\n\nIf the SLO window is 7d and periodic dips are detected (weekend pattern):\n- Recommend switching to 28d to smooth the variability.\n- Include: current window, dip frequency, estimated improvement in budget consumption.\n\nIf the SLO window is 28d or 30d and `mean_sli` is very stable (std_dev \u003C 0.001):\n- Note the window is appropriate; no change needed.\n\n### Step 7: Present Recommendations and Route to slo-manage\n\nPresent all recommendations as advisory text. Do not apply any changes.\n\nAfter presenting recommendations, ask:\n> \"Would you like me to apply any of these recommendations? If so, I'll switch to slo-manage\n> to pull the current definition and implement the changes with a dry-run first.\"\n\nIf the user confirms, invoke the slo-manage skill to handle the update workflow.\n\n## Output Format\n\n```\nSLO: \u003Cname>\nUUID: \u003Cuuid>\nObjective: \u003Cvalue> over \u003Cwindow>\nAnalysis period: now-28d to now\n\nSLI Statistics (28d):\n  Mean: \u003Cvalue>   Min: \u003Cvalue>   Max: \u003Cvalue>\n  Std dev: \u003Cvalue>\n\nCurrent Status:\n  SLI: \u003Cvalue>   Budget remaining: \u003Cpct>%   Burn rate: \u003Cvalue>x\n  SLI (1h): \u003Cvalue>   SLI (1d): \u003Cvalue>\n\n[28-day timeline graph]\n\nTrend classification: \u003CSustained decline | Periodic dips | Sudden drops | Stable>\n\u003COne sentence describing the dominant pattern with supporting data>\n\nAdvisory Recommendations:\n\n1. \u003CRecommendation title>\n   Current: \u003Cvalue>\n   Proposed: \u003Cvalue>\n   Why: \u003Crationale with numbers>\n   [If based on \u003C 7 days of history: \"Provisional — re-evaluate after \u003CN> more days of data\"]\n\n2. \u003CRecommendation title>\n   ...\n\n[If no recommendations apply:]\nNo objective or alerting changes recommended. The SLO configuration appears well-calibrated\nfor the observed performance over the past 28 days.\n\n---\nTo apply a recommendation: slo-manage will pull the definition and apply the change with\na dry-run. Confirm which recommendation(s) you want to apply.\n```\n\n## Error Handling\n\nCollect errors; report them at the end of the analysis, not interleaved with findings.\n\n- **`gcx slo definitions get` fails (not found)**: Confirm the UUID and context.\n  Run `gcx slo definitions list` to show available SLOs.\n\n- **Timeline returns NODATA**: Recording rule metrics may not be populating. Check the\n  destination datasource configuration. Proceed with raw metric queries in Step 4. If raw\n  metrics also return NODATA, report the data gap and recommend verifying that the SLO\n  recording rules are evaluating correctly.\n\n- **Datasource UID not in definition**: Run `gcx datasources list --type prometheus`\n  and present the list to the user. If the filtered list is empty (blank `type` fields in\n  the list payload), rerun without `--type` and select by name. Do not block the\n  analysis — use the remaining timeline data from Step 2.\n\n- **Timeline data \u003C 7 days of points**: The SLO may be newly created. Note the limited\n  analysis window, proceed with available data, and suppress trend classifications that\n  require 7+ days of data.\n\n- **Status returns BREACHING**: Note the breach in the output. Include budget exhaustion\n  rate in the recommendations. Route to slo-investigate for deeper root cause analysis if\n  the user wants to understand why the SLO is breaching (not just optimize it).\n\n- **gcx command not found or auth error**: Check `gcx config view` to verify\n  the active context and credentials.\n",{"data":35,"body":37},{"name":4,"description":6,"allowed-tools":36},"Bash",{"type":38,"children":39},"root",[40,49,55,62,106,112,117,122,161,166,172,179,238,243,324,330,483,488,535,540,546,598,603,631,637,642,956,985,990,1024,1053,1059,1064,1075,1083,1093,1101,1111,1119,1135,1143,1149,1154,1172,1180,1192,1205,1231,1243,1268,1276,1287,1331,1339,1350,1379,1384,1397,1405,1410,1423,1435,1443,1449,1454,1459,1468,1473,1479,1489,1495,1500,1607],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"slo-optimizer",[46],{"type":47,"value":48},"text","SLO Optimizer",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53],{"type":47,"value":54},"Analyze SLO timeline trends, compute statistics over the past 28 days, and generate advisory\nrecommendations backed by real metric values. Never modify SLO definitions directly — route to\nslo-manage when the user wants to apply a recommendation.",{"type":41,"tag":56,"props":57,"children":59},"h2",{"id":58},"core-principles",[60],{"type":47,"value":61},"Core Principles",{"type":41,"tag":63,"props":64,"children":65},"ol",{},[66,72,77,91,96,101],{"type":41,"tag":67,"props":68,"children":69},"li",{},[70],{"type":47,"value":71},"Use gcx commands exclusively — do not call Grafana APIs directly.",{"type":41,"tag":67,"props":73,"children":74},{},[75],{"type":47,"value":76},"Trust the user's expertise — skip explanations of what SLOs or burn rates are.",{"type":41,"tag":67,"props":78,"children":79},{},[80,82,89],{"type":47,"value":81},"Use ",{"type":41,"tag":83,"props":84,"children":86},"code",{"className":85},[],[87],{"type":47,"value":88},"-o json",{"type":47,"value":90}," for agent processing of structured output; default format for user display.",{"type":41,"tag":67,"props":92,"children":93},{},[94],{"type":47,"value":95},"Show graph output for timeline data so the user can see the trend visually.",{"type":41,"tag":67,"props":97,"children":98},{},[99],{"type":47,"value":100},"Every recommendation MUST include supporting data (current values, projected values, or\nhistorical comparisons). No generic advice without numbers.",{"type":41,"tag":67,"props":102,"children":103},{},[104],{"type":47,"value":105},"This skill is advisory only. Route to slo-manage for any changes the user wants to apply.",{"type":41,"tag":56,"props":107,"children":109},{"id":108},"prerequisites",[110],{"type":47,"value":111},"Prerequisites",{"type":41,"tag":50,"props":113,"children":114},{},[115],{"type":47,"value":116},"gcx configured with a context pointing to the target Grafana instance.",{"type":41,"tag":50,"props":118,"children":119},{},[120],{"type":47,"value":121},"If the user does not supply a UUID, list available SLOs first:",{"type":41,"tag":123,"props":124,"children":129},"pre",{"className":125,"code":126,"language":127,"meta":128,"style":128},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","gcx slo definitions list\n","bash","",[130],{"type":41,"tag":83,"props":131,"children":132},{"__ignoreMap":128},[133],{"type":41,"tag":134,"props":135,"children":138},"span",{"class":136,"line":137},"line",1,[139,145,151,156],{"type":41,"tag":134,"props":140,"children":142},{"style":141},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[143],{"type":47,"value":144},"gcx",{"type":41,"tag":134,"props":146,"children":148},{"style":147},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[149],{"type":47,"value":150}," slo",{"type":41,"tag":134,"props":152,"children":153},{"style":147},[154],{"type":47,"value":155}," definitions",{"type":41,"tag":134,"props":157,"children":158},{"style":147},[159],{"type":47,"value":160}," list\n",{"type":41,"tag":50,"props":162,"children":163},{},[164],{"type":47,"value":165},"Ask the user which SLO to analyze if the target is ambiguous.",{"type":41,"tag":56,"props":167,"children":169},{"id":168},"optimization-workflow",[170],{"type":47,"value":171},"Optimization Workflow",{"type":41,"tag":173,"props":174,"children":176},"h3",{"id":175},"step-1-retrieve-slo-definition",[177],{"type":47,"value":178},"Step 1: Retrieve SLO Definition",{"type":41,"tag":123,"props":180,"children":182},{"className":125,"code":181,"language":127,"meta":128,"style":128},"gcx slo definitions get \u003CUUID> -o json\n",[183],{"type":41,"tag":83,"props":184,"children":185},{"__ignoreMap":128},[186],{"type":41,"tag":134,"props":187,"children":188},{"class":136,"line":137},[189,193,197,201,206,212,217,223,228,233],{"type":41,"tag":134,"props":190,"children":191},{"style":141},[192],{"type":47,"value":144},{"type":41,"tag":134,"props":194,"children":195},{"style":147},[196],{"type":47,"value":150},{"type":41,"tag":134,"props":198,"children":199},{"style":147},[200],{"type":47,"value":155},{"type":41,"tag":134,"props":202,"children":203},{"style":147},[204],{"type":47,"value":205}," get",{"type":41,"tag":134,"props":207,"children":209},{"style":208},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[210],{"type":47,"value":211}," \u003C",{"type":41,"tag":134,"props":213,"children":214},{"style":147},[215],{"type":47,"value":216},"UUI",{"type":41,"tag":134,"props":218,"children":220},{"style":219},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[221],{"type":47,"value":222},"D",{"type":41,"tag":134,"props":224,"children":225},{"style":208},[226],{"type":47,"value":227},">",{"type":41,"tag":134,"props":229,"children":230},{"style":147},[231],{"type":47,"value":232}," -o",{"type":41,"tag":134,"props":234,"children":235},{"style":147},[236],{"type":47,"value":237}," json\n",{"type":41,"tag":50,"props":239,"children":240},{},[241],{"type":47,"value":242},"Extract and note:",{"type":41,"tag":244,"props":245,"children":246},"ul",{},[247,258,269,280,291,302,313],{"type":41,"tag":67,"props":248,"children":249},{},[250,256],{"type":41,"tag":83,"props":251,"children":253},{"className":252},[],[254],{"type":47,"value":255},"spec.name",{"type":47,"value":257}," — display name",{"type":41,"tag":67,"props":259,"children":260},{},[261,267],{"type":41,"tag":83,"props":262,"children":264},{"className":263},[],[265],{"type":47,"value":266},"spec.objectives[0].value",{"type":47,"value":268}," — current objective (e.g., 0.999)",{"type":41,"tag":67,"props":270,"children":271},{},[272,278],{"type":41,"tag":83,"props":273,"children":275},{"className":274},[],[276],{"type":47,"value":277},"spec.objectives[0].window",{"type":47,"value":279}," — compliance window (e.g., 28d)",{"type":41,"tag":67,"props":281,"children":282},{},[283,289],{"type":41,"tag":83,"props":284,"children":286},{"className":285},[],[287],{"type":47,"value":288},"spec.query.type",{"type":47,"value":290}," — ratio | freeform | threshold",{"type":41,"tag":67,"props":292,"children":293},{},[294,300],{"type":41,"tag":83,"props":295,"children":297},{"className":296},[],[298],{"type":47,"value":299},"spec.query.ratio.groupByLabels",{"type":47,"value":301}," — dimensional labels (may be empty)",{"type":41,"tag":67,"props":303,"children":304},{},[305,311],{"type":41,"tag":83,"props":306,"children":308},{"className":307},[],[309],{"type":47,"value":310},"spec.alerting",{"type":47,"value":312}," — fastBurn \u002F slowBurn configuration (may be absent)",{"type":41,"tag":67,"props":314,"children":315},{},[316,322],{"type":41,"tag":83,"props":317,"children":319},{"className":318},[],[320],{"type":47,"value":321},"spec.destinationDatasource.uid",{"type":47,"value":323}," — datasource UID for metric queries",{"type":41,"tag":173,"props":325,"children":327},{"id":326},"step-2-fetch-28-day-timeline",[328],{"type":47,"value":329},"Step 2: Fetch 28-Day Timeline",{"type":41,"tag":123,"props":331,"children":333},{"className":125,"code":332,"language":127,"meta":128,"style":128},"# Default graph output for user display\ngcx slo definitions timeline \u003CUUID> --from now-28d --to now\n\n# JSON output for statistical analysis\ngcx slo definitions timeline \u003CUUID> --from now-28d --to now -o json\n",[334],{"type":41,"tag":83,"props":335,"children":336},{"__ignoreMap":128},[337,346,403,413,422],{"type":41,"tag":134,"props":338,"children":339},{"class":136,"line":137},[340],{"type":41,"tag":134,"props":341,"children":343},{"style":342},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[344],{"type":47,"value":345},"# Default graph output for user display\n",{"type":41,"tag":134,"props":347,"children":349},{"class":136,"line":348},2,[350,354,358,362,367,371,375,379,383,388,393,398],{"type":41,"tag":134,"props":351,"children":352},{"style":141},[353],{"type":47,"value":144},{"type":41,"tag":134,"props":355,"children":356},{"style":147},[357],{"type":47,"value":150},{"type":41,"tag":134,"props":359,"children":360},{"style":147},[361],{"type":47,"value":155},{"type":41,"tag":134,"props":363,"children":364},{"style":147},[365],{"type":47,"value":366}," timeline",{"type":41,"tag":134,"props":368,"children":369},{"style":208},[370],{"type":47,"value":211},{"type":41,"tag":134,"props":372,"children":373},{"style":147},[374],{"type":47,"value":216},{"type":41,"tag":134,"props":376,"children":377},{"style":219},[378],{"type":47,"value":222},{"type":41,"tag":134,"props":380,"children":381},{"style":208},[382],{"type":47,"value":227},{"type":41,"tag":134,"props":384,"children":385},{"style":147},[386],{"type":47,"value":387}," --from",{"type":41,"tag":134,"props":389,"children":390},{"style":147},[391],{"type":47,"value":392}," now-28d",{"type":41,"tag":134,"props":394,"children":395},{"style":147},[396],{"type":47,"value":397}," --to",{"type":41,"tag":134,"props":399,"children":400},{"style":147},[401],{"type":47,"value":402}," now\n",{"type":41,"tag":134,"props":404,"children":406},{"class":136,"line":405},3,[407],{"type":41,"tag":134,"props":408,"children":410},{"emptyLinePlaceholder":409},true,[411],{"type":47,"value":412},"\n",{"type":41,"tag":134,"props":414,"children":416},{"class":136,"line":415},4,[417],{"type":41,"tag":134,"props":418,"children":419},{"style":342},[420],{"type":47,"value":421},"# JSON output for statistical analysis\n",{"type":41,"tag":134,"props":423,"children":425},{"class":136,"line":424},5,[426,430,434,438,442,446,450,454,458,462,466,470,475,479],{"type":41,"tag":134,"props":427,"children":428},{"style":141},[429],{"type":47,"value":144},{"type":41,"tag":134,"props":431,"children":432},{"style":147},[433],{"type":47,"value":150},{"type":41,"tag":134,"props":435,"children":436},{"style":147},[437],{"type":47,"value":155},{"type":41,"tag":134,"props":439,"children":440},{"style":147},[441],{"type":47,"value":366},{"type":41,"tag":134,"props":443,"children":444},{"style":208},[445],{"type":47,"value":211},{"type":41,"tag":134,"props":447,"children":448},{"style":147},[449],{"type":47,"value":216},{"type":41,"tag":134,"props":451,"children":452},{"style":219},[453],{"type":47,"value":222},{"type":41,"tag":134,"props":455,"children":456},{"style":208},[457],{"type":47,"value":227},{"type":41,"tag":134,"props":459,"children":460},{"style":147},[461],{"type":47,"value":387},{"type":41,"tag":134,"props":463,"children":464},{"style":147},[465],{"type":47,"value":392},{"type":41,"tag":134,"props":467,"children":468},{"style":147},[469],{"type":47,"value":397},{"type":41,"tag":134,"props":471,"children":472},{"style":147},[473],{"type":47,"value":474}," now",{"type":41,"tag":134,"props":476,"children":477},{"style":147},[478],{"type":47,"value":232},{"type":41,"tag":134,"props":480,"children":481},{"style":147},[482],{"type":47,"value":237},{"type":41,"tag":50,"props":484,"children":485},{},[486],{"type":47,"value":487},"Parse the JSON output to extract SLI values across the time series. Compute:",{"type":41,"tag":244,"props":489,"children":490},{},[491,502,513,524],{"type":41,"tag":67,"props":492,"children":493},{},[494,500],{"type":41,"tag":83,"props":495,"children":497},{"className":496},[],[498],{"type":47,"value":499},"mean_sli",{"type":47,"value":501}," — average SLI over the 28-day window",{"type":41,"tag":67,"props":503,"children":504},{},[505,511],{"type":41,"tag":83,"props":506,"children":508},{"className":507},[],[509],{"type":47,"value":510},"min_sli",{"type":47,"value":512}," — lowest observed SLI point",{"type":41,"tag":67,"props":514,"children":515},{},[516,522],{"type":41,"tag":83,"props":517,"children":519},{"className":518},[],[520],{"type":47,"value":521},"max_sli",{"type":47,"value":523}," — highest observed SLI point",{"type":41,"tag":67,"props":525,"children":526},{},[527,533],{"type":41,"tag":83,"props":528,"children":530},{"className":529},[],[531],{"type":47,"value":532},"std_dev",{"type":47,"value":534}," — variability indicator",{"type":41,"tag":50,"props":536,"children":537},{},[538],{"type":47,"value":539},"If timeline returns no data (NODATA), note it and skip to Step 3 for current status.",{"type":41,"tag":173,"props":541,"children":543},{"id":542},"step-3-get-current-status-wide-format",[544],{"type":47,"value":545},"Step 3: Get Current Status (Wide Format)",{"type":41,"tag":123,"props":547,"children":549},{"className":125,"code":548,"language":127,"meta":128,"style":128},"gcx slo definitions status \u003CUUID> -o wide\n",[550],{"type":41,"tag":83,"props":551,"children":552},{"__ignoreMap":128},[553],{"type":41,"tag":134,"props":554,"children":555},{"class":136,"line":137},[556,560,564,568,573,577,581,585,589,593],{"type":41,"tag":134,"props":557,"children":558},{"style":141},[559],{"type":47,"value":144},{"type":41,"tag":134,"props":561,"children":562},{"style":147},[563],{"type":47,"value":150},{"type":41,"tag":134,"props":565,"children":566},{"style":147},[567],{"type":47,"value":155},{"type":41,"tag":134,"props":569,"children":570},{"style":147},[571],{"type":47,"value":572}," status",{"type":41,"tag":134,"props":574,"children":575},{"style":208},[576],{"type":47,"value":211},{"type":41,"tag":134,"props":578,"children":579},{"style":147},[580],{"type":47,"value":216},{"type":41,"tag":134,"props":582,"children":583},{"style":219},[584],{"type":47,"value":222},{"type":41,"tag":134,"props":586,"children":587},{"style":208},[588],{"type":47,"value":227},{"type":41,"tag":134,"props":590,"children":591},{"style":147},[592],{"type":47,"value":232},{"type":41,"tag":134,"props":594,"children":595},{"style":147},[596],{"type":47,"value":597}," wide\n",{"type":41,"tag":50,"props":599,"children":600},{},[601],{"type":47,"value":602},"Extract from the wide output:",{"type":41,"tag":244,"props":604,"children":605},{},[606,611,616,621,626],{"type":41,"tag":67,"props":607,"children":608},{},[609],{"type":47,"value":610},"Current SLI value",{"type":41,"tag":67,"props":612,"children":613},{},[614],{"type":47,"value":615},"Error budget remaining (%)",{"type":41,"tag":67,"props":617,"children":618},{},[619],{"type":47,"value":620},"Burn rate (current)",{"type":41,"tag":67,"props":622,"children":623},{},[624],{"type":47,"value":625},"SLI_1H and SLI_1D snapshots",{"type":41,"tag":67,"props":627,"children":628},{},[629],{"type":47,"value":630},"Status: OK | BREACHING | NODATA",{"type":41,"tag":173,"props":632,"children":634},{"id":633},"step-4-query-raw-sli-metrics-when-timeline-is-insufficient",[635],{"type":47,"value":636},"Step 4: Query Raw SLI Metrics (When Timeline Is Insufficient)",{"type":41,"tag":50,"props":638,"children":639},{},[640],{"type":47,"value":641},"When timeline data is sparse (\u003C 7 days of points) or all NODATA, query raw metrics directly\nusing the datasource UID from Step 1:",{"type":41,"tag":123,"props":643,"children":645},{"className":125,"code":644,"language":127,"meta":128,"style":128},"# SLI window metric (primary trend signal)\ngcx metrics query -d \u003Cdatasource-uid> \\\n  'grafana_slo_sli_window{grafana_slo_uuid=\"\u003CUUID>\"}' \\\n  --from now-28d --to now --step 6h\n\n# Success and total rate for ratio SLOs\ngcx metrics query -d \u003Cdatasource-uid> \\\n  'grafana_slo_success_rate_5m{grafana_slo_uuid=\"\u003CUUID>\"}' \\\n  --from now-28d --to now --step 6h\n\ngcx metrics query -d \u003Cdatasource-uid> \\\n  'grafana_slo_total_rate_5m{grafana_slo_uuid=\"\u003CUUID>\"}' \\\n  --from now-28d --to now --step 6h\n",[646],{"type":41,"tag":83,"props":647,"children":648},{"__ignoreMap":128},[649,657,702,724,754,761,770,810,831,859,867,907,928],{"type":41,"tag":134,"props":650,"children":651},{"class":136,"line":137},[652],{"type":41,"tag":134,"props":653,"children":654},{"style":342},[655],{"type":47,"value":656},"# SLI window metric (primary trend signal)\n",{"type":41,"tag":134,"props":658,"children":659},{"class":136,"line":348},[660,664,669,674,679,683,688,693,697],{"type":41,"tag":134,"props":661,"children":662},{"style":141},[663],{"type":47,"value":144},{"type":41,"tag":134,"props":665,"children":666},{"style":147},[667],{"type":47,"value":668}," metrics",{"type":41,"tag":134,"props":670,"children":671},{"style":147},[672],{"type":47,"value":673}," query",{"type":41,"tag":134,"props":675,"children":676},{"style":147},[677],{"type":47,"value":678}," -d",{"type":41,"tag":134,"props":680,"children":681},{"style":208},[682],{"type":47,"value":211},{"type":41,"tag":134,"props":684,"children":685},{"style":147},[686],{"type":47,"value":687},"datasource-ui",{"type":41,"tag":134,"props":689,"children":690},{"style":219},[691],{"type":47,"value":692},"d",{"type":41,"tag":134,"props":694,"children":695},{"style":208},[696],{"type":47,"value":227},{"type":41,"tag":134,"props":698,"children":699},{"style":219},[700],{"type":47,"value":701}," \\\n",{"type":41,"tag":134,"props":703,"children":704},{"class":136,"line":405},[705,710,715,720],{"type":41,"tag":134,"props":706,"children":707},{"style":208},[708],{"type":47,"value":709},"  '",{"type":41,"tag":134,"props":711,"children":712},{"style":147},[713],{"type":47,"value":714},"grafana_slo_sli_window{grafana_slo_uuid=\"\u003CUUID>\"}",{"type":41,"tag":134,"props":716,"children":717},{"style":208},[718],{"type":47,"value":719},"'",{"type":41,"tag":134,"props":721,"children":722},{"style":219},[723],{"type":47,"value":701},{"type":41,"tag":134,"props":725,"children":726},{"class":136,"line":415},[727,732,736,740,744,749],{"type":41,"tag":134,"props":728,"children":729},{"style":147},[730],{"type":47,"value":731},"  --from",{"type":41,"tag":134,"props":733,"children":734},{"style":147},[735],{"type":47,"value":392},{"type":41,"tag":134,"props":737,"children":738},{"style":147},[739],{"type":47,"value":397},{"type":41,"tag":134,"props":741,"children":742},{"style":147},[743],{"type":47,"value":474},{"type":41,"tag":134,"props":745,"children":746},{"style":147},[747],{"type":47,"value":748}," --step",{"type":41,"tag":134,"props":750,"children":751},{"style":147},[752],{"type":47,"value":753}," 6h\n",{"type":41,"tag":134,"props":755,"children":756},{"class":136,"line":424},[757],{"type":41,"tag":134,"props":758,"children":759},{"emptyLinePlaceholder":409},[760],{"type":47,"value":412},{"type":41,"tag":134,"props":762,"children":764},{"class":136,"line":763},6,[765],{"type":41,"tag":134,"props":766,"children":767},{"style":342},[768],{"type":47,"value":769},"# Success and total rate for ratio SLOs\n",{"type":41,"tag":134,"props":771,"children":773},{"class":136,"line":772},7,[774,778,782,786,790,794,798,802,806],{"type":41,"tag":134,"props":775,"children":776},{"style":141},[777],{"type":47,"value":144},{"type":41,"tag":134,"props":779,"children":780},{"style":147},[781],{"type":47,"value":668},{"type":41,"tag":134,"props":783,"children":784},{"style":147},[785],{"type":47,"value":673},{"type":41,"tag":134,"props":787,"children":788},{"style":147},[789],{"type":47,"value":678},{"type":41,"tag":134,"props":791,"children":792},{"style":208},[793],{"type":47,"value":211},{"type":41,"tag":134,"props":795,"children":796},{"style":147},[797],{"type":47,"value":687},{"type":41,"tag":134,"props":799,"children":800},{"style":219},[801],{"type":47,"value":692},{"type":41,"tag":134,"props":803,"children":804},{"style":208},[805],{"type":47,"value":227},{"type":41,"tag":134,"props":807,"children":808},{"style":219},[809],{"type":47,"value":701},{"type":41,"tag":134,"props":811,"children":813},{"class":136,"line":812},8,[814,818,823,827],{"type":41,"tag":134,"props":815,"children":816},{"style":208},[817],{"type":47,"value":709},{"type":41,"tag":134,"props":819,"children":820},{"style":147},[821],{"type":47,"value":822},"grafana_slo_success_rate_5m{grafana_slo_uuid=\"\u003CUUID>\"}",{"type":41,"tag":134,"props":824,"children":825},{"style":208},[826],{"type":47,"value":719},{"type":41,"tag":134,"props":828,"children":829},{"style":219},[830],{"type":47,"value":701},{"type":41,"tag":134,"props":832,"children":834},{"class":136,"line":833},9,[835,839,843,847,851,855],{"type":41,"tag":134,"props":836,"children":837},{"style":147},[838],{"type":47,"value":731},{"type":41,"tag":134,"props":840,"children":841},{"style":147},[842],{"type":47,"value":392},{"type":41,"tag":134,"props":844,"children":845},{"style":147},[846],{"type":47,"value":397},{"type":41,"tag":134,"props":848,"children":849},{"style":147},[850],{"type":47,"value":474},{"type":41,"tag":134,"props":852,"children":853},{"style":147},[854],{"type":47,"value":748},{"type":41,"tag":134,"props":856,"children":857},{"style":147},[858],{"type":47,"value":753},{"type":41,"tag":134,"props":860,"children":862},{"class":136,"line":861},10,[863],{"type":41,"tag":134,"props":864,"children":865},{"emptyLinePlaceholder":409},[866],{"type":47,"value":412},{"type":41,"tag":134,"props":868,"children":870},{"class":136,"line":869},11,[871,875,879,883,887,891,895,899,903],{"type":41,"tag":134,"props":872,"children":873},{"style":141},[874],{"type":47,"value":144},{"type":41,"tag":134,"props":876,"children":877},{"style":147},[878],{"type":47,"value":668},{"type":41,"tag":134,"props":880,"children":881},{"style":147},[882],{"type":47,"value":673},{"type":41,"tag":134,"props":884,"children":885},{"style":147},[886],{"type":47,"value":678},{"type":41,"tag":134,"props":888,"children":889},{"style":208},[890],{"type":47,"value":211},{"type":41,"tag":134,"props":892,"children":893},{"style":147},[894],{"type":47,"value":687},{"type":41,"tag":134,"props":896,"children":897},{"style":219},[898],{"type":47,"value":692},{"type":41,"tag":134,"props":900,"children":901},{"style":208},[902],{"type":47,"value":227},{"type":41,"tag":134,"props":904,"children":905},{"style":219},[906],{"type":47,"value":701},{"type":41,"tag":134,"props":908,"children":910},{"class":136,"line":909},12,[911,915,920,924],{"type":41,"tag":134,"props":912,"children":913},{"style":208},[914],{"type":47,"value":709},{"type":41,"tag":134,"props":916,"children":917},{"style":147},[918],{"type":47,"value":919},"grafana_slo_total_rate_5m{grafana_slo_uuid=\"\u003CUUID>\"}",{"type":41,"tag":134,"props":921,"children":922},{"style":208},[923],{"type":47,"value":719},{"type":41,"tag":134,"props":925,"children":926},{"style":219},[927],{"type":47,"value":701},{"type":41,"tag":134,"props":929,"children":931},{"class":136,"line":930},13,[932,936,940,944,948,952],{"type":41,"tag":134,"props":933,"children":934},{"style":147},[935],{"type":47,"value":731},{"type":41,"tag":134,"props":937,"children":938},{"style":147},[939],{"type":47,"value":392},{"type":41,"tag":134,"props":941,"children":942},{"style":147},[943],{"type":47,"value":397},{"type":41,"tag":134,"props":945,"children":946},{"style":147},[947],{"type":47,"value":474},{"type":41,"tag":134,"props":949,"children":950},{"style":147},[951],{"type":47,"value":748},{"type":41,"tag":134,"props":953,"children":954},{"style":147},[955],{"type":47,"value":753},{"type":41,"tag":50,"props":957,"children":958},{},[959,961,967,969,975,977,983],{"type":47,"value":960},"The recording rules label these series with ",{"type":41,"tag":83,"props":962,"children":964},{"className":963},[],[965],{"type":47,"value":966},"grafana_slo_uuid",{"type":47,"value":968}," (not ",{"type":41,"tag":83,"props":970,"children":972},{"className":971},[],[973],{"type":47,"value":974},"slo_uuid",{"type":47,"value":976},").\nAn empty result is not proof of a data gap — first rule out label, UUID,\ndatasource, and time-range mismatches (these series live on the SLO's\ndestination datasource, and a new SLO has no history yet). A bare\n",{"type":41,"tag":83,"props":978,"children":980},{"className":979},[],[981],{"type":47,"value":982},"grafana_slo_sli_window",{"type":47,"value":984}," query discriminates quickly: series present means\nthe selector is wrong; none at all points to a new SLO or the wrong\ndatasource.",{"type":41,"tag":50,"props":986,"children":987},{},[988],{"type":47,"value":989},"If the datasource UID is not in the definition, resolve it:",{"type":41,"tag":123,"props":991,"children":993},{"className":125,"code":992,"language":127,"meta":128,"style":128},"gcx datasources list --type prometheus\n",[994],{"type":41,"tag":83,"props":995,"children":996},{"__ignoreMap":128},[997],{"type":41,"tag":134,"props":998,"children":999},{"class":136,"line":137},[1000,1004,1009,1014,1019],{"type":41,"tag":134,"props":1001,"children":1002},{"style":141},[1003],{"type":47,"value":144},{"type":41,"tag":134,"props":1005,"children":1006},{"style":147},[1007],{"type":47,"value":1008}," datasources",{"type":41,"tag":134,"props":1010,"children":1011},{"style":147},[1012],{"type":47,"value":1013}," list",{"type":41,"tag":134,"props":1015,"children":1016},{"style":147},[1017],{"type":47,"value":1018}," --type",{"type":41,"tag":134,"props":1020,"children":1021},{"style":147},[1022],{"type":47,"value":1023}," prometheus\n",{"type":41,"tag":50,"props":1025,"children":1026},{},[1027,1029,1035,1037,1043,1045,1051],{"type":47,"value":1028},"If the filtered list comes back empty, the stack may leave the ",{"type":41,"tag":83,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":47,"value":1034},"type",{"type":47,"value":1036}," field\nblank in list payloads (known issue) — rerun without ",{"type":41,"tag":83,"props":1038,"children":1040},{"className":1039},[],[1041],{"type":47,"value":1042},"--type",{"type":47,"value":1044}," and pick the\nPrometheus datasource by name, or use the UID from\n",{"type":41,"tag":83,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":47,"value":1050},".spec.destinationDatasource.uid",{"type":47,"value":1052}," directly.",{"type":41,"tag":173,"props":1054,"children":1056},{"id":1055},"step-5-analyze-trends",[1057],{"type":47,"value":1058},"Step 5: Analyze Trends",{"type":41,"tag":50,"props":1060,"children":1061},{},[1062],{"type":47,"value":1063},"Classify the pattern using the timeline data from Steps 2 and 4:",{"type":41,"tag":50,"props":1065,"children":1066},{},[1067,1073],{"type":41,"tag":1068,"props":1069,"children":1070},"strong",{},[1071],{"type":47,"value":1072},"Sustained decline",{"type":47,"value":1074}," — SLI trending downward for 7 or more consecutive days. Compute the\nslope over the last 7 days vs. the preceding 7 days to confirm direction.",{"type":41,"tag":244,"props":1076,"children":1077},{},[1078],{"type":41,"tag":67,"props":1079,"children":1080},{},[1081],{"type":47,"value":1082},"Recommendation trigger: investigate underlying service degradation; a window adjustment will\nnot fix a declining service.",{"type":41,"tag":50,"props":1084,"children":1085},{},[1086,1091],{"type":41,"tag":1068,"props":1087,"children":1088},{},[1089],{"type":47,"value":1090},"Periodic dips",{"type":47,"value":1092}," — SLI drops recur at regular intervals (e.g., every weekend, every night).\nLook for temporal correlation in the min points.",{"type":41,"tag":244,"props":1094,"children":1095},{},[1096],{"type":41,"tag":67,"props":1097,"children":1098},{},[1099],{"type":47,"value":1100},"Recommendation trigger: window adjustment (e.g., 7d → 28d smooths weekend traffic spikes)\nor objective reduction if the dips are expected.",{"type":41,"tag":50,"props":1102,"children":1103},{},[1104,1109],{"type":41,"tag":1068,"props":1105,"children":1106},{},[1107],{"type":47,"value":1108},"Sudden drops",{"type":47,"value":1110}," — Step-change in SLI at a specific timestamp (deployment, config change).\nIdentify the onset timestamp and estimate error budget consumed by the event.",{"type":41,"tag":244,"props":1112,"children":1113},{},[1114],{"type":41,"tag":67,"props":1115,"children":1116},{},[1117],{"type":47,"value":1118},"Recommendation trigger: check alerting is configured; if budget consumed > 20% by a single\nevent, consider tighter fastBurn thresholds.",{"type":41,"tag":50,"props":1120,"children":1121},{},[1122,1127,1129],{"type":41,"tag":1068,"props":1123,"children":1124},{},[1125],{"type":47,"value":1126},"Budget exhaustion rate",{"type":47,"value":1128}," — Project when the error budget will reach 0 based on the current\nburn rate from Step 3. Formula:\n",{"type":41,"tag":83,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":47,"value":1134},"days_until_exhausted = budget_remaining_pct \u002F (burn_rate * 100 \u002F window_days)",{"type":41,"tag":244,"props":1136,"children":1137},{},[1138],{"type":41,"tag":67,"props":1139,"children":1140},{},[1141],{"type":47,"value":1142},"Recommendation trigger: if \u003C 7 days remain, flag as urgent; route to slo-investigate.",{"type":41,"tag":173,"props":1144,"children":1146},{"id":1145},"step-6-generate-advisory-recommendations",[1147],{"type":47,"value":1148},"Step 6: Generate Advisory Recommendations",{"type":41,"tag":50,"props":1150,"children":1151},{},[1152],{"type":47,"value":1153},"Produce numbered recommendations. Each recommendation requires:",{"type":41,"tag":63,"props":1155,"children":1156},{},[1157,1162,1167],{"type":41,"tag":67,"props":1158,"children":1159},{},[1160],{"type":47,"value":1161},"A specific change (what to do)",{"type":41,"tag":67,"props":1163,"children":1164},{},[1165],{"type":47,"value":1166},"Supporting data (why — current value vs. proposed value)",{"type":41,"tag":67,"props":1168,"children":1169},{},[1170],{"type":47,"value":1171},"Expected outcome",{"type":41,"tag":50,"props":1173,"children":1174},{},[1175],{"type":41,"tag":1068,"props":1176,"children":1177},{},[1178],{"type":47,"value":1179},"Objective tuning",{"type":41,"tag":50,"props":1181,"children":1182},{},[1183,1185,1190],{"type":47,"value":1184},"Objective changes need enough history to be trustworthy: a ",{"type":41,"tag":83,"props":1186,"children":1188},{"className":1187},[],[1189],{"type":47,"value":499},{"type":47,"value":1191}," computed\nover less than 7 days of data reflects startup noise as much as real\nperformance. With shorter history, still report the numbers, but frame any\nobjective recommendation as provisional pending adequate history and say when\nenough data will exist to confirm it. And when the SLO is chronically\nbreaching, lead with investigation (slo-investigate) before proposing a lower\ntarget — a persistent breach can mean a service problem to fix, not a target\nto relax.",{"type":41,"tag":50,"props":1193,"children":1194},{},[1195,1197,1203],{"type":47,"value":1196},"If ",{"type":41,"tag":83,"props":1198,"children":1200},{"className":1199},[],[1201],{"type":47,"value":1202},"mean_sli \u003C objective - 0.005",{"type":47,"value":1204}," (more than 0.5 pp below the objective):",{"type":41,"tag":244,"props":1206,"children":1207},{},[1208,1221,1226],{"type":41,"tag":67,"props":1209,"children":1210},{},[1211,1213,1219],{"type":47,"value":1212},"Suggest lowering the objective to ",{"type":41,"tag":83,"props":1214,"children":1216},{"className":1215},[],[1217],{"type":47,"value":1218},"floor(mean_sli * 1000) \u002F 1000",{"type":47,"value":1220}," (rounded down to 3 dp).",{"type":41,"tag":67,"props":1222,"children":1223},{},[1224],{"type":47,"value":1225},"Include: current objective, observed mean SLI, proposed objective.",{"type":41,"tag":67,"props":1227,"children":1228},{},[1229],{"type":47,"value":1230},"Rationale: the SLO is chronically breaching due to an unrealistic target.",{"type":41,"tag":50,"props":1232,"children":1233},{},[1234,1235,1241],{"type":47,"value":1196},{"type":41,"tag":83,"props":1236,"children":1238},{"className":1237},[],[1239],{"type":47,"value":1240},"mean_sli > objective + 0.010",{"type":47,"value":1242}," (more than 1 pp above the objective):",{"type":41,"tag":244,"props":1244,"children":1245},{},[1246,1259,1263],{"type":41,"tag":67,"props":1247,"children":1248},{},[1249,1251,1257],{"type":47,"value":1250},"Suggest tightening the objective toward ",{"type":41,"tag":83,"props":1252,"children":1254},{"className":1253},[],[1255],{"type":47,"value":1256},"mean_sli - 0.005",{"type":47,"value":1258},".",{"type":41,"tag":67,"props":1260,"children":1261},{},[1262],{"type":47,"value":1225},{"type":41,"tag":67,"props":1264,"children":1265},{},[1266],{"type":47,"value":1267},"Rationale: the SLO is trivially satisfied; tighten to reflect achievable performance.",{"type":41,"tag":50,"props":1269,"children":1270},{},[1271],{"type":41,"tag":1068,"props":1272,"children":1273},{},[1274],{"type":47,"value":1275},"groupByLabels addition (ratio query type only)",{"type":41,"tag":50,"props":1277,"children":1278},{},[1279,1280,1285],{"type":47,"value":1196},{"type":41,"tag":83,"props":1281,"children":1283},{"className":1282},[],[1284],{"type":47,"value":299},{"type":47,"value":1286}," is empty or absent:",{"type":41,"tag":244,"props":1288,"children":1289},{},[1290,1326],{"type":41,"tag":67,"props":1291,"children":1292},{},[1293,1295,1301,1303,1309,1310,1316,1318,1324],{"type":47,"value":1294},"Recommend adding dimensional labels such as ",{"type":41,"tag":83,"props":1296,"children":1298},{"className":1297},[],[1299],{"type":47,"value":1300},"cluster",{"type":47,"value":1302},", ",{"type":41,"tag":83,"props":1304,"children":1306},{"className":1305},[],[1307],{"type":47,"value":1308},"service",{"type":47,"value":1302},{"type":41,"tag":83,"props":1311,"children":1313},{"className":1312},[],[1314],{"type":47,"value":1315},"endpoint",{"type":47,"value":1317},", or\n",{"type":41,"tag":83,"props":1319,"children":1321},{"className":1320},[],[1322],{"type":47,"value":1323},"status_code",{"type":47,"value":1325}," depending on what labels exist in the underlying metric series.",{"type":41,"tag":67,"props":1327,"children":1328},{},[1329],{"type":47,"value":1330},"Rationale: without groupByLabels, all dimensions are collapsed — the SLO cannot identify\nwhich dimension is causing a breach.",{"type":41,"tag":50,"props":1332,"children":1333},{},[1334],{"type":41,"tag":1068,"props":1335,"children":1336},{},[1337],{"type":47,"value":1338},"Alerting configuration",{"type":41,"tag":50,"props":1340,"children":1341},{},[1342,1343,1348],{"type":47,"value":1196},{"type":41,"tag":83,"props":1344,"children":1346},{"className":1345},[],[1347],{"type":47,"value":310},{"type":47,"value":1349}," is absent or empty:",{"type":41,"tag":244,"props":1351,"children":1352},{},[1353,1358],{"type":41,"tag":67,"props":1354,"children":1355},{},[1356],{"type":47,"value":1357},"Recommend configuring fastBurn (page) and slowBurn (ticket) alerts.",{"type":41,"tag":67,"props":1359,"children":1360},{},[1361,1363,1369,1371,1377],{"type":47,"value":1362},"Example thresholds: fastBurn ",{"type":41,"tag":83,"props":1364,"children":1366},{"className":1365},[],[1367],{"type":47,"value":1368},"burnRateThreshold: 14.4",{"type":47,"value":1370}," over 1h (consumes 2% budget\u002Fhour),\nslowBurn ",{"type":41,"tag":83,"props":1372,"children":1374},{"className":1373},[],[1375],{"type":47,"value":1376},"burnRateThreshold: 1",{"type":47,"value":1378}," over 6h.",{"type":41,"tag":50,"props":1380,"children":1381},{},[1382],{"type":47,"value":1383},"If alerting is configured and current burn rate (from Step 3) has been above 2x for the past\n7 days (compare burn rate from status with recent timeline values):",{"type":41,"tag":244,"props":1385,"children":1386},{},[1387,1392],{"type":41,"tag":67,"props":1388,"children":1389},{},[1390],{"type":47,"value":1391},"Recommend reviewing alerting thresholds — existing alerts may not be firing despite sustained\nbudget drain.",{"type":41,"tag":67,"props":1393,"children":1394},{},[1395],{"type":47,"value":1396},"Include: current burn rate, alert threshold from definition, observed duration above 2x.",{"type":41,"tag":50,"props":1398,"children":1399},{},[1400],{"type":41,"tag":1068,"props":1401,"children":1402},{},[1403],{"type":47,"value":1404},"Window adjustment",{"type":41,"tag":50,"props":1406,"children":1407},{},[1408],{"type":47,"value":1409},"If the SLO window is 7d and periodic dips are detected (weekend pattern):",{"type":41,"tag":244,"props":1411,"children":1412},{},[1413,1418],{"type":41,"tag":67,"props":1414,"children":1415},{},[1416],{"type":47,"value":1417},"Recommend switching to 28d to smooth the variability.",{"type":41,"tag":67,"props":1419,"children":1420},{},[1421],{"type":47,"value":1422},"Include: current window, dip frequency, estimated improvement in budget consumption.",{"type":41,"tag":50,"props":1424,"children":1425},{},[1426,1428,1433],{"type":47,"value":1427},"If the SLO window is 28d or 30d and ",{"type":41,"tag":83,"props":1429,"children":1431},{"className":1430},[],[1432],{"type":47,"value":499},{"type":47,"value":1434}," is very stable (std_dev \u003C 0.001):",{"type":41,"tag":244,"props":1436,"children":1437},{},[1438],{"type":41,"tag":67,"props":1439,"children":1440},{},[1441],{"type":47,"value":1442},"Note the window is appropriate; no change needed.",{"type":41,"tag":173,"props":1444,"children":1446},{"id":1445},"step-7-present-recommendations-and-route-to-slo-manage",[1447],{"type":47,"value":1448},"Step 7: Present Recommendations and Route to slo-manage",{"type":41,"tag":50,"props":1450,"children":1451},{},[1452],{"type":47,"value":1453},"Present all recommendations as advisory text. Do not apply any changes.",{"type":41,"tag":50,"props":1455,"children":1456},{},[1457],{"type":47,"value":1458},"After presenting recommendations, ask:",{"type":41,"tag":1460,"props":1461,"children":1462},"blockquote",{},[1463],{"type":41,"tag":50,"props":1464,"children":1465},{},[1466],{"type":47,"value":1467},"\"Would you like me to apply any of these recommendations? If so, I'll switch to slo-manage\nto pull the current definition and implement the changes with a dry-run first.\"",{"type":41,"tag":50,"props":1469,"children":1470},{},[1471],{"type":47,"value":1472},"If the user confirms, invoke the slo-manage skill to handle the update workflow.",{"type":41,"tag":56,"props":1474,"children":1476},{"id":1475},"output-format",[1477],{"type":47,"value":1478},"Output Format",{"type":41,"tag":123,"props":1480,"children":1484},{"className":1481,"code":1483,"language":47},[1482],"language-text","SLO: \u003Cname>\nUUID: \u003Cuuid>\nObjective: \u003Cvalue> over \u003Cwindow>\nAnalysis period: now-28d to now\n\nSLI Statistics (28d):\n  Mean: \u003Cvalue>   Min: \u003Cvalue>   Max: \u003Cvalue>\n  Std dev: \u003Cvalue>\n\nCurrent Status:\n  SLI: \u003Cvalue>   Budget remaining: \u003Cpct>%   Burn rate: \u003Cvalue>x\n  SLI (1h): \u003Cvalue>   SLI (1d): \u003Cvalue>\n\n[28-day timeline graph]\n\nTrend classification: \u003CSustained decline | Periodic dips | Sudden drops | Stable>\n\u003COne sentence describing the dominant pattern with supporting data>\n\nAdvisory Recommendations:\n\n1. \u003CRecommendation title>\n   Current: \u003Cvalue>\n   Proposed: \u003Cvalue>\n   Why: \u003Crationale with numbers>\n   [If based on \u003C 7 days of history: \"Provisional — re-evaluate after \u003CN> more days of data\"]\n\n2. \u003CRecommendation title>\n   ...\n\n[If no recommendations apply:]\nNo objective or alerting changes recommended. The SLO configuration appears well-calibrated\nfor the observed performance over the past 28 days.\n\n---\nTo apply a recommendation: slo-manage will pull the definition and apply the change with\na dry-run. Confirm which recommendation(s) you want to apply.\n",[1485],{"type":41,"tag":83,"props":1486,"children":1487},{"__ignoreMap":128},[1488],{"type":47,"value":1483},{"type":41,"tag":56,"props":1490,"children":1492},{"id":1491},"error-handling",[1493],{"type":47,"value":1494},"Error Handling",{"type":41,"tag":50,"props":1496,"children":1497},{},[1498],{"type":47,"value":1499},"Collect errors; report them at the end of the analysis, not interleaved with findings.",{"type":41,"tag":244,"props":1501,"children":1502},{},[1503,1527,1537,1569,1579,1589],{"type":41,"tag":67,"props":1504,"children":1505},{},[1506,1517,1519,1525],{"type":41,"tag":1068,"props":1507,"children":1508},{},[1509,1515],{"type":41,"tag":83,"props":1510,"children":1512},{"className":1511},[],[1513],{"type":47,"value":1514},"gcx slo definitions get",{"type":47,"value":1516}," fails (not found)",{"type":47,"value":1518},": Confirm the UUID and context.\nRun ",{"type":41,"tag":83,"props":1520,"children":1522},{"className":1521},[],[1523],{"type":47,"value":1524},"gcx slo definitions list",{"type":47,"value":1526}," to show available SLOs.",{"type":41,"tag":67,"props":1528,"children":1529},{},[1530,1535],{"type":41,"tag":1068,"props":1531,"children":1532},{},[1533],{"type":47,"value":1534},"Timeline returns NODATA",{"type":47,"value":1536},": Recording rule metrics may not be populating. Check the\ndestination datasource configuration. Proceed with raw metric queries in Step 4. If raw\nmetrics also return NODATA, report the data gap and recommend verifying that the SLO\nrecording rules are evaluating correctly.",{"type":41,"tag":67,"props":1538,"children":1539},{},[1540,1545,1547,1553,1555,1560,1562,1567],{"type":41,"tag":1068,"props":1541,"children":1542},{},[1543],{"type":47,"value":1544},"Datasource UID not in definition",{"type":47,"value":1546},": Run ",{"type":41,"tag":83,"props":1548,"children":1550},{"className":1549},[],[1551],{"type":47,"value":1552},"gcx datasources list --type prometheus",{"type":47,"value":1554},"\nand present the list to the user. If the filtered list is empty (blank ",{"type":41,"tag":83,"props":1556,"children":1558},{"className":1557},[],[1559],{"type":47,"value":1034},{"type":47,"value":1561}," fields in\nthe list payload), rerun without ",{"type":41,"tag":83,"props":1563,"children":1565},{"className":1564},[],[1566],{"type":47,"value":1042},{"type":47,"value":1568}," and select by name. Do not block the\nanalysis — use the remaining timeline data from Step 2.",{"type":41,"tag":67,"props":1570,"children":1571},{},[1572,1577],{"type":41,"tag":1068,"props":1573,"children":1574},{},[1575],{"type":47,"value":1576},"Timeline data \u003C 7 days of points",{"type":47,"value":1578},": The SLO may be newly created. Note the limited\nanalysis window, proceed with available data, and suppress trend classifications that\nrequire 7+ days of data.",{"type":41,"tag":67,"props":1580,"children":1581},{},[1582,1587],{"type":41,"tag":1068,"props":1583,"children":1584},{},[1585],{"type":47,"value":1586},"Status returns BREACHING",{"type":47,"value":1588},": Note the breach in the output. Include budget exhaustion\nrate in the recommendations. Route to slo-investigate for deeper root cause analysis if\nthe user wants to understand why the SLO is breaching (not just optimize it).",{"type":41,"tag":67,"props":1590,"children":1591},{},[1592,1597,1599,1605],{"type":41,"tag":1068,"props":1593,"children":1594},{},[1595],{"type":47,"value":1596},"gcx command not found or auth error",{"type":47,"value":1598},": Check ",{"type":41,"tag":83,"props":1600,"children":1602},{"className":1601},[],[1603],{"type":47,"value":1604},"gcx config view",{"type":47,"value":1606}," to verify\nthe active context and credentials.",{"type":41,"tag":1608,"props":1609,"children":1610},"style",{},[1611],{"type":47,"value":1612},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1614,"total":1719},[1615,1630,1646,1659,1674,1691,1706],{"slug":1616,"name":1616,"fn":1617,"description":1618,"org":1619,"tags":1620,"stars":23,"repoUrl":24,"updatedAt":1629},"agento11y","manage Grafana Agent Observability resources","Inspects and manages Grafana Agent Observability resources via gcx: conversations, generations, evaluators, rules, scores, and templates. Use when the user wants to list or search conversations, inspect generations, manage evaluators (upsert, test, delete), set up evaluation rules, check scores, or browse evaluator templates. Trigger on phrases like \"list conversations\", \"search generations\", \"what did the agent do\", \"debug LLM conversation\", \"create evaluator\", \"set up evaluation rule\", \"test evaluator\", \"check scores\", \"evaluate generation quality\", or \"set up online evaluation\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1621,1624,1625,1628],{"name":1622,"slug":1623,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":1626,"slug":1627,"type":15},"Monitoring","monitoring",{"name":13,"slug":14,"type":15},"2026-07-25T05:30:40.29622",{"slug":1631,"name":1631,"fn":1632,"description":1633,"org":1634,"tags":1635,"stars":23,"repoUrl":24,"updatedAt":1645},"agento11y-instrument","instrument LLM apps for agent observability","Sets up and instruments a developer's own LLM app or agent to send generations and agentic workflow to Grafana Agent Observability (the Agent Observability SDKs) — greenfield setup, fixing broken instrumentation, or filling gaps in existing instrumentation. Uses gcx for the parts a static prompt can't do: `gcx login` \u002F `gcx cloud stacks` to find the stack, and `gcx agento11y agents|conversations|generations` to VERIFY that data actually lands — so it iterates (instrument → run → verify → fix) until generations arrive, not blindly. Reads the app's code, detects language\u002Fframework, classifies instrumentation state (none \u002F partial \u002F broken), then runs a fixed gap checklist whose #1 item is the silent failure no other prompt catches: the SDK emits OTel spans\u002Fmetrics but never creates a TracerProvider\u002FMeterProvider, so without them all metrics go to a no-op and are lost. Also checks agent_version (required for per-version Performance charts), set_result completeness, SYNC vs STREAM, parent_generation_ids DAG links, and workflow-step coverage. Recommends changes citing file:line and, only with explicit confirmation, applies minimal diffs that don't change app behavior. Pulls SDK reference from agento11y's llms.txt rather than restating it, and hands off to `agento11y-test-starter` once data flows. It does NOT write test suites or set up tenant evaluations, rules, or guards — offline test suites are `agento11y-test-starter`, tenant eval rules + guards are `agento11y-prod-setup`; does NOT install coding-agent telemetry plugins (that is llms.txt \"Path A\"); does NOT mint or store credentials or invent endpoints. Trigger on phrases like \"instrument my app\", \"send my agent's traces to Grafana\", \"set up AI observability for my app\", \"my generations aren't showing up\", \"why is Performance empty\", \"add Agent Observability to my code\", \"fix my instrumentation\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1636,1637,1638,1641,1644],{"name":1622,"slug":1623,"type":15},{"name":9,"slug":8,"type":15},{"name":1639,"slug":1640,"type":15},"Instrumentation","instrumentation",{"name":1642,"slug":1643,"type":15},"LLM","llm",{"name":13,"slug":14,"type":15},"2026-07-31T05:53:52.580237",{"slug":1647,"name":1647,"fn":1648,"description":1649,"org":1650,"tags":1651,"stars":23,"repoUrl":24,"updatedAt":1658},"agento11y-prod-setup","setup production evaluation for AI agents","Sets up production evaluation and guardrails for a DEPLOYED AI agent in Grafana Agent Observability, grounded in the agent's own code and its real ingested traffic. The judgment layer on top of the `agento11y` skill: it reads the agent's source (system prompt, tools, entrypoint) AND samples its live traffic via gcx, checks what evaluators\u002Frules\u002Fguards already exist, then recommends only what's missing — online eval rules (score live conversations for regressions) and guards (warn-first request-path policies that redact \u002F tool-filter and may later be promoted to deny). It drafts reviewable YAML and, only with explicit confirmation, applies via `gcx agento11y`. New guards are drafted in warn mode (safe on live traffic — warn records but never blocks). It DOES create stack-level objects — that is the point — but every write is confirmed. It never rewrites or redeploys the agent. Trigger on phrases like \"set up production evaluation\", \"my agent is in prod what should I evaluate\", \"catch quality regressions\", \"add guardrails to my agent\", \"redact PII from my agent\", \"block dangerous tools\", \"set up online evals and guards\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1652,1653,1656,1657],{"name":1622,"slug":1623,"type":15},{"name":1654,"slug":1655,"type":15},"Evals","evals",{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-07-31T05:53:53.576347",{"slug":1660,"name":1660,"fn":1661,"description":1662,"org":1663,"tags":1664,"stars":23,"repoUrl":24,"updatedAt":1673},"agento11y-test-starter","build and run agent test suites","Use early in an AI-agent project — before ship, before real traffic — to build a starter test suite for the agent and run it offline. Reads the agent's own code (system prompt, tools, task), writes a labeled draft suite of test cases (happy\u002Fedge\u002Fadversarial) grounded in real lines, and recommends how to score each case (the evaluators\u002Fjudges the offline runner uses). Assesses how runnable the agent is: for an easily-invoked agent it generates a runner stub (run_experiment.py) with two holes to fill and can optionally run it (only with permission, only against the endpoint the developer configured); for agents needing a harness or full runtime it points to the existing eval infra. It runs OFFLINE and never creates tenant-level evaluators, rules, or guards — that is `agento11y-prod-setup`, for a deployed agent with real traffic. Trigger on phrases like \"how do I test my agent before shipping\", \"write test cases for my agent\", \"set up tests for my agent\", \"check my agent before prod\", \"I have no traffic yet, how do I evaluate it\", \"test my agent offline\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1665,1666,1667,1670],{"name":1622,"slug":1623,"type":15},{"name":9,"slug":8,"type":15},{"name":1668,"slug":1669,"type":15},"QA","qa",{"name":1671,"slug":1672,"type":15},"Testing","testing","2026-07-31T05:53:51.62785",{"slug":1675,"name":1675,"fn":1676,"description":1677,"org":1678,"tags":1679,"stars":23,"repoUrl":24,"updatedAt":1690},"create-dashboard","create Grafana dashboards with gcx","Designs and creates Grafana dashboards with gcx, using `gcx dashboards snapshot` as a visual feedback loop. Use when the user wants to create a new Grafana dashboard, add panels, variables, or annotations to an existing dashboard, design dashboard panels, variables, queries, or layout, or make a material visual redesign. Triggers on \"create dashboard\", \"new dashboard\", \"build dashboard\", \"dashboard for \u003Cservice>\", \"add panels\", \"add variable\", \"add annotation\", \"improve this dashboard\", or \"iterate on a dashboard\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1680,1683,1686,1689],{"name":1681,"slug":1682,"type":15},"Dashboards","dashboards",{"name":1684,"slug":1685,"type":15},"Data Visualization","data-visualization",{"name":1687,"slug":1688,"type":15},"Design","design",{"name":9,"slug":8,"type":15},"2026-07-25T05:30:46.289717",{"slug":1692,"name":1692,"fn":1693,"description":1694,"org":1695,"tags":1696,"stars":23,"repoUrl":24,"updatedAt":1705},"debug-with-grafana","investigate application issues with Grafana","Structured workflow for investigating application problems with Grafana observability data (metrics, logs, traces) via gcx. Covers live firefighting AND retrospective incident analysis: incident triage, root-cause analysis, blast-radius checks (did an incident spill into other services), verifying whether a deployment or rollout triggered an incident, finding which service, endpoint, or path owns the most errors or slow requests, checking whether retries or queue backlogs piled up, and quantifying error or latency shares over a time window. Trigger on: \"my API is returning 500 errors\", \"latency is spiking\", \"investigate why requests are failing\", \"triage the incident\", \"blast radius\", \"root cause\", \"did the rollout cause it\", \"which endpoint owns the most 5xx\", \"did retries pile up\", or any request to analyse an earlier incident window using telemetry. For authoring dashboards use create-dashboard; for dashboard inventory use manage-dashboards.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1697,1700,1701,1704],{"name":1698,"slug":1699,"type":15},"Debugging","debugging",{"name":9,"slug":8,"type":15},{"name":1702,"slug":1703,"type":15},"Incident Response","incident-response",{"name":13,"slug":14,"type":15},"2026-07-18T05:11:10.445428",{"slug":1707,"name":1707,"fn":1708,"description":1709,"org":1710,"tags":1711,"stars":23,"repoUrl":24,"updatedAt":1718},"diagnose-entity-graph","diagnose Grafana Entity Graph issues","Diagnose Entity Graph problems: missing entities, missing edges, disconnected clusters, or filtering issues. Use when the user reports that Entity Graph doesn't look right, services are missing, edges aren't appearing, or environments can't be filtered. Triggers for: \"entity graph is empty\", \"services missing from entity graph\", \"no edges in entity graph\", \"disconnected services\", \"can't filter entity graph\", \"entity graph not working\", \"diagnose entity graph\", \"debug knowledge graph\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1712,1713,1714,1717],{"name":1698,"slug":1699,"type":15},{"name":9,"slug":8,"type":15},{"name":1715,"slug":1716,"type":15},"Graph Analysis","graph-analysis",{"name":13,"slug":14,"type":15},"2026-07-25T05:30:39.380934",24,{"items":1721,"total":1854},[1722,1739,1758,1778,1785,1793,1800,1807,1814,1821,1828,1842],{"slug":1723,"name":1723,"fn":1724,"description":1725,"org":1726,"tags":1727,"stars":1736,"repoUrl":1737,"updatedAt":1738},"faro-setup-web","instrument web apps with Grafana Faro","Instruments a web app with Grafana Faro Web SDK for frontend observability. Use when setting up error tracking, Web Vitals, session monitoring, or distributed tracing in a browser app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1728,1731,1734,1735],{"name":1729,"slug":1730,"type":15},"Distributed Tracing","distributed-tracing",{"name":1732,"slug":1733,"type":15},"Frontend","frontend",{"name":1626,"slug":1627,"type":15},{"name":13,"slug":14,"type":15},1103,"https:\u002F\u002Fgithub.com\u002Fgrafana\u002Ffaro-web-sdk","2026-07-12T07:43:24.63314",{"slug":1740,"name":1740,"fn":1741,"description":1742,"org":1743,"tags":1744,"stars":1755,"repoUrl":1756,"updatedAt":1757},"configuring-yesoreyeram-infinity-datasource","configure Grafana Infinity data source","Configure the Infinity data source — base URL and allowed hosts, the authentication methods (basic, bearer token, API key, digest, OAuth passthrough, OAuth 2.0 client credentials\u002FJWT, Azure, Azure Blob, AWS), TLS, custom HTTP headers, network and security settings, the custom health check, and provisioning with a config file. Use when a user asks how to set up, configure, or change settings for the Infinity data source; how to authenticate to an API; how to allow hosts; how to provision it as YAML; or how to troubleshoot connection, authentication, or health-check issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1745,1748,1751,1754],{"name":1746,"slug":1747,"type":15},"API Development","api-development",{"name":1749,"slug":1750,"type":15},"Authentication","authentication",{"name":1752,"slug":1753,"type":15},"Configuration","configuration",{"name":9,"slug":8,"type":15},1056,"https:\u002F\u002Fgithub.com\u002Fgrafana\u002Fgrafana-infinity-datasource","2026-07-12T07:43:25.939136",{"slug":1759,"name":1759,"fn":1760,"description":1761,"org":1762,"tags":1763,"stars":1755,"repoUrl":1756,"updatedAt":1777},"querying-yesoreyeram-infinity-datasource","query data with Infinity datasource","Build queries with the Infinity data source — the query types (JSON, CSV, TSV, XML, GraphQL, HTML, UQL, GROQ, Google Sheets, Series, Transformations), the parsers (Frontend\u002Fsimple, Backend JSONata, JQ, UQL, GROQ) and which support alerting, the sources (URL, Inline, Reference, Azure Blob, Random walk), output formats (table, timeseries, logs, trace, node graph, dataframe), root selector and columns, computed columns\u002Ffilters\u002Fsummarize, pagination, and template variables. Use when a user asks how to query Infinity; how to fetch JSON\u002FCSV\u002FXML\u002FGraphQL\u002FHTML from a URL or inline; how to select rows and columns; how to transform data with UQL\u002FGROQ\u002FJSONata\u002FJQ; how to make a query work with alerting; how to paginate; or how to use variables in a query.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1764,1767,1770,1771,1774],{"name":1765,"slug":1766,"type":15},"CSV","csv",{"name":1768,"slug":1769,"type":15},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":15},{"name":1772,"slug":1773,"type":15},"GraphQL","graphql",{"name":1775,"slug":1776,"type":15},"JSON","json","2026-07-15T05:34:05.773947",{"slug":1616,"name":1616,"fn":1617,"description":1618,"org":1779,"tags":1780,"stars":23,"repoUrl":24,"updatedAt":1629},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1781,1782,1783,1784],{"name":1622,"slug":1623,"type":15},{"name":9,"slug":8,"type":15},{"name":1626,"slug":1627,"type":15},{"name":13,"slug":14,"type":15},{"slug":1631,"name":1631,"fn":1632,"description":1633,"org":1786,"tags":1787,"stars":23,"repoUrl":24,"updatedAt":1645},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1788,1789,1790,1791,1792],{"name":1622,"slug":1623,"type":15},{"name":9,"slug":8,"type":15},{"name":1639,"slug":1640,"type":15},{"name":1642,"slug":1643,"type":15},{"name":13,"slug":14,"type":15},{"slug":1647,"name":1647,"fn":1648,"description":1649,"org":1794,"tags":1795,"stars":23,"repoUrl":24,"updatedAt":1658},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1796,1797,1798,1799],{"name":1622,"slug":1623,"type":15},{"name":1654,"slug":1655,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":1660,"name":1660,"fn":1661,"description":1662,"org":1801,"tags":1802,"stars":23,"repoUrl":24,"updatedAt":1673},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1803,1804,1805,1806],{"name":1622,"slug":1623,"type":15},{"name":9,"slug":8,"type":15},{"name":1668,"slug":1669,"type":15},{"name":1671,"slug":1672,"type":15},{"slug":1675,"name":1675,"fn":1676,"description":1677,"org":1808,"tags":1809,"stars":23,"repoUrl":24,"updatedAt":1690},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1810,1811,1812,1813],{"name":1681,"slug":1682,"type":15},{"name":1684,"slug":1685,"type":15},{"name":1687,"slug":1688,"type":15},{"name":9,"slug":8,"type":15},{"slug":1692,"name":1692,"fn":1693,"description":1694,"org":1815,"tags":1816,"stars":23,"repoUrl":24,"updatedAt":1705},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1817,1818,1819,1820],{"name":1698,"slug":1699,"type":15},{"name":9,"slug":8,"type":15},{"name":1702,"slug":1703,"type":15},{"name":13,"slug":14,"type":15},{"slug":1707,"name":1707,"fn":1708,"description":1709,"org":1822,"tags":1823,"stars":23,"repoUrl":24,"updatedAt":1718},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1824,1825,1826,1827],{"name":1698,"slug":1699,"type":15},{"name":9,"slug":8,"type":15},{"name":1715,"slug":1716,"type":15},{"name":13,"slug":14,"type":15},{"slug":144,"name":144,"fn":1829,"description":1830,"org":1831,"tags":1832,"stars":23,"repoUrl":24,"updatedAt":1841},"manage Grafana Cloud resources via gcx","Manages Grafana Cloud resources via the gcx CLI. Trigger when the user wants to inspect, create, update, delete, query, or automate any Grafana resource - dashboards, datasources, alerts, SLOs, synthetic checks, oncall, incidents, fleet, k6, knowledge graph, or adaptive telemetry.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1833,1836,1837,1838],{"name":1834,"slug":1835,"type":15},"CLI","cli",{"name":9,"slug":8,"type":15},{"name":1626,"slug":1627,"type":15},{"name":1839,"slug":1840,"type":15},"Operations","operations","2026-07-31T05:53:50.587304",{"slug":1843,"name":1843,"fn":1844,"description":1845,"org":1846,"tags":1847,"stars":23,"repoUrl":24,"updatedAt":1853},"gcx-demo","present gcx demo tours","Run a narrated, read-only demo tour of gcx for customer or colleague presentations. Showcases the breadth of gcx across every Grafana Cloud product area — resources, datasources, metrics, logs, traces, SLOs, alerts, synthetic monitoring, IRM, k6, fleet, and more. All commands are strictly read-only. Trigger when the user says \"demo gcx\", \"show off gcx\", \"customer demo\", \"gcx tour\", or \"\u002Fgcx-demo\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1848,1849,1850],{"name":1834,"slug":1835,"type":15},{"name":9,"slug":8,"type":15},{"name":1851,"slug":1852,"type":15},"Presentations","presentations","2026-07-25T05:30:45.282458",80]