AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides structured guidance for deploying and managing the NVIDIA DOCA Telemetry Service (DTS). It covers three primary deployment shapes: BlueField (static pod), host-based (docker), and DPF (DPUService/helm). The skill focuses on the configuration layer, including dts_config.ini, provider and exporter settings, and level labels. It emphasizes a shape-first approach to troubleshooting and configuration, ensuring users follow the correct lifecycle for their specific environment while maintaining a strict separation from library-level API usage or infrastructure-level installation.
What it does
- Identifies the correct deployment shape (BlueField, Host, or DPF) for the telemetry service.
- Guides the configuration of dts_config.ini and helm-based DPUService parameters.
- Provides troubleshooting steps for common issues like container exit loops or empty Prometheus metrics.
- Outlines the verification contract to confirm telemetry data is successfully exported.
- Manages versioning and upgrades based on NGC container tags and chart versions.
- Defines the integration points for providers and exporters within the telemetry pipeline.
When to use it
- When you need to deploy or update the DOCA Telemetry Service in any supported environment.
- When the telemetry container fails to start or shows unexpected exit behavior.
- When you need to modify telemetry providers, exporters, or add custom level labels.
- When Prometheus endpoints on the DPU are not returning expected metrics.
- When you need to verify that configuration changes have been correctly applied and are active.
Advantages
- Ensures consistent configuration across different deployment architectures.
- Provides a clear, layered debugging approach to isolate telemetry failures.
- Maintains strict adherence to official documentation and versioning practices.
- Reduces configuration errors by enforcing a shape-first diagnostic workflow.
Usage examples
- “My BlueField DPU telemetry container is running but port 9100 shows no metrics.”
- The agent will guide you through inspecting the static pod logs using crictl, verifying the dts_config.ini provider settings, and checking the service restart status.
- “How do I add ethtool counters to my DPF-managed telemetry service?”
- The agent will instruct you to update the DPUService helm values (configMapData) and apply the changes via kubectl, avoiding manual INI edits.
- “I need to upgrade the built-in telemetry on my BlueField DPU to a newer version.”
- The agent will help you identify the correct NGC container tag and provide the steps to update the static pod manifest.
- “How do I configure per-rack level labels for my telemetry data?”
- The agent will explain the level_labels.ini or DPUFlavorTemplate configuration process and the necessary steps to apply these changes.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/nvidia/doca-dts/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip doca-dts.zip -d .agents/skills
Documentation by NVIDIA
DOCA Telemetry Service (DTS)
Scope note. DTS is an externally productized DOCA service: it is
not one of the DOCA SDK libraries, and its source of
truth is the public DTS guide plus the NGC container / helm-chart pages
and the DOCA Platform (DPF) public docs. This skill covers DTS as
deployed and configured — which manifest or invocation starts it,
which dts_config.ini keys shape it, how to verify it exports. It does
not cover the library side: reading telemetry in your own program is
libs/doca-telemetry (doca-telemetry/SKILL.md), publishing
into DTS over IPC from your own program is
libs/doca-telemetry-exporter (doca-telemetry-exporter/SKILL.md).
Where to start: decide the deployment type before anything
else — it selects the manifest, the config-directory path, the restart
mechanism and the debug commands. Route through
doca-setup ## recognize (doca-setup/TASKS.md#recognize)
(uname -m, lspci -d 15b3:, bf-release) to learn whether you are
on a BlueField Arm image (shape A), a plain host (shape B), or inside a
DPF-managed cluster (shape C), then open
TASKS.md ## configure and follow that shape's
column. State the shape in the answer before the first command, even
when the question implies it ("on my BlueField" is shape A: the
built-in static pod under kubelet, inspected with crictl, not
docker). Every configure, change or debug answer ends with the
verification contract, whose green signal is two /metrics scrapes at
least two update intervals apart showing a counter that advanced
(TASKS.md ## test step 3). If the question is what
can DTS collect and export, and in which mode, start at
CAPABILITIES.md ## Capabilities and modes.
If DOCA / the BlueField OS is not installed yet, route to
doca-setup/SKILL.md first.
Host docker container exits right after start (shape B). Check the
documented host shape and copy the exact invocations from the
version-matched guide's "Host Deployment" section instead of inventing
flags: (1) a -host image tag copied from the NGC doca_telemetry tag
list, never guessed; (2) the one-shot init container
(DTS_CONFIG_DIR=host /usr/bin/telemetry-init.sh) runs and exits 0
before the long-running telemetry-run.sh container; (3) the guide's
host-namespace flags and the config, ipc_sockets, data and log
mounts under /opt/mellanox/doca/services/telemetry/; (4) the documented
run uses --rm, so docker logs finds nothing: read the host-mounted
.../telemetry/log directory or re-run once without -d.
BlueField built-in DTS (shape A) serves nothing on port 9100. Inspect
with crictl pods, crictl ps -a and crictl logs <id> (not docker);
check prometheus= and enable-provider= in
/opt/mellanox/doca/services/telemetry/config/dts_config.ini (edit the file
it links to and allow about 60 s for the respawn). Green signal: two
curl <bluefield-ip>:9100/metrics scrapes at least two update intervals
apart show a counter that advanced. Change one variable per iteration.
DPF-managed DTS (shape C). Change providers and keys in the
DPUService helm values (configMapData), confirm the keys with
helm show values, apply with kubectl apply -f, and check the service
conditions with dpfctl. Never hand-edit the INI on a DPF-managed DPU.
Example questions this skill answers well
The CLASSES of DTS questions this skill is built to answer, each with one worked example. The class is the load-bearing piece; the worked example is one instance.
"Which deployment shape am I in, and what does that change?" — worked example: "I have a BlueField with DTS already running and a separate x86 host with no DPU; do I configure them the same way?". Answered by the shape table in
CAPABILITIES.md ## Pattern overviewthe shape-first step in
TASKS.md ## configure.
"How do I enable or disable a provider / component?" — worked example: "turn on
ethtoolcounters and dropsysfs.eth". Answered by the provider inventory inCAPABILITIES.md ## Capabilities and modesthe
enable-provider=/disable-provider=step inTASKS.md ## modify(in DPF the same option is set askey: valueunderconfigMapData, not in the INI).
"Which exporter do I pick and where does the endpoint live?" — worked example: "Prometheus should scrape the DPU, but the fleet also pushes to a Fluent Bit forwarder". Answered by the pull-vs-push exporter table in
CAPABILITIES.md ## Capabilities and modesthe exporter step in
TASKS.md ## configure.
"How do I upgrade or pin the DTS version on a given shape?" — worked example: "the BlueField OS bundles an older DTS; I want the NGC one". Answered by the tag / chart-version rule in
CAPABILITIES.md ## Version compatibilitythe NGC-yaml download pattern in
TASKS.md ## build, with the generic kubelet static-pod manifest mechanics indoca-container-deployment/TASKS.md#configure.
"How do I attach rack / pod / SU labels to every metric?" — worked example: "per-rack level labels for a DPF-managed fleet". Answered by the level-labels model in
CAPABILITIES.md ## Capabilities and modesthe
level_labels.ini/DPUFlavorTemplatestep inTASKS.md ## modify, with the reprovision warning fromCAPABILITIES.md ## Safety policy.
"The container is up but nothing is exported — which layer failed?" — worked example: "
curl :9100/metricson the DPU returns nothing,crictl psshows the pod running". Answered by the layer split inCAPABILITIES.md ## Error taxonomythe layered ladder in
TASKS.md ## debug.
"How do I prove a config change actually took effect?" — worked example: "I edited
dts_config.ini; did DTS restart and pick it up?". Answered by the restart-within-60-s contract and the green signal inCAPABILITIES.md ## Observabilitythe bounded loop in
TASKS.md ## test.
When to load this skill
Load this skill for hands-on DTS deployment or configuration work:
(A) BlueField (built-in static pod): understanding the kubelet static pod under
/etc/kubelet.d/doca_telemetry_standalone.yaml, itsinitContainers(telemetry-init.sh,enable-fluent-forward.sh), disabling auto-start, or upgrading to a newer NGC image than the BlueField OS bundles.(B) Host (docker): running the NGC
-hostimage with the documented namespace / device / volume flag families, the one-shot init container, and deciding whether--gpus allor the MST device mapping apply to this host.(C) DPF (DPUService / helm chart): authoring a
DPUServicefor thedoca-telemetrychart, mappingdts_config.inikeys ontoconfigMapData, keeping the Prometheus port consistent betweenconfigMapDataandconfigPorts, and readingdpfctl describeconditions.Configuration (all shapes): sampling interval, providers and components, exporters (Prometheus pull; Fluent Bit / OpenTelemetry / Prometheus Remote Write push; storage to
/data), IPC with external applications, level labels and device labels, the HFT HTTP API.Debugging: the container exits at start or restart-loops, the Prometheus endpoint is empty, a provider shows no counters, the Fluent Bit destination receives nothing, or a DPF
DPUServicenever reachesApplicationsReady.
Do not load this skill for general DOCA orientation, installing
DOCA or the BlueField OS, installing DPF itself, library-API questions,
or building Grafana dashboards. For those, route via
doca-public-knowledge-map/SKILL.md,
doca-setup/SKILL.md, or the matching libs/
skill.
What this skill provides
This is a thin loader. Substantive material lives in two companion files:
CAPABILITIES.md— the three deployment shapes and what each fixes (manifest, config path, restart mechanism, debug tooling); the inventory-discovery procedure (generated config / rendered ConfigMap over the example tables) with the provider and exporter catalogues (pull / push / storage); the version anchor (image tag / chart version, never the host DOCA release); the layered error taxonomy (image → manifest → init / config → providers → exporter → consumer); the observability surface with its named green signal; the safety policy; and the public-source pointer.TASKS.md— step-by-step workflows for the in-scope verbs:configure,build(assembling the deployment artifact — there is nothing to compile),modify,run,test,debug, plus aCommand appendix, aDeferred task verbsblock, and theCross-cuttingcontracts every change-recommending answer ends with.
The skill assumes the operator has the root / sudo or cluster
credentials the public DTS guide expects, and a target that already
runs a BlueField OS image, a docker-capable host, or a working DPF
cluster. It does not provide any of those prerequisites.
What this skill deliberately does not ship
This skill is agent guidance, not a templates or sample-config bundle. To keep the boundary clean, it deliberately does not contain — and pull requests should not add:
Copy-paste manifests, helm values files, or
dts_config.inibodies. The kubelet yaml is published per version on the NGC container page; the chart's keys come fromhelm show values; the INI options come from the live guide for the running version. The agent quotes the documented flag / key families with their "why" and points at the exact guide section for the verbatim recipe.Container image tags or chart versions as facts. Tags follow the
<dts-version>-doca<doca-version>[-host]shape and are read from the NGC tag list at answer time; a memorized tag is the canonical hallucination for a service skill. Seedoca-version/SKILL.md.Grafana dashboards or Prometheus / Fluent Bit server configs. The skill names the DTS-side endpoint and the consumer-side target shape and stops there.
Credentials, image pull secrets, or cluster credential files.
imagePullSecretsis named as a chart key family; its contents are the user's.A
samples/,templates/, orreference/subtree of any kind. A mock or incomplete artifact in this skill's tree, even one labeled "reference", is misleading: operators will read it as production-ready.
Loading order
Read this file first to confirm the question is about DTS as deployed (not the library API, not DPF installation), and fix the deployment shape via
doca-setup ## recognize(doca-setup/TASKS.md#recognize).For the shape table, providers, exporters, version anchor, error taxonomy, observability and safety policy, see CAPABILITIES.md.
For step-by-step workflows — configure, build, modify, run, test, debug — see TASKS.md, reading only the column for the chosen shape.
Apply the safety overlay in every phase. privileged mode with host namespaces,
systemctl start dpe, fwctl / mst device exposure, and a DPF flavor-template change that reprovisions DPUs are the safety-relevant actions — seeCAPABILITIES.md ## Safety policy.
Related skills
doca-setup/SKILL.md— the front door:## recognize(doca-setup/TASKS.md#recognize) decides the deployment shape;## no-install(doca-setup/TASKS.md#no-install) carries the tag-selection rule this skill reuses.doca-container-deployment/SKILL.md— generic kubelet standalone / static-pod manifest mechanics on BlueField and the pod-spec do-not-invent rule; the DTS-specific facts (/etc/kubelet.d/doca_telemetry_standalone.yaml, the NGCconfigs/<version>/yaml download, thecrictl pods/crictl ps/crictl logsinspection) come from the DTS guide and the NGC container page and live in this skill. Shape A delegates only the generic mechanics there via## configure(doca-container-deployment/TASKS.md#configure) and## run(doca-container-deployment/TASKS.md#run).doca-version/SKILL.md— canonical version-handling rules; DTS overlays "the anchor is the container tag / chart version, not the host DOCA release".doca-debug/SKILL.md— the universal debug-loop contract (doca-debug/CAPABILITIES.md#universal-debug-loop-contract) and shared command appendix (doca-debug/TASKS.md#command-appendix) thatTASKS.md ## debugoverlays.doca-hardware-safety/CAPABILITIES.md#safety-policy— DTS is read-only telemetry, but its deployment touches privileged containers,dpe, firmware-facing devices and DPF reprovisioning.libs/doca-telemetry(doca-telemetry/SKILL.md) — the reader library; "consume telemetry in my program" goes there.libs/doca-telemetry-exporter(doca-telemetry-exporter/SKILL.md) — the publisher library; "my app reports but DTS sees nothing" is split: IPC socket / shared-memory mounts are this skill's, thedoca_telemetry_exporter_*calls are that skill's.doca-public-knowledge-map/SKILL.md— URL routing for the public DOCA documentation set;CAPABILITIES.md ## Public-source pointercarries the DTS guide, NGC and DPF URLs.
Files
- ATTRIBUTION.mdAdded by AutoGineer815 B
- BENCHMARK.md10.2 KiB
- CAPABILITIES.md42.1 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md15.1 KiB
- SKILLCARD.yaml3.2 KiB
- TASKS.md39.9 KiB
- evals/evals.json6.2 KiB
- skill-card.md5.3 KiB
- skill.oms.sig5.1 KiB
TASKS.md
DOCA Telemetry Service — Tasks
Where to start: The order is configure → build → modify → run → test → debug. The ## test verb is a bounded iterative loop, not a
one-shot pass — see the eval-loop overlay in ## test below. For DTS,
build is assembling the deployment artifact for the user's shape
(a static-pod YAML, a docker invocation, or a DPUService), not
compiling anything; modify is adapting the documented recipe with
the minimum change.
Every step assumes the operator has the live public DTS guide on
docs.nvidia.com open as the authoritative reference; this file
prescribes the order, which shape's column to follow, and what to
look up where, not a copy-paste runbook. The one organizing decision
is the deployment shape: (A) BlueField (built-in static pod),
(B) Host (docker), (C) DPF (DPUService / helm chart). The configuration layer (dts_config.ini,
providers, exporters, level labels) is shared; only its delivery
differs per shape. If the version-matched guide section cannot be
reached, stop and report the source gap; never fall back to remembered
flags, tags, or chart keys.
configure
Deciding the shape, the version anchor, and the configuration plan before any artifact is written.
Pin the deployment shape first. Route through
doca-setup ## recognize(doca-setup/TASKS.md#recognize) (auto-detectuname -m,lspci -d 15b3:,bf-release) and map onto the shape table inCAPABILITIES.md ## Capabilities and modes:(A) BlueField (built-in static pod) —
bf-releasepresent,aarch64; DTS ships in the BlueField OS image, auto-started by the static pod/etc/kubelet.d/doca_telemetry_standalone.yaml.(B) Host (docker) —
x86_64oraarch64server; DTS is a docker container from the NGC image with a-hosttag.(C) DPF (DPUService / helm chart) — DPUs managed by the DOCA Platform Framework; DTS is a
DPUService(orDPUServiceTemplate+DPUServiceConfigurationreferenced fromDPUDeployment.spec.services.dts). The## recognizescale gate applies: a fleet signal points at (C), a single DPU or host at (A)/(B). State the shape in one line and get acknowledgment before continuing.
Pin the version anchor — never fabricate it. The anchor is the container tag or chart version, not the host DOCA install (
CAPABILITIES.md ## Version compatibility,doca-version/SKILL.md):(A): the image tag already in the installed
/etc/kubelet.d/doca_telemetry_standalone.yaml(backup copies:doca_telemetry_service_${version}_arm64.tar.gzand the yaml on the DPU). Upgrading beyond the bundled version is the guide's "DOCA Service on NGC" section.(B): a
-hosttag copied verbatim from the NGC container page tag list fornvcr.io/nvidia/doca/doca_telemetry:<tag>. Example of the rule only, observed on NGC 2026-09-16:1.26.5-doca3.5.0-host. If the page is unreachable, say so and ask the user to paste the tag list.(C): the chart version from the NGC helm chart page, confirmed with
helm show chart/helm show values. Chart version and image tag are different numbers; the chart pins its own image tag.
Decide the configuration strategy (initialize vs reuse). The config dir
/opt/mellanox/doca/services/telemetry/config/starts empty;telemetry-init.shgenerates defaults on first launch only if the dir is empty. Non-empty => init skips — why upgrades keep operator edits, and why new defaults never appear after a version bump. Reset = delete all files in the config dir and restart DTS ("Resetting Configuration"). Record which the user wants: fresh defaults, keep existing, or reset.Pick providers and check prerequisites.
enable-provider=<name>/disable-provider=<name.component>(e.g.disable-provider=sysfs.eth); read the inventory of this install first — theenable-provider=lines of the generateddts_config.inion (A)/(B), the rendered ConfigMap on (C) (CAPABILITIES.md ### Discovering the inventory); the names documented when this skill was written are (sysfs, ethtool, tc, ifconfig, vnic, ppcc_eth, nvidia_smi, dcgm, bfperf, storage, amber, diagnostic_data_low_freq, diagnostic_data_high_freq). Gating prerequisites: remote collectiongrpc.sysfs.fw_pages(BlueField only) needssystemctl start dpe;diagnostic_data_*needs fwctl (lsmod | grep fwctl,ls -l /dev/fwctl/fwctl*);amber/ppcc_ethneed MFT devices (the MST device mapping on host);nvidia_smi/dcgmare host shape (B) only, and only when the host has NVIDIA GPUs (nvidia-smi -Llists them) plus the NVIDIA container toolkit (--gpus all); never on BlueField (A)/(C). Each is a safety-relevant exposure —CAPABILITIES.md ## Safety policy.Pick the exporter and the port plan. From "Data Export Options" / "Enabling Data Output" — the generated config's banner section headers are the exporter inventory of the deployed version, same discovery rule as step 4: Prometheus pull (
prometheus=<scheme>://0.0.0.0:9100,prometheus-fset-indexes=name), Fluent Bit push (fluent_bit_configs/; set viaenable-fluent-forward.sh -i=<host> -p=<port>on (A), thefluent.forwardgroup on (C)), OpenTelemetry push (open-telemetry-receiver=<url>;configMapData.otlp.*on (C)), Prometheus Remote Write (remote-write-receiver=<url>; on (C) via the free-formconfigMapData.generalmap), or storage (output=/data). On (C)configMapData.prometheus.portmust equal the port inspec.configPorts(and the chart'sexposedPorts, if the pinned chart exposes it — confirm withhelm show values) — see the port-mismatch entry inCAPABILITIES.md ## Error taxonomy. On (B) host networking binds theprometheus=port directly on the host:<addr>is the host IP and the Prometheus server'sstatic_configstarget is<host-ip>:<port>. If the HFT HTTP API is wanted (enable-http-api=true, defaulthttp-port=9117), add that port.Plan labels. Level labels:
/opt/mellanox/doca/services/telemetry/config/level_labels.ini, enabled withlevel-labels-file=/config/level_labels.ini((A)/(B)); on (C) eitherconfigMapData.levelLabels(template-only key — not invalues.yaml; verify withhelm template, nothelm show values) or per-DPU generation by aDPUFlavorTemplateinto the DPU'slevel_labels.ini— which reprovisions DPUs when template orDPUDevicevalues change. Confirm withhelm show valuesand the DPF level-labels page which carrier the pinned chart wires intolevel-labels-file=; do not set both. Device labels:add-pci-address-label=true,add-numa-node-label=true.
build
There is nothing to compile. The image comes from the BlueField OS image (A) or from NGC (B, C). "Build" means assembling the deployment artifact for the pinned shape by copying the documented recipe for the pinned version — never hand-writing it.
(A) BlueField (built-in static pod). The artifact is the per-version
doca_telemetry_standalone.yaml, already at/etc/kubelet.d/. For an upgrade, download the matching yaml from the container's NGC page (configs/<version>/in the File Browser); do not hand-write it and do notdocker pullthe DPU image (the NGC page discourages it — the image is K8s-shaped). The yaml mounts/opt/mellanox/doca/services/telemetry/{config,data,ipc_sockets}and runs theinitContainerscommand/usr/bin/telemetry-init.sh && /usr/bin/enable-fluent-forward.sh -i=127.0.0.1 -p=24224; the-i=/-p=pair (Fluent Bit destination) is the only routine edit. The yaml path, the NGCconfigs/<version>/download and thecrictlinspection commands come from the DTS guide and the NGC container page and are this skill's; generic kubelet static-pod manifest mechanics:doca-container-deployment ## configure(doca-container-deployment/TASKS.md#configure).(B) Host (docker). The artifact is the two invocations from the guide's "Host Deployment" section — copy them verbatim for your version: the one-shot init (
docker runwith auto-remove, interactive,--name doca-telemetry-init, the.../telemetry/config:/configbind mount, and/bin/bash -crunning/usr/bin/telemetry-init.shwith theDTS_CONFIG_DIR=hostprefix), then the long-runningtelemetry-run.shcontainer. Flag families:Flag family Why detached, auto-remove, named doca-telemetryaddressable by name for docker ps/docker logshost network, UTS, IPC and PID namespaces providers must see the host's NICs and processes; IPC clients share namespaces privileged mode provider access to sysfs / devices; safety-relevant the MST device mapping + the /usr/lib64/mftbind mountMFT devices and libs for amber/ppcc_eth; drop if MFT is absent--gpus allnvidia_smi/dcgm— only ifnvidia-smi -Lshows GPUs and the NVIDIA container toolkit is installed; otherwise omit the flag and keep both providers disabled-v .../telemetry/config:/configpersisted dts_config.ini,level_labels.ini,fluent_bit_configs-v .../telemetry/ipc_sockets:/tmp/ipc_socketsIPC socket dir for doca-telemetry-exporterclients-v .../telemetry/data:/data,-v .../telemetry/log:/var/logoutput=/datastorage exporter; DTS logs on the host$DTS_IMAGEisnvcr.io/nvidia/doca/doca_telemetry:<-host tag>from configure step 2;DTS_CONFIG_DIR=hostis the only documented env var.(C) DPF (DPUService / helm chart). The artifact is a
DPUService(apiVersion: svc.dpu.nvidia.com/v1alpha1,namespace: dpf-operator-system,spec.helmChart.source {repoURL, chart: doca-telemetry, version: <chart ver>}—repoURLis the NGC DOCA helm repository; copy it from the publicdpuservices/dts/DPUService.yaml) or, underDPUDeployment, aDPUServiceTemplate+DPUServiceConfiguration(bothspec.deploymentServiceName: dts). Start from the public example ingithub.com/NVIDIA/doca-platform(dpuservices/dts/DPUService.yaml;DPUServiceSPX.yamlis the Spectrum-X variant). Configuration is delivered throughspec.helmChart.values.configMapDatagroups —providers(CSV),aggregator_providers(CSV, aggregator-side providers — template-only key, shown commented in the publicDPUService.yaml; verify withhelm template),general(free-form options),fluent(forward/kafka/influxdb/elasticsearch), pluscounterset.{cset,fset,xcset}for data filtering (chart key — confirm withhelm show values) — with the documented mapping: the guide'skey=valueindts_config.inibecomeskey: valueundergeneral. Confirm every other key (image.*,dtsConfigDir,hostVolumePrefix,shareHostSharedMemory,exposedPorts,configMapData.prometheus.*,configMapData.otlp.*,serviceDaemonSet.*,tolerations) withhelm show valuesfor the pinned chart version; do not assert defaults from memory.
modify
The DTS analog of "modify a sample" is adapt the documented recipe to the environment with the minimum change.
Start from the documented recipe for the pinned shape and version (build above). Quote it; do not author a new one.
Diff against the environment. Typical forced substitutions: (A) the
-i=/-p=destination in the yaml'sinitContainers; (B) dropping--gpus allor the MST device mapping when the host lacks a GPU / MFT, choosing the-hosttag; (C) chartversion,configMapData.providers,general.*,fluent.*, andconfigPorts(and the chart'sexposedPorts, if present — confirm withhelm show values) kept equal toprometheus.port.Apply minimum-change. Every extra deviation (a mount, a widened namespace, a new privileged device) widens exposure; on (C) every value override is a chart-upgrade liability. Config edits go into
dts_config.ini(host/opt/mellanox/doca/services/telemetry/config/dts_config.ini,/config/dts_config.iniin-container) — edit the symlink targetclx_config.ini(or usesed -i --follow-symlinks), then expect the collector to respawn within ~60 s (documented forlevel_labels.ini, observed fordts_config.initoo); apply the shape's restart rule only if no respawn appears; on (C) edit theDPUServicevalues instead: the chart deliversconfigMapDatato the pod as a ConfigMap and DTS regenerates/config/dts_config.inifrom it (the/configmapmount path and the regeneration mechanism are chart internals — confirm withhelm show valuesfor the pinned chart version).Re-validate the safety-relevant knobs from configure step 4 (privileged mode,
/dev/mst, fwctl,systemctl start dpe, DPF flavor-template changes that reprovision DPUs). Any widening the user did not ask for is a stop condition (doca-hardware-safety ## Safety policy(doca-hardware-safety/CAPABILITIES.md#safety-policy)).
run
Start / stop / restart / upgrade, per shape.
(A) BlueField (built-in static pod). Start: the yaml present at
/etc/kubelet.d/doca_telemetry_standalone.yaml→ kubelet starts the pod at boot; confirm withcrictl pods,crictl ps, readcrictl logs <container-id>. Stop / disable auto-start: remove the yaml (keep a copy — it is the rollback artifact). Restart after a yaml change: "applied on system restart" — reboot, or the kubelet-side mechanics indoca-container-deployment ## run(doca-container-deployment/TASKS.md#run); adts_config.iniedit is normally picked up without it (collector respawn within ~60 s;crictl stop <container-id>is the no-reboot restart when it is not) — only thelevel_labels.iniauto-reload is documented. Upgrade: replace the yaml with the per-version one from NGC (build (A)); a non-empty config dir keeps operator config — but the downloaded yaml carries the default-i=127.0.0.1 -p=24224, andenable-fluent-forward.shoverwritesfluent_bit_configson every init even when the config dir is non-empty (the non-empty rule protects onlytelemetry-init.shoutput), so re-apply your Fluent Bit destination in the new yaml before dropping it into/etc/kubelet.d, and after the restart confirm the regeneratedfluent_bit_configs/exp-file names your-i=/-p=destination, not127.0.0.1:24224— the reset is silent otherwise. "After any server configuration changes (firmware, networking, firewall), restart DTS."(B) Host (docker). Start: the documented init container once, then the documented
telemetry-run.shcontainer;docker psshowsdoca-telemetryUp,docker logs doca-telemetryshows bring-up. Stop: removing thedoca-telemetrycontainer (config persists on the host volume). Restart: stop and re-run; skip init unless the config dir was reset. Upgrade: new-hosttag in$DTS_IMAGE, re-run.(C) DPF (DPUService / helm chart). Start / update:
kubectl apply -f DPUService.yaml(or theDPUServiceTemplate/DPUServiceConfiguration/DPUDeploymentset); watchkubectl -n dpf-operator-system exec deploy/dpf-operator-controller-manager -- /dpfctl describe all --show-resources=dpuservice/doca-telemetry-service --show-conditions=all(conditions such asApplicationPrereqsReconciled,ApplicationsReady,ApplicationsReconciled,DPUServiceInterfaceReconciled— every condition printed must be True), thenkubectl get pods -n dpf-operator-systemand the rendered DaemonSet pods in the DPU cluster. Stop / rollback:kubectl delete -f DPUService.yaml; on theDPUDeploymentroute the controller owns theDPUService, so remove thedtsentry fromDPUDeployment.spec.services(or revert theDPUServiceConfigurationvalues) and re-apply instead. Restart: a values change rolls perspec.serviceDaemonSet.updateStrategy(RollingUpdate,maxUnavailable); DTS also self-restarts on the regenerated ini (chart mechanics — confirm withhelm show values). Upgrade: bumpspec.helmChart.source.versionafter re-readinghelm show values(keys can move); flavor-template label changes reprovision DPUs — confirm with the operator first.
Smoke before scale: after the first start on any shape, walk ## test
steps 1–3 once before adding providers or pointing consumers at it.
test
DTS has no "compile and unit-test" workflow — testing is operational.
## test is a bounded iterative loop, not a one-shot pass. Every
configuration mutation (provider enabled, exporter changed, port moved,
tag bumped, label file edited) re-opens the sweep, because the restart that
applies it (automatic for level_labels.ini, otherwise the shape's
restart rule) can fail silently (provider missing
its prerequisite, port already bound). The bound is per invocation:
the first sweep plus at most one mutation followed by one complete
second sweep — regardless of which back-edge consumes it. If the
second sweep reveals any failure, including a different
class, do not take another back-edge: return a diagnostic bundle (all
smoke results, debug-layer captures, the capability snapshot if step 6
was reached) and mark the result requires_human_decision. Rollback is
the shape's stop action (remove the yaml from /etc/kubelet.d,
removing the container, kubectl delete -f DPUService.yaml — or, on the
DPUDeployment route, removing the dts entry from
DPUDeployment.spec.services / reverting the DPUServiceConfiguration
values; reverting a flavor-template label change reprovisions DPUs
again, so schedule it like the forward change).
Green criteria: the DTS process is up with a flat restart count;
dts_config.ini exists in the config dir and lists the chosen
providers; the Prometheus /metrics endpoint answers twice across at
least two update intervals with a counter or timestamp advancing
versus the baseline scrape; the chosen push destination (Fluent Bit /
OTel / storage) receives records; the host's own networking and SSH are
unaffected (negative side); the capability snapshot matches the pinned
shape and version. The auditable "done" sentence names all six.
The eval-loop overlay (rows apply to every shape):
| Step | Why this is a loop, not a step | Where the substance lives |
|---|---|---|
| 6 → ## modify → 1 | Snapshot drift (a provider not listed, a port not the planned one) needs a documented config change in ## modify; then restart the sweep at step 1 | ## test step 6 |
| 1 → ## debug | A restart loop or an exited container is never "probably fine" — ## debug layers 1–3 before any later step | ## debug |
| 3 → ## debug layer 4 | /metrics answers but nothing advances: process up, provider not sampling — prerequisites or update interval | ## debug |
| 4 → ## run → 1 | Destination receives nothing: re-check -i=/-p=, fluent.*, or the OTel URL in ## run, then restart at step 1 | ## run |
| 1..6 → ## run | All six pass → hand off to live consumers (Prometheus server scrape, Grafana) | ## run |
Process up, no restart loop. (A)
crictl psshows the DTS container Running with a stable restart count across two reads a minute apart; (B)docker psshowsdoca-telemetryUp anddocker logs doca-telemetryhas no repeating error; (C) alldpfctl describeconditions True and DPU-side pods flat.Config generated.
/opt/mellanox/doca/services/telemetry/config/dts_config.iniexists ((C):/config/dts_config.iniin the pod) and itsenable-provider=lines match configure step 4. If the dir was non-empty before first start, this is the pre-existing file — say so. Cross-check what DTS actually loaded withcurl -s <addr>:<port>/management/config_fileand which providers really run with/management/provider(run_status: running) — that is the live truth if the file and the process disagree.Prometheus scraped twice — baseline first.
curl -s <addr>:<port>/metrics | head, wait at least twoupdateintervals (defaultupdate=1000ms), scrape again, and show one counter or timestamp that advanced.<port>is from configure step 5 (documented default9100). On (B)<addr>is the host IP (host networking binds the port on the host itself). On (C) the public example setsspec.configPorts.serviceType: None, so<addr>is whatever address the operator's chosenserviceTypeexposes; whether the chart'sexposedPortsadds a NodePort Service is a chart detail — confirm withhelm show values. When level labels are configured, both scrapes must also show the expected label key=value (e.g.rack) on the metric lines — a metric without the label is not green for a labels change. Headers with no metric lines is not green.Exporter destination receives. Fluent Bit: the receiver at the
-i=/-p=(orfluent.forward.host/port) destination logs records for the configured tag (DPF defaultfluent.forward.tag: doca_telemetry; on (A)/(B) read the tag from the generatedfluent_bit_configs); OTel: the receiver's ingest counter moves; storage: files appear under/opt/mellanox/doca/services/telemetry/dataand decode withclx_read(packagecollectx-clxapidev). Before touching the destination, read/management/exportertwice: the exporter'sstatisticscounters increasing prove DTS is pushing; a destination that still sees nothing is then a layer-5/6 problem, not a DTS one. Skip only if the plan is Prometheus-only, and say so.Negative side. SSH to the host/DPU still works from outside and its networking is unchanged;
crictl ps/docker ps/ pod restart counts are flat since step 1. DTS is read-only telemetry — any observed side effect is a stop condition.Capability snapshot. Record: shape, image tag / chart version, providers enabled (from
dts_config.ini), exporters and their ports, label files in use. Future debug sessions start here.
debug
Layered diagnosis mirroring
CAPABILITIES.md ## Error taxonomy.
Walk the layers in order; each is symptom → read-only capture →
single-variable change; clear a layer before dropping below it. One
change per iteration, re-capture; if still not green after one
iteration, roll back per ## test and return
requires_human_decision. Generic loop contract:
doca-debug ## Universal debug-loop contract (doca-debug/CAPABILITIES.md#universal-debug-loop-contract).
Every debug answer opens with the deployment shape and closes with
the /metrics proof. State the shape before the first command, even
when the question implies it: "on my BlueField" means shape A, the
built-in static pod under kubelet, inspected with crictl rather than
docker; a plain host is shape B; a DPF cluster is shape C. Then walk
the layers below for that shape. End with the verification contract
from ## test, using step 3 as the green signal: scrape
curl -s <addr>:<port>/metrics twice, at least two update intervals
apart, and show a counter or timestamp that advanced.
Image / tag layer. Symptom: pull failure, immediate exit, or providers behaving "wrong" for the box. Capture: the tag in the yaml /
$DTS_IMAGE/helm show chartversus the NGC tag list; on (B) the documented run uses auto-remove, so an exited container is gone anddocker logshas nothing — read the host/opt/mellanox/doca/services/telemetry/logdir (the/var/logbind mount) or re-run the documented command once without-dto capture the exit output. Gotcha: a DPU tag on a host or a-hosttag on the DPU — different images. Change: the one tag.Manifest / pod scheduling layer. Symptom: (A) no pod in
crictl pods; (C) conditions not True or no DPU-side pods. Capture: (A) is the yaml really in/etc/kubelet.d/and was the system restarted since; (C)kubectl get pods -n dpf-operator-system, the DPUService conditions,serviceDaemonSet.nodeSelector/tolerations. Kubelet mechanics:doca-container-deployment ## debug(doca-container-deployment/TASKS.md#debug). Change: one manifest field or one restart.Init container / config generation layer. Symptom: DTS runs but the expected config is missing — no new defaults after an upgrade,
enable-fluent-forward.shdestination not applied, nodts_config.ini. Capture:lsthe config dir; the init container's log (crictl logs <init-container-id>, on (B) the terminal output of the auto-remove, interactive init run). Gotcha: the config dir was non-empty, sotelemetry-init.shskipped generation by design; conversely, on (A) a freshly downloaded upgrade yaml carries the default-i=127.0.0.1 -p=24224andenable-fluent-forward.shoverwritesfluent_bit_configson every init, so the Fluent Bit destination resets to localhost unless the edit was re-applied to the new yaml. Change: reset (delete config dir contents, restart) or hand-merge the one missing key.DTS process and providers layer. Symptom:
/metricsanswers but a provider's counters are absent or frozen, or DTS restart-loops after an ini edit. Capture: the provider's error line in the container log; prerequisite probes —lsmod | grep fwctl,ls -l /dev/fwctl/fwctl*(diagnostic data),systemctl status dpe(remote collection),/dev/mstand the MFT lib mount (amber / ppcc_eth),--gpus all(nvidia_smi / dcgm). Gotcha: ini edited and nothing changed — firstls -l dts_config.ini: a plain file instead of the-> clx_config.inisymlink means ased -ibroke the link and DTS never saw the edit; then look for the respawn (exited: clx/spawned: 'clx'in the container log) and restart only if it is absent; on (A)/(B) confirm you edited the host-mounted/opt/mellanox/doca/services/telemetry/config/dts_config.ini, not a copy; on (C) the file is regenerated from the ConfigMap the chart delivers (chart mechanics — confirm withhelm show values), so edit theDPUServicevalues. Change: one provider or one prerequisite.Exporter reachability layer. Symptom: nothing on
/metricsfrom outside, or the push destination sees nothing. Capture:curl -s <addr>:<port>/metrics | headon-box and off-box;ss -tlnpfor the listener; on (C)configMapData.prometheus.portversusspec.configPorts(and the chart'sexposedPorts, if present — confirm withhelm show values). Gotcha: port mismatch on DPF — chart default and example (9100) can differ, so the Service forwards to a port DTS does not bind. Change: set both ports to one value, or fix a single firewall rule.Consumer side layer. Symptom: DTS green end-to-end but the Prometheus server / Grafana / IPC client shows nothing. Capture: the consumer's own target status (
static_configstarget<dpu-ip>:9100per the guide's Grafana section); for IPC, whether the client has write access to the socket dir/opt/mellanox/doca/services/telemetry/ipc_sockets(root-created; the client may need root) and sees/dev/shm/telemetry(on (C),shareHostSharedMemoryfor bare-metal clients — confirm withhelm show values). Change: one consumer-side setting; API questions go tolibs/doca-telemetry-exporter(doca-telemetry-exporter/SKILL.md).
Path-specific ladders
Three paths cut across the six layers; walk them as their own symptom → capture → change sequence, still one change per iteration.
Storage read-back (
output=/data). (i) No files: layer 3/4 — isoutput=/datauncommented in the generateddts_config.ini, is thedata/host dir mounted at/data(yamlvolumes:/ the-v …/telemetry/data:/datarun flag), does the start-up block list any enabled provider? (ii) Files but no growth: layer 4 — the providers are not collecting; same captures as layer 4. (iii) Files grow but cannot be read: the guide's "Enabling Data Output" reader isclx_read(/opt/mellanox/collectx/bin/clx_readinside the container viacrictl exec/docker exec, or thecollectx-clxapidevpackage on the host) with the schema directory-s /data/schema; a decode failure with files present means the schema dir is missing or from another version — point-sat the schema written next to those files, never at another install. Validation: a file timestamp advancing across twoupdateintervals and one record decoded.Remote collection (
enable-provider=grpc.<provider>, BlueField only). (i) Provider rejected / absent in the start-up block:systemctl status dpeon the BlueField — DPE not running is the layer-4 prerequisite; starting it is privileged (Safety policy gate). (ii) DPE running, provider still silent: thegrpc.-prefixed option lines (grpc.<provider>.<component>=…) must mirror the non-grpc spelling exactly; compare against the commented examples in the generated config. (iii) Works, then stops:dperestarted or stopped — re-check (i) before touching the ini. Validation: the provider's counters on/metricsacross two scrapes.Boundary answers ("DTS does not do X"). A refusal still owes the user a validation and a debug step for the alternative it recommends (e.g. the exporter library's own NetFlow API → that skill's
## test/## debug); link the owning skill's anchors instead of stopping at the route.
Command appendix
DTS-specific commands the verbs above reach for, grouped so the agent
picks the right family without searching prose. Every row is a class —
do not invent flags beyond what the row names; the guide section for
the pinned version is the only source for the verbatim form. <addr>,
<port>, <tag>, <chart ver> come from ## configure.
| Purpose | Command (class shape) | Owning step | Reads as healthy when … |
|---|---|---|---|
| Shape detection | uname -m, lspci -d 15b3:, cat /etc/mlnx-release (BlueField bundle) or /etc/nvidia/bf-release (if present) | ## configure step 1 | Output pins exactly one of (A)/(B)/(C); user acknowledges. |
| (A) pod state | crictl pods, crictl ps | ## run, ## test step 1 | DTS pod Ready, container Running, restart count flat across two reads. |
| (A) logs | crictl logs <container-id> (init container id for layer 3); persisted copy under the host dir the yaml's volumes: maps to /var/log (/var/log/doca/telemetry in the shipped yaml) | ## debug layers 3–4 | Start-up block lists the intended providers as enabled; no repeating provider / exporter error. |
Management API (all shapes, needs prometheus=) | curl -s <addr>:<port>/management (route table), /management/provider, /management/provider/<name>, /management/exporter, /management/exporter/<name>, /management/config_file, /management/all_configs, /management/(cset|fset|xcset)[/<name>] | ## test, ## debug layers 4–5 | Providers report run_status: running; exporter statistics counters increase between two calls; config_file shows your edit. |
| In-container log (all shapes) | crictl exec <id> tail -n 200 /var/log/clx.log / docker exec doca-telemetry tail -n 200 /var/log/clx.log / kubectl exec <pod> -- tail -n 200 /var/log/clx.log | ## debug | Start-up block (# of enabled providers) present; no repeating provider / exporter error. |
| Log verbosity (all shapes) | verbose= in the generated dts_config.ini (scale in its inline comment: error / info / debug); raise for one restart cycle, then restore | ## debug | Debug-level lines appear after the restart; value restored afterwards. |
| (A) enable / disable auto-start | place / remove /etc/kubelet.d/doca_telemetry_standalone.yaml, then system restart | ## run | Pod appears / disappears after restart; removed yaml kept as rollback. |
| (A) upgrade artifact | download configs/<version>/doca_telemetry_standalone.yaml from the NGC container page | ## build | Tag in the yaml equals a tag on the NGC list. |
| (B) init (one-shot) | the guide's one-shot docker run (auto-remove, interactive, --name doca-telemetry-init, the .../config:/config bind mount, /usr/bin/telemetry-init.sh under the DTS_CONFIG_DIR=host prefix) — verbatim form from "Host Deployment" | ## build, ## run | Exits 0; dts_config.ini present (generated only if the dir was empty). |
| (B) run | the guide's detached docker run of /usr/bin/telemetry-run.sh as doca-telemetry (host namespaces, privileged mode, the documented mounts) — verbatim | ## run | docker ps shows doca-telemetry Up. |
| (B) state / logs / stop | docker ps, docker logs doca-telemetry (while running — with auto-remove an exited container is gone; read the host .../telemetry/log dir or re-run once without -d), removing the doca-telemetry container | ## run, ## debug | Up with no restarts; no repeating errors; stop removes the container, config persists. |
| (C) chart introspection | helm show chart / helm show values for doca-telemetry at <chart ver> from the NGC DOCA helm repository (the repoURL in the public dpuservices/dts/DPUService.yaml; chart page in CAPABILITIES.md ## Public-source pointer) | ## configure step 2, ## build | Keys you plan to override exist; image tag read, not guessed. |
| (C) apply / delete | kubectl apply -f DPUService.yaml / kubectl delete -f DPUService.yaml | ## run | Resource created; conditions turn True within the rollout window. |
| (C) conditions | kubectl -n dpf-operator-system exec deploy/dpf-operator-controller-manager -- /dpfctl describe all --show-resources=dpuservice/doca-telemetry-service --show-conditions=all | ## run, ## test step 1 | Every condition printed is True (including ApplicationPrereqsReconciled, ApplicationsReady, ApplicationsReconciled, DPUServiceInterfaceReconciled). |
| (C) pods | kubectl get pods -n dpf-operator-system (host cluster); DaemonSet pods in the DPU cluster | ## test step 1 | Running, restarts flat. |
| (C) level-label preview | dpfctl flavor-template render -f template.yaml --dpudevice-file device.yaml | ## configure step 6 | Rendered INI has [global_labels] [device_labels] [device_mapping] [data_types_mapping]; applying it reprovisions DPUs. |
| Config edit | edit the symlink target /opt/mellanox/doca/services/telemetry/config/clx_config.ini (dts_config.ini -> clx_config.ini; sed -i without --follow-symlinks breaks the link) ((A)/(B)) or the DPUService configMapData values ((C)) | ## modify | After the respawn (~60 s; exited: clx / spawned: 'clx' in the container log, pod attempt count unchanged), new enable-provider= visible on the next /metrics. |
| Config reset | delete all files in /opt/mellanox/doca/services/telemetry/config/, restart DTS | ## configure step 3, ## debug layer 3 | Fresh dts_config.ini regenerated by telemetry-init.sh. |
| Prometheus probe | curl -s <addr>:<port>/metrics | head — twice, >= 2 update intervals apart | ## test step 3 | Metric lines present; a counter/timestamp advanced between scrapes. |
| Provider prerequisites | lsmod | grep fwctl, ls -l /dev/fwctl/fwctl*, systemctl status dpe, ls /dev/mst | ## configure step 4, ## debug layer 4 | Prerequisite present before the provider is enabled. |
| Storage exporter check | ls /opt/mellanox/doca/services/telemetry/data, clx_read <file> (collectx-clxapidev) | ## test step 4 | Files grow across intervals; clx_read decodes them. |
| Cross-cutting health | ss -tlnp for <port>; restart counts from the shape's state command | ## debug layer 5, ## test step 5 | Listener bound on the planned port; restarts flat; host SSH unaffected. |
Three cross-cutting rules for this appendix:
Never invent a DTS option, tag, or chart key. The guide section named in each verb is the contract; the NGC tag list and
helm show valuesare the only secondary sources.Init log before run log. When the config is "wrong", read the init container's output and the config dir first; only then the running container's log.
Cross-link instead of duplicate. The read-only triple,
dmesg, and generic container-runtime commands live indoca-debug ## Command appendix(doca-debug/TASKS.md#command-appendix) anddoca-container-deployment ## Command appendix(doca-container-deployment/TASKS.md#command-appendix).
Deferred task verbs
Installing DOCA / preparing the host or BlueField — route to
doca-setup ## configure(doca-setup/TASKS.md#configure) anddoca-setup ## no-install(doca-setup/TASKS.md#no-install). (B) and (C) need no host DOCA install — the anchor is the container tag / chart version.Installing or operating the DPF cluster itself (operator install, DPU provisioning,
DPUSetrollout) — the DPF documentation (docs.nvidia.com/networking/display/dpf/) and the publicgithub.com/NVIDIA/doca-platformrepo; this skill owns only the DTSDPUServiceand its values.Library API questions (
doca_telemetry_*,doca_telemetry_exporter_*, IPC client code, custom schemas) —libs/doca-telemetry(doca-telemetry/SKILL.md) andlibs/doca-telemetry-exporter(doca-telemetry-exporter/SKILL.md). This skill stops at "the socket dir exists and the client can write".Prometheus server / Grafana administration — the guide's "Deploying with Grafana Monitoring" section names the DTS-side prerequisites (
prometheus=<scheme>://0.0.0.0:9100,enable-provider=sysfs, astatic_configstarget<dpu-ip>:9100); everything beyond that belongs to the Prometheus / Grafana projects.BFB / BSP / firmware — the BlueField OS image that bundles DTS is owned by the BlueField platform docs; a DTS upgrade without a BFB change is the "DOCA Service on NGC" path in
## run(A).
Cross-cutting
The public DTS guide is the single source of truth for option names, paths, ports, and the init/run recipes; the NGC pages for tags and yaml downloads;
helm show valuesfor chart keys. Anything not traceable to one of those is not written.The deployment shape decides everything after configure step 1; do not mix columns (a
docker pullof the DPU image, a-hosttag in a static pod, an ini edit on a DPF-managed DPU).Configuration is shared across shapes; only delivery differs. Two invariants hold everywhere: init generates defaults only into an empty config dir, and an ini change (documented for
level_labels.ini, observed fordts_config.ini) respawns the collector within ~60 s — restart manually only if no respawn appears.DTS is read-only telemetry, but privileged mode, the MST device mapping, fwctl exposure,
systemctl start dpe, and DPF flavor-template changes (DPU reprovision) are the safety-relevant actions —doca-hardware-safety ## Safety policy(doca-hardware-safety/CAPABILITIES.md#safety-policy) andCAPABILITIES.md ## Safety policy.Every change-recommending answer ends with the bundle's five-step verification contract (preconditions → smoke spawn → smoke probe → scale → observability), with the Prometheus double-scrape as the named green signal and flat restarts + unaffected host SSH as the negative side. Not-green fires
## debugfor one bounded iteration, then rollback.For URL routing see
doca-public-knowledge-map/SKILL.md;CAPABILITIES.md ## Public-source pointercarries the guide, NGC, and DPF URLs.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
The author says: Container-shaped DOCA service. On BlueField Arm it ships inside the BlueField OS image (upgradable from the NGC image); on an x86_64 or aarch64 host it runs from the NGC `-host` image under docker; under DPF it is a `DPUService` rendered from the NGC `doca-telemetry` helm chart. The version anchor is the container tag / chart version, not the host DOCA install. Never fabricate a tag or chart version — read it from the NGC page or `helm show values`.
Security
What our scanner noticed· Medium risk
- Large base64-encoded blobs
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- NVIDIA
- Publisher
- NVIDIA (Official)
- Source
- NVIDIA/skills · skills/doca-dts · commit fce3cca
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE-APACHE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by NVIDIA or NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download doca-dts.zip