CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

otel-dotnet

OpenTelemetry in .NET — DI/builder SDK setup (OpenTelemetry.Extensions.Hosting, AddOpenTelemetry, UseOtlpExporter, OpenTelemetrySdk.Create), native .NET instrumentation APIs (ActivitySource, System.Diagnostics.Metrics Meter) plus logging abstractions (ILogger), zero-code CLR-profiler agent, contrib instrumentation packages, performance tuning, and breaking-change audits. Use when adding, reviewing, or configuring OpenTelemetry in a .NET or ASP.NET Core service. Triggers on "setup otel in dotnet", "dotnet telemetry", ".net tracing", "ASP.NET Core opentelemetry", "AddOpenTelemetry", "UseOtlpExporter", "OpenTelemetrySdk.Create", "ActivitySource", "System.Diagnostics.Metrics Meter", "ILogger opentelemetry", "OpenTelemetry.Extensions.Hosting", "opentelemetry-dotnet-instrumentation", or any C# OTel question.

73

Quality

92%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

SKILL.md
Quality
Evals
Security

Quality

Content

85%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A well-architected router skill: an index-sized SKILL.md that routes by task to five real, self-contained references and supplies concrete fact-fetching commands instead of embedding stale version data. The only improvements are trimming the thrice-repeated 'no declarative YAML config in .NET' caveat and making the parameterized fetch commands slightly more turnkey.

Suggestions

State the '.NET has no released declarative-config implementation' caveat once (e.g., in the setup.md Use-when cell or the Cross-References entry) and drop the other two repetitions to tighten conciseness.

Add one concrete resolved example for the parameterized fetch commands (e.g., a filled-in CHANGELOG URL for a known package like OpenTelemetry.Extensions.Hosting) so the fact-fetch workflow is copy-paste ready.

Consider whether the ambiguous 'dotnet telemetry' trigger needs a disambiguating phrase (e.g., 'OpenTelemetry in .NET, not dotnet CLI telemetry') to reduce misfires on non-OTel .NET diagnostics questions.

DimensionReasoningScore

Conciseness

The body is a lean router — "Load a reference below based on the task; each reference is self-contained" — with dense navigation tables and no explanations of concepts Claude already knows. It falls short of anchor 5 because the fact that .NET has no released declarative YAML config is repeated three times (setup.md's Use-when cell, the Sources of Truth note, and the Cross-References entry) within a ~37-line body — a minor trim opportunity, so anchor 4 fits better than 5 and clearly better than 3.

4 / 5

Actionability

Concrete, mostly executable guidance: copy-paste commands like "gh api repos/open-telemetry/opentelemetry-dotnet/releases/latest -q '.tag_name'" and a routing table whose Use-when column names the exact APIs per file. It sits at anchor 4 rather than 5 because the WebFetch/CHANGELOG rows are parameterized templates ("<PackageId>", "<core-tag>", "<package-tag>") that require assembly, and all implementation guidance is delegated to references — minor gaps at the body level.

4 / 5

Workflow Clarity

The body's single action is unambiguous: match the task to a reference via the explicit Use-when criteria and load that self-contained file, with the Sources of Truth table supplying fresh version facts. Per the simple-skill exception, a single unambiguous action scores 5; there are no destructive or batch operations that would require validation checkpoints.

5 / 5

Progressive Disclosure

Scored against the actual bundle: all five listed reference files exist (setup.md, api.md, instrumentation-libraries.md, performance.md, breaking-changes.md), are one level deep, and each is signaled with precise use-case criteria; cross-links inside references are lateral sibling pointers, not deferred-content chains. No content that belongs in separate files is inlined in the ~37-line body — matching anchor 5's 'clear overview with well-signaled one-level-deep references'.

5 / 5

Total

18

/

20

Passed

Description

96%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

An exemplary description: concrete, API-named capabilities; explicit 'Use when' guidance plus a dedicated trigger list covering both natural phrasings and technical identifiers; third-person voice throughout. The only weakness is slight trigger ambiguity on generic .NET diagnostics terms that could occasionally fire the skill for non-OTel questions.

DimensionReasoningScore

Specificity

The description lists multiple concrete capabilities with named APIs — "DI/builder SDK setup (OpenTelemetry.Extensions.Hosting, AddOpenTelemetry, UseOtlpExporter, OpenTelemetrySdk.Create)", "native .NET instrumentation APIs (ActivitySource, System.Diagnostics.Metrics Meter)", "zero-code CLR-profiler agent", "contrib instrumentation packages, performance tuning, and breaking-change audits" — comprehensive coverage matching the top anchor. It exceeds anchor 4 because coverage spans setup, manual instrumentation, libraries, tuning, and audits rather than leaving minor gaps.

5 / 5

Completeness

Both questions are explicitly answered: the 'what' is the detailed capability list, and the 'when' is "Use when adding, reviewing, or configuring OpenTelemetry in a .NET or ASP.NET Core service" plus an explicit "Triggers on ..." clause with concrete trigger phrases. This matches anchor 5 exactly; anchor 4 would require the 'when' to be less explicit.

5 / 5

Trigger Term Quality

Natural phrases users would actually say ("setup otel in dotnet", "dotnet telemetry", ".net tracing", "ASP.NET Core opentelemetry") are combined with API identifiers ("AddOpenTelemetry", "ActivitySource") and a synonym catch-all ("any C# OTel question"), giving comprehensive coverage including variations. The catch-all covers omissions like "opentelemetry c#" or "dotnet metrics", so this fits anchor 5 rather than anchor 4's 'a few natural terms missing'.

5 / 5

Distinctiveness Conflict Risk

The niche is clear (OpenTelemetry specifically in .NET, with .NET-only APIs like AddOpenTelemetry/OpenTelemetrySdk.Create as triggers), but a few triggers are mildly ambiguous outside OTel: "dotnet telemetry" could match the .NET CLI telemetry feature or Application Insights questions, and "ActivitySource" can arise in non-OTel System.Diagnostics work; closely related sibling skills (otel-declarative-config, otel-sdk-versions, otel-semantic-conventions) also overlap. This is 'mostly distinct; minor overlap risk with closely related skills' (anchor 4) rather than the minimal conflict risk of anchor 5.

4 / 5

Total

19

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

ollygarden/opentelemetry-agent-skills

Path

skills/otel-dotnet/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.