Analyzing Experiment Precompute Canary
PostHog/posthog
Analyze the experiment precompute result-consistency canary across prod-US and prod-EU, deep-dive any issues, and produce an actionable report.
Generate a copy-paste Grafana data source provisioning file (YAML or Terraform) for any plugin from its standardized settings schema on the plugins CDN.
$ npx skills add grafana/skills --skill datasources-provisioning -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install grafana/skills datasources-provisioning --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/grafana/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/grafana-datasources/datasources-provisioning .claude/skills/datasources-provisioning && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "datasources-provisioning" agent skill from https://github.com/grafana/skills/tree/main/skills/grafana-datasources/datasources-provisioning into .claude/skills/datasources-provisioning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "datasources-provisioning", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/grafana/skills/tree/main/skills/grafana-datasources/datasources-provisioningType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add grafana/skills --skill datasources-provisioning -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install grafana/skills datasources-provisioning --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/grafana/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/grafana-datasources/datasources-provisioning .agents/skills/datasources-provisioning && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "datasources-provisioning" agent skill from https://github.com/grafana/skills/tree/main/skills/grafana-datasources/datasources-provisioning into .agents/skills/datasources-provisioning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "datasources-provisioning", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add grafana/skills --skill datasources-provisioning -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install grafana/skills datasources-provisioning --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/grafana/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/grafana-datasources/datasources-provisioning .cursor/skills/datasources-provisioning && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "datasources-provisioning" agent skill from https://github.com/grafana/skills/tree/main/skills/grafana-datasources/datasources-provisioning into .cursor/skills/datasources-provisioning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "datasources-provisioning", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/grafana/skills.git --path skills/grafana-datasources/datasources-provisioning--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add grafana/skills --skill datasources-provisioning -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install grafana/skills datasources-provisioning --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/grafana/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/grafana-datasources/datasources-provisioning .gemini/skills/datasources-provisioning && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "datasources-provisioning" agent skill from https://github.com/grafana/skills/tree/main/skills/grafana-datasources/datasources-provisioning into .gemini/skills/datasources-provisioning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "datasources-provisioning", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install grafana/skills datasources-provisioningInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add grafana/skills --skill datasources-provisioning -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/grafana/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/grafana-datasources/datasources-provisioning .github/skills/datasources-provisioning && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "datasources-provisioning" agent skill from https://github.com/grafana/skills/tree/main/skills/grafana-datasources/datasources-provisioning into .github/skills/datasources-provisioning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "datasources-provisioning", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add grafana/skills --skill datasources-provisioning -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install grafana/skills datasources-provisioning --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/grafana/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/grafana-datasources/datasources-provisioning .opencode/skills/datasources-provisioning && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "datasources-provisioning" agent skill from https://github.com/grafana/skills/tree/main/skills/grafana-datasources/datasources-provisioning into .opencode/skills/datasources-provisioning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "datasources-provisioning", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
datasources-provisioningGenerate a copy-paste Grafana data source provisioning file (YAML or Terraform) for any plugin from its standardized settings schema on the plugins CDN.
Datasources Provisioning is an agent skill from grafana/skills, published by the product's own GitHub organization. Generate a copy-paste Grafana data source provisioning file (YAML or Terraform) for any plugin from its standardized settings schema on the plugins CDN. Use when the user wants to provision or configure a data source as code — e.g. "provision infinity", "datasource yaml for clickhouse", "terraform for the github datasource" — even when they only name the plugin and not the word "provisioning".
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Monitoring and alerting, Infrastructure as code and Data warehousing. It works with Grafana, Terraform, ClickHouse and GitHub. The licence is Apache-2.0.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1ccacf2. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curljqterraformFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
grafana.complugins-cdn.grafana.netAlso links to:
raw.githubusercontent.comregistry.terraform.iogithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Datasources Provisioning loads about 2.8k tokens when it runs. Until then it costs about 105 tokens; SKILL.md has 861 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from grafana/skills at commit 1ccacf2, republished under its Apache-2.0 licence (© grafana). 861 words, ~2,768 tokens.
.claude/skills/datasources-provisioning/SKILL.md (or your agent's skills folder).Ask this before anything else (skip only if the user already made it clear):
Provisioning needs the canonical plugin id (<org>-<name>-datasource), not the short name a user might say.
-datasource or -app)? Use as-is: yesoreyeram-infinity-datasource.infinity, clickhouse)? Search the catalog API with filter=<keyword>:curl -s "https://grafana.com/api/plugins?filter=infinity" \
| jq -r '.items[] | "\(.slug)\t\(.name)"'
# → yesoreyeram-infinity-datasource InfinityThe snippets below use Infinity (yesoreyeram-infinity-datasource) as the worked example — substitute the id resolved here (and the version from step 3) in every command and output.
curl -s "https://grafana.com/api/plugins/yesoreyeram-infinity-datasource" | jq -r '.version'Never hardcode a version — the CDN path is version-pinned and a stale version 404s.
https://plugins-cdn.grafana.net/<PLUGIN_ID>/<VERSION>/public/plugins/<PLUGIN_ID>/schema/dsconfig.jsonID=yesoreyeram-infinity-datasource
VER=$(curl -s "https://grafana.com/api/plugins/$ID" | jq -r '.version')
curl -sf "https://plugins-cdn.grafana.net/$ID/$VER/public/plugins/$ID/schema/dsconfig.json"This file conforms to the dsconfig schema spec — the source of truth for how to interpret it. Don't re-derive field semantics from memory (valueType alone spans string, number, boolean, array, object, map, any); consult the spec when a field isn't a plain scalar:
dsconfig.json): https://raw.githubusercontent.com/grafana/dsconfig/refs/heads/main/dsconfig/schema.jsonWhat you need from each field to provision: key (the provisioning key), valueType, target (root | jsonData | secureJsonData), and validations (honor allowedValues for selectors like auth_method). Orientation example (schemaVersion: "v1"):
{
"pluginType": "yesoreyeram-infinity-datasource",
"fields": [
{
"key": "auth_method",
"valueType": "string",
"target": "jsonData",
"validations": [
{
"type": "allowedValues",
"values": [
"none",
"basicAuth",
"apiKey",
"bearerToken",
"oauth2",
"aws",
"azureBlob"
]
}
]
}
]
}Select only the fields relevant to what the user asked for (chosen auth method + connection), not all of them. Each field's description tells you which auth method it belongs to.
For ready-made example configs, fetch v0alpha1.json:
https://plugins-cdn.grafana.net/<PLUGIN_ID>/<VERSION>/public/plugins/<PLUGIN_ID>/schema/v0alpha1.jsonID=yesoreyeram-infinity-datasource
VER=$(curl -s "https://grafana.com/api/plugins/$ID" | jq -r '.version')
curl -sf "https://plugins-cdn.grafana.net/$ID/$VER/public/plugins/$ID/schema/v0alpha1.json"Worked examples live under settingsExamples.examples, an object keyed by scenario (e.g. apiKey, oauth2ClientCredentials). Each entry has a summary/description (the scenario) and a value holding the jsonData/secureJsonData payload to lift straight into the file:
# list scenarios, then pull one payload
... | jq -r '.settingsExamples.examples | keys[]'
... | jq '.settingsExamples.examples.apiKey.value'If schema/dsconfig.json 404s (older plugins):
NOTE: grafana-oss skill is available in
grafana-coreplugin and also available as a standalone skill from the https://github.com/grafana/skills repository
targettarget | YAML | Terraform (grafana_data_source) |
|---|---|---|
root | top-level key on the datasource (url, basicAuth, basicAuthUser) | top-level argument (url) / inside json_data_encoded |
jsonData | under jsonData: | key inside json_data_encoded = jsonencode({ … }) |
secureJsonData | under secureJsonData: as ${ENV_VAR} | key inside secure_json_data_encoded = jsonencode({ … }) via a sensitive variable |
Use each field's valueType for the scalar (string quoted in YAML, boolean→true/false, number bare). Never inline a real secret. Nested objects (oauth2, aws) and arrays (allowedHosts, scopes) map directly.
Always set access (root target) and default it to proxy — queries route through the Grafana server (the secure default); only use direct (browser → data source) if the user explicitly asks for it. In Terraform the argument is access_mode.
Now ask: YAML or Terraform? Same fields, different output file and syntax. Don't assume: "provision X" may mean either; skip the question only if the user already named a format ("terraform for X"). YAML file provisioning is the native, zero-dependency path; Terraform needs the official grafana/grafana provider.
| Choice | Produces |
|---|---|
| YAML config file | provisioning/datasources/<name>.yaml |
| Terraform | <name>.tf (grafana_data_source resource) |
<name> is just the file's basename — cosmetic, since both loaders read every file in the directory regardless of name. Default it to the plugin name.
YAML → provisioning/datasources/<name>.yaml:
apiVersion: 1
datasources:
- name: Infinity # must be unique across the instance — collides even with a different datasource type
type: yesoreyeram-infinity-datasource # = pluginType from the schema
access: proxy # always set; default proxy (route queries through the Grafana server)
uid: infinity-ds # also unique and immutable so dashboards can reference it
jsonData:
auth_method: apiKey # value from validations.allowedValues
apiKeyKey: X-API-Key
apiKeyType: header
allowedHosts:
- https://api.example.com
secureJsonData:
apiKeyValue: ${API_KEY} # env var ref, never a literal secret
editable: falseTerraform → <name>.tf:
variable "api_key" {
type = string
sensitive = true
}
resource "grafana_data_source" "infinity" {
type = "yesoreyeram-infinity-datasource"
name = "Infinity"
uid = "infinity-ds"
access_mode = "proxy" # always set; default proxy (route queries through the Grafana server)
json_data_encoded = jsonencode({
auth_method = "apiKey"
apiKeyKey = "X-API-Key"
apiKeyType = "header"
allowedHosts = ["https://api.example.com"]
})
secure_json_data_encoded = jsonencode({
apiKeyValue = var.api_key
})
}grafana_data_source is from the grafana/grafana provider — the authoritative reference for argument names (access_mode, json_data_encoded, secure_json_data_encoded). This file is only the resource; the user supplies the required_providers + provider "grafana" block and credentials.
Present the complete file in a single code block for the user to copy and paste into their environment — note where it goes:
provisioning/datasources/<name>.yaml (apply on Grafana start or a provisioning reload).terraform apply.Optionally, tell them how to confirm it worked once applied:
curl -s https://grafana.example.com/api/datasources/uid/<uid>/health \
-H "Authorization: Bearer <token>"
# { "status": "OK" } → working
# { "status": "ERROR" } → URL unreachable or auth misconfiguredOr verify in the UI: visit <https://grafana.example.com>/connections/datasources/edit/<uid> and click Test.
To codify a data source already configured in a running instance, read its config through the Grafana MCP server (grafana/mcp-grafana).
Precondition: the Grafana MCP server is connected with its Datasources toolset enabled (it holds the instance credentials). If it isn't available, do not support this path — never ask the user to paste a Grafana token into chat. Fall back to the from-scratch Workflow instead.
list_datasources to browse, then get_datasource (by uid or name) for the full config.type, uid, url, access, basicAuth, basicAuthUser, and the full jsonData object. Copy them as-is.secureJsonFields map lists which secret keys are set (e.g. {"apiKeyValue": true}) without their values. Emit an ${ENV_VAR} placeholder in secureJsonData for each key it reports true.target placement, then continue at step 6 (map) and step 7 (emit) as normal.© grafana, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/grafana-datasources/datasources-provisioning of grafana/skills.
Open the folder on GitHubat commit 1ccacf2
Datasources Provisioning next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Datasources Provisioning this skillgrafana/skills | 281 | — | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Analyzing Experiment Precompute CanaryPostHog/posthog | 40k | — | ~3.5k | Automated safety check: Pass | Custom licence | |
| Monitoring Ingestion PipelinePostHog/posthog | 40k | — | ~9.1k | Automated safety check: Pass | Custom licence | |
| Clickhouse Observabilityjeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Expert OpsReJeCtAll/ExpertTeam-Codex | 113 | — | ~625 | Automated safety check: Pass | MIT | |
| Datadog Data Source GeneratorDataDog/terraform-provider-datadog | 468 | — | ~2.7k | Automated safety check: Pass | MPL-2.0 |
PostHog/posthog
Analyze the experiment precompute result-consistency canary across prod-US and prod-EU, deep-dive any issues, and produce an actionable report.
PostHog/posthog
Guide for using the Grafana MCP to monitor and diagnose the Node.js ingestion pipeline workers in production.
jeremylongshore/tons-of-skills-marketplace
Monitor ClickHouse with Prometheus metrics, Grafana dashboards, system table queries, and alerting for query performance, merge health, and resource usage.
ReJeCtAll/ExpertTeam-Codex
基础设施运维专家入口。用于 Codex CLI 的 $expert-ops 调用. An agent skill from ReJeCtAll/ExpertTeam-Codex.
DataDog/terraform-provider-datadog
Generates a Datadog Terraform provider data source from an OpenAPI operation with tfgen and opens a review-ready GitHub PR with a risk scan and testing guide.
Azure/terraform-azurerm-avm-ptn-alz
A skill your agent uses whenever a contributor is deciding what KIND of Azure Verified Module to build in Terraform — resource module, pattern module, or utility module — or is naming a module /…
grafana/skills
Write or review k6 documentation across the three k6 repositories - k6-DefinitelyTyped (TypeScript types), k6-docs (user documentation), and k6 (release notes / changelog).
grafana/skills
Configure Grafana Alerting, Incident Response Management (IRM), and SLOs end-to-end — provisions Grafana-managed and data-source-managed alert rules, contact points (Slack/PagerDuty/email/webhook)…
grafana/skills
Build, modify, and ship Grafana dashboards as JSON via the HTTP API — panel types (timeseries / stat / gauge / table / heatmap / logs / traces / node-graph), gridPos 24-column layout, units…
grafana/skills
A skill your agent uses when the user wants to performance-test, load-test, or stress-test a public website end-to-end with k6.
grafana/skills
Write, validate, and optimize PromQL for Prometheus / Grafana Mimir / Grafana Cloud Metrics.
grafana/skills
Cut Grafana Cloud Metrics cost by shrinking active-series count with Adaptive Metrics aggregation rules — auto-recommendations from query history, custom exact/regex rules, label-drop config…
Works with
Categories
Generate a copy-paste Grafana data source provisioning file (YAML or Terraform) for any plugin from its standardized settings schema on the plugins CDN. Datasources Provisioning is an agent skill from grafana/skills, published by the product's own GitHub organization. Generate a copy-paste Grafana data source provisioning file (YAML or Terraform) for any plugin from its standardized settings schema on the plugins CDN.
Datasources Provisioning fits situations like: the user wants to provision; configure a data source as code — e.g.
Run `npx skills add grafana/skills --skill datasources-provisioning -a claude-code`. Or copy the skill folder (skills/grafana-datasources/datasources-provisioning in grafana/skills) into .claude/skills/datasources-provisioning in your project. Claude Code loads it when a task matches its description.
Run `npx skills add grafana/skills --skill datasources-provisioning -a codex`. Or copy the skill folder (skills/grafana-datasources/datasources-provisioning in grafana/skills) into .agents/skills/datasources-provisioning in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add grafana/skills --skill datasources-provisioning -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/datasources-provisioning, .gemini/skills/datasources-provisioning, .github/skills/datasources-provisioning and .opencode/skills/datasources-provisioning in your project.
Going by SKILL.md and its folder, Datasources Provisioning needs the command-line tools its instructions call (curl, jq and terraform) and credentials named API_KEY. Our summary lists: A credential in API_KEY.
SKILL.md names 5 domains. In commands or code: grafana.com and plugins-cdn.grafana.net; the agent is likely to contact these when it follows the instructions. As links in the text: raw.githubusercontent.com, registry.terraform.io and github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Datasources Provisioning is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Datasources Provisioning: Analyzing Experiment Precompute Canary (PostHog/posthog, 40k stars), Monitoring Ingestion Pipeline (PostHog/posthog, 40k stars), Clickhouse Observability (jeremylongshore/tons-of-skills-marketplace, 2.8k stars) and Expert Ops (ReJeCtAll/ExpertTeam-Codex, 113 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
grafana (a GitHub organization, an official publisher) maintains it in grafana/skills, which has 281 GitHub stars. The repository holds 51 skills in this directory. The repository was last updated on October 8, 2026.
Source: grafana/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.