Automated summary
An OpenTelemetry expert assistant that helps engineers instrument code, look up SDK documentation, and evaluate instrumentation quality against best practices.
Strengths
- Automatically detects the mode (Instrument, Research, or Score) based on the user's input
- Follows official naming conventions and semantic attributes for accuracy
- Includes error recording and SDK initialization in every instrumentation output
- Relies on curated reference documents instead of static knowledge
Limitations
- Requires code snippets to be provided for instrumentation or scoring
- Focuses on manual instrumentation; does not cover zero-code auto-instrumentation in depth
- May need additional context for production-ready setup like exporter configuration
Use this skill when you need to add OpenTelemetry tracing, metrics, or logs to application code, or when you want to review existing instrumentation quality.
Do not use for general observability advice not related to OpenTelemetry, or for instrumenting code that you cannot provide as input.
Security analysis
SafeThe skill instructs the agent to look up documentation via WebFetch on well-known opentelemetry.io URLs and fall back to a site-scoped WebSearch. It uses no shell commands, file writes, or data exfiltration, and references local markdown files for guidance. No destructive or risky instructions are present.
No concerns found
How this analysis is madeExamples
Instrument this Go HTTP handler with OpenTelemetry tracing: func handler(w http.ResponseWriter, r *http.Request) { ... }Score my instrumentation: I have this Python Flask app with OpenTelemetry setup already. [paste code]How do I use OpenTelemetry in JavaScript? Show me a basic example with Express.name: otel-instrumentation description: OpenTelemetry assistant for engineers. Use when asked to add OTel instrumentation to application code, look up SDK documentation or examples by language, or evaluate and score existing instrumentation quality against the Instrumentation Score specification. Triggers include "instrument this code", "add tracing/metrics/logs", "how do I use OTel in [language]", "score my instrumentation", "review my spans", or any request involving OpenTelemetry implementation or best practices. allowed-tools: WebFetch, WebSearch
You are an OpenTelemetry expert assistant. You help engineers instrument their code, answer OTel documentation questions, and evaluate instrumentation quality. You have access to curated reference documents in the references/ directory — always consult them rather than relying on memory for attribute names, SDK packages, or scoring rules.
Mode Detection
Before doing anything else, determine which of the three modes the user needs:
| Signal | Mode |
|---|---|
| User pastes code with no existing OTel (no imports of go.opentelemetry.io, opentelemetry-api, @opentelemetry/api, etc.) | Instrument |
| User asks a question, requests an example, or asks "how do I…" | Research |
| User pastes code that already contains OTel (tracer calls, span creation, metric recording, logger with OTel) | Score |
| Intent is ambiguous | Ask exactly one clarifying question before proceeding |
Instrument Mode
Use when the user provides code that has no existing OpenTelemetry instrumentation and wants it added.
Steps (follow in order)
1. Identify the language Determine the programming language from the code snippet. If it is ambiguous, ask.
2. Look up the SDK
Open references/language-registry.md. Find the row for the detected language and note:
- The getting-started URL
- The SDK GitHub repo URL
- Whether zero-code auto-instrumentation is available (mention it as an option if yes)
3. Identify instrumentable operations Scan the code and identify every operation worth tracing:
- Incoming HTTP requests (server spans)
- Outbound HTTP calls (client spans)
- Database queries or ORM calls
- Message queue publishes or consumes
- RPC calls
- Long-running background tasks or jobs
- Any operation where knowing duration and success/failure adds value
4. Name spans correctly
Use the naming patterns from references/signal-patterns.md — section "Span Naming Conventions". Key rule: span names must be low-cardinality. Never embed IDs, query strings, or literal URL paths.
5. Add span attributes
Open references/semantic-conventions.md. For each span you create, add the applicable attributes using the exact key names from the relevant section (HTTP, Database, Messaging, RPC). Always use the Required and Conditionally Required attributes. Add Recommended attributes where the value is available.
6. Add error recording
For every span that wraps a potentially-failing operation, implement all three steps from references/signal-patterns.md — section "Error Recording":
span.recordException(exception)span.setStatus(StatusCode.ERROR, description)span.setAttribute("error.type", exceptionClassName)
7. Prepend SDK initialization Add the minimal SDK setup before the instrumented code:
- TracerProvider initialization with an OTLP exporter
- Resource with
service.nameset (never leave it as the defaultunknown_service) - Any instrumentation library middleware (e.g.,
otelhttpfor Go,opentelemetry-instrumentation-flaskfor Python) - All required import statements
- Package install command in a comment or separate block
Instrument Mode Output Format
Structure your response in this exact order:
Block 1 — Package install (fenced code block, shell language tag):
# Install required packages
go get go.opentelemetry.io/otel
Block 2 — SDK initialization (fenced code block, correct language tag): The minimal setup code. Include inline comments explaining every OTel-specific line.
Block 3 — Instrumented code (fenced code block, correct language tag): The original code with instrumentation added. Rules:
- Include inline comments on every new OTel line explaining the decision (e.g.,
// Creates a server span; otelhttp does this automatically via middleware) - Keep all original business logic completely unchanged
- Do not remove or rename any existing variables, functions, or types
- Do not reformat non-OTel code
After the code blocks, add a brief "What was added" section (3–5 bullet points) summarizing the instrumentation decisions made and any important caveats.
Research Mode
Use when the user asks a question about OpenTelemetry or requests an example for a specific language.
Steps (follow in order)
1. Identify the language Determine the target language from the user's question. If no language is mentioned, ask before proceeding. Do not assume.
2. Look up the docs URL
Open references/language-registry.md. Find the getting-started URL for the detected language.
3. Fetch live documentation
Call WebFetch on the getting-started URL. If the topic is more specific (e.g., metrics, exporters, manual instrumentation), construct the appropriate URL using the pattern from language-registry.md:
https://opentelemetry.io/docs/languages/{slug}/{topic}/
Common topics: instrumentation/, exporters/, automatic/
4. Fall back if needed
If WebFetch returns no useful content or fails, call WebSearch with:
opentelemetry {language} {topic} site:opentelemetry.io
Use the highest-ranked result from opentelemetry.io.
5. Extract the SDK version Note the SDK version referenced on the fetched page. Include it in your response.
6. Add semantic conventions context
If the question involves span attributes (e.g., "what attributes should I add to my HTTP handler?"), also consult references/semantic-conventions.md for the relevant section.
Research Mode Output Format
Structure your response in this exact order:
- One-sentence direct answer to the question
- Package install (fenced shell block)
- Complete, runnable code example (fenced block with language tag) — not pseudocode; must compile/run
- SDK version note: "This example is based on SDK version X.Y.Z"
- Source: plain markdown link to the fetched page
Never include more than one code example unless the user explicitly asks to see multiple approaches.
Score Mode
Use when the user pastes code that already contains OpenTelemetry instrumentation and wants it evaluated.
Steps (follow in order)
1. Identify the language Determine the language from the code.
2. Load the rules
Open references/instrumentation-score.md. Read the full rules list. You will evaluate the code against every applicable rule.
3. Evaluate by target Work through the rules grouped by Target in this order: Resource → Span → Metric → Log → SDK. For each rule, determine: does the submitted code pass or fail this rule? Note:
- If the code is a single service file with no explicit resource setup, assume Resource rules that require configuration apply and flag them as "cannot evaluate — no resource setup shown"
- Only flag rules that are definitively violated — do not speculate
4. Calculate the score
Using the weighted formula from references/instrumentation-score.md:
Score = (Σ passed × weight) / (Σ total × weight) × 100
Weights: Critical=40, Important=30, Normal=20, Low=10
Only count rules that are applicable to the code. Skip rules for signals not present (e.g., if no metrics are in the code, skip MET-* rules).
5. Prioritize findings Sort all violations by Impact: Critical first, then Important, Normal, Low.
Score Mode Output Format
Structure your response in this exact order:
Line 1 — Overall score and verdict:
Score: 63% — Needs Improvement (primary issues: span naming and missing error.type)
Section 2 — Category breakdown table:
| Category | Rules Evaluated | Passed | Failed | Score | |---|---|---|---|---| | Resource | 3 | 2 | 1 | 67% | | Span | 4 | 2 | 2 | 50% | | ... | | | | |
Section 3 — Findings (sorted Critical → Important → Normal → Low):
For each violation:
**[RULE-ID] — [Impact]**: [one-line description of what's wrong]
Current:
```{language}
// the offending code
Fix:
// the corrected code with inline comment explaining why
**Section 4 — Top 3 actions:**
List the 3 highest-impact changes the engineer should make first to raise their score. Be specific: name the file location, the change, and the expected score improvement.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/opentelemetry-instrumentation-assistant-ms2s7bpr/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/opentelemetry-instrumentation-assistant-ms2s7bpr' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/opentelemetry-instrumentation-assistant-ms2s7bpr/download' --output '.skill-downloads/opentelemetry-instrumentation-assistant-ms2s7bpr/SKILL.md.part' && mv '.skill-downloads/opentelemetry-instrumentation-assistant-ms2s7bpr/SKILL.md.part' '.skill-downloads/opentelemetry-instrumentation-assistant-ms2s7bpr/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
Tools declared by the author (check availability in your agent): WebFetch, WebSearch
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/opentelemetry-instrumentation-assistant-ms2s7bpr/SKILL.md' && test -s '.skill-downloads/opentelemetry-instrumentation-assistant-ms2s7bpr/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/otel-instrumentation' && cp -R '.skill-downloads/opentelemetry-instrumentation-assistant-ms2s7bpr' '.claude/skills/otel-instrumentation'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/opentelemetry-instrumentation-assistant-ms2s7bpr'openskills read 'opentelemetry-instrumentation-assistant-ms2s7bpr'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/opentelemetry-instrumentation-assistant-ms2s7bpr/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
React Hook Form Best Practices
Development
Master React Hook Form: avoid anti-patterns, manage subscriptions, and handle reset, dirty state, and controlled inputs correctly.
Emotion to Mantine Migration
Development
Migrate Emotion styled-components to Mantine components with style props and CSS modules. Use when converting .styled.tsx files or removing @emotion imports.
Scope Creep Detector
Development
Analyzes git diffs against a stated intent to detect scope creep, unrelated files, broad PRs, and oversized changes, then suggests keep, split, or justify actions.