CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

dt-setup-genai

Framework-independent decision process for instrumenting a GenAI/LLM app (Python or TypeScript, any provider/agent SDK) so it emits OTel GenAI semantic-convention (gen_ai.*) spans queryable in Dynatrace. Four steps: detect, instrument, enrich, validate. Decides which approach a given SDK needs; does not replace the concrete per-framework recipes in dynatrace-oss/dynatrace-ai-agent-instrumentation-examples. Trigger: "instrument this GenAI app", "add tracing to this LLM app", "how do I get gen_ai spans into Dynatrace", "onboard this agent app to AI Observability". Do NOT use for analyzing telemetry from an already-instrumented app (use dt-obs-genai) or for languages other than Python/TypeScript.

Quality

91%

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

77%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 decision-process skill: the detect→instrument→enrich→validate workflow is clearly sequenced with mechanical validation, explicit gates, and feedback loops, and detail is properly pushed to six real, well-signaled reference files. The main defects are a corrupted sentence in the Instrument fallback bullet that drops the semconv dual-write condition, and heavy repetition of the OpenInference normalization gate across four sections.

Suggestions

Fix the corrupted sentence at the Instrument fallback bullet ("Python instrumentors can dual-write it validates like native.") — restore the actual condition, e.g. the OPENINFERENCE_ENABLE_GENAI_SEMCONV dual-write flag and the versions/settings that enable it, since the same sentence is also where examples-index.md points for this rule.

State the OpenInference normalization gate once (in Enrich, where the normalizer config lives) and have Detect step 3, the Instrument fallback, and the Validate inputs reference it in one line instead of re-explaining the llm.*/openinference.* vs gen_ai.* mechanics four times.

Add one minimal copy-paste snippet for the greenfield common shape (Resource + TracerProvider + OTLP exporter with the full /api/v2/otlp/v1/traces endpoint and Authorization header) or move it to a referenced file and link it, so the wiring steps are executable rather than descriptive.

DimensionReasoningScore

Conciseness

Mostly high-signal, but the OpenInference fallback / semconv dual-write / normalizer-gate concept is explained four separate times (Detect step 3, the Instrument fallback bullet, the Enrich "Fallback path" paragraph, and the Validate Inputs note), and message-content capture handling is repeated across "Where this skill must stop and ask" and Enrich. Fits anchor 3 ('could be tightened') rather than 4, where trim instances would be minor; the fourfold repetition of one gate is more than minor.

3 / 5

Actionability

Concrete and executable throughout — exact env vars (OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=delta), endpoint forms per exporter type, token scope openTelemetryTrace.ingest, dtctl version / dtctl query commands, and specific attribute names — which satisfies the instruction-only-skill standard. Not 5: line 114-115 is corrupted ("Python instrumentors can dual-write it validates like native.") losing the actual dual-write condition/flag, and the common-shape wiring has no copy-paste snippet, leaving minor gaps.

4 / 5

Workflow Clarity

The four steps are explicitly sequenced with a flow diagram, per-step Inputs/Outputs, a drawn feedback loop ("validate failure → fix in enrich or instrument"), explicit gates (normalizer gate before Validate, stop-and-ask list), failure routing back to Enrich/Instrument, and a re-run instruction — matching the anchor-5 profile of clear sequence, explicit validation, and error-recovery loops. Not 4: validation is mechanical (dtctl contract assertions), not just 'verify output', and every checkpoint is explicit.

5 / 5

Progressive Disclosure

The body is a decision backbone with all six reference files (examples-index, enrich-normalization, multi-sdk-apps, no-native-instrumentation, enhance-existing, validate-contract — all verified to exist) linked inline at point of need plus a References section with one-line descriptions; cross-links between references are lateral, not nested. Not 4: content split is appropriate (contract details, recipes, and normalizer configs all live in references one level deep) and navigation is easy from both the body and the References list.

5 / 5

Total

17

/

20

Passed

Description

100%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 third-person capability statement, a named four-step process, quoted natural trigger phrases, and explicit negative boundaries that separate it from the sibling dt-obs-genai skill and the examples repo. Dense but not padded — every clause carries routing or capability information.

DimensionReasoningScore

Specificity

Names multiple concrete actions in third person — "decision process for instrumenting a GenAI/LLM app ... so it emits OTel GenAI semantic-convention (gen_ai.*) spans queryable in Dynatrace", "Four steps: detect, instrument, enrich, validate", "Decides which approach a given SDK needs" — with comprehensive coverage of what the skill does and produces. Not 4: coverage goes beyond 'several actions with minor gaps' by also stating the decision output and the relationship to the examples repo.

5 / 5

Completeness

Explicitly answers both what ("decision process for instrumenting ... Four steps: detect, instrument, enrich, validate") and when (a dedicated "Trigger:" clause with concrete phrases), matching the anchor-5 example structure. Not 4: the 'when' is not merely present but given as quoted trigger phrases plus negative scope, so it cannot be more explicit.

5 / 5

Trigger Term Quality

The explicit Trigger list gives four natural utterances — "instrument this GenAI app", "add tracing to this LLM app", "how do I get gen_ai spans into Dynatrace", "onboard this agent app to AI Observability" — covering synonym variants for both the app (GenAI/LLM/agent) and the action (instrument/tracing/onboard). Not 4: the phrase set is comprehensive for the domain and every phrase is something a user would naturally say, exceeding the anchor-4 'a few natural terms missing' profile.

5 / 5

Distinctiveness Conflict Risk

A clear niche (instrumenting Python/TS GenAI apps for Dynatrace) with explicit disambiguation — "Do NOT use for analyzing telemetry from an already-instrumented app (use dt-obs-genai)" and "does not replace the concrete per-framework recipes in dynatrace-oss/..." — minimizing conflict with the sibling analysis skill. Not 4: overlap risk is not merely minor; the negative triggers actively route away from the nearest competing skill.

5 / 5

Total

20

/

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

Dynatrace/dynatrace-for-ai

Path

skills/dt-setup-genai/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.