A skill your agent uses when a user asks to update, bump, or troubleshoot OpenTelemetry Collector dependencies in datadog-agent, including OCB build failures, ddflareextension golden files, static…
Install the "update-otel-deps" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/update-otel-deps into .claude/skills/update-otel-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-otel-deps", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add DataDog/datadog-agent --skill update-otel-deps -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "update-otel-deps" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/update-otel-deps into .agents/skills/update-otel-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-otel-deps", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add DataDog/datadog-agent --skill update-otel-deps -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "update-otel-deps" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/update-otel-deps into .cursor/skills/update-otel-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-otel-deps", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add DataDog/datadog-agent --skill update-otel-deps -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "update-otel-deps" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/update-otel-deps into .gemini/skills/update-otel-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-otel-deps", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add DataDog/datadog-agent --skill update-otel-deps -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "update-otel-deps" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/update-otel-deps into .github/skills/update-otel-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-otel-deps", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add DataDog/datadog-agent --skill update-otel-deps -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "update-otel-deps" agent skill from https://github.com/DataDog/datadog-agent/tree/main/.agents/skills/update-otel-deps into .opencode/skills/update-otel-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-otel-deps", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
update-otel-deps
GitHub stars
3.8k
Token cost
~3.3k tokens
SKILL.md length
1,374 words
Files
1
Skills in repo
35
Repo updated
First seen
Licence
Apache-2.0
At a glance
A skill your agent uses when a user asks to update, bump, or troubleshoot OpenTelemetry Collector dependencies in datadog-agent, including OCB build failures, ddflareextension golden files, static…
Works in 3 steps: Find which gate(s) failed in CI output… → Increase the breached max_on_disk_size /… → Commit the change and request review…
A user asks to update
SKILL.md covers Step 0 — Check the automated…, Manual Step 1 — Run the update, Manual Step 2 — Fix… and Manual Step 3 — Fix OCB build…, plus 4 more sections
Calls gh, bazel and rg; needs GITHUB_TOKEN
What it does
Update Otel Deps is an agent skill from DataDog/datadog-agent, published by the product's own GitHub organization. Use when a user asks to update, bump, or troubleshoot OpenTelemetry Collector dependencies in datadog-agent, including OCB build failures, ddflareextension golden files, static quality gates, or OTel transitive dependency conflicts.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Observability and Quality gates. It works with OpenTelemetry, Datadog and GitHub Actions. The repository describes itself as: Main repository for Datadog Agent. The licence is Apache-2.0.
When your agent uses it
A user asks to update
Troubleshoot OpenTelemetry Collector dependencies in datadog-agent
3 steps, taken from the first numbered list in SKILL.md.
1Find which gate(s) failed in CI output (they look like static_quality_gate_*).
2Increase the breached max_on_disk_size / max_on_wire_size values in test/static/static_quality_gates.yml.
3Commit the change and request review from #agent-delivery-reviews.
What it can do on your machine
Read from SKILL.md and the folder at commit a706f1a. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves these tools, so the agent can use them without asking each time:
Bash
Read
Write
Edit
Glob
Grep
AskUserQuestion
From allowed-tools in the SKILL.md frontmatter.
Runs code
Shell commands in SKILL.md call:
gh
bazel
rg
git
go
From the folder's file list and the shell code blocks in SKILL.md.
Network
Links to these hosts (documentation or services it may open):
dd.enterprise.slack.com
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names these keys or tokens, usually read from environment variables:
GITHUB_TOKEN
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Update Otel Deps loads about 3.3k tokens when it runs. Until then it costs about 62 tokens; SKILL.md has 1,374 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~62
When it runs· the whole SKILL.md, loaded when a task matches
~3.3k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check: notes
The automated check noted patterns worth knowing about, such as sudo or a known installer.
NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
Download SKILL.mdSave it as .claude/skills/update-otel-deps/SKILL.md (or your agent's skills folder).
name
update-otel-deps
description
Use when a user asks to update, bump, or troubleshoot OpenTelemetry Collector dependencies in datadog-agent, including OCB build failures, ddflareextension golden files, static quality gates, or OTel transitive dependency conflicts.
Update OpenTelemetry collector dependencies in datadog-agent.
Arguments:$ARGUMENTS — optional <target-version> (e.g. v0.125.0). Note: inv collector.update always upgrades to the latest published OTel version; if a specific version is requested, a manual search-and-replace is needed instead (see Manual Step 1).
Step 0 — Check the automated workflow first
A scheduled GitHub Actions workflow (.github/workflows/collector-generate-and-update.yml) runs every other Wednesday and automatically opens a draft PR with the OTel update. Always check this before doing anything manually.
0a — Find the most recent run
bash
unset GITHUB_TOKEN
gh run list --workflow=collector-generate-and-update.yml --branch=main --limit=5 \
--json databaseId,status,conclusion,createdAt,event,displayTitle
If the latest run succeeded: find and review the auto-generated draft PR (Step 0c), then use /dd:ci:fix to fix any remaining CI failures and undraft.
If the latest run failed: go to Step 0b to diagnose and fix before falling back to a manual update.
If no run has ever succeeded or the workflow looks consistently broken: check #opentelemetry-agent and then fall back to Manual Step 1.
0b — Diagnose a workflow failure
Check #otel-agent-ops for the failure notification posted by the workflow; it includes a direct link to the failed run. Then fetch the logs:
bash
RUN_ID=<id from step 0a>
unset GITHUB_TOKEN
gh run view $RUN_ID --log-failed 2>&1 | grep -E "error|Error|failed|exit code|XDG|bazel|OCB" | head -40
Common workflow failures and fixes:
Symptom in logs
Cause
Fix
XDG_CACHE_HOME () must denote a directory in CI or exit code 2 on bazel mod tidy
Set up Bazel cache step missing or not running before collector.update
Ensure the .github/actions/bazel-cache step appears before Run Collector Update Script in the workflow
Branch named update-otel-collector-dependencies- (empty version)
os.environ in the Python subprocess doesn't propagate back to the shell; the old echo "OCB_VERSION=$OCB_VERSION" reads a blank value
Ensure the workflow extracts the version from tasks/collector.py after the update: OCB_VERSION=$(grep -m1 'OCB_VERSION = ' tasks/collector.py | grep -oP '"\K[^"]+')
permission denied / HTTP 403 from dd-octo-sts-action
Workflow running from a non-main branch
The octo-sts policy only grants tokens on main; always trigger via schedule or gh workflow run … --ref main
After fixing the workflow, commit to main and re-trigger:
bash
unset GITHUB_TOKEN
gh workflow run collector-generate-and-update.yml --ref main
gh run watch
If the workflow infrastructure succeeds but the resulting changes break CI (golden file mismatches, OCB build errors, etc.), that means the OTel version bump itself needs manual fixes. Proceed to Manual Step 2 using the auto-generated PR's branch as your working branch — don't start a new branch from scratch.
0c — Find and review the auto-generated PR
bash
unset GITHUB_TOKEN
gh pr list --search "Update OTel Collector dependencies" --state open \
--json number,title,url,headRefName
Review the diff, run /dd:ci:fix to fix CI failures, then undraft and request review once CI is green.
If a specific target version was requested that differs from what the workflow produced, fall back to Manual Step 1.
Manual Step 1 — Run the update
Use this only when: the automated workflow has a persistent infrastructure failure that can't be fixed quickly, or a specific target version (not latest) is requested.
bash
dda inv collector.update # bumps go.mod + OCB YAML files to latest OTel version
dda inv collector.generate # regenerates OTel Agent code from the new manifests
dda inv components.lint-components --fix
dda inv tidy # reconcile transitive dependencies
dda inv modules.add-all-replace # must run AFTER tidy (see note below)
bazel run //:go_mod_tidy_all
dda inv generate-licenses # update license inventory
Run modules.add-all-replace after tidy, not before.collector.generate rewrites
comp/otelcol/collector-contrib/impl/go.mod with short-form replace paths
(=> ../../../logs-library) where the repo standard is the canonical form
(=> ../../../../comp/logs-library). Running add-all-replace before tidy leaves the short
form in place and check_modules_replace fails in CI. Verify it converged by re-running it and
confirming no go.mod changes.
read_old_version trusts the OCB manifest, which can be stale.collector.update
search-replaces the version recorded in comp/otelcol/collector-contrib/impl/manifest.yaml.
If someone bumped the Go deps directly without running collector.update (as #53984 did), the
manifest lags and every file referencing the actual previous version is silently skipped.
Always compare the manifest version against a real dependency before trusting the bump:
grep 'otelcol v' go.mod.
If a specific version was requested, skip inv collector.update and do a repo-wide search-and-replace of the old version string (find it in tasks/collector.py — the OCB_VERSION / OTEL_CONTRIB_VERSION constants). Then run the remaining commands above.
After the commands finish, scan for any files the task missed:
Manually update any remaining files that still reference the old version.
Manual Step 2 — Fix ddflareextension runtime config test failures
This is the most common failure. The DD flare extension tests compare OTel runtime config output against golden files. Any upstream config field change breaks them.
Run the test locally to get the actual diff:
bash
dda inv test --targets=./comp/otelcol/ddflareextension/impl/... --build-include=test,otlp -- -run TestGetConfDump
The test tag is required.--build-includereplaces the default build-tag set rather than adding to it. With only otlp, the files gated behind //go:build test (configstore_test.go, extension_test.go, factory_test.go) never compile, so -run TestGetConfDump matches nothing — the run still reports "ALL TESTS PASSED" from the handful of untagged tests. Confirm the test really ran by checking test_output.json for "Test":"TestGetConfDump".
The failure output shows exactly which lines differ. Apply the diffs to the golden files in:
comp/otelcol/ddflareextension/impl/testdata/ (unit test golden files)
test/new-e2e/tests/otel/otel-agent/testdata/ (E2E test golden files — apply the same changes)
The E2E testdata mirrors the unit testdata for runtime config fields. Keep them in sync.
Manual Step 3 — Fix OCB build test failures
The CI job datadog_otel_components_ocb_build verifies OTel modules can be built with OCB (OTel Collector Builder). Run it locally:
bash
test/otel/testdata/ocb_build_script.sh
# or find the CI definition:
rg "ocb_build" .gitlab/ -g "*.yml" -l
Check logs under /tmp/otel-ci/ for the exact error.
Common causes and fixes:
Cause
Fix
Breaking changes in OTel core collector API
Update the affected Agent OTel modules to adapt (e.g. comp/otelcol/)
Incompatible changes between Agent and upstream datadogexporter/datadogconnector
1. Open a PR in opentelemetry-collector-contrib to point the upstream exporter at a commit version of Agent packages. 2. After merge, add replace statements in ocb_build_script.sh pointing to the contrib HEAD commit.
Missing OCB artifacts during collector release (transient)
Wait for upstream release artifacts to appear, or temporarily disable the CI job after discussing in #opentelemetry-agent.
Show full SKILL.md (513 more words)Show less
Manual Step 4 — Fix static quality gate failures
OTel upgrades often increase binary sizes (e.g. via gRPC version bumps in transitive deps). OTel upgrade PRs have a standing exemption from the binary size gates. To fix:
Find which gate(s) failed in CI output (they look like static_quality_gate_*).
Increase the breached max_on_disk_size / max_on_wire_size values in test/static/static_quality_gates.yml.
OTel collector updates dependencies more aggressively than datadog-agent. A version bump may force a newer version of a transitive dep (commonly docker or k8s packages) that has breaking API changes.
Preferred fix: Update Agent code to use the newer API required by OTel's transitive dep version. Look at the build errors after inv tidy to find which symbols changed.
Fallback: Pin the old version with a replace directive in the relevant go.mod:
Then run dda inv tidy again. Use this only when upgrading the Agent code is not feasible in the same PR.
Manual Step 6 — Validate and open a PR
bash
dda inv linter.go --targets=./comp/otelcol/... # lint the changed OTel components
dda inv test --targets=./comp/otelcol/ddflareextension/impl/... --build-include=test,otlp # confirm tests pass
--targets=./comp/otelcol/... only covers the root module. Several OTel packages are
separate Go modules and are invisible to that invocation — it will report "0 issues" while
they are silently unlinted. An upstream API change typically breaks exactly these. Lint each one
in its own module context:
bash
for m in comp/otelcol/otlp/components/datadogconfig \
comp/otelcol/otlp/components/exporter/serializerexporter \
comp/otelcol/otlp/components/processor/infraattributesprocessor; do
dda inv linter.go --module="$m"
done
Find the full list with find comp/otelcol -name go.mod. Note that comp/host-profiler also
consumes OTel APIs and is gated behind //go:build linux, so it cannot be linted from macOS
without a x86_64-linux-gnu-gcc cross toolchain — rely on CI's lint_linux-x64 for it.
Upstream API moves
When a symbol goes undefined after the bump, it has usually been promoted from an experimental
x-prefixed package into its stable counterpart rather than deleted. Confirm before rewriting call
sites, then rename:
Seen in v0.158.0: xconfmap.Validate / xconfmap.Validator → confmap.Validate / confmap.Validator
(identical signatures). This breaks lint_*, bazel:test:*, and build_host_profiler_binary_*
together, so a large fan-out of failures often has a single upstream cause.
Open a draft PR to let CI catch any remaining failures. The PR title convention is:
Update OTel Collector dependencies to v<VERSION>
Once the PR is open, run /dd:ci:fix to automatically fetch, analyze, and fix any remaining CI failures. If issues are not covered by the troubleshooting steps above, post in #opentelemetry-agent.
Success checklist
Automated workflow checked — succeeded (auto-PR reviewed) or failure diagnosed and fixed
dda inv collector.update + collector.generate + tidy + generate-licenses all completed without error (automated or manual)
modules.add-all-replace run aftertidy and confirmed idempotent (re-run produces no go.mod diff)
No remaining references to the old OTel version in tracked files — check the actual dep version, not just the manifest's
ddflareextension unit + E2E golden files updated and tests pass (with the test build tag)
Separate OTel Go modules linted individually with --module= (not just --targets=./comp/otelcol/...)
test/fakeintake/version/VERSION bumped if tidy touched test/fakeintake/go.mod
Release note added under releasenotes/notes/ (or changelog/no-changelog applied)
OCB build script succeeds (or known issue tracked)
Static quality gate limits raised if breached (exemption approved)
Draft PR open and CI green (use /dd:ci:fix for any remaining failures)
Update Otel Deps next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
A skill your agent uses when an engineer or manager asks to recap, summarize, or post an update on a Jira Epic — a progress update for an in-progress Epic (how far along it is, what's shipped so…
A skill your agent uses when a user asks to update, bump, or troubleshoot OpenTelemetry Collector dependencies in datadog-agent, including OCB build failures, ddflareextension golden files, static…. Update Otel Deps is an agent skill from DataDog/datadog-agent, published by the product's own GitHub organization. Use when a user asks to update, bump, or troubleshoot OpenTelemetry Collector dependencies in datadog-agent, including OCB build failures, ddflareextension golden files, static quality gates, or OTel transitive dependency conflicts.
When should I use Update Otel Deps?
Update Otel Deps fits situations like: A user asks to update; troubleshoot OpenTelemetry Collector dependencies in datadog-agent; including OCB build failures; ddflareextension golden files.
How do I install Update Otel Deps in Claude Code?
Run `npx skills add DataDog/datadog-agent --skill update-otel-deps -a claude-code`. Or copy the skill folder (.agents/skills/update-otel-deps in DataDog/datadog-agent) into .claude/skills/update-otel-deps in your project. Claude Code loads it when a task matches its description.
How do I install Update Otel Deps in Codex?
Run `npx skills add DataDog/datadog-agent --skill update-otel-deps -a codex`. Or copy the skill folder (.agents/skills/update-otel-deps in DataDog/datadog-agent) into .agents/skills/update-otel-deps in your project. Codex loads it when a task matches its description.
Can I use Update Otel Deps in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add DataDog/datadog-agent --skill update-otel-deps -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/update-otel-deps, .gemini/skills/update-otel-deps, .github/skills/update-otel-deps and .opencode/skills/update-otel-deps in your project.
What does Update Otel Deps need to run?
Going by SKILL.md and its folder, Update Otel Deps needs the command-line tools its instructions call (gh, bazel, rg, git and go) and credentials named GITHUB_TOKEN. Our summary lists: Python 3; Docker; A credential in GITHUB_TOKEN. Its frontmatter pre-approves these tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion.
Does Update Otel Deps access the network?
SKILL.md names 1 domain. As links in the text: dd.enterprise.slack.com. This is read from the text; nothing was executed.
Is Update Otel Deps safe to install?
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
What licence does Update Otel Deps use?
Update Otel Deps is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Update Otel Deps use?
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
What are the alternatives to Update Otel Deps?
Skills that share tags, products or a category with Update Otel Deps: Frontmcp Observability (agentfront/frontmcp, 146 stars), Monitoring Observability (ahmedasmar/devops-claude-skills, 203 stars), Observability Architecture (majiayu000/litellm-rs, 117 stars) and Error Handler (EliasOulkadi/shokunin, 114 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Update Otel Deps?
DataDog (a GitHub organization, an official publisher) maintains it in DataDog/datadog-agent, which has 3,759 GitHub stars. The repository holds 35 skills in this directory. The repository was last updated on October 9, 2026.
Source: DataDog/datadog-agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.