[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-grafana-create-dashboard":3,"mdc-5xybq8-key":34,"related-repo-grafana-create-dashboard":2387,"related-org-grafana-create-dashboard":2486},{"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},"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},"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},"Dashboards","dashboards","tag",{"name":17,"slug":18,"type":15},"Data Visualization","data-visualization",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Design","design",430,"https:\u002F\u002Fgithub.com\u002Fgrafana\u002Fgcx","2026-07-25T05:30:46.289717",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\u002Fcreate-dashboard","---\nname: create-dashboard\ndescription: >\n  Designs and creates Grafana dashboards with gcx, using `gcx dashboards\n  snapshot` as a visual feedback loop. Use when the user wants to create a\n  new Grafana dashboard, add panels, variables, or annotations to an existing\n  dashboard, design dashboard panels, variables, queries, or layout, or make\n  a material visual redesign. Triggers on \"create dashboard\", \"new dashboard\",\n  \"build dashboard\", \"dashboard for \u003Cservice>\", \"add panels\", \"add variable\",\n  \"add annotation\", \"improve this dashboard\", or \"iterate on a dashboard\".\n---\n\n# Create Dashboard\n\nCreate dashboards as an iterative product workflow, not as a one-shot manifest\nwrite. The loop is:\n\n```text\nunderstand goal → discover data → author dashboard → validate\u002Fpush → snapshot → inspect → revise\n```\n\nA dashboard creation task is not complete after `push` succeeds. It is complete\nonly after the dashboard has been visually checked, or after you report exactly\nwhy the snapshot step is blocked.\n\nFor pure operations on existing dashboards — list, search, pull, push, promote,\nrestore, delete, or one-off snapshot — use `manage-dashboards` instead.\n\n## Hard Rules\n\n- Do not create dashboards in an arbitrary\u002Fdefault folder. If the target\n  context or folder is ambiguous and the operation will write to Grafana, ask\n  one concise question.\n- If the user gives a context, folder, datasource, or dashboard title, proceed\n  with stated assumptions instead of running a long clarification round.\n- Verify the active gcx context before writes.\n- Verify datasources, metrics, labels, and log fields before adding panels. Do\n  not invent PromQL, LogQL, datasource UIDs, label names, or folder UIDs.\n- Prefer existing project conventions. If the repo already has\n  grafana-foundation-sdk builders, generated manifests, or a dashboards\n  registry, follow that pattern.\n- Use `gcx dashboards snapshot` for visual feedback. After rendering a PNG,\n  inspect the image with the available image\u002Fread tool; do not only report the\n  file path.\n- Iterate at least once after the first snapshot when there are obvious visual\n  or data problems: login page, wrong variables, empty prime panels, title\n  truncation, broken layout, unreadable legends, or poor top-screen triage.\n- Prefer dedicated gcx commands over `gcx api`. Use raw API only when a needed\n  operation has no dedicated command.\n\n## Inputs to Establish\n\nCollect only the missing inputs needed to start:\n\n| Input | Needed for | Default if user is vague |\n|-------|------------|--------------------------|\n| Grafana context | Any read\u002Fwrite | Active gcx context after `gcx config current-context` |\n| Folder | Dashboard creation | Ask; do not default to General silently |\n| Audience | Dashboard shape | On-call\u002FSRE triage audience |\n| Entity scope | Queries\u002Fvariables | Service\u002Fteam\u002Fnamespace from the user request |\n| Datasource(s) | Panel queries | Infer from similar dashboards, then verify |\n| Time range | Snapshot and query tests | `--since 6h` for operational dashboards |\n| Storage path | Local files | Existing repo convention, else `.\u002Fresources\u002Fdashboards\u002F\u003Cname>.yaml` |\n\n## Workflow\n\n### 1. Verify context and permissions\n\n```bash\ngcx config current-context\ngcx config check\ngcx config list-contexts\n```\n\nUse `--context \u003Cname>` on subsequent commands when the user named a context and\nyou do not want to mutate global state.\n\nClassify failures before continuing:\n\n- config\u002Fconnectivity failure → use `setup-gcx` first\n- read 401\u002F403 → missing dashboard\u002Fdatasource read permissions\n- write 403 → token lacks dashboard write permissions\n- folder-specific write failure → wrong folder UID or folder permissions\n\n### 2. Resolve folder and find local\u002Flive conventions\n\nFind the target folder and similar dashboards before authoring.\n\n```bash\n# Folder\u002Fresource inventory. Use JSON for exact UIDs.\ngcx resources get folders -o json\n\n# Similar live dashboards are better than generic examples for variables,\n# datasource UIDs, tags, units, and team conventions.\ngcx dashboards search \"\u003Cservice-or-team-keyword>\" -o json\n\n# Pin the API version. Without --api-version the server returns its preferred\n# version, which may use a different spec shape (elements\u002Flayout\u002Fvariables\n# instead of panels\u002Ftemplating) — the jq recipes below would then silently\n# return nothing.\ngcx dashboards get \u003Csimilar-dashboard-uid> --api-version dashboard.grafana.app\u002Fv1beta1 -o json > \u002Ftmp\u002Fsimilar-dashboard.json\n```\n\nExtract useful patterns:\n\n```bash\njq -r '.. | objects | select(.expr?) | .expr' \u002Ftmp\u002Fsimilar-dashboard.json | sort -u\njq '.spec.templating.list[]? | {name,type,query,current}' \u002Ftmp\u002Fsimilar-dashboard.json\njq '.spec.panels[]? | {id,title,type,gridPos}' \u002Ftmp\u002Fsimilar-dashboard.json\n```\n\nIf local repository scans are appropriate under project rules, look for existing\ndashboard builders\u002Fmanifests and follow their style instead of creating a new\nparallel convention.\n\n### 3. Discover data before panels\n\nDiscover datasources and metrics directly when datasource choice or metric\ninventory is unclear. Minimum discovery for Prometheus\u002FLoki dashboards:\n\n```bash\ngcx datasources list -o json\n```\n\n| Type | List names | Values for a specific name |\n|------|-----------|---------------------------|\n| Prometheus | `gcx datasources prometheus labels -d \u003Cuid> --label __name__` | `gcx datasources prometheus labels -d \u003Cuid> --label \u003Clabel>` |\n| Loki | `gcx datasources loki labels -d \u003Cuid>` | `gcx datasources loki labels -d \u003Cuid> --label \u003Clabel>` |\n| Tempo | `gcx datasources tempo labels -d \u003Cuid>` | `gcx datasources tempo labels -d \u003Cuid> -l \u003Cattr> --llm -o json [--scope span\\|resource] [-q '\u003Ctraceql>']` |\n| Pyroscope | `gcx datasources pyroscope list-profile-types -d \u003Cuid>` then `labels -d \u003Cuid>` | `gcx datasources pyroscope labels -d \u003Cuid> --label \u003Clabel>` |\n\nPrometheus also has `gcx datasources prometheus metadata -d \u003Cuid>` for metric type and help text.\nFor Prometheus scoped label lookups, fall back to `gcx api \"\u002Fapi\u002Fdatasources\u002Fproxy\u002Fuid\u002F\u003Cuid>\u002Fapi\u002Fv1\u002Flabel\u002F\u003Clabel>\u002Fvalues?match[]=\u003Cselector>\"` — use the datasource `uid` from `gcx datasources list`; the list output has no numeric id.\nOther datasource types may have their own discovery subcommands — check `gcx datasources \u003Ctype> --help` before using `gcx api`.\n\nCheck units, histogram buckets, status labels, route\u002Foperation labels, cluster\nor namespace labels, and cardinality. Prefer `topk()` or aggregations for high\ncardinality dimensions.\n\n### 4. Design the dashboard story\n\nDashboards should answer a diagnostic question. Prefer a top-to-bottom story:\n\n```text\nContext and health → user impact → traffic\u002Ferrors\u002Flatency → dependency path → resources → logs\u002Ftraces links\n```\n\nDesign rules, distilled from Grafana dashboard best practices:\n\n- Define the dashboard's job before adding panels. If a panel does not support\n  that job, remove it or move it to a collapsed deep-dive row.\n- Prefer fewer, decision-oriented panels over metric inventory. The first\n  screen should answer \"is there a problem and where should I look next?\"\n- Use variables for the entity scope users will actually change (cluster,\n  namespace, service, route, tenant, datasource), but keep them limited; too\n  many variables make snapshots and debugging ambiguous.\n- Give every panel a clear title, unit, legend, and short description. Keep\n  units, decimals, color semantics, and legend names consistent across panels.\n- Use thresholds only where they encode an operational decision.\n- Avoid unbounded\u002Fhigh-cardinality queries in default panels. Use aggregation,\n  `topk()`, scoped variables, and sensible time ranges.\n- Tune refresh and time ranges for the use case. Do not make expensive panels\n  auto-refresh faster than the data or the user decision requires.\n- Make empty states intentional: either empty means healthy and the panel\n  description says so, or the panel should be fixed\u002Fremoved.\n- Add drilldown links when a panel naturally leads to logs, traces, or another\n  dashboard.\n\n### 5. Author the dashboard\n\nChoose one authoring mode.\n\n#### Mode A: Existing resources-as-code project\n\nFollow the repo's established pattern. If a typed stub is needed, use the\n`generate-resource-stubs` skill or:\n\n```bash\ngcx dev generate dashboards\u002F\u003Cdashboard_file>.go\n```\n\nThen edit the generated builder and any registry\u002Fall-files required by the\nproject. Run the project's normal generation\u002Fbuild command before pushing.\n\n#### Mode B: Standalone resource manifest\n\nStart from the live schema instead of guessing fields:\n\n```bash\ngcx resources list-types dashboards -o json > \u002Ftmp\u002Fdashboard-schema.json\n```\n\nNote: the server returns the schema of its *preferred* dashboard API version,\nwhich may use a different spec shape (`elements`\u002F`layout`\u002F`variables`), while\nthe template below uses the classic `v1beta1` shape (`panels`\u002F`templating`).\nBoth versions are accepted on push — just author consistently against one\nversion and don't mix fields between them.\n\n`gcx resources list-examples` is useful for resource types that ship examples, but\ncurrent dashboard authoring should not depend on an example being available.\n\nCreate a manifest such as `.\u002Fresources\u002Fdashboards\u002F\u003Cdashboard-name>.yaml`.\nUse a stable slug-like `metadata.name` for the dashboard resource name\u002FUID and a\nhuman-readable `spec.title` for the displayed title.\n\n```yaml\napiVersion: dashboard.grafana.app\u002Fv1beta1\nkind: Dashboard\nmetadata:\n  name: \u003Cstable-dashboard-slug>\n  annotations:\n    grafana.app\u002Ffolder: \u003Cfolder-uid>\nspec:\n  title: \"\u003CHuman readable dashboard title>\"\n  tags: [gcx]\n  timezone: browser\n  schemaVersion: 36\n  templating:\n    list: []\n  panels: []\n```\n\nFolder placement is the `grafana.app\u002Ffolder` **metadata annotation** shown\nabove — the same key `gcx resources get dashboards` reads to display the\nFOLDER column. There is no `folderUID` field inside `spec`; putting one there\nis ignored and silently lands the dashboard in General, violating the folder\nrule at the top of this skill.\n\nFill in panels, variables, links, and layout using patterns discovered above.\n\n### 6. Validate, dry-run, push, and verify\n\n```bash\ngcx resources validate -p \u003Cdashboard-path-or-dir> -o json\ngcx resources push -p \u003Cdashboard-path-or-dir> --dry-run\ngcx resources push -p \u003Cdashboard-path-or-dir>\n\n# Verify the stored object. \u003Cname> is metadata.name.\ngcx resources get dashboards\u002F\u003Cname> -o json\n```\n\nIf pushing into a directory that also contains folders, gcx orders folders before\ndashboards automatically. If an existing dashboard is protected by a different\nmanager annotation, stop and explain; only use `--include-managed` when the user\nexplicitly wants gcx to take ownership.\n\n### 7. Snapshot, inspect, and iterate\n\nRender a full-dashboard snapshot with the same variables and time range a user\nwould use. Replace or omit the `--var` examples below so they match variables\nactually defined in the dashboard.\n\n```bash\nmkdir -p .\u002Fsnapshots\nGCX_AGENT_MODE=true gcx dashboards snapshot \u003Cdashboard-name> \\\n  --output-dir .\u002Fsnapshots \\\n  --since 6h \\\n  --var cluster=\u003Ccluster> \\\n  --var namespace=\u003Cnamespace> \\\n  --width 1920 \\\n  --theme dark\n```\n\nThen read\u002Fopen the PNG returned in `file_path`. Inspect for:\n\n- login\u002Ferror page instead of the dashboard\n- wrong dashboard, wrong folder, wrong time range, or wrong variables\n- empty top-row panels caused by bad queries or labels\n- title truncation or legends consuming the panel\n- overlapping panels, gaps, or poor row order\n- unreadable high-cardinality series\n- missing units\u002Fthresholds\u002Fdescriptions\n- too much chrome; consider a larger `--width` (the renderer already hides nav\n  chrome — there is no separate kiosk flag)\n\nRender individual panels when a panel is suspect:\n\n```bash\nGCX_AGENT_MODE=true gcx dashboards snapshot \u003Cdashboard-name> --panel \u003Cpanel-id> \\\n  --output-dir .\u002Fsnapshots --since 6h --width 1200 --height 700\n```\n\nIf the snapshot reveals issues, edit the source, validate, push, and snapshot\nagain. Keep the loop short but real; one good visual correction is better than a\nsuccessful push with an unusable dashboard.\n\n### 8. Final response\n\nReport only the useful operational facts:\n\n- assumptions made\n- Grafana context and folder\n- dashboard title and resource name\u002FUID\n- local source path\n- validation\u002Fpush result\n- snapshot path(s) and what you observed\n- iterations performed\n- remaining issues or blockers\n\nIf snapshot failed, include the exact failure class: missing image renderer,\nauth\u002FRBAC, bad variables, rendering timeout, or command error. Do not claim the\ndashboard was visually reviewed when it was not.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,47,53,66,79,92,99,160,166,171,348,354,361,427,439,444,475,481,486,713,718,821,826,832,837,869,1008,1060,1073,1079,1084,1093,1098,1153,1159,1164,1171,1184,1237,1242,1248,1253,1297,1356,1367,1396,1646,1690,1695,1701,1891,1904,1910,1923,2132,2145,2196,2201,2317,2322,2328,2333,2376,2381],{"type":40,"tag":41,"props":42,"children":43},"element","h1",{"id":4},[44],{"type":45,"value":46},"text","Create Dashboard",{"type":40,"tag":48,"props":49,"children":50},"p",{},[51],{"type":45,"value":52},"Create dashboards as an iterative product workflow, not as a one-shot manifest\nwrite. The loop is:",{"type":40,"tag":54,"props":55,"children":60},"pre",{"className":56,"code":58,"language":45,"meta":59},[57],"language-text","understand goal → discover data → author dashboard → validate\u002Fpush → snapshot → inspect → revise\n","",[61],{"type":40,"tag":62,"props":63,"children":64},"code",{"__ignoreMap":59},[65],{"type":45,"value":58},{"type":40,"tag":48,"props":67,"children":68},{},[69,71,77],{"type":45,"value":70},"A dashboard creation task is not complete after ",{"type":40,"tag":62,"props":72,"children":74},{"className":73},[],[75],{"type":45,"value":76},"push",{"type":45,"value":78}," succeeds. It is complete\nonly after the dashboard has been visually checked, or after you report exactly\nwhy the snapshot step is blocked.",{"type":40,"tag":48,"props":80,"children":81},{},[82,84,90],{"type":45,"value":83},"For pure operations on existing dashboards — list, search, pull, push, promote,\nrestore, delete, or one-off snapshot — use ",{"type":40,"tag":62,"props":85,"children":87},{"className":86},[],[88],{"type":45,"value":89},"manage-dashboards",{"type":45,"value":91}," instead.",{"type":40,"tag":93,"props":94,"children":96},"h2",{"id":95},"hard-rules",[97],{"type":45,"value":98},"Hard Rules",{"type":40,"tag":100,"props":101,"children":102},"ul",{},[103,109,114,119,124,129,142,147],{"type":40,"tag":104,"props":105,"children":106},"li",{},[107],{"type":45,"value":108},"Do not create dashboards in an arbitrary\u002Fdefault folder. If the target\ncontext or folder is ambiguous and the operation will write to Grafana, ask\none concise question.",{"type":40,"tag":104,"props":110,"children":111},{},[112],{"type":45,"value":113},"If the user gives a context, folder, datasource, or dashboard title, proceed\nwith stated assumptions instead of running a long clarification round.",{"type":40,"tag":104,"props":115,"children":116},{},[117],{"type":45,"value":118},"Verify the active gcx context before writes.",{"type":40,"tag":104,"props":120,"children":121},{},[122],{"type":45,"value":123},"Verify datasources, metrics, labels, and log fields before adding panels. Do\nnot invent PromQL, LogQL, datasource UIDs, label names, or folder UIDs.",{"type":40,"tag":104,"props":125,"children":126},{},[127],{"type":45,"value":128},"Prefer existing project conventions. If the repo already has\ngrafana-foundation-sdk builders, generated manifests, or a dashboards\nregistry, follow that pattern.",{"type":40,"tag":104,"props":130,"children":131},{},[132,134,140],{"type":45,"value":133},"Use ",{"type":40,"tag":62,"props":135,"children":137},{"className":136},[],[138],{"type":45,"value":139},"gcx dashboards snapshot",{"type":45,"value":141}," for visual feedback. After rendering a PNG,\ninspect the image with the available image\u002Fread tool; do not only report the\nfile path.",{"type":40,"tag":104,"props":143,"children":144},{},[145],{"type":45,"value":146},"Iterate at least once after the first snapshot when there are obvious visual\nor data problems: login page, wrong variables, empty prime panels, title\ntruncation, broken layout, unreadable legends, or poor top-screen triage.",{"type":40,"tag":104,"props":148,"children":149},{},[150,152,158],{"type":45,"value":151},"Prefer dedicated gcx commands over ",{"type":40,"tag":62,"props":153,"children":155},{"className":154},[],[156],{"type":45,"value":157},"gcx api",{"type":45,"value":159},". Use raw API only when a needed\noperation has no dedicated command.",{"type":40,"tag":93,"props":161,"children":163},{"id":162},"inputs-to-establish",[164],{"type":45,"value":165},"Inputs to Establish",{"type":40,"tag":48,"props":167,"children":168},{},[169],{"type":45,"value":170},"Collect only the missing inputs needed to start:",{"type":40,"tag":172,"props":173,"children":174},"table",{},[175,199],{"type":40,"tag":176,"props":177,"children":178},"thead",{},[179],{"type":40,"tag":180,"props":181,"children":182},"tr",{},[183,189,194],{"type":40,"tag":184,"props":185,"children":186},"th",{},[187],{"type":45,"value":188},"Input",{"type":40,"tag":184,"props":190,"children":191},{},[192],{"type":45,"value":193},"Needed for",{"type":40,"tag":184,"props":195,"children":196},{},[197],{"type":45,"value":198},"Default if user is vague",{"type":40,"tag":200,"props":201,"children":202},"tbody",{},[203,228,246,264,282,300,324],{"type":40,"tag":180,"props":204,"children":205},{},[206,212,217],{"type":40,"tag":207,"props":208,"children":209},"td",{},[210],{"type":45,"value":211},"Grafana context",{"type":40,"tag":207,"props":213,"children":214},{},[215],{"type":45,"value":216},"Any read\u002Fwrite",{"type":40,"tag":207,"props":218,"children":219},{},[220,222],{"type":45,"value":221},"Active gcx context after ",{"type":40,"tag":62,"props":223,"children":225},{"className":224},[],[226],{"type":45,"value":227},"gcx config current-context",{"type":40,"tag":180,"props":229,"children":230},{},[231,236,241],{"type":40,"tag":207,"props":232,"children":233},{},[234],{"type":45,"value":235},"Folder",{"type":40,"tag":207,"props":237,"children":238},{},[239],{"type":45,"value":240},"Dashboard creation",{"type":40,"tag":207,"props":242,"children":243},{},[244],{"type":45,"value":245},"Ask; do not default to General silently",{"type":40,"tag":180,"props":247,"children":248},{},[249,254,259],{"type":40,"tag":207,"props":250,"children":251},{},[252],{"type":45,"value":253},"Audience",{"type":40,"tag":207,"props":255,"children":256},{},[257],{"type":45,"value":258},"Dashboard shape",{"type":40,"tag":207,"props":260,"children":261},{},[262],{"type":45,"value":263},"On-call\u002FSRE triage audience",{"type":40,"tag":180,"props":265,"children":266},{},[267,272,277],{"type":40,"tag":207,"props":268,"children":269},{},[270],{"type":45,"value":271},"Entity scope",{"type":40,"tag":207,"props":273,"children":274},{},[275],{"type":45,"value":276},"Queries\u002Fvariables",{"type":40,"tag":207,"props":278,"children":279},{},[280],{"type":45,"value":281},"Service\u002Fteam\u002Fnamespace from the user request",{"type":40,"tag":180,"props":283,"children":284},{},[285,290,295],{"type":40,"tag":207,"props":286,"children":287},{},[288],{"type":45,"value":289},"Datasource(s)",{"type":40,"tag":207,"props":291,"children":292},{},[293],{"type":45,"value":294},"Panel queries",{"type":40,"tag":207,"props":296,"children":297},{},[298],{"type":45,"value":299},"Infer from similar dashboards, then verify",{"type":40,"tag":180,"props":301,"children":302},{},[303,308,313],{"type":40,"tag":207,"props":304,"children":305},{},[306],{"type":45,"value":307},"Time range",{"type":40,"tag":207,"props":309,"children":310},{},[311],{"type":45,"value":312},"Snapshot and query tests",{"type":40,"tag":207,"props":314,"children":315},{},[316,322],{"type":40,"tag":62,"props":317,"children":319},{"className":318},[],[320],{"type":45,"value":321},"--since 6h",{"type":45,"value":323}," for operational dashboards",{"type":40,"tag":180,"props":325,"children":326},{},[327,332,337],{"type":40,"tag":207,"props":328,"children":329},{},[330],{"type":45,"value":331},"Storage path",{"type":40,"tag":207,"props":333,"children":334},{},[335],{"type":45,"value":336},"Local files",{"type":40,"tag":207,"props":338,"children":339},{},[340,342],{"type":45,"value":341},"Existing repo convention, else ",{"type":40,"tag":62,"props":343,"children":345},{"className":344},[],[346],{"type":45,"value":347},".\u002Fresources\u002Fdashboards\u002F\u003Cname>.yaml",{"type":40,"tag":93,"props":349,"children":351},{"id":350},"workflow",[352],{"type":45,"value":353},"Workflow",{"type":40,"tag":355,"props":356,"children":358},"h3",{"id":357},"_1-verify-context-and-permissions",[359],{"type":45,"value":360},"1. Verify context and permissions",{"type":40,"tag":54,"props":362,"children":366},{"className":363,"code":364,"language":365,"meta":59,"style":59},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","gcx config current-context\ngcx config check\ngcx config list-contexts\n","bash",[367],{"type":40,"tag":62,"props":368,"children":369},{"__ignoreMap":59},[370,393,410],{"type":40,"tag":371,"props":372,"children":375},"span",{"class":373,"line":374},"line",1,[376,382,388],{"type":40,"tag":371,"props":377,"children":379},{"style":378},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[380],{"type":45,"value":381},"gcx",{"type":40,"tag":371,"props":383,"children":385},{"style":384},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[386],{"type":45,"value":387}," config",{"type":40,"tag":371,"props":389,"children":390},{"style":384},[391],{"type":45,"value":392}," current-context\n",{"type":40,"tag":371,"props":394,"children":396},{"class":373,"line":395},2,[397,401,405],{"type":40,"tag":371,"props":398,"children":399},{"style":378},[400],{"type":45,"value":381},{"type":40,"tag":371,"props":402,"children":403},{"style":384},[404],{"type":45,"value":387},{"type":40,"tag":371,"props":406,"children":407},{"style":384},[408],{"type":45,"value":409}," check\n",{"type":40,"tag":371,"props":411,"children":413},{"class":373,"line":412},3,[414,418,422],{"type":40,"tag":371,"props":415,"children":416},{"style":378},[417],{"type":45,"value":381},{"type":40,"tag":371,"props":419,"children":420},{"style":384},[421],{"type":45,"value":387},{"type":40,"tag":371,"props":423,"children":424},{"style":384},[425],{"type":45,"value":426}," list-contexts\n",{"type":40,"tag":48,"props":428,"children":429},{},[430,431,437],{"type":45,"value":133},{"type":40,"tag":62,"props":432,"children":434},{"className":433},[],[435],{"type":45,"value":436},"--context \u003Cname>",{"type":45,"value":438}," on subsequent commands when the user named a context and\nyou do not want to mutate global state.",{"type":40,"tag":48,"props":440,"children":441},{},[442],{"type":45,"value":443},"Classify failures before continuing:",{"type":40,"tag":100,"props":445,"children":446},{},[447,460,465,470],{"type":40,"tag":104,"props":448,"children":449},{},[450,452,458],{"type":45,"value":451},"config\u002Fconnectivity failure → use ",{"type":40,"tag":62,"props":453,"children":455},{"className":454},[],[456],{"type":45,"value":457},"setup-gcx",{"type":45,"value":459}," first",{"type":40,"tag":104,"props":461,"children":462},{},[463],{"type":45,"value":464},"read 401\u002F403 → missing dashboard\u002Fdatasource read permissions",{"type":40,"tag":104,"props":466,"children":467},{},[468],{"type":45,"value":469},"write 403 → token lacks dashboard write permissions",{"type":40,"tag":104,"props":471,"children":472},{},[473],{"type":45,"value":474},"folder-specific write failure → wrong folder UID or folder permissions",{"type":40,"tag":355,"props":476,"children":478},{"id":477},"_2-resolve-folder-and-find-locallive-conventions",[479],{"type":45,"value":480},"2. Resolve folder and find local\u002Flive conventions",{"type":40,"tag":48,"props":482,"children":483},{},[484],{"type":45,"value":485},"Find the target folder and similar dashboards before authoring.",{"type":40,"tag":54,"props":487,"children":489},{"className":363,"code":488,"language":365,"meta":59,"style":59},"# Folder\u002Fresource inventory. Use JSON for exact UIDs.\ngcx resources get folders -o json\n\n# Similar live dashboards are better than generic examples for variables,\n# datasource UIDs, tags, units, and team conventions.\ngcx dashboards search \"\u003Cservice-or-team-keyword>\" -o json\n\n# Pin the API version. Without --api-version the server returns its preferred\n# version, which may use a different spec shape (elements\u002Flayout\u002Fvariables\n# instead of panels\u002Ftemplating) — the jq recipes below would then silently\n# return nothing.\ngcx dashboards get \u003Csimilar-dashboard-uid> --api-version dashboard.grafana.app\u002Fv1beta1 -o json > \u002Ftmp\u002Fsimilar-dashboard.json\n",[490],{"type":40,"tag":62,"props":491,"children":492},{"__ignoreMap":59},[493,502,534,543,552,561,603,611,620,629,638,647],{"type":40,"tag":371,"props":494,"children":495},{"class":373,"line":374},[496],{"type":40,"tag":371,"props":497,"children":499},{"style":498},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[500],{"type":45,"value":501},"# Folder\u002Fresource inventory. Use JSON for exact UIDs.\n",{"type":40,"tag":371,"props":503,"children":504},{"class":373,"line":395},[505,509,514,519,524,529],{"type":40,"tag":371,"props":506,"children":507},{"style":378},[508],{"type":45,"value":381},{"type":40,"tag":371,"props":510,"children":511},{"style":384},[512],{"type":45,"value":513}," resources",{"type":40,"tag":371,"props":515,"children":516},{"style":384},[517],{"type":45,"value":518}," get",{"type":40,"tag":371,"props":520,"children":521},{"style":384},[522],{"type":45,"value":523}," folders",{"type":40,"tag":371,"props":525,"children":526},{"style":384},[527],{"type":45,"value":528}," -o",{"type":40,"tag":371,"props":530,"children":531},{"style":384},[532],{"type":45,"value":533}," json\n",{"type":40,"tag":371,"props":535,"children":536},{"class":373,"line":412},[537],{"type":40,"tag":371,"props":538,"children":540},{"emptyLinePlaceholder":539},true,[541],{"type":45,"value":542},"\n",{"type":40,"tag":371,"props":544,"children":546},{"class":373,"line":545},4,[547],{"type":40,"tag":371,"props":548,"children":549},{"style":498},[550],{"type":45,"value":551},"# Similar live dashboards are better than generic examples for variables,\n",{"type":40,"tag":371,"props":553,"children":555},{"class":373,"line":554},5,[556],{"type":40,"tag":371,"props":557,"children":558},{"style":498},[559],{"type":45,"value":560},"# datasource UIDs, tags, units, and team conventions.\n",{"type":40,"tag":371,"props":562,"children":564},{"class":373,"line":563},6,[565,569,574,579,585,590,595,599],{"type":40,"tag":371,"props":566,"children":567},{"style":378},[568],{"type":45,"value":381},{"type":40,"tag":371,"props":570,"children":571},{"style":384},[572],{"type":45,"value":573}," dashboards",{"type":40,"tag":371,"props":575,"children":576},{"style":384},[577],{"type":45,"value":578}," search",{"type":40,"tag":371,"props":580,"children":582},{"style":581},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[583],{"type":45,"value":584}," \"",{"type":40,"tag":371,"props":586,"children":587},{"style":384},[588],{"type":45,"value":589},"\u003Cservice-or-team-keyword>",{"type":40,"tag":371,"props":591,"children":592},{"style":581},[593],{"type":45,"value":594},"\"",{"type":40,"tag":371,"props":596,"children":597},{"style":384},[598],{"type":45,"value":528},{"type":40,"tag":371,"props":600,"children":601},{"style":384},[602],{"type":45,"value":533},{"type":40,"tag":371,"props":604,"children":606},{"class":373,"line":605},7,[607],{"type":40,"tag":371,"props":608,"children":609},{"emptyLinePlaceholder":539},[610],{"type":45,"value":542},{"type":40,"tag":371,"props":612,"children":614},{"class":373,"line":613},8,[615],{"type":40,"tag":371,"props":616,"children":617},{"style":498},[618],{"type":45,"value":619},"# Pin the API version. Without --api-version the server returns its preferred\n",{"type":40,"tag":371,"props":621,"children":623},{"class":373,"line":622},9,[624],{"type":40,"tag":371,"props":625,"children":626},{"style":498},[627],{"type":45,"value":628},"# version, which may use a different spec shape (elements\u002Flayout\u002Fvariables\n",{"type":40,"tag":371,"props":630,"children":632},{"class":373,"line":631},10,[633],{"type":40,"tag":371,"props":634,"children":635},{"style":498},[636],{"type":45,"value":637},"# instead of panels\u002Ftemplating) — the jq recipes below would then silently\n",{"type":40,"tag":371,"props":639,"children":641},{"class":373,"line":640},11,[642],{"type":40,"tag":371,"props":643,"children":644},{"style":498},[645],{"type":45,"value":646},"# return nothing.\n",{"type":40,"tag":371,"props":648,"children":650},{"class":373,"line":649},12,[651,655,659,663,668,673,679,684,689,694,698,703,708],{"type":40,"tag":371,"props":652,"children":653},{"style":378},[654],{"type":45,"value":381},{"type":40,"tag":371,"props":656,"children":657},{"style":384},[658],{"type":45,"value":573},{"type":40,"tag":371,"props":660,"children":661},{"style":384},[662],{"type":45,"value":518},{"type":40,"tag":371,"props":664,"children":665},{"style":581},[666],{"type":45,"value":667}," \u003C",{"type":40,"tag":371,"props":669,"children":670},{"style":384},[671],{"type":45,"value":672},"similar-dashboard-ui",{"type":40,"tag":371,"props":674,"children":676},{"style":675},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[677],{"type":45,"value":678},"d",{"type":40,"tag":371,"props":680,"children":681},{"style":581},[682],{"type":45,"value":683},">",{"type":40,"tag":371,"props":685,"children":686},{"style":384},[687],{"type":45,"value":688}," --api-version",{"type":40,"tag":371,"props":690,"children":691},{"style":384},[692],{"type":45,"value":693}," dashboard.grafana.app\u002Fv1beta1",{"type":40,"tag":371,"props":695,"children":696},{"style":384},[697],{"type":45,"value":528},{"type":40,"tag":371,"props":699,"children":700},{"style":384},[701],{"type":45,"value":702}," json",{"type":40,"tag":371,"props":704,"children":705},{"style":581},[706],{"type":45,"value":707}," >",{"type":40,"tag":371,"props":709,"children":710},{"style":384},[711],{"type":45,"value":712}," \u002Ftmp\u002Fsimilar-dashboard.json\n",{"type":40,"tag":48,"props":714,"children":715},{},[716],{"type":45,"value":717},"Extract useful patterns:",{"type":40,"tag":54,"props":719,"children":721},{"className":363,"code":720,"language":365,"meta":59,"style":59},"jq -r '.. | objects | select(.expr?) | .expr' \u002Ftmp\u002Fsimilar-dashboard.json | sort -u\njq '.spec.templating.list[]? | {name,type,query,current}' \u002Ftmp\u002Fsimilar-dashboard.json\njq '.spec.panels[]? | {id,title,type,gridPos}' \u002Ftmp\u002Fsimilar-dashboard.json\n",[722],{"type":40,"tag":62,"props":723,"children":724},{"__ignoreMap":59},[725,773,797],{"type":40,"tag":371,"props":726,"children":727},{"class":373,"line":374},[728,733,738,743,748,753,758,763,768],{"type":40,"tag":371,"props":729,"children":730},{"style":378},[731],{"type":45,"value":732},"jq",{"type":40,"tag":371,"props":734,"children":735},{"style":384},[736],{"type":45,"value":737}," -r",{"type":40,"tag":371,"props":739,"children":740},{"style":581},[741],{"type":45,"value":742}," '",{"type":40,"tag":371,"props":744,"children":745},{"style":384},[746],{"type":45,"value":747},".. | objects | select(.expr?) | .expr",{"type":40,"tag":371,"props":749,"children":750},{"style":581},[751],{"type":45,"value":752},"'",{"type":40,"tag":371,"props":754,"children":755},{"style":384},[756],{"type":45,"value":757}," \u002Ftmp\u002Fsimilar-dashboard.json",{"type":40,"tag":371,"props":759,"children":760},{"style":581},[761],{"type":45,"value":762}," |",{"type":40,"tag":371,"props":764,"children":765},{"style":378},[766],{"type":45,"value":767}," sort",{"type":40,"tag":371,"props":769,"children":770},{"style":384},[771],{"type":45,"value":772}," -u\n",{"type":40,"tag":371,"props":774,"children":775},{"class":373,"line":395},[776,780,784,789,793],{"type":40,"tag":371,"props":777,"children":778},{"style":378},[779],{"type":45,"value":732},{"type":40,"tag":371,"props":781,"children":782},{"style":581},[783],{"type":45,"value":742},{"type":40,"tag":371,"props":785,"children":786},{"style":384},[787],{"type":45,"value":788},".spec.templating.list[]? | {name,type,query,current}",{"type":40,"tag":371,"props":790,"children":791},{"style":581},[792],{"type":45,"value":752},{"type":40,"tag":371,"props":794,"children":795},{"style":384},[796],{"type":45,"value":712},{"type":40,"tag":371,"props":798,"children":799},{"class":373,"line":412},[800,804,808,813,817],{"type":40,"tag":371,"props":801,"children":802},{"style":378},[803],{"type":45,"value":732},{"type":40,"tag":371,"props":805,"children":806},{"style":581},[807],{"type":45,"value":742},{"type":40,"tag":371,"props":809,"children":810},{"style":384},[811],{"type":45,"value":812},".spec.panels[]? | {id,title,type,gridPos}",{"type":40,"tag":371,"props":814,"children":815},{"style":581},[816],{"type":45,"value":752},{"type":40,"tag":371,"props":818,"children":819},{"style":384},[820],{"type":45,"value":712},{"type":40,"tag":48,"props":822,"children":823},{},[824],{"type":45,"value":825},"If local repository scans are appropriate under project rules, look for existing\ndashboard builders\u002Fmanifests and follow their style instead of creating a new\nparallel convention.",{"type":40,"tag":355,"props":827,"children":829},{"id":828},"_3-discover-data-before-panels",[830],{"type":45,"value":831},"3. Discover data before panels",{"type":40,"tag":48,"props":833,"children":834},{},[835],{"type":45,"value":836},"Discover datasources and metrics directly when datasource choice or metric\ninventory is unclear. Minimum discovery for Prometheus\u002FLoki dashboards:",{"type":40,"tag":54,"props":838,"children":840},{"className":363,"code":839,"language":365,"meta":59,"style":59},"gcx datasources list -o json\n",[841],{"type":40,"tag":62,"props":842,"children":843},{"__ignoreMap":59},[844],{"type":40,"tag":371,"props":845,"children":846},{"class":373,"line":374},[847,851,856,861,865],{"type":40,"tag":371,"props":848,"children":849},{"style":378},[850],{"type":45,"value":381},{"type":40,"tag":371,"props":852,"children":853},{"style":384},[854],{"type":45,"value":855}," datasources",{"type":40,"tag":371,"props":857,"children":858},{"style":384},[859],{"type":45,"value":860}," list",{"type":40,"tag":371,"props":862,"children":863},{"style":384},[864],{"type":45,"value":528},{"type":40,"tag":371,"props":866,"children":867},{"style":384},[868],{"type":45,"value":533},{"type":40,"tag":172,"props":870,"children":871},{},[872,893],{"type":40,"tag":176,"props":873,"children":874},{},[875],{"type":40,"tag":180,"props":876,"children":877},{},[878,883,888],{"type":40,"tag":184,"props":879,"children":880},{},[881],{"type":45,"value":882},"Type",{"type":40,"tag":184,"props":884,"children":885},{},[886],{"type":45,"value":887},"List names",{"type":40,"tag":184,"props":889,"children":890},{},[891],{"type":45,"value":892},"Values for a specific name",{"type":40,"tag":200,"props":894,"children":895},{},[896,922,948,974],{"type":40,"tag":180,"props":897,"children":898},{},[899,904,913],{"type":40,"tag":207,"props":900,"children":901},{},[902],{"type":45,"value":903},"Prometheus",{"type":40,"tag":207,"props":905,"children":906},{},[907],{"type":40,"tag":62,"props":908,"children":910},{"className":909},[],[911],{"type":45,"value":912},"gcx datasources prometheus labels -d \u003Cuid> --label __name__",{"type":40,"tag":207,"props":914,"children":915},{},[916],{"type":40,"tag":62,"props":917,"children":919},{"className":918},[],[920],{"type":45,"value":921},"gcx datasources prometheus labels -d \u003Cuid> --label \u003Clabel>",{"type":40,"tag":180,"props":923,"children":924},{},[925,930,939],{"type":40,"tag":207,"props":926,"children":927},{},[928],{"type":45,"value":929},"Loki",{"type":40,"tag":207,"props":931,"children":932},{},[933],{"type":40,"tag":62,"props":934,"children":936},{"className":935},[],[937],{"type":45,"value":938},"gcx datasources loki labels -d \u003Cuid>",{"type":40,"tag":207,"props":940,"children":941},{},[942],{"type":40,"tag":62,"props":943,"children":945},{"className":944},[],[946],{"type":45,"value":947},"gcx datasources loki labels -d \u003Cuid> --label \u003Clabel>",{"type":40,"tag":180,"props":949,"children":950},{},[951,956,965],{"type":40,"tag":207,"props":952,"children":953},{},[954],{"type":45,"value":955},"Tempo",{"type":40,"tag":207,"props":957,"children":958},{},[959],{"type":40,"tag":62,"props":960,"children":962},{"className":961},[],[963],{"type":45,"value":964},"gcx datasources tempo labels -d \u003Cuid>",{"type":40,"tag":207,"props":966,"children":967},{},[968],{"type":40,"tag":62,"props":969,"children":971},{"className":970},[],[972],{"type":45,"value":973},"gcx datasources tempo labels -d \u003Cuid> -l \u003Cattr> --llm -o json [--scope span|resource] [-q '\u003Ctraceql>']",{"type":40,"tag":180,"props":975,"children":976},{},[977,982,999],{"type":40,"tag":207,"props":978,"children":979},{},[980],{"type":45,"value":981},"Pyroscope",{"type":40,"tag":207,"props":983,"children":984},{},[985,991,993],{"type":40,"tag":62,"props":986,"children":988},{"className":987},[],[989],{"type":45,"value":990},"gcx datasources pyroscope list-profile-types -d \u003Cuid>",{"type":45,"value":992}," then ",{"type":40,"tag":62,"props":994,"children":996},{"className":995},[],[997],{"type":45,"value":998},"labels -d \u003Cuid>",{"type":40,"tag":207,"props":1000,"children":1001},{},[1002],{"type":40,"tag":62,"props":1003,"children":1005},{"className":1004},[],[1006],{"type":45,"value":1007},"gcx datasources pyroscope labels -d \u003Cuid> --label \u003Clabel>",{"type":40,"tag":48,"props":1009,"children":1010},{},[1011,1013,1019,1021,1027,1029,1035,1037,1043,1045,1051,1053,1058],{"type":45,"value":1012},"Prometheus also has ",{"type":40,"tag":62,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":45,"value":1018},"gcx datasources prometheus metadata -d \u003Cuid>",{"type":45,"value":1020}," for metric type and help text.\nFor Prometheus scoped label lookups, fall back to ",{"type":40,"tag":62,"props":1022,"children":1024},{"className":1023},[],[1025],{"type":45,"value":1026},"gcx api \"\u002Fapi\u002Fdatasources\u002Fproxy\u002Fuid\u002F\u003Cuid>\u002Fapi\u002Fv1\u002Flabel\u002F\u003Clabel>\u002Fvalues?match[]=\u003Cselector>\"",{"type":45,"value":1028}," — use the datasource ",{"type":40,"tag":62,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":45,"value":1034},"uid",{"type":45,"value":1036}," from ",{"type":40,"tag":62,"props":1038,"children":1040},{"className":1039},[],[1041],{"type":45,"value":1042},"gcx datasources list",{"type":45,"value":1044},"; the list output has no numeric id.\nOther datasource types may have their own discovery subcommands — check ",{"type":40,"tag":62,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":45,"value":1050},"gcx datasources \u003Ctype> --help",{"type":45,"value":1052}," before using ",{"type":40,"tag":62,"props":1054,"children":1056},{"className":1055},[],[1057],{"type":45,"value":157},{"type":45,"value":1059},".",{"type":40,"tag":48,"props":1061,"children":1062},{},[1063,1065,1071],{"type":45,"value":1064},"Check units, histogram buckets, status labels, route\u002Foperation labels, cluster\nor namespace labels, and cardinality. Prefer ",{"type":40,"tag":62,"props":1066,"children":1068},{"className":1067},[],[1069],{"type":45,"value":1070},"topk()",{"type":45,"value":1072}," or aggregations for high\ncardinality dimensions.",{"type":40,"tag":355,"props":1074,"children":1076},{"id":1075},"_4-design-the-dashboard-story",[1077],{"type":45,"value":1078},"4. Design the dashboard story",{"type":40,"tag":48,"props":1080,"children":1081},{},[1082],{"type":45,"value":1083},"Dashboards should answer a diagnostic question. Prefer a top-to-bottom story:",{"type":40,"tag":54,"props":1085,"children":1088},{"className":1086,"code":1087,"language":45,"meta":59},[57],"Context and health → user impact → traffic\u002Ferrors\u002Flatency → dependency path → resources → logs\u002Ftraces links\n",[1089],{"type":40,"tag":62,"props":1090,"children":1091},{"__ignoreMap":59},[1092],{"type":45,"value":1087},{"type":40,"tag":48,"props":1094,"children":1095},{},[1096],{"type":45,"value":1097},"Design rules, distilled from Grafana dashboard best practices:",{"type":40,"tag":100,"props":1099,"children":1100},{},[1101,1106,1111,1116,1121,1126,1138,1143,1148],{"type":40,"tag":104,"props":1102,"children":1103},{},[1104],{"type":45,"value":1105},"Define the dashboard's job before adding panels. If a panel does not support\nthat job, remove it or move it to a collapsed deep-dive row.",{"type":40,"tag":104,"props":1107,"children":1108},{},[1109],{"type":45,"value":1110},"Prefer fewer, decision-oriented panels over metric inventory. The first\nscreen should answer \"is there a problem and where should I look next?\"",{"type":40,"tag":104,"props":1112,"children":1113},{},[1114],{"type":45,"value":1115},"Use variables for the entity scope users will actually change (cluster,\nnamespace, service, route, tenant, datasource), but keep them limited; too\nmany variables make snapshots and debugging ambiguous.",{"type":40,"tag":104,"props":1117,"children":1118},{},[1119],{"type":45,"value":1120},"Give every panel a clear title, unit, legend, and short description. Keep\nunits, decimals, color semantics, and legend names consistent across panels.",{"type":40,"tag":104,"props":1122,"children":1123},{},[1124],{"type":45,"value":1125},"Use thresholds only where they encode an operational decision.",{"type":40,"tag":104,"props":1127,"children":1128},{},[1129,1131,1136],{"type":45,"value":1130},"Avoid unbounded\u002Fhigh-cardinality queries in default panels. Use aggregation,\n",{"type":40,"tag":62,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":45,"value":1070},{"type":45,"value":1137},", scoped variables, and sensible time ranges.",{"type":40,"tag":104,"props":1139,"children":1140},{},[1141],{"type":45,"value":1142},"Tune refresh and time ranges for the use case. Do not make expensive panels\nauto-refresh faster than the data or the user decision requires.",{"type":40,"tag":104,"props":1144,"children":1145},{},[1146],{"type":45,"value":1147},"Make empty states intentional: either empty means healthy and the panel\ndescription says so, or the panel should be fixed\u002Fremoved.",{"type":40,"tag":104,"props":1149,"children":1150},{},[1151],{"type":45,"value":1152},"Add drilldown links when a panel naturally leads to logs, traces, or another\ndashboard.",{"type":40,"tag":355,"props":1154,"children":1156},{"id":1155},"_5-author-the-dashboard",[1157],{"type":45,"value":1158},"5. Author the dashboard",{"type":40,"tag":48,"props":1160,"children":1161},{},[1162],{"type":45,"value":1163},"Choose one authoring mode.",{"type":40,"tag":1165,"props":1166,"children":1168},"h4",{"id":1167},"mode-a-existing-resources-as-code-project",[1169],{"type":45,"value":1170},"Mode A: Existing resources-as-code project",{"type":40,"tag":48,"props":1172,"children":1173},{},[1174,1176,1182],{"type":45,"value":1175},"Follow the repo's established pattern. If a typed stub is needed, use the\n",{"type":40,"tag":62,"props":1177,"children":1179},{"className":1178},[],[1180],{"type":45,"value":1181},"generate-resource-stubs",{"type":45,"value":1183}," skill or:",{"type":40,"tag":54,"props":1185,"children":1187},{"className":363,"code":1186,"language":365,"meta":59,"style":59},"gcx dev generate dashboards\u002F\u003Cdashboard_file>.go\n",[1188],{"type":40,"tag":62,"props":1189,"children":1190},{"__ignoreMap":59},[1191],{"type":40,"tag":371,"props":1192,"children":1193},{"class":373,"line":374},[1194,1198,1203,1208,1213,1218,1223,1228,1232],{"type":40,"tag":371,"props":1195,"children":1196},{"style":378},[1197],{"type":45,"value":381},{"type":40,"tag":371,"props":1199,"children":1200},{"style":384},[1201],{"type":45,"value":1202}," dev",{"type":40,"tag":371,"props":1204,"children":1205},{"style":384},[1206],{"type":45,"value":1207}," generate",{"type":40,"tag":371,"props":1209,"children":1210},{"style":384},[1211],{"type":45,"value":1212}," dashboards\u002F",{"type":40,"tag":371,"props":1214,"children":1215},{"style":581},[1216],{"type":45,"value":1217},"\u003C",{"type":40,"tag":371,"props":1219,"children":1220},{"style":384},[1221],{"type":45,"value":1222},"dashboard_fil",{"type":40,"tag":371,"props":1224,"children":1225},{"style":675},[1226],{"type":45,"value":1227},"e",{"type":40,"tag":371,"props":1229,"children":1230},{"style":581},[1231],{"type":45,"value":683},{"type":40,"tag":371,"props":1233,"children":1234},{"style":384},[1235],{"type":45,"value":1236},".go\n",{"type":40,"tag":48,"props":1238,"children":1239},{},[1240],{"type":45,"value":1241},"Then edit the generated builder and any registry\u002Fall-files required by the\nproject. Run the project's normal generation\u002Fbuild command before pushing.",{"type":40,"tag":1165,"props":1243,"children":1245},{"id":1244},"mode-b-standalone-resource-manifest",[1246],{"type":45,"value":1247},"Mode B: Standalone resource manifest",{"type":40,"tag":48,"props":1249,"children":1250},{},[1251],{"type":45,"value":1252},"Start from the live schema instead of guessing fields:",{"type":40,"tag":54,"props":1254,"children":1256},{"className":363,"code":1255,"language":365,"meta":59,"style":59},"gcx resources list-types dashboards -o json > \u002Ftmp\u002Fdashboard-schema.json\n",[1257],{"type":40,"tag":62,"props":1258,"children":1259},{"__ignoreMap":59},[1260],{"type":40,"tag":371,"props":1261,"children":1262},{"class":373,"line":374},[1263,1267,1271,1276,1280,1284,1288,1292],{"type":40,"tag":371,"props":1264,"children":1265},{"style":378},[1266],{"type":45,"value":381},{"type":40,"tag":371,"props":1268,"children":1269},{"style":384},[1270],{"type":45,"value":513},{"type":40,"tag":371,"props":1272,"children":1273},{"style":384},[1274],{"type":45,"value":1275}," list-types",{"type":40,"tag":371,"props":1277,"children":1278},{"style":384},[1279],{"type":45,"value":573},{"type":40,"tag":371,"props":1281,"children":1282},{"style":384},[1283],{"type":45,"value":528},{"type":40,"tag":371,"props":1285,"children":1286},{"style":384},[1287],{"type":45,"value":702},{"type":40,"tag":371,"props":1289,"children":1290},{"style":581},[1291],{"type":45,"value":707},{"type":40,"tag":371,"props":1293,"children":1294},{"style":384},[1295],{"type":45,"value":1296}," \u002Ftmp\u002Fdashboard-schema.json\n",{"type":40,"tag":48,"props":1298,"children":1299},{},[1300,1302,1308,1310,1316,1318,1324,1325,1331,1333,1339,1341,1347,1348,1354],{"type":45,"value":1301},"Note: the server returns the schema of its ",{"type":40,"tag":1303,"props":1304,"children":1305},"em",{},[1306],{"type":45,"value":1307},"preferred",{"type":45,"value":1309}," dashboard API version,\nwhich may use a different spec shape (",{"type":40,"tag":62,"props":1311,"children":1313},{"className":1312},[],[1314],{"type":45,"value":1315},"elements",{"type":45,"value":1317},"\u002F",{"type":40,"tag":62,"props":1319,"children":1321},{"className":1320},[],[1322],{"type":45,"value":1323},"layout",{"type":45,"value":1317},{"type":40,"tag":62,"props":1326,"children":1328},{"className":1327},[],[1329],{"type":45,"value":1330},"variables",{"type":45,"value":1332},"), while\nthe template below uses the classic ",{"type":40,"tag":62,"props":1334,"children":1336},{"className":1335},[],[1337],{"type":45,"value":1338},"v1beta1",{"type":45,"value":1340}," shape (",{"type":40,"tag":62,"props":1342,"children":1344},{"className":1343},[],[1345],{"type":45,"value":1346},"panels",{"type":45,"value":1317},{"type":40,"tag":62,"props":1349,"children":1351},{"className":1350},[],[1352],{"type":45,"value":1353},"templating",{"type":45,"value":1355},").\nBoth versions are accepted on push — just author consistently against one\nversion and don't mix fields between them.",{"type":40,"tag":48,"props":1357,"children":1358},{},[1359,1365],{"type":40,"tag":62,"props":1360,"children":1362},{"className":1361},[],[1363],{"type":45,"value":1364},"gcx resources list-examples",{"type":45,"value":1366}," is useful for resource types that ship examples, but\ncurrent dashboard authoring should not depend on an example being available.",{"type":40,"tag":48,"props":1368,"children":1369},{},[1370,1372,1378,1380,1386,1388,1394],{"type":45,"value":1371},"Create a manifest such as ",{"type":40,"tag":62,"props":1373,"children":1375},{"className":1374},[],[1376],{"type":45,"value":1377},".\u002Fresources\u002Fdashboards\u002F\u003Cdashboard-name>.yaml",{"type":45,"value":1379},".\nUse a stable slug-like ",{"type":40,"tag":62,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":45,"value":1385},"metadata.name",{"type":45,"value":1387}," for the dashboard resource name\u002FUID and a\nhuman-readable ",{"type":40,"tag":62,"props":1389,"children":1391},{"className":1390},[],[1392],{"type":45,"value":1393},"spec.title",{"type":45,"value":1395}," for the displayed title.",{"type":40,"tag":54,"props":1397,"children":1401},{"className":1398,"code":1399,"language":1400,"meta":59,"style":59},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","apiVersion: dashboard.grafana.app\u002Fv1beta1\nkind: Dashboard\nmetadata:\n  name: \u003Cstable-dashboard-slug>\n  annotations:\n    grafana.app\u002Ffolder: \u003Cfolder-uid>\nspec:\n  title: \"\u003CHuman readable dashboard title>\"\n  tags: [gcx]\n  timezone: browser\n  schemaVersion: 36\n  templating:\n    list: []\n  panels: []\n","yaml",[1402],{"type":40,"tag":62,"props":1403,"children":1404},{"__ignoreMap":59},[1405,1424,1441,1454,1471,1483,1500,1512,1538,1564,1581,1599,1611,1629],{"type":40,"tag":371,"props":1406,"children":1407},{"class":373,"line":374},[1408,1414,1419],{"type":40,"tag":371,"props":1409,"children":1411},{"style":1410},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1412],{"type":45,"value":1413},"apiVersion",{"type":40,"tag":371,"props":1415,"children":1416},{"style":581},[1417],{"type":45,"value":1418},":",{"type":40,"tag":371,"props":1420,"children":1421},{"style":384},[1422],{"type":45,"value":1423}," dashboard.grafana.app\u002Fv1beta1\n",{"type":40,"tag":371,"props":1425,"children":1426},{"class":373,"line":395},[1427,1432,1436],{"type":40,"tag":371,"props":1428,"children":1429},{"style":1410},[1430],{"type":45,"value":1431},"kind",{"type":40,"tag":371,"props":1433,"children":1434},{"style":581},[1435],{"type":45,"value":1418},{"type":40,"tag":371,"props":1437,"children":1438},{"style":384},[1439],{"type":45,"value":1440}," Dashboard\n",{"type":40,"tag":371,"props":1442,"children":1443},{"class":373,"line":412},[1444,1449],{"type":40,"tag":371,"props":1445,"children":1446},{"style":1410},[1447],{"type":45,"value":1448},"metadata",{"type":40,"tag":371,"props":1450,"children":1451},{"style":581},[1452],{"type":45,"value":1453},":\n",{"type":40,"tag":371,"props":1455,"children":1456},{"class":373,"line":545},[1457,1462,1466],{"type":40,"tag":371,"props":1458,"children":1459},{"style":1410},[1460],{"type":45,"value":1461},"  name",{"type":40,"tag":371,"props":1463,"children":1464},{"style":581},[1465],{"type":45,"value":1418},{"type":40,"tag":371,"props":1467,"children":1468},{"style":384},[1469],{"type":45,"value":1470}," \u003Cstable-dashboard-slug>\n",{"type":40,"tag":371,"props":1472,"children":1473},{"class":373,"line":554},[1474,1479],{"type":40,"tag":371,"props":1475,"children":1476},{"style":1410},[1477],{"type":45,"value":1478},"  annotations",{"type":40,"tag":371,"props":1480,"children":1481},{"style":581},[1482],{"type":45,"value":1453},{"type":40,"tag":371,"props":1484,"children":1485},{"class":373,"line":563},[1486,1491,1495],{"type":40,"tag":371,"props":1487,"children":1488},{"style":1410},[1489],{"type":45,"value":1490},"    grafana.app\u002Ffolder",{"type":40,"tag":371,"props":1492,"children":1493},{"style":581},[1494],{"type":45,"value":1418},{"type":40,"tag":371,"props":1496,"children":1497},{"style":384},[1498],{"type":45,"value":1499}," \u003Cfolder-uid>\n",{"type":40,"tag":371,"props":1501,"children":1502},{"class":373,"line":605},[1503,1508],{"type":40,"tag":371,"props":1504,"children":1505},{"style":1410},[1506],{"type":45,"value":1507},"spec",{"type":40,"tag":371,"props":1509,"children":1510},{"style":581},[1511],{"type":45,"value":1453},{"type":40,"tag":371,"props":1513,"children":1514},{"class":373,"line":613},[1515,1520,1524,1528,1533],{"type":40,"tag":371,"props":1516,"children":1517},{"style":1410},[1518],{"type":45,"value":1519},"  title",{"type":40,"tag":371,"props":1521,"children":1522},{"style":581},[1523],{"type":45,"value":1418},{"type":40,"tag":371,"props":1525,"children":1526},{"style":581},[1527],{"type":45,"value":584},{"type":40,"tag":371,"props":1529,"children":1530},{"style":384},[1531],{"type":45,"value":1532},"\u003CHuman readable dashboard title>",{"type":40,"tag":371,"props":1534,"children":1535},{"style":581},[1536],{"type":45,"value":1537},"\"\n",{"type":40,"tag":371,"props":1539,"children":1540},{"class":373,"line":622},[1541,1546,1550,1555,1559],{"type":40,"tag":371,"props":1542,"children":1543},{"style":1410},[1544],{"type":45,"value":1545},"  tags",{"type":40,"tag":371,"props":1547,"children":1548},{"style":581},[1549],{"type":45,"value":1418},{"type":40,"tag":371,"props":1551,"children":1552},{"style":581},[1553],{"type":45,"value":1554}," [",{"type":40,"tag":371,"props":1556,"children":1557},{"style":384},[1558],{"type":45,"value":381},{"type":40,"tag":371,"props":1560,"children":1561},{"style":581},[1562],{"type":45,"value":1563},"]\n",{"type":40,"tag":371,"props":1565,"children":1566},{"class":373,"line":631},[1567,1572,1576],{"type":40,"tag":371,"props":1568,"children":1569},{"style":1410},[1570],{"type":45,"value":1571},"  timezone",{"type":40,"tag":371,"props":1573,"children":1574},{"style":581},[1575],{"type":45,"value":1418},{"type":40,"tag":371,"props":1577,"children":1578},{"style":384},[1579],{"type":45,"value":1580}," browser\n",{"type":40,"tag":371,"props":1582,"children":1583},{"class":373,"line":640},[1584,1589,1593],{"type":40,"tag":371,"props":1585,"children":1586},{"style":1410},[1587],{"type":45,"value":1588},"  schemaVersion",{"type":40,"tag":371,"props":1590,"children":1591},{"style":581},[1592],{"type":45,"value":1418},{"type":40,"tag":371,"props":1594,"children":1596},{"style":1595},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1597],{"type":45,"value":1598}," 36\n",{"type":40,"tag":371,"props":1600,"children":1601},{"class":373,"line":649},[1602,1607],{"type":40,"tag":371,"props":1603,"children":1604},{"style":1410},[1605],{"type":45,"value":1606},"  templating",{"type":40,"tag":371,"props":1608,"children":1609},{"style":581},[1610],{"type":45,"value":1453},{"type":40,"tag":371,"props":1612,"children":1614},{"class":373,"line":1613},13,[1615,1620,1624],{"type":40,"tag":371,"props":1616,"children":1617},{"style":1410},[1618],{"type":45,"value":1619},"    list",{"type":40,"tag":371,"props":1621,"children":1622},{"style":581},[1623],{"type":45,"value":1418},{"type":40,"tag":371,"props":1625,"children":1626},{"style":581},[1627],{"type":45,"value":1628}," []\n",{"type":40,"tag":371,"props":1630,"children":1632},{"class":373,"line":1631},14,[1633,1638,1642],{"type":40,"tag":371,"props":1634,"children":1635},{"style":1410},[1636],{"type":45,"value":1637},"  panels",{"type":40,"tag":371,"props":1639,"children":1640},{"style":581},[1641],{"type":45,"value":1418},{"type":40,"tag":371,"props":1643,"children":1644},{"style":581},[1645],{"type":45,"value":1628},{"type":40,"tag":48,"props":1647,"children":1648},{},[1649,1651,1657,1659,1665,1667,1673,1675,1681,1683,1688],{"type":45,"value":1650},"Folder placement is the ",{"type":40,"tag":62,"props":1652,"children":1654},{"className":1653},[],[1655],{"type":45,"value":1656},"grafana.app\u002Ffolder",{"type":45,"value":1658}," ",{"type":40,"tag":1660,"props":1661,"children":1662},"strong",{},[1663],{"type":45,"value":1664},"metadata annotation",{"type":45,"value":1666}," shown\nabove — the same key ",{"type":40,"tag":62,"props":1668,"children":1670},{"className":1669},[],[1671],{"type":45,"value":1672},"gcx resources get dashboards",{"type":45,"value":1674}," reads to display the\nFOLDER column. There is no ",{"type":40,"tag":62,"props":1676,"children":1678},{"className":1677},[],[1679],{"type":45,"value":1680},"folderUID",{"type":45,"value":1682}," field inside ",{"type":40,"tag":62,"props":1684,"children":1686},{"className":1685},[],[1687],{"type":45,"value":1507},{"type":45,"value":1689},"; putting one there\nis ignored and silently lands the dashboard in General, violating the folder\nrule at the top of this skill.",{"type":40,"tag":48,"props":1691,"children":1692},{},[1693],{"type":45,"value":1694},"Fill in panels, variables, links, and layout using patterns discovered above.",{"type":40,"tag":355,"props":1696,"children":1698},{"id":1697},"_6-validate-dry-run-push-and-verify",[1699],{"type":45,"value":1700},"6. Validate, dry-run, push, and verify",{"type":40,"tag":54,"props":1702,"children":1704},{"className":363,"code":1703,"language":365,"meta":59,"style":59},"gcx resources validate -p \u003Cdashboard-path-or-dir> -o json\ngcx resources push -p \u003Cdashboard-path-or-dir> --dry-run\ngcx resources push -p \u003Cdashboard-path-or-dir>\n\n# Verify the stored object. \u003Cname> is metadata.name.\ngcx resources get dashboards\u002F\u003Cname> -o json\n",[1705],{"type":40,"tag":62,"props":1706,"children":1707},{"__ignoreMap":59},[1708,1755,1796,1832,1839,1847],{"type":40,"tag":371,"props":1709,"children":1710},{"class":373,"line":374},[1711,1715,1719,1724,1729,1733,1738,1743,1747,1751],{"type":40,"tag":371,"props":1712,"children":1713},{"style":378},[1714],{"type":45,"value":381},{"type":40,"tag":371,"props":1716,"children":1717},{"style":384},[1718],{"type":45,"value":513},{"type":40,"tag":371,"props":1720,"children":1721},{"style":384},[1722],{"type":45,"value":1723}," validate",{"type":40,"tag":371,"props":1725,"children":1726},{"style":384},[1727],{"type":45,"value":1728}," -p",{"type":40,"tag":371,"props":1730,"children":1731},{"style":581},[1732],{"type":45,"value":667},{"type":40,"tag":371,"props":1734,"children":1735},{"style":384},[1736],{"type":45,"value":1737},"dashboard-path-or-di",{"type":40,"tag":371,"props":1739,"children":1740},{"style":675},[1741],{"type":45,"value":1742},"r",{"type":40,"tag":371,"props":1744,"children":1745},{"style":581},[1746],{"type":45,"value":683},{"type":40,"tag":371,"props":1748,"children":1749},{"style":384},[1750],{"type":45,"value":528},{"type":40,"tag":371,"props":1752,"children":1753},{"style":384},[1754],{"type":45,"value":533},{"type":40,"tag":371,"props":1756,"children":1757},{"class":373,"line":395},[1758,1762,1766,1771,1775,1779,1783,1787,1791],{"type":40,"tag":371,"props":1759,"children":1760},{"style":378},[1761],{"type":45,"value":381},{"type":40,"tag":371,"props":1763,"children":1764},{"style":384},[1765],{"type":45,"value":513},{"type":40,"tag":371,"props":1767,"children":1768},{"style":384},[1769],{"type":45,"value":1770}," push",{"type":40,"tag":371,"props":1772,"children":1773},{"style":384},[1774],{"type":45,"value":1728},{"type":40,"tag":371,"props":1776,"children":1777},{"style":581},[1778],{"type":45,"value":667},{"type":40,"tag":371,"props":1780,"children":1781},{"style":384},[1782],{"type":45,"value":1737},{"type":40,"tag":371,"props":1784,"children":1785},{"style":675},[1786],{"type":45,"value":1742},{"type":40,"tag":371,"props":1788,"children":1789},{"style":581},[1790],{"type":45,"value":683},{"type":40,"tag":371,"props":1792,"children":1793},{"style":384},[1794],{"type":45,"value":1795}," --dry-run\n",{"type":40,"tag":371,"props":1797,"children":1798},{"class":373,"line":412},[1799,1803,1807,1811,1815,1819,1823,1827],{"type":40,"tag":371,"props":1800,"children":1801},{"style":378},[1802],{"type":45,"value":381},{"type":40,"tag":371,"props":1804,"children":1805},{"style":384},[1806],{"type":45,"value":513},{"type":40,"tag":371,"props":1808,"children":1809},{"style":384},[1810],{"type":45,"value":1770},{"type":40,"tag":371,"props":1812,"children":1813},{"style":384},[1814],{"type":45,"value":1728},{"type":40,"tag":371,"props":1816,"children":1817},{"style":581},[1818],{"type":45,"value":667},{"type":40,"tag":371,"props":1820,"children":1821},{"style":384},[1822],{"type":45,"value":1737},{"type":40,"tag":371,"props":1824,"children":1825},{"style":675},[1826],{"type":45,"value":1742},{"type":40,"tag":371,"props":1828,"children":1829},{"style":581},[1830],{"type":45,"value":1831},">\n",{"type":40,"tag":371,"props":1833,"children":1834},{"class":373,"line":545},[1835],{"type":40,"tag":371,"props":1836,"children":1837},{"emptyLinePlaceholder":539},[1838],{"type":45,"value":542},{"type":40,"tag":371,"props":1840,"children":1841},{"class":373,"line":554},[1842],{"type":40,"tag":371,"props":1843,"children":1844},{"style":498},[1845],{"type":45,"value":1846},"# Verify the stored object. \u003Cname> is metadata.name.\n",{"type":40,"tag":371,"props":1848,"children":1849},{"class":373,"line":563},[1850,1854,1858,1862,1866,1870,1875,1879,1883,1887],{"type":40,"tag":371,"props":1851,"children":1852},{"style":378},[1853],{"type":45,"value":381},{"type":40,"tag":371,"props":1855,"children":1856},{"style":384},[1857],{"type":45,"value":513},{"type":40,"tag":371,"props":1859,"children":1860},{"style":384},[1861],{"type":45,"value":518},{"type":40,"tag":371,"props":1863,"children":1864},{"style":384},[1865],{"type":45,"value":1212},{"type":40,"tag":371,"props":1867,"children":1868},{"style":581},[1869],{"type":45,"value":1217},{"type":40,"tag":371,"props":1871,"children":1872},{"style":384},[1873],{"type":45,"value":1874},"nam",{"type":40,"tag":371,"props":1876,"children":1877},{"style":675},[1878],{"type":45,"value":1227},{"type":40,"tag":371,"props":1880,"children":1881},{"style":581},[1882],{"type":45,"value":683},{"type":40,"tag":371,"props":1884,"children":1885},{"style":384},[1886],{"type":45,"value":528},{"type":40,"tag":371,"props":1888,"children":1889},{"style":384},[1890],{"type":45,"value":533},{"type":40,"tag":48,"props":1892,"children":1893},{},[1894,1896,1902],{"type":45,"value":1895},"If pushing into a directory that also contains folders, gcx orders folders before\ndashboards automatically. If an existing dashboard is protected by a different\nmanager annotation, stop and explain; only use ",{"type":40,"tag":62,"props":1897,"children":1899},{"className":1898},[],[1900],{"type":45,"value":1901},"--include-managed",{"type":45,"value":1903}," when the user\nexplicitly wants gcx to take ownership.",{"type":40,"tag":355,"props":1905,"children":1907},{"id":1906},"_7-snapshot-inspect-and-iterate",[1908],{"type":45,"value":1909},"7. Snapshot, inspect, and iterate",{"type":40,"tag":48,"props":1911,"children":1912},{},[1913,1915,1921],{"type":45,"value":1914},"Render a full-dashboard snapshot with the same variables and time range a user\nwould use. Replace or omit the ",{"type":40,"tag":62,"props":1916,"children":1918},{"className":1917},[],[1919],{"type":45,"value":1920},"--var",{"type":45,"value":1922}," examples below so they match variables\nactually defined in the dashboard.",{"type":40,"tag":54,"props":1924,"children":1926},{"className":363,"code":1925,"language":365,"meta":59,"style":59},"mkdir -p .\u002Fsnapshots\nGCX_AGENT_MODE=true gcx dashboards snapshot \u003Cdashboard-name> \\\n  --output-dir .\u002Fsnapshots \\\n  --since 6h \\\n  --var cluster=\u003Ccluster> \\\n  --var namespace=\u003Cnamespace> \\\n  --width 1920 \\\n  --theme dark\n",[1927],{"type":40,"tag":62,"props":1928,"children":1929},{"__ignoreMap":59},[1930,1947,2001,2018,2035,2069,2102,2119],{"type":40,"tag":371,"props":1931,"children":1932},{"class":373,"line":374},[1933,1938,1942],{"type":40,"tag":371,"props":1934,"children":1935},{"style":378},[1936],{"type":45,"value":1937},"mkdir",{"type":40,"tag":371,"props":1939,"children":1940},{"style":384},[1941],{"type":45,"value":1728},{"type":40,"tag":371,"props":1943,"children":1944},{"style":384},[1945],{"type":45,"value":1946}," .\u002Fsnapshots\n",{"type":40,"tag":371,"props":1948,"children":1949},{"class":373,"line":395},[1950,1955,1960,1965,1970,1974,1979,1983,1988,1992,1996],{"type":40,"tag":371,"props":1951,"children":1952},{"style":675},[1953],{"type":45,"value":1954},"GCX_AGENT_MODE",{"type":40,"tag":371,"props":1956,"children":1957},{"style":581},[1958],{"type":45,"value":1959},"=",{"type":40,"tag":371,"props":1961,"children":1962},{"style":384},[1963],{"type":45,"value":1964},"true",{"type":40,"tag":371,"props":1966,"children":1967},{"style":378},[1968],{"type":45,"value":1969}," gcx",{"type":40,"tag":371,"props":1971,"children":1972},{"style":384},[1973],{"type":45,"value":573},{"type":40,"tag":371,"props":1975,"children":1976},{"style":384},[1977],{"type":45,"value":1978}," snapshot",{"type":40,"tag":371,"props":1980,"children":1981},{"style":581},[1982],{"type":45,"value":667},{"type":40,"tag":371,"props":1984,"children":1985},{"style":384},[1986],{"type":45,"value":1987},"dashboard-nam",{"type":40,"tag":371,"props":1989,"children":1990},{"style":675},[1991],{"type":45,"value":1227},{"type":40,"tag":371,"props":1993,"children":1994},{"style":581},[1995],{"type":45,"value":683},{"type":40,"tag":371,"props":1997,"children":1998},{"style":675},[1999],{"type":45,"value":2000}," \\\n",{"type":40,"tag":371,"props":2002,"children":2003},{"class":373,"line":412},[2004,2009,2014],{"type":40,"tag":371,"props":2005,"children":2006},{"style":384},[2007],{"type":45,"value":2008},"  --output-dir",{"type":40,"tag":371,"props":2010,"children":2011},{"style":384},[2012],{"type":45,"value":2013}," .\u002Fsnapshots",{"type":40,"tag":371,"props":2015,"children":2016},{"style":675},[2017],{"type":45,"value":2000},{"type":40,"tag":371,"props":2019,"children":2020},{"class":373,"line":545},[2021,2026,2031],{"type":40,"tag":371,"props":2022,"children":2023},{"style":384},[2024],{"type":45,"value":2025},"  --since",{"type":40,"tag":371,"props":2027,"children":2028},{"style":384},[2029],{"type":45,"value":2030}," 6h",{"type":40,"tag":371,"props":2032,"children":2033},{"style":675},[2034],{"type":45,"value":2000},{"type":40,"tag":371,"props":2036,"children":2037},{"class":373,"line":554},[2038,2043,2048,2052,2057,2061,2065],{"type":40,"tag":371,"props":2039,"children":2040},{"style":384},[2041],{"type":45,"value":2042},"  --var",{"type":40,"tag":371,"props":2044,"children":2045},{"style":384},[2046],{"type":45,"value":2047}," cluster=",{"type":40,"tag":371,"props":2049,"children":2050},{"style":581},[2051],{"type":45,"value":1217},{"type":40,"tag":371,"props":2053,"children":2054},{"style":384},[2055],{"type":45,"value":2056},"cluste",{"type":40,"tag":371,"props":2058,"children":2059},{"style":675},[2060],{"type":45,"value":1742},{"type":40,"tag":371,"props":2062,"children":2063},{"style":581},[2064],{"type":45,"value":683},{"type":40,"tag":371,"props":2066,"children":2067},{"style":675},[2068],{"type":45,"value":2000},{"type":40,"tag":371,"props":2070,"children":2071},{"class":373,"line":563},[2072,2076,2081,2085,2090,2094,2098],{"type":40,"tag":371,"props":2073,"children":2074},{"style":384},[2075],{"type":45,"value":2042},{"type":40,"tag":371,"props":2077,"children":2078},{"style":384},[2079],{"type":45,"value":2080}," namespace=",{"type":40,"tag":371,"props":2082,"children":2083},{"style":581},[2084],{"type":45,"value":1217},{"type":40,"tag":371,"props":2086,"children":2087},{"style":384},[2088],{"type":45,"value":2089},"namespac",{"type":40,"tag":371,"props":2091,"children":2092},{"style":675},[2093],{"type":45,"value":1227},{"type":40,"tag":371,"props":2095,"children":2096},{"style":581},[2097],{"type":45,"value":683},{"type":40,"tag":371,"props":2099,"children":2100},{"style":675},[2101],{"type":45,"value":2000},{"type":40,"tag":371,"props":2103,"children":2104},{"class":373,"line":605},[2105,2110,2115],{"type":40,"tag":371,"props":2106,"children":2107},{"style":384},[2108],{"type":45,"value":2109},"  --width",{"type":40,"tag":371,"props":2111,"children":2112},{"style":1595},[2113],{"type":45,"value":2114}," 1920",{"type":40,"tag":371,"props":2116,"children":2117},{"style":675},[2118],{"type":45,"value":2000},{"type":40,"tag":371,"props":2120,"children":2121},{"class":373,"line":613},[2122,2127],{"type":40,"tag":371,"props":2123,"children":2124},{"style":384},[2125],{"type":45,"value":2126},"  --theme",{"type":40,"tag":371,"props":2128,"children":2129},{"style":384},[2130],{"type":45,"value":2131}," dark\n",{"type":40,"tag":48,"props":2133,"children":2134},{},[2135,2137,2143],{"type":45,"value":2136},"Then read\u002Fopen the PNG returned in ",{"type":40,"tag":62,"props":2138,"children":2140},{"className":2139},[],[2141],{"type":45,"value":2142},"file_path",{"type":45,"value":2144},". Inspect for:",{"type":40,"tag":100,"props":2146,"children":2147},{},[2148,2153,2158,2163,2168,2173,2178,2183],{"type":40,"tag":104,"props":2149,"children":2150},{},[2151],{"type":45,"value":2152},"login\u002Ferror page instead of the dashboard",{"type":40,"tag":104,"props":2154,"children":2155},{},[2156],{"type":45,"value":2157},"wrong dashboard, wrong folder, wrong time range, or wrong variables",{"type":40,"tag":104,"props":2159,"children":2160},{},[2161],{"type":45,"value":2162},"empty top-row panels caused by bad queries or labels",{"type":40,"tag":104,"props":2164,"children":2165},{},[2166],{"type":45,"value":2167},"title truncation or legends consuming the panel",{"type":40,"tag":104,"props":2169,"children":2170},{},[2171],{"type":45,"value":2172},"overlapping panels, gaps, or poor row order",{"type":40,"tag":104,"props":2174,"children":2175},{},[2176],{"type":45,"value":2177},"unreadable high-cardinality series",{"type":40,"tag":104,"props":2179,"children":2180},{},[2181],{"type":45,"value":2182},"missing units\u002Fthresholds\u002Fdescriptions",{"type":40,"tag":104,"props":2184,"children":2185},{},[2186,2188,2194],{"type":45,"value":2187},"too much chrome; consider a larger ",{"type":40,"tag":62,"props":2189,"children":2191},{"className":2190},[],[2192],{"type":45,"value":2193},"--width",{"type":45,"value":2195}," (the renderer already hides nav\nchrome — there is no separate kiosk flag)",{"type":40,"tag":48,"props":2197,"children":2198},{},[2199],{"type":45,"value":2200},"Render individual panels when a panel is suspect:",{"type":40,"tag":54,"props":2202,"children":2204},{"className":363,"code":2203,"language":365,"meta":59,"style":59},"GCX_AGENT_MODE=true gcx dashboards snapshot \u003Cdashboard-name> --panel \u003Cpanel-id> \\\n  --output-dir .\u002Fsnapshots --since 6h --width 1200 --height 700\n",[2205],{"type":40,"tag":62,"props":2206,"children":2207},{"__ignoreMap":59},[2208,2277],{"type":40,"tag":371,"props":2209,"children":2210},{"class":373,"line":374},[2211,2215,2219,2223,2227,2231,2235,2239,2243,2247,2251,2256,2260,2265,2269,2273],{"type":40,"tag":371,"props":2212,"children":2213},{"style":675},[2214],{"type":45,"value":1954},{"type":40,"tag":371,"props":2216,"children":2217},{"style":581},[2218],{"type":45,"value":1959},{"type":40,"tag":371,"props":2220,"children":2221},{"style":384},[2222],{"type":45,"value":1964},{"type":40,"tag":371,"props":2224,"children":2225},{"style":378},[2226],{"type":45,"value":1969},{"type":40,"tag":371,"props":2228,"children":2229},{"style":384},[2230],{"type":45,"value":573},{"type":40,"tag":371,"props":2232,"children":2233},{"style":384},[2234],{"type":45,"value":1978},{"type":40,"tag":371,"props":2236,"children":2237},{"style":581},[2238],{"type":45,"value":667},{"type":40,"tag":371,"props":2240,"children":2241},{"style":384},[2242],{"type":45,"value":1987},{"type":40,"tag":371,"props":2244,"children":2245},{"style":675},[2246],{"type":45,"value":1227},{"type":40,"tag":371,"props":2248,"children":2249},{"style":581},[2250],{"type":45,"value":683},{"type":40,"tag":371,"props":2252,"children":2253},{"style":384},[2254],{"type":45,"value":2255}," --panel",{"type":40,"tag":371,"props":2257,"children":2258},{"style":581},[2259],{"type":45,"value":667},{"type":40,"tag":371,"props":2261,"children":2262},{"style":384},[2263],{"type":45,"value":2264},"panel-i",{"type":40,"tag":371,"props":2266,"children":2267},{"style":675},[2268],{"type":45,"value":678},{"type":40,"tag":371,"props":2270,"children":2271},{"style":581},[2272],{"type":45,"value":683},{"type":40,"tag":371,"props":2274,"children":2275},{"style":675},[2276],{"type":45,"value":2000},{"type":40,"tag":371,"props":2278,"children":2279},{"class":373,"line":395},[2280,2284,2288,2293,2297,2302,2307,2312],{"type":40,"tag":371,"props":2281,"children":2282},{"style":384},[2283],{"type":45,"value":2008},{"type":40,"tag":371,"props":2285,"children":2286},{"style":384},[2287],{"type":45,"value":2013},{"type":40,"tag":371,"props":2289,"children":2290},{"style":384},[2291],{"type":45,"value":2292}," --since",{"type":40,"tag":371,"props":2294,"children":2295},{"style":384},[2296],{"type":45,"value":2030},{"type":40,"tag":371,"props":2298,"children":2299},{"style":384},[2300],{"type":45,"value":2301}," --width",{"type":40,"tag":371,"props":2303,"children":2304},{"style":1595},[2305],{"type":45,"value":2306}," 1200",{"type":40,"tag":371,"props":2308,"children":2309},{"style":384},[2310],{"type":45,"value":2311}," --height",{"type":40,"tag":371,"props":2313,"children":2314},{"style":1595},[2315],{"type":45,"value":2316}," 700\n",{"type":40,"tag":48,"props":2318,"children":2319},{},[2320],{"type":45,"value":2321},"If the snapshot reveals issues, edit the source, validate, push, and snapshot\nagain. Keep the loop short but real; one good visual correction is better than a\nsuccessful push with an unusable dashboard.",{"type":40,"tag":355,"props":2323,"children":2325},{"id":2324},"_8-final-response",[2326],{"type":45,"value":2327},"8. Final response",{"type":40,"tag":48,"props":2329,"children":2330},{},[2331],{"type":45,"value":2332},"Report only the useful operational facts:",{"type":40,"tag":100,"props":2334,"children":2335},{},[2336,2341,2346,2351,2356,2361,2366,2371],{"type":40,"tag":104,"props":2337,"children":2338},{},[2339],{"type":45,"value":2340},"assumptions made",{"type":40,"tag":104,"props":2342,"children":2343},{},[2344],{"type":45,"value":2345},"Grafana context and folder",{"type":40,"tag":104,"props":2347,"children":2348},{},[2349],{"type":45,"value":2350},"dashboard title and resource name\u002FUID",{"type":40,"tag":104,"props":2352,"children":2353},{},[2354],{"type":45,"value":2355},"local source path",{"type":40,"tag":104,"props":2357,"children":2358},{},[2359],{"type":45,"value":2360},"validation\u002Fpush result",{"type":40,"tag":104,"props":2362,"children":2363},{},[2364],{"type":45,"value":2365},"snapshot path(s) and what you observed",{"type":40,"tag":104,"props":2367,"children":2368},{},[2369],{"type":45,"value":2370},"iterations performed",{"type":40,"tag":104,"props":2372,"children":2373},{},[2374],{"type":45,"value":2375},"remaining issues or blockers",{"type":40,"tag":48,"props":2377,"children":2378},{},[2379],{"type":45,"value":2380},"If snapshot failed, include the exact failure class: missing image renderer,\nauth\u002FRBAC, bad variables, rendering timeout, or command error. Do not claim the\ndashboard was visually reviewed when it was not.",{"type":40,"tag":2382,"props":2383,"children":2384},"style",{},[2385],{"type":45,"value":2386},"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":2388,"total":2485},[2389,2406,2422,2435,2450,2457,2472],{"slug":2390,"name":2390,"fn":2391,"description":2392,"org":2393,"tags":2394,"stars":23,"repoUrl":24,"updatedAt":2405},"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},[2395,2398,2399,2402],{"name":2396,"slug":2397,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":2400,"slug":2401,"type":15},"Monitoring","monitoring",{"name":2403,"slug":2404,"type":15},"Observability","observability","2026-07-25T05:30:40.29622",{"slug":2407,"name":2407,"fn":2408,"description":2409,"org":2410,"tags":2411,"stars":23,"repoUrl":24,"updatedAt":2421},"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},[2412,2413,2414,2417,2420],{"name":2396,"slug":2397,"type":15},{"name":9,"slug":8,"type":15},{"name":2415,"slug":2416,"type":15},"Instrumentation","instrumentation",{"name":2418,"slug":2419,"type":15},"LLM","llm",{"name":2403,"slug":2404,"type":15},"2026-07-31T05:53:52.580237",{"slug":2423,"name":2423,"fn":2424,"description":2425,"org":2426,"tags":2427,"stars":23,"repoUrl":24,"updatedAt":2434},"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},[2428,2429,2432,2433],{"name":2396,"slug":2397,"type":15},{"name":2430,"slug":2431,"type":15},"Evals","evals",{"name":9,"slug":8,"type":15},{"name":2403,"slug":2404,"type":15},"2026-07-31T05:53:53.576347",{"slug":2436,"name":2436,"fn":2437,"description":2438,"org":2439,"tags":2440,"stars":23,"repoUrl":24,"updatedAt":2449},"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},[2441,2442,2443,2446],{"name":2396,"slug":2397,"type":15},{"name":9,"slug":8,"type":15},{"name":2444,"slug":2445,"type":15},"QA","qa",{"name":2447,"slug":2448,"type":15},"Testing","testing","2026-07-31T05:53:51.62785",{"slug":4,"name":4,"fn":5,"description":6,"org":2451,"tags":2452,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2453,2454,2455,2456],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"slug":2458,"name":2458,"fn":2459,"description":2460,"org":2461,"tags":2462,"stars":23,"repoUrl":24,"updatedAt":2471},"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},[2463,2466,2467,2470],{"name":2464,"slug":2465,"type":15},"Debugging","debugging",{"name":9,"slug":8,"type":15},{"name":2468,"slug":2469,"type":15},"Incident Response","incident-response",{"name":2403,"slug":2404,"type":15},"2026-07-18T05:11:10.445428",{"slug":2473,"name":2473,"fn":2474,"description":2475,"org":2476,"tags":2477,"stars":23,"repoUrl":24,"updatedAt":2484},"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},[2478,2479,2480,2483],{"name":2464,"slug":2465,"type":15},{"name":9,"slug":8,"type":15},{"name":2481,"slug":2482,"type":15},"Graph Analysis","graph-analysis",{"name":2403,"slug":2404,"type":15},"2026-07-25T05:30:39.380934",24,{"items":2487,"total":2620},[2488,2505,2524,2544,2551,2559,2566,2573,2580,2587,2594,2608],{"slug":2489,"name":2489,"fn":2490,"description":2491,"org":2492,"tags":2493,"stars":2502,"repoUrl":2503,"updatedAt":2504},"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},[2494,2497,2500,2501],{"name":2495,"slug":2496,"type":15},"Distributed Tracing","distributed-tracing",{"name":2498,"slug":2499,"type":15},"Frontend","frontend",{"name":2400,"slug":2401,"type":15},{"name":2403,"slug":2404,"type":15},1103,"https:\u002F\u002Fgithub.com\u002Fgrafana\u002Ffaro-web-sdk","2026-07-12T07:43:24.63314",{"slug":2506,"name":2506,"fn":2507,"description":2508,"org":2509,"tags":2510,"stars":2521,"repoUrl":2522,"updatedAt":2523},"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},[2511,2514,2517,2520],{"name":2512,"slug":2513,"type":15},"API Development","api-development",{"name":2515,"slug":2516,"type":15},"Authentication","authentication",{"name":2518,"slug":2519,"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":2525,"name":2525,"fn":2526,"description":2527,"org":2528,"tags":2529,"stars":2521,"repoUrl":2522,"updatedAt":2543},"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},[2530,2533,2536,2537,2540],{"name":2531,"slug":2532,"type":15},"CSV","csv",{"name":2534,"slug":2535,"type":15},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":15},{"name":2538,"slug":2539,"type":15},"GraphQL","graphql",{"name":2541,"slug":2542,"type":15},"JSON","json","2026-07-15T05:34:05.773947",{"slug":2390,"name":2390,"fn":2391,"description":2392,"org":2545,"tags":2546,"stars":23,"repoUrl":24,"updatedAt":2405},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2547,2548,2549,2550],{"name":2396,"slug":2397,"type":15},{"name":9,"slug":8,"type":15},{"name":2400,"slug":2401,"type":15},{"name":2403,"slug":2404,"type":15},{"slug":2407,"name":2407,"fn":2408,"description":2409,"org":2552,"tags":2553,"stars":23,"repoUrl":24,"updatedAt":2421},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2554,2555,2556,2557,2558],{"name":2396,"slug":2397,"type":15},{"name":9,"slug":8,"type":15},{"name":2415,"slug":2416,"type":15},{"name":2418,"slug":2419,"type":15},{"name":2403,"slug":2404,"type":15},{"slug":2423,"name":2423,"fn":2424,"description":2425,"org":2560,"tags":2561,"stars":23,"repoUrl":24,"updatedAt":2434},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2562,2563,2564,2565],{"name":2396,"slug":2397,"type":15},{"name":2430,"slug":2431,"type":15},{"name":9,"slug":8,"type":15},{"name":2403,"slug":2404,"type":15},{"slug":2436,"name":2436,"fn":2437,"description":2438,"org":2567,"tags":2568,"stars":23,"repoUrl":24,"updatedAt":2449},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2569,2570,2571,2572],{"name":2396,"slug":2397,"type":15},{"name":9,"slug":8,"type":15},{"name":2444,"slug":2445,"type":15},{"name":2447,"slug":2448,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":2574,"tags":2575,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2576,2577,2578,2579],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"slug":2458,"name":2458,"fn":2459,"description":2460,"org":2581,"tags":2582,"stars":23,"repoUrl":24,"updatedAt":2471},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2583,2584,2585,2586],{"name":2464,"slug":2465,"type":15},{"name":9,"slug":8,"type":15},{"name":2468,"slug":2469,"type":15},{"name":2403,"slug":2404,"type":15},{"slug":2473,"name":2473,"fn":2474,"description":2475,"org":2588,"tags":2589,"stars":23,"repoUrl":24,"updatedAt":2484},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2590,2591,2592,2593],{"name":2464,"slug":2465,"type":15},{"name":9,"slug":8,"type":15},{"name":2481,"slug":2482,"type":15},{"name":2403,"slug":2404,"type":15},{"slug":381,"name":381,"fn":2595,"description":2596,"org":2597,"tags":2598,"stars":23,"repoUrl":24,"updatedAt":2607},"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},[2599,2602,2603,2604],{"name":2600,"slug":2601,"type":15},"CLI","cli",{"name":9,"slug":8,"type":15},{"name":2400,"slug":2401,"type":15},{"name":2605,"slug":2606,"type":15},"Operations","operations","2026-07-31T05:53:50.587304",{"slug":2609,"name":2609,"fn":2610,"description":2611,"org":2612,"tags":2613,"stars":23,"repoUrl":24,"updatedAt":2619},"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},[2614,2615,2616],{"name":2600,"slug":2601,"type":15},{"name":9,"slug":8,"type":15},{"name":2617,"slug":2618,"type":15},"Presentations","presentations","2026-07-25T05:30:45.282458",80]