npx skills add ...
npx skills add dash0hq/agent-skills --skill otel-semantic-conventions
npx skills add dash0hq/agent-skills --skill otel-semantic-conventions
OpenTelemetry Semantic Conventions expert. Use when selecting, applying, or reviewing telemetry attributes. Triggers on tasks involving attribute selection, semantic convention compliance, attribute migration, or custom attribute decisions. Covers the attribute registry, naming patterns, attribute placement, and versioning. For span names, span kinds, and span status codes, see the otel-instrumentation skill.
This skill governs correct selection, placement, and validation of telemetry attributes and metric instruments according to the OpenTelemetry Semantic Conventions specification. For span naming, span kinds, and span status codes, see the otel-instrumentation skill.
The Attribute Registry is the single source of truth for all defined attributes.
| Rule | Description | Use Case |
|---|---|---|
| attributes | Attribute registry, selection, placement, common attributes by domain | Choosing or reviewing attributes; HTTP/DB/messaging/RPC attributes; attribute placement (resource vs span) |
| versioning | Semconv versioning, stability, migration | Semconv version migration |
| dash0 | Dash0 derived attributes and feature dependencies | Dash0 derived attributes |
http.request.method over a custom custom.http.verb). Custom names fragment querying and break tooling — only create a custom attribute when no registry entry covers the concept.stable attributes; note any experimental attributes that may change. See versioning.org.namespace.attribute_name naming pattern.# Correct — metric attribute uses a bounded, low-cardinality value
histogram.record(duration_ms, {"http.request.method": "GET", "http.response.status_code": 200})
# Incorrect — unbounded values as metric attributes explode storage and query cost
histogram.record(duration_ms, {"user.id": "u-839201", "url.path": "/orders/839201"})
# Fix: move high-cardinality values to span attributes instead
span.set_attribute("user.id", "u-839201")
span.set_attribute("url.path", "/orders/839201")