
Description
Author, audit, and improve Grafana SKILL.md files against Anthropic's published Agent Skills guidance and the four-dimension rubric the grafana/skills CI gate uses (conciseness, actionability, workflow clarity, progressive disclosure). Applies the canonical SKILL.md structure (YAML frontmatter + body + references/ + scripts/ + assets/), the "pushy description" trigger pattern, the three-level progressive-disclosure model, and the validate-fix-rerun feedback loop. Use when creating a new skill in this repo, when reviewing a skill PR, when a skill's Tessl review score is below 75 (the merge gate), when a skill's description isn't getting picked up by agents, when restructuring a long SKILL.md into a bundle, or when the user asks how to write, improve, optimize, audit, or fix a skill - even if they don't say "skill" explicitly (e.g. "this isn't triggering", "Tessl scored this 72", "split this doc").
SKILL.md
Authoring & Improving Grafana Skills
How to write, review, and improve SKILL.md files so they pass the repo's CI gate and score well against the Anthropic-aligned rubric Tessl uses.
Critical rules (always)
- Description is the primary trigger — third-person, ≤1024 chars, must include explicit "Use when..." phrasing AND list concrete trigger terms users naturally say. See references/descriptions.md for the pushy-description pattern that combats undertriggering.
- Body under 500 lines — split into
references/*.mdif approaching the limit. SKILL.md is the routing layer, not the entire knowledge base. - One level of nesting for references — link from SKILL.md directly, never
SKILL.md → a.md → b.md. Claude may usehead -100previews on nested chains and miss content. - Imperative voice — "Run X" not "You should run X" not "It is important to run X". Explain why over heavy-handed
MUSTmarkers. - Concrete examples beat prose — copy-paste-ready commands, real config snippets. Tessl's
actionabilitydimension scores this directly. - No reserved words in
name—anthropicandclaudeare forbidden in skill names. - No time-sensitive language in the body — "after August 2025…" rots. Use an
<details>"Old patterns" section for legacy info instead. - Validate before committing —
./scripts/lint-skills.sh skills/<plugin>/<your-skill>clean + Tessl score ≥75 (runtessl skill review --json <dir>).
The rubric
CI fails any PR where a touched SKILL.md scores below 75 on four 0-3 dimensions: conciseness, actionability, workflow clarity, progressive disclosure. Full per-dimension scoring + Anthropic-doc mapping in references/rubric.md.
Score variance
The judge is an LLM and swings 7-10 points run-to-run. Local 94 commonly lands at CI 85. Ship only on three consecutive local 100s.
Decision tree for a new skill
- What product / domain does this skill belong to?
Pick the right plugin folder:
grafana-core/,grafana-cloud/,grafana-lgtm/,grafana-app-sdk/,grafana-k6/,grafana-plugins/. If none fits cleanly, ask the user before creating a new plugin group (a new group requires updating threemarketplace.jsonfiles). - Estimate body length.
- <200 lines of substance → single
SKILL.md, no bundle - 200-500 lines →
SKILL.md+references/<topic>.mdfor the long-form material 500 lines → mandatory bundle split; see references/anatomy.md § Splitting strategies
- <200 lines of substance → single
- Write a "pushy" description first. The description is the only thing always loaded into context. If agents don't trigger the skill, nothing else matters. See references/descriptions.md for the pattern.
- Draft body with the four-dimension rubric in mind.
- Cut every sentence Claude already knows (Conciseness)
- Replace prose explanations with code blocks (Actionability)
- Number every multi-step procedure + add a validation step at the end (Workflow clarity)
- If you reach for
<details>, consider whether that content belongs inreferences/instead (Progressive disclosure)
- Register in marketplace manifests.
Add the skill path to the
skillsarray in all three:.claude-plugin/marketplace.json.cursor-plugin/marketplace.json.agents-plugin/marketplace.json
- Validate locally.
# 1. Lint clean (0 errors) ./scripts/lint-skills.sh skills/<plugin>/<your-skill> # 2. Tessl reviewScore ≥75 (the CI gate) tessl skill review --json skills/<plugin>/<your-skill> | jq '.review.reviewScore' # 3. If below 75 or you want ≥85: run --optimize (requires auth) tessl skill review --optimize --yes --max-iterations 3 skills/<plugin>/<your-skill>
If the run fails: read the lint error / Tessl suggestion, fix, re-run. Don't open the PR until both checks pass cleanly. The feedback-loop pattern beats one-shot writing.
Fixing a low-scoring existing skill
- Read the judge's verbatim Suggestions text (non-JSON output):
tessl skill review skills/<plugin>/<name>
TheSuggestions:block under each dimension names the exact sentences/sections to cut. Copy the suggestion — don't guess. Then verify the lowest dimension matches your read. - Apply the fix pattern from references/rubric.md:
- Conciseness 1-2 → cut intros, definitions, multi-line tables that mostly point to refs
- Actionability 1-2 → replace prose with code blocks and CLI commands
- Workflow clarity 1-2 → add numbered steps + validation checkpoints
- Progressive disclosure 1-2 → split into
references/*.md
- If the skill is intentionally a routing document (like
grafana-k6/k6-docs), don't let--optimizeinline the bundle back into SKILL.md. Hand-craft a minimal copy-paste "validation loop" inline so SKILL.md is independently actionable, while preserving the bundle. - Re-score five times locally. Don't stop until all five runs hit 100 — see "Score variance" above for why.
Anti-patterns
See references/anti-patterns.md.
References
references/descriptions.md— the pushy-description pattern + trigger-term checklistreferences/rubric.md— per-dimension scoring with Anthropic-doc citations and concrete fix patternsreferences/anatomy.md— three-level progressive disclosure, bundle layout, splitting strategiesreferences/anti-patterns.md— what NOT to do, with examples- Anthropic — Agent Skills best practices
- anthropics/skills — skill-creator SKILL.md
- The Complete Guide to Building Skills for Claude (PDF)
More skills from the skills repository
View all 48 skillsadaptive-metrics
optimize Grafana Cloud metrics costs
Jul 12Cost OptimizationGrafanaMetricsObservabilityadmin
manage Grafana Cloud accounts and RBAC
Jul 12Access ControlAuthGrafanaOperationsadmission-control
implement admission control webhooks
Jul 12ArchitectureSecurityValidationalerting-irm
configure Grafana Alerting and Incident Management
Jul 12AlertingGrafanaIncident ResponseMonitoringalloy
build unified telemetry pipelines with Grafana Alloy
Jul 12GrafanaLogsMetricsObservability +1app-observability
monitor application performance in Grafana Cloud
Jul 12APMDistributed TracingGrafanaLLM +1
More from Grafana
View publisherfaro-setup-web
instrument web apps with Grafana Faro
faro-web-sdk
Jul 12Distributed TracingFrontendMonitoringObservabilityconfiguring-yesoreyeram-infinity-datasource
configure Grafana Infinity data source
grafana-infinity-datasource
Jul 12API DevelopmentAuthenticationConfigurationGrafanaquerying-yesoreyeram-infinity-datasource
query data with Infinity datasource
grafana-infinity-datasource
Jul 15CSVData AnalysisGrafanaGraphQL +1agento11y
manage Grafana Agent Observability resources
gcx
Jul 18AgentsGrafanaMonitoringObservabilityagento11y-eval-starter
scaffold evaluation experiments for agents
gcx
Jul 21AgentsEvalsExperimentsGrafanaagento11y-instrument
instrument LLM apps for agent observability
gcx
Jul 21AgentsGrafanaInstrumentationLLM +1