
otel
OpenTelemetry guidance for VS Code agent experiences. Use when changing Agent Host telemetry, local Copilot Chat telemetry, provider-native spans or metrics, OTel settings and managed policy, trace persistence/export, or monitoring documentation.
- Installs
- 125
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/microsoft/vscode --skill otel- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads otel automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
OpenTelemetry in VS Code
Start by identifying the execution surface. VS Code has separate OTel pipelines with different owners and configuration:
| Surface | Process and producer | Configuration | Authoritative VS Code document |
|---|---|---|---|
| Agent Host sessions (Copilot, Claude, Codex) | Provider-native telemetry routed by the Agent Host utility process | chat.agentHost.otel.* | src/vs/platform/agentHost/OTEL.md |
| Local Copilot Chat | Copilot Chat extension host and IOTelService | github.copilot.chat.otel.* | extensions/copilot/docs/monitoring/agent_monitoring.md |
Do not combine these pipelines or assume that a setting for one configures another.
Current architecture
Agent Host is the current execution architecture for Copilot, Claude, and Codex agent sessions. It owns routing, optional trace interception and SQLite persistence, resource normalization, and cross-provider trace context. Each provider owns its native instrumentation.
The extension-host Copilot CLI source remains as a fallback when Agent Host is unavailable and to support legacy-session migration. It is normally hidden when Agent Host is available and is not the current Agent Host architecture. Do not use it as a model for new work.
Local Copilot Chat remains a separate user-visible extension-host surface. Its foreground chat, LLM, tool, hook, metric, and event instrumentation continues to use IOTelService under extensions/copilot/src/platform/otel/.
Runtime version discipline
Copilot's native OTel signal contract lives in github/copilot-agent-runtime, not in VS Code's TypeScript attribute constants. Before auditing or changing the integration:
- Read the versions of
@github/copilot-sdkand@github/copilotfrom the rootpackage-lock.json. - Resolve the matching immutable runtime tag and commit.
- Read the runtime monitoring reference and implementation at that revision.
- Use runtime
mainonly after confirming that the relevant files are unchanged from the bundled revision.
The runtime's docs/developer-docs/monitor.md is exhaustive for native Copilot spans, attributes, span events, metrics, protocols, environment variables, content capture, TLS, and managed settings. Read it at the revision corresponding to the bundled package and link to that immutable revision in investigation or review evidence rather than copying its signal tables into VS Code documentation.
Ownership map
Agent Host integration
src/vs/platform/agentHost/
├── OTEL.md
├── common/
│ ├── agentService.ts # setting IDs, env names, settings → env translation
│ └── otel/agentHostOTelService.ts # service contract and synthetic span names
├── electron-main/electronAgentHostStarter.ts # Electron spawn-time env binding
├── node/
│ ├── nodeAgentHostStarter.ts # server spawn-time env binding
│ ├── otel/agentHostOTelService.ts # pass-through and DB-mode routing
│ ├── copilot/ # Copilot SDK configuration and trace context
│ ├── claude/ # Claude launch environment
│ └── codex/ # Codex launch overrides
└── test/node/otel/ # pipeline integration tests
Shared transport and persistence live under:
src/vs/platform/otel/
├── common/ # normalized span data and shared attributes
└── node/
├── otlp/ # receiver, decoder, outbound forwarders
└── sqlite/ # persistent span store
Agent Host supports two routing modes:
- Pass-through: provider SDKs export directly to the configured destination.
- DB mode: provider traces use a private OTLP/HTTP JSON loopback, are decoded into SQLite, and may be forwarded to a compatible external destination. Provider logs and metrics bypass the trace loopback.
Read src/vs/platform/agentHost/OTEL.md before changing either mode.
Local Copilot Chat
extensions/copilot/src/platform/otel/
├── common/ # IOTelService, config, attributes, events, metrics
└── node/ # SDK implementation and exporters
extensions/copilot/src/extension/
├── prompt/node/chatMLFetcher.ts # chat spans
├── intents/node/toolCallingLoop.ts # invoke_agent spans
├── tools/vscode-node/toolsService.ts # execute_tool spans
├── chat/vscode-node/chatHookService.ts # execute_hook spans
├── byok/vscode-node/ # BYOK chat spans
└── trajectory/vscode-node/ # Agent Debug Log conversion
For extension-emitted attributes, use constants from extensions/copilot/src/platform/otel/common/genAiAttributes.ts. Those constants are not authoritative for provider-native Agent Host telemetry.
Configuration checklist
When changing Agent Host configuration:
- Update the setting registration in
common/agentHostStarter.config.contribution.ts. - Update setting IDs, environment names, and
buildAgentHostOTelEnv()incommon/agentService.ts. - Update
readAgentHostOTelEnv()or provider launch translation as applicable. - Preserve precedence deliberately: enterprise managed policy, inherited environment, and local settings are separate channels.
- Update
src/vs/platform/agentHost/OTEL.md. - Add focused translation and integration tests.
- Invoke the
policy-and-managed-settingsskill for any enterprise control.
When changing local Copilot Chat configuration:
- Update
extensions/copilot/package.json. - Update
resolveOTelConfig()inextensions/copilot/src/platform/otel/common/otelConfig.ts. - Update
agent_monitoring.md. - Add focused configuration tests.
Never add a new VS Code setting merely to mirror a new runtime-owned managed setting. Follow the runtime-managed-settings ownership rules.
Signal and routing checklist
For Agent Host provider-native signals:
- Make the signal change in the provider/runtime repository that owns it.
- Update that provider's authoritative signal reference.
- Update VS Code only when routing, normalization, persistence, parent context, or host-produced metadata changes.
- Confirm pass-through and DB mode behavior separately.
- Confirm whether the signal is a trace, metric, or log. Only traces enter the Agent Host loopback and SQLite store.
- Test the exact bundled provider version.
For host-produced spans:
- Keep names and attributes in
common/otel/agentHostOTelService.tsor shared platform constants. - Preserve
service.namespace=vscode.agent-hostwhile retaining distinct provider service names. - Treat titles, prompts, responses, tool arguments, file paths, commands, and raw server names as sensitive content.
- Gate sensitive content on the effective content-capture policy and apply explicit bounds where required.
- Propagate W3C
traceparentandtracestatethrough the provider's supported boundary.
For local Copilot Chat signals:
- Depend on
IOTelService, not directly on an OTel SDK from consumers. - Use standard
gen_ai.*keys when they exist. - Put new Copilot-specific attributes under
github.copilot.*; do not add newcopilot_chat.*keys. - Preserve documented legacy keys when existing consumers require dual emission.
- Decide explicitly whether a new operation is exportable.
- Keep Agent Debug Log-only records out of user OTLP and SQLite export.
- Pass free-form content through
truncateForOTelwith the configured maximum.
Provider boundaries
Do not claim one protocol matrix for every Agent Host provider:
- Copilot runtime owns its native OTLP/HTTP JSON/protobuf behavior and does not support OTLP/gRPC.
- Claude receives OTel configuration through its launch environment.
- Codex receives launch-time
otel.*overrides. - Agent Host's DB loopback is always OTLP/HTTP JSON.
- External protobuf and gRPC traces cannot be transcoded by Agent Host and therefore remain local in DB mode.
Check the provider launch code and bundled provider version before documenting support.
Documentation rules
- Keep current Agent Host architecture and data flow in
src/vs/platform/agentHost/OTEL.md. - Keep local extension-host usage in
extensions/copilot/docs/monitoring/agent_monitoring.md. - Keep exhaustive native Copilot signals in the runtime repository.
- Keep this skill procedural. Do not duplicate complete settings, environment-variable, attribute, event, or metric tables here.
- Use immutable commit permalinks when citing cross-repository evidence in issues and pull requests. Avoid version-specific links in evergreen guidance unless the update process owns keeping them current.
- If executable source and documentation disagree, verify with tests and call out the discrepancy rather than silently selecting one.
Validation
Choose the smallest checks that cover the change.
Agent Host examples:
./scripts/test.sh --grep "AgentHostOTel\|agent host.*OTel"
./scripts/test-integration.sh --run src/vs/platform/agentHost/test/node/otel/agentHostOTelService.integrationTest.ts
Local Copilot Chat examples, from extensions/copilot/:
npx tsc --noEmit --project tsconfig.json
npm test -- --grep "OTel"
For documentation-only changes, verify:
- every relative link resolves;
- setting and command IDs exist in source;
- environment-variable names match translation and parsing code;
- provider/runtime claims match the bundled versions;
- Mermaid diagrams render;
- no current document directs contributors to deprecated extension-host CLI architecture.
Anti-patterns
- Treating deprecated extension-host Copilot CLI code as the current architecture.
- Copying the runtime's exhaustive signal catalog into VS Code docs.
- Assuming runtime
mainmatches the package bundled by VS Code. - Describing Agent Host and local Copilot Chat settings as interchangeable.
- Sending metrics or logs through the trace-only Agent Host loopback.
- Claiming all providers support the same OTLP protocols.
- Emitting sensitive content without the effective capture-content gate.
- Using raw attribute strings where the owning component provides constants.
- Adding debug-only spans under an exportable operation without an explicit non-export contract.
FAQ
What does the otel skill do?
OpenTelemetry guidance for VS Code agent experiences. Use when changing Agent Host telemetry, local Copilot Chat telemetry, provider-native spans or metrics, OTel settings and managed policy, trace persistence/export, or monitoring documentation.
How do I install otel?
Run npx skills add https://github.com/microsoft/vscode --skill otel in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/otel/ (personal) or .claude/skills/otel/ (project).
Which AI agents can use otel?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is otel safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains otel?
It is published by microsoft in microsoft/vscode, and it is an official skill from the maker of the technology it covers. It has 125 recorded installs.
More from microsoft/vscode
memory-leak-audit
microsoft/vscode
Audit code for memory leaks and disposable issues. Use when reviewing event listeners, DOM handlers, lifecycle callbacks, or fixing leak reports. Covers addDisposableListener, Event.once, MutableDisposable, DisposableStore, and onWillDispose patterns.
azure-pipelines
microsoft/vscode
Use when validating Azure DevOps pipeline changes for the VS Code build. Covers queueing builds, checking build status, viewing logs, and iterating on pipeline YAML changes without waiting for full CI runs.
accessibility
microsoft/vscode
Primary accessibility skill for VS Code. REQUIRED for new feature and contribution work, and also applies to updates of existing UI. Covers accessibility help dialogs, accessible views, verbosity settings, signals, ARIA announcements, keyboard navigation, and ARIA labels/roles.
sessions
microsoft/vscode
Core principles and workflow router for changes to the Agents Window under src/vs/sessions.
author-contributions
microsoft/vscode
Identify all files a specific author contributed to on a branch vs its upstream, tracing code through renames. Use when asked who edited what, what code an author contributed, or to audit authorship before a merge. This skill should be run as a subagent — it performs many git operations and returns a concise table.
update-screenshots
microsoft/vscode
Update the committed blocks-ci screenshot hashes after the "Screenshots & Tests" check fails, or investigate a screenshot diff reported on a PR. Use when asked to update, accept, or refresh component screenshot baselines from CI. This skill should be run as a subagent.
Popular devops & cloud skills
microsoft-foundry
microsoft/azure-skills
Build, deploy, evaluate, optimize, fine-tune, and manage Microsoft Foundry agents, models, and resources end to end. USE FOR: foundry, azd ai agent, azd provision/deploy, hosted agent scaffold/develop/run/deploy/troubleshoot, prompt agent create, managed harness agent create, GitHub Copilot harness agent, create agent, update agent, add tool to agent, invoke agent, agent insights, evaluate agent, batch eval, continuous eval, continuous monitoring, agent CI/CD, optimize prompt, improve prompt, optimize agent instructions, Agent Optimizer scaffold, dataset curation from traces, deploy model, model fine-tuning (SFT/DPO/RFT), Foundry project, RBAC, role assignment, permissions, quota, capacity, region, deployment failure, AI Services, create Foundry resource, knowledge index, customize deployment, onboard, availability, training-data, grader, distillation, large file upload. DO NOT USE FOR: Azure Functions, App Service, general Azure deploy (use azure-deploy), general Azure prep (use azure
azure-diagnostics
microsoft/azure-skills
Debug Azure production issues on Azure using AppLens, Azure Monitor, resource health, and safe triage. WHEN: debug production issues, troubleshoot app service, app service high CPU, app service deployment failure, troubleshoot container apps, container app 503 or target port mismatch, troubleshoot functions, function telemetry missing or stopped after a config/connection-string change, troubleshoot AKS, VM RDP, Linux SSH, VM black screen, can't connect to VM, reset VM password, NSG or firewall blocking, kubectl cannot connect, kube-system/CoreDNS failures, pod pending, crashloop, node not ready, upgrade failures, analyze logs, KQL, insights, image pull failures, cold start issues, health probe failures, resource health, root cause of errors, troubleshoot event hubs, troubleshoot service bus, messaging SDK error, AMQP connection failure, message lock lost, lock renewal during long-running processing, service bus dead letter.
azure-prepare
microsoft/azure-skills
Prepare azd-based Azure projects for deployment: generates azure.yaml, infrastructure (Bicep/Terraform), and Dockerfiles for the Azure Developer CLI (azd) workflow. USE ONLY when the user explicitly wants to use azd as the deployment tool, or the project already has an azure.yaml file. DO NOT USE FOR: non-azd deployments, Python App Service code-only deploys (use python-appservice-deploy), or cross-cloud migration (use azure-cloud-migrate). WHEN: prepare app for azd, create azure.yaml, set up azd infrastructure, modernize app for Azure with azd, deploy with azd, function app, timer trigger, service bus trigger, event-driven function, managed identity, generate Bicep, generate Terraform, create and deploy to Azure.
azure-ai
microsoft/azure-skills
Use for Azure AI: Search, Speech, OpenAI, Document Intelligence. Helps with search, vector/hybrid search, speech-to-text, text-to-speech, transcription, OCR. WHEN: AI Search, query search, vector search, hybrid search, semantic search, speech-to-text, text-to-speech, transcribe, OCR, convert text to speech.
azure-deploy
microsoft/azure-skills
Execute Azure deployments for ALREADY-PREPARED applications that have existing .azure/deployment-plan.md and infrastructure files. DO NOT use this skill when the user asks to CREATE a new application — use azure-prepare instead. This skill runs azd up, azd deploy, terraform apply, and az deployment commands with built-in error recovery. Requires .azure/deployment-plan.md from azure-prepare and validated status from azure-validate. WHEN: "run azd up", "run azd deploy", "execute deployment", "push to production", "push to cloud", "go live", "ship it", "bicep deploy", "terraform apply", "publish to Azure", "launch on Azure". DO NOT USE WHEN: "create and deploy", "build and deploy", "create a new app", "set up infrastructure", "create and deploy to Azure using Terraform" — use azure-prepare for these.
azure-validate
microsoft/azure-skills
Pre-deployment validation for Azure readiness. Run deep checks on configuration, infrastructure (Bicep or Terraform), RBAC role assignments, managed identity permissions, and prerequisites before deploying. WHEN: validate my app, check deployment readiness, run preflight checks, verify configuration, check if ready to deploy, validate azure.yaml, validate Bicep, test before deploying, troubleshoot deployment errors, validate Azure Functions, validate function app, validate serverless deployment, verify RBAC roles, check role assignments, review managed identity permissions, what-if analysis, validate Container Apps deployment.