dashboard
Skill0 starsChanged 6 months agoMITView on GitHub
Generate a Grafana dashboard for a service using discovered infrastructure context. Use when the user asks to "create a dashboard", "generate a dashboard for X", "build a monitoring dashboard", "make a Grafana dashboard", "I need to monitor X", "create panels for X", "generate dashboard JSON", "build a RED dashboard", "build a USE dashboard", "set up observability for X", "push a dashboard to Grafana", "visualize metrics for X", or needs Grafana dashboard JSON.
- Sends data out
60 other projects use a version of this.
Adopted by
Most recently taken up by
- arklanq/agent-skillstheir own version, first seen Nov 8, 2026
- paulogabriel/beryltheir own version, first seen Nov 8, 2026
- zedarvates/frugal-skillstheir own version, first seen Nov 8, 2026
- whoamnesia/astudio-aiotheir own version, first seen Nov 8, 2026
- onelastcommit/noctratheir own version, first seen Nov 8, 2026
- Vulnetix/pix-ai-coding-assistanttheir own version, first seen Nov 6, 2026
Used with
Projects with it also use activity, telemetry and 9 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
gokite-aiSkillactivity
View transaction history and recent account activity. Invoke when the user asks about past spending, wants to verify a payment went through, check if an order completed, review wallet transfers, or see a log of all account actions. Covers wallet transfers, faucet drops, API payments, shopping checkouts, agent registrations, and session approvals.
Also in 3 projects that use this
OpenAISkilltelemetry
Add and verify lightweight macOS runtime telemetry. Use when wiring Logger events or inspecting logs for windows, sidebars, menus, and actions.
Also in 3 projects that use this
soilmassSkillexport
Animation export configurations including format selection, resolution, framerate, quality, and optimization settings. Use when rendering animations for web, mobile, video, or social media. Provides tokens for all export parameters across Lottie, GIF, video, and sprite sheet formats.
Also in 4 projects that use this
seongjaeryuSkillsave
Complete and save your current thinking to Bindly
Also in 4 projects that use this
seongjaeryuSkillorganize
Organize knowledge into Sets
Also in 3 projects that use this
admin-remixSkillworkspace
Google Workspace administration - manage users, groups, email, Drive, calendars, and devices through natural conversation. Triggers on: Google Workspace, G Suite, user management, group management, admin tasks, offboarding, onboarding, email forwarding, Drive permissions, suspended users, organizational units, ChromeOS devices, audit logs, admin reports.
Also in 3 projects that use this
Other versions60 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 60
- dlt-hub/dlt★ 6.1ksame name
- Zafer-Liu/Data-Analysis-Agent★ 2.6ksame name
- PrimeIntellect-ai/prime-rl★ 2.2ksame name
- suboss87/FDEOps★ 940same name
- SethGammon/Citadel★ 927same name
- egregore-labs/egregore★ 293same name
- hsantanna88/clo-author★ 262same name
- hugosantanna/clo-author★ 262same name
- wellwelwel/lagune★ 177same name
- Aster110/mycc★ 165same name
50 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository4 other files it gives its agents.
- define-sloSkill
- discoverSkill
- investigateSkill
- tune-alertsSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
27 rules. 0 are common, 7 are distinctive, and 20 are very specific to this project.
0
Common
Most of the 47 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
20
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 17
Prerequisite: Run the discover skill first to populate .sre/.
- Very specific: line 21
Read the service context from .sre/:
- Very specific: line 22
Read .sre/config.yaml for Prometheus/Grafana connection details
- Very specific: line 23
Read .sre/services/<service>.yaml for available metrics and labels
- Very specific: line 24
Read .sre/baselines/<service>.yaml for threshold values
- Very specific: line 25
Read .sre/topology.yaml for upstream/downstream dependencies
- Very specific: line 27
If the user names a service, match it against the files in .sre/services/.
- Very specific: line 34
If metrics.application in the service context contains HTTP or gRPC metrics:
- Distinctive: line 35
Use RED method (Rate, Errors, Duration)
- Very specific: line 39
If only metrics.container and metrics.kube_state are available:
- Distinctive: line 40
Use USE method (Utilization, Saturation, Errors)
- Distinctive: line 50
Every dashboard starts with this structure:
- Very specific: line 70
Add template variables for filtering.
- Very specific: line 83
Add a pod variable filtered by namespace:
- Distinctive: line 95
Find the datasource UID: If Grafana is accessible, query:
- Very specific: line 103
If not accessible, use "${DS_PROMETHEUS}" as a placeholder — the user can set it on import.
- Very specific: line 123
Use stat panel type ("type": "stat") with gridPos: {x: 0/6/12/18, y: 0, w: 6, h: 4}.
- Distinctive: line 129
If baselines aren't available, omit thresholds (don't guess)
- Very specific: line 144
Use gridPos: {x: 0, y: 4, w: 12, h: 8} and {x: 12, y: 4, w: 12, h: 8}.
- Very specific: line 172
Read .sre/topology.yaml for the service's dependencies.
- Very specific: line 175
Use a collapsible row: {"type": "row", "title": "Dependencies", "collapsed": true, "panels": [...]}.
- Very specific: line 178
If .sre/services/<name>.yaml has loki.available: true:
- Very specific: line 184
Use "type": "logs" panel. If log_format: structured_json, add JSON parsing: | json.
- Distinctive: line 201
If Grafana URL and credentials are available:
- Very specific: line 229
Never hallucinate metrics: Only use metric names that were discovered and recorded in .sre/services/<name>.yaml.
- Very specific: line 230
Derive thresholds from baselines: If .sre/baselines/<name>.yaml exists, use it.
- Distinctive: line 232
Logs complete the picture: If Loki is available, always add a logs panel.
“Common” is measured: kept by at least 6 in 10 of the 47 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Context-Aware Grafana Dashboard Generator
Generate Grafana dashboard JSON using the .sre/ context directory. Prefer discovered metric names and baselines from the local context; if context is missing or incomplete, ask for clarification instead of inventing metrics or thresholds.
Prerequisite: Run the discover skill first to populate .sre/. If .sre/ doesn't exist, tell the user to run /discover first.
Phase 1: Load Service Context
Read the service context from .sre/:
- Read
.sre/config.yamlfor Prometheus/Grafana connection details - Read
.sre/services/<service>.yamlfor available metrics and labels - Read
.sre/baselines/<service>.yamlfor threshold values - Read
.sre/topology.yamlfor upstream/downstream dependencies
If the user names a service, match it against the files in .sre/services/. If ambiguous, list available services and ask.
Phase 2: Choose Dashboard Strategy
Based on what metrics are available for the service:
Scenario A: Full Application Metrics Available
If metrics.application in the service context contains HTTP or gRPC metrics:
- Use RED method (Rate, Errors, Duration)
- Build 4 rows: Traffic, Errors, Latency, Infrastructure
Scenario B: Container Metrics Only (Most Common)
If only metrics.container and metrics.kube_state are available:
- Use USE method (Utilization, Saturation, Errors)
- Build 4 rows: Overview, CPU/Memory, Network, Pod Health
- This is the most common scenario — most services don't expose /metrics
Scenario C: Hybrid
Some services have both. Build a 6-row dashboard combining RED + USE.
Phase 3: Build Dashboard JSON
Dashboard Shell
Every dashboard starts with this structure:
{
"dashboard": {
"title": "<Service Name> — SRE Dashboard",
"tags": ["sre-skills", "auto-generated", "<namespace>"],
"timezone": "browser",
"refresh": "30s",
"time": { "from": "now-1h", "to": "now" },
"templating": { "list": [] },
"panels": [],
"annotations": { "list": [] },
"schemaVersion": 39
},
"overwrite": true,
"folderId": 0
}Template Variables (Always Include)
Add template variables for filtering. Use the actual labels from .sre/services/<name>.yaml:
{
"name": "namespace",
"type": "query",
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"query": "label_values(kube_pod_info, namespace)",
"current": { "text": "<namespace from context>", "value": "<namespace>" },
"refresh": 2
}Add a pod variable filtered by namespace:
{
"name": "pod",
"type": "query",
"datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
"query": "label_values(kube_pod_info{namespace=\"$namespace\"}, pod)",
"includeAll": true,
"refresh": 2
}Find the datasource UID: If Grafana is accessible, query:
curl -s -u "admin:${GRAFANA_PASSWORD}" "${GRAFANA_URL}/api/datasources" | python3 -c "
import json,sys
for ds in json.load(sys.stdin):
if ds['type'] == 'prometheus':
print(f'Prometheus UID: {ds[\"uid\"]}')"If not accessible, use "${DS_PROMETHEUS}" as a placeholder — the user can set it on import.
Panel Grid System
Grafana uses a 24-unit wide grid. Standard layout:
- Full-width panel:
w=24 - Half-width:
w=12 - Third-width:
w=8 - Quarter-width:
w=6 - Row height: typically
h=8for timeseries,h=4for stat panels
Row 1: Overview (stat panels)
4 stat panels showing key numbers at a glance:
| Panel | Query | Thresholds |
| Pod Count | count(kube_pod_status_phase{namespace="$namespace",pod=~"<pattern>",phase="Running"}) | green ≥ replicas, red < replicas |
| CPU Usage | sum(rate(container_cpu_usage_seconds_total{namespace="$namespace",pod=~"<pattern>",container!=""}[5m])) | green < baseline×1.5, yellow < baseline×2, red ≥ baseline×2 |
| Memory Usage | sum(container_memory_working_set_bytes{namespace="$namespace",pod=~"<pattern>",container!=""}) | same threshold pattern from baselines |
| Restarts (1h) | sum(increase(kube_pod_container_status_restarts_total{namespace="$namespace",pod=~"<pattern>"}[1h])) | green = 0, yellow = 1-2, red ≥ 3 |
Use stat panel type ("type": "stat") with gridPos: {x: 0/6/12/18, y: 0, w: 6, h: 4}.
Threshold derivation from baselines:
- Read
.sre/baselines/<service>.yaml - CPU warning =
avg_cores × 1.5, critical =avg_cores × 2 - Memory warning =
avg_bytes × 1.3, critical =avg_bytes × 1.5 - If baselines aren't available, omit thresholds (don't guess)
Row 2: CPU & Memory (timeseries)
Two half-width timeseries panels:
CPU Usage by Pod:
sum by (pod) (rate(container_cpu_usage_seconds_total{namespace="$namespace",pod=~"<pattern>",container!=""}[5m]))Memory Usage by Pod:
sum by (pod) (container_memory_working_set_bytes{namespace="$namespace",pod=~"<pattern>",container!=""})Use gridPos: {x: 0, y: 4, w: 12, h: 8} and {x: 12, y: 4, w: 12, h: 8}.
Row 3: Network (timeseries)
Two half-width panels:
Network Receive:
sum by (pod) (rate(container_network_receive_bytes_total{namespace="$namespace",pod=~"<pattern>"}[5m]))Network Transmit:
sum by (pod) (rate(container_network_transmit_bytes_total{namespace="$namespace",pod=~"<pattern>"}[5m]))Row 4: Pod Health (table + timeseries)
Pod Status Table (half-width):
kube_pod_status_phase{namespace="$namespace",pod=~"<pattern>"} == 1Format as table showing pod name + phase.
Restart Rate (half-width timeseries):
rate(kube_pod_container_status_restarts_total{namespace="$namespace",pod=~"<pattern>"}[5m])Row 5: Upstream/Downstream Health (if topology available)
Read .sre/topology.yaml for the service's dependencies.
For each dependency, add a stat panel showing its pod count and restart count. This gives the operator a single-pane view of the service AND its dependencies.
Use a collapsible row: {"type": "row", "title": "Dependencies", "collapsed": true, "panels": [...]}.
Row 6: Logs (if Loki available)
If .sre/services/<name>.yaml has loki.available: true:
Log Panel:
{namespace="$namespace", container="<container from context>"} |= ""Use "type": "logs" panel. If log_format: structured_json, add JSON parsing: | json.
Log Rate by Level (timeseries, if structured logs):
sum by (level) (rate({namespace="$namespace", container="<container>"}
| json
| __error__="" [5m]))Phase 4: Assemble and Output
Combine all rows into the panels array with correct gridPos values. Each row's y position must account for the height of all rows above it.
Output the complete JSON in a code block. The user can copy-paste this into Grafana (Dashboards → Import → Paste JSON).
Phase 5: Push to Grafana (Optional)
If Grafana URL and credentials are available:
curl -s -X POST \
-H "Content-Type: application/json" \
-u "admin:${GRAFANA_PASSWORD}" \
"${GRAFANA_URL}/api/dashboards/db" \
-d '<dashboard JSON>'Parse the response for the dashboard URL:
{"id":1,"slug":"frontend-sre-dashboard","status":"success","uid":"abc123","url":"/d/abc123/frontend-sre-dashboard","version":1}Report: Dashboard created: ${GRAFANA_URL}/d/<uid>/<slug>
Register the dashboard in .sre/dashboards.yaml:
dashboards:
- service: frontend
uid: abc123
url: /d/abc123/frontend-sre-dashboard
created_at: <ISO timestamp>
type: use # or red, hybridKey Principles
- Never hallucinate metrics. Only use metric names that were discovered and recorded in
.sre/services/<name>.yaml. If a metric isn't listed, don't use it. - Derive thresholds from baselines. If
.sre/baselines/<name>.yamlexists, use it. If not, omit thresholds rather than guessing. - Include dependencies. A service dashboard without upstream/downstream context misses the point. Use the topology.
- Logs complete the picture. If Loki is available, always add a logs panel. Metrics tell you WHAT is wrong; logs tell you WHY.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

