DOCA UROM
Where to start: This skill assumes DOCA is already installed on
both the host and the BlueField, the DOCA UROM Service is
deployed and running on the BlueField side, and the user is doing
hands-on UROM work from the host side — i.e. using
doca-urom from an HPC / UCX / MPI stack on the host to enqueue
remote memory operations (puts, gets, atomics, active messages,
collective primitives) that the BlueField DPU will execute on the
host's behalf. Open TASKS.md if the user wants to
do something (configure / build / modify / run / test /
debug); open CAPABILITIES.md when the
question is what can the host-side UROM API express on this
version + this BlueField + this UROM Service version. If the
user has not installed DOCA yet, route to
doca-setup first; if the user is
asking about the DPU-side UROM Service itself (deployment,
container, operation lifecycle on the DPU side), that is a
DIFFERENT artifact — route via
doca-public-knowledge-map ## DOCA services
to the public DOCA UROM Service guide. This skill is the
host-side library; the UROM Service is the DPU-side
executor, and they are a paired contract.
Example questions this skill answers well
The CLASSES of UROM questions this skill is built to answer,
each with one worked example. The agent should treat the class
as the load-bearing piece — the worked example is a single
instance.
- "How do I offload my MPI / UCX remote memory operations from
the host CPU to the BlueField DPU?" — worked example: "my
MPI all-reduce is consuming host CPU cycles I'd rather use for
compute — how do I push that work onto the BlueField via
UROM?". Answered by the host-library-plus-DPU-service
paired-contract model in
CAPABILITIES.md ## Capabilities and modes
- the host-side bring-up workflow in
TASKS.md ## configure.
- "Is the DOCA UROM Service even running on my BlueField, and
why does that matter before I write any
doca_urom_* code?" —
worked example: "my first doca_urom_* call returns
DOCA_ERROR_NOT_PERMITTED on a host where DOCA is otherwise
healthy". Answered by the env-precondition matrix in
CAPABILITIES.md ## Safety policy
- "Is this UROM operation type / atomic / collective supported
on my device + this DOCA install + this UROM Service
version?" — worked example: "does my BlueField support
remote atomic Fetch-and-Add for an MPI window?". Answered by
the plugin-discovery rule (
doca_urom_service_get_plugins_list
on a started Service — UROM operations are plugin-defined
Command tasks, so the supported-plugins list is the
capability surface) in
CAPABILITIES.md ## Capabilities and modes
- the discovery step in
TASKS.md ## configure.
- "How does
doca-urom relate to doca-rdma — am I replacing
it, layering on top, or something else?" — worked example:
"I already have raw doca-rdma working; should I rewrite to
use UROM, or is that the wrong tool?". Answered by the
path-selection rule in
CAPABILITIES.md ## Capabilities and modes
(UROM uses the RDMA transport substrate underneath but adds
the DPU-offload contract on top, and is the right tool only
when host CPU is the bottleneck due to communication
overhead — small / simple point-to-point cases stay on
doca-rdma).
- "Is this UROM API on my installed DOCA version?" — worked
example: "is the collective-ops plugin discoverable via
doca_urom_service_get_plugins_list on DOCA 3.x". Answered by the version-compatibility overlay in
CAPABILITIES.md ## Version compatibility,
which cross-links the canonical detection chain in
doca-version and adds the
UROM-specific host library and DPU service versions must
match overlay.
- "What does this
DOCA_ERROR_* from a doca_urom_* call
mean and which layer caused it?" — worked example:
"DOCA_ERROR_NOT_PERMITTED on the first
doca_urom_* enqueue after doca_ctx_start() succeeded".
Answered by the UROM overlay on the cross-library taxonomy in
CAPABILITIES.md ## Error taxonomy
- the layered ladder in
TASKS.md ## debug that escalates to
doca-debug.
Audience
This skill serves external developers building HPC / UCX / MPI
applications that consume the DOCA UROM library from the host
side — i.e., users whose code calls doca_urom_* (directly in
C / C++, or through FFI / bindings from another language, or
through a UCX-based stack such as OpenMPI / MPICH that has been
wired to use DOCA UROM as a UCX transport) to push remote memory
operations onto the BlueField DPU instead of executing them on
the host CPU. It is not for NVIDIA developers contributing to
DOCA UROM itself, nor is it the place to learn how to deploy /
operate the DOCA UROM Service on the DPU side — that goes
through the public DOCA UROM Service guide via
doca-public-knowledge-map ## DOCA services.
Language scope. DOCA UROM ships as a host-side C library
with pkg-config module name doca-urom. The shipped samples
under /opt/mellanox/doca/samples/doca_urom/ are written in C
(NVIDIA's choice). C and C++ consumers — including UCX-based
stacks that wrap the library — are the canonical case and the
worked examples in TASKS.md assume that path. Other-language
consumers (Rust, Go, Python, …) consume the same *.so through
FFI or language-specific bindings; the skill's contribution in
that case is to keep the lifecycle, capability-discovery,
service-deployed-and-running, error-taxonomy, and
RDMA-substrate guidance language-neutral, and to route the agent
to the public C ABI as the authoritative surface that any
wrapper will eventually call.
When to load this skill
Load this skill when the user is doing hands-on DOCA UROM work
from the host side, in any language. Concretely:
- Initializing a UROM Service context (
doca_urom_service_*) on
a doca_dev that maps to the BlueField the user wants to
offload to, then creating Worker contexts
(doca_urom_worker_*) attached to that Service, and confirming
the matching DPU-side UROM Service is reachable before the
first enqueue.
- Enqueueing remote memory operations (puts, gets, atomics,
active messages, collective primitives) through the host-side
doca_urom_* API and progressing the DOCA progress engine
for completions.
- Reading or setting library properties via the host-side UROM
API and calling
doca_urom_service_get_plugins_list on a
started Service to discover which plugins (and therefore which
operation types / atomics / collectives, since these are
plugin-defined) this device + this DOCA install + this DPU-side
UROM Service version actually supports.
- Applying the host-side UROM lifecycle, capability-discovery,
and error rules to a UCX-based HPC stack (OpenMPI, MPICH,
custom UCX consumer) that is already wired to use UROM.
Designing the UCX transport integration itself remains
upstream-stack work.
- Debugging a
DOCA_ERROR_* returned from a doca_urom_* call
— in particular disambiguating DPU-side UROM Service not
reachable from operation type not supported on this device
from standard doca_dev access denied from underlying
RDMA transport failure.
- Designing or extending non-C bindings (Rust, Go, Python, …)
that wrap the UROM C ABI — for the lifecycle,
service-deployed-and-running, capability-discovery, and
error-taxonomy rules the wrapper must honor.
Do not load this skill for general DOCA orientation, install
of DOCA itself, deployment / operation of the DOCA UROM Service
on the DPU side (a separate artifact, with its own public guide
reachable via
doca-public-knowledge-map ## DOCA services),
or non-UROM library questions. For those, use
doca-public-knowledge-map.
What this skill provides
This is a thin loader. The body keeps only the orientation
needed to pick the right next file. The substantive
UROM-specific material lives in two companion files:
CAPABILITIES.md — what the host-side UROM API can express on
this version + this BlueField + this UROM Service version: the
paired-contract model (host library enqueues; DPU service
executes); the two host-side context types — the
doca_urom_service (one per BlueField, bound to its
doca_dev) and the doca_urom_worker contexts attached to it;
the enqueue-side operation surface (puts, gets, atomics, active
messages, collective primitives) delivered as plugin-defined
Worker Command tasks and named generically because exact
symbol shapes are plugin- and install-bound; the
plugin-discovery surface (doca_urom_service_get_plugins_list);
the UROM error taxonomy mapped onto the cross-library DOCA_ERROR_* set;
the observability surface (completion events on the DOCA
progress engine, capability snapshots, infrastructure-side
RDMA counters); and the safety policy that gates env
preconditions (DOCA UROM Service deployed and running on the
DPU side; host library and DPU service versions agreeing; an
RDMA-capable BlueField + DOCA install).
TASKS.md — step-by-step workflows for the six in-scope UROM
verbs: configure, build, modify, run, test,
debug. Plus a Deferred task verbs block that points
out-of-scope questions at the right next skill.
The skill assumes a host + BlueField pair where DOCA is already
installed at the standard location, the DOCA UROM Service is
already deployed and running on the BlueField, the underlying
RDMA transport between host and BlueField is healthy, and the
user already has at least a sketch of the HPC / UCX / MPI stack
they want to offload. It does not cover installing DOCA,
deploying the UROM Service container on the BlueField, or
bringing up RDMA / RoCE / IB transport between host and
BlueField — those paths go through
doca-setup, the public DOCA
UROM Service guide, and doca-rdma
respectively.
What this skill deliberately does not ship
This skill is agent guidance, not a samples or templates
bundle. To keep the boundary clean, it deliberately does not
contain — and pull requests should not add:
- Pre-written DOCA UROM application source code, in any
language. The verified UROM source code is the shipped C
samples at
/opt/mellanox/doca/samples/doca_urom/. The
agent's job is to route the user to those files and prescribe
a minimum-diff modification on them via the universal
modify-a-sample workflow in
doca-programming-guide,
layered with the UROM-specific overrides in
TASKS.md ## modify.
- An MPI / UCX algorithm or collective implementation. This
library offloads remote memory operations; the algorithm
selecting which puts / gets / atomics / collectives to issue
for a given MPI primitive is the user's HPC stack (OpenMPI,
MPICH, custom UCX consumer) or the user's domain expertise.
The agent must refuse to invent collective algorithms and
must route any "what algorithm should my all-reduce use"
question to the upstream MPI / UCX documentation — that is a
research / stack-design question, not a UROM API question.
- Standalone build manifests (
meson.build,
CMakeLists.txt, Cargo.toml, …) parked inside the skill.
The agent constructs the build manifest in the user's
project directory against the user's installed DOCA, where
pkg-config --modversion doca-urom is the source of truth.
- A
samples/, bindings/, or reference/ subtree of any
kind. A mock or incomplete artifact in this skill's tree,
even one labeled "reference", is misleading: users will read
it as buildable.
- The DOCA UROM Service surface. That service is a
separate artifact with its own public guide; routing for
its deployment / operation lives in
doca-public-knowledge-map ## DOCA services.
Conflating the library (this skill, host-side enqueue) with
the service (DPU-side executor) is the single most common
UROM first-app design error.
Loading order
- Read this
SKILL.md first to confirm the user's question is
in scope (host-side library work; not DPU-side service
deployment, and not MPI / UCX algorithm design).
- For the UROM capability matrix, the paired-contract model
(host library + DPU service), the Service + Worker context
model, the enqueue-side operation surface, the
plugin-discovery rule, the env-precondition policy, the
error taxonomy, the observability surface, and the safety
policy, see CAPABILITIES.md.
- For step-by-step workflows — configure, build, modify,
run, test, debug — see TASKS.md.
Both companion files cross-link to each other,
doca-version for the canonical
DOCA version-handling rules (with the UROM overlay that the
host library version and the DPU service version must match),
doca-rdma for the underlying RDMA
transport substrate UROM offloads ride on top of, and
doca-public-knowledge-map
whenever the right answer is "look it up in the public DOCA
UROM library guide, the public DOCA UROM Service guide, or in
the on-disk install layout" rather than "UROM
host-side-specific guidance".
Related skills
doca-public-knowledge-map —
the routing table for every public DOCA documentation source
and the on-disk layout of an installed DOCA package. The
DOCA UROM library public guide is at
https://docs.nvidia.com/doca/sdk/DOCA-UROM/index.html; the
DOCA UROM Service is a different artifact documented
separately under the DOCA services section of that map.
doca-rdma — the underlying RDMA
transport substrate the BlueField uses to actually move
bytes between nodes once UROM has offloaded a remote memory
operation. UROM does NOT replace RDMA; it adds the
DPU-offload contract on top so the host CPU does not have to
post the verbs itself. When the user's intent is simple
point-to-point RDMA and the host CPU is not the bottleneck,
the right tool is doca-rdma directly — UROM adds the
service-side contract that isn't worth its overhead for that
case.
doca-setup — env preparation,
install verification, BlueField setup, and the I have no
install yet path with the public NGC DOCA container. This
skill assumes its preconditions are satisfied AND that the
DPU-side UROM Service is deployed and running on the
BlueField.
doca-version — canonical
DOCA version-handling rules. This skill's ## Version compatibility cross-links the four-way match rule and adds
the UROM-specific host library and DPU service must agree on
version overlay.
doca-structured-tools-contract —
the bundle's structured-tools precedence rule (detect /
prefer / fall back / report). The Command appendix in
TASKS.md honors this contract.
doca-programming-guide —
general DOCA programming patterns shared by every library:
the canonical pkg-config + meson build pattern, the
universal modify-a-shipped-sample first-app workflow, the
universal Core-context lifecycle, the cross-library
DOCA_ERROR_* taxonomy, and the program-side debug order.
This skill layers UROM specifics on top.
doca-debug — the cross-cutting
debug ladder (install / version / build / link / runtime /
program / driver). UROM-specific debug (DPU-side UROM
Service not running / not reachable, host library + DPU
service version skew, RDMA transport failure underneath the
UROM offload, operation type not in this device + firmware +
service version) overlays on top of that ladder.
The DOCA UROM Service that runs on the DPU side is
deliberately not in scope for this skill — it is a separate
artifact with its own public guide, reachable through
doca-public-knowledge-map ## DOCA services.
Conflating the library and the service is the single most
common UROM first-app design error: the agent must surface the
library / service split explicitly whenever the question
straddles the two.
1---2name: doca-urom3description: Use this skill when the user is doing hands-on DOCA UROM library work from the host side — wiring doca-urom under an HPC / UCX / MPI stack to OFFLOAD remote memory operations (puts, gets, atomics, collectives) onto a BlueField DPU, creating a UROM Service context (doca_urom_service_*) and Worker contexts (doca_urom_worker_*) that run plugins on the DPU, discovering plugins via doca_urom_service_get_plugins_list, progressing completions, or debugging DOCA_ERROR_* from a doca_urom_* call. Trigger even without "DOCA UROM": "MPI all-reduce burning host CPU", "push UCX traffic onto the BlueField", "first doca_urom call returns NOT_PERMITTED", or "host library and DPU service look out of sync". Route elsewhere for UROM Service deployment on the DPU side, MPI / UCX collective algorithm design, and RDMA / RoCE / IB substrate bring-up.4license: Apache-2.05---67# DOCA UROM89**Where to start:** This skill assumes DOCA is already installed on10both the host and the BlueField, the DOCA UROM Service is11deployed and running on the BlueField side, and the user is doing12**hands-on UROM work from the host side** — i.e. using13`doca-urom` from an HPC / UCX / MPI stack on the host to enqueue14remote memory operations (puts, gets, atomics, active messages,15collective primitives) that the BlueField DPU will execute on the16host's behalf. Open [`TASKS.md`](TASKS.md) if the user wants to17*do* something (configure / build / modify / run / test /18debug); open [`CAPABILITIES.md`](CAPABILITIES.md) when the19question is *what can the host-side UROM API express* on this20version + this BlueField + this UROM Service version. If the21user has not installed DOCA yet, route to22[`doca-setup`](../../doca-setup/SKILL.md) first; if the user is23asking about the **DPU-side UROM Service** itself (deployment,24container, operation lifecycle on the DPU side), that is a25DIFFERENT artifact — route via26[`doca-public-knowledge-map ## DOCA services`](../../doca-public-knowledge-map/SKILL.md#doca-services)27to the public *DOCA UROM Service* guide. This skill is the28**host-side library**; the UROM Service is the **DPU-side29executor**, and they are a paired contract.3031## Example questions this skill answers well3233The CLASSES of UROM questions this skill is built to answer,34each with one worked example. The agent should treat the *class*35as the load-bearing piece — the worked example is a single36instance.3738- **"How do I offload my MPI / UCX remote memory operations from39 the host CPU to the BlueField DPU?"** — worked example: *"my40 MPI all-reduce is consuming host CPU cycles I'd rather use for41 compute — how do I push that work onto the BlueField via42 UROM?"*. Answered by the host-library-plus-DPU-service43 paired-contract model in44 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)45 + the host-side bring-up workflow in46 [`TASKS.md ## configure`](TASKS.md#configure).47- **"Is the DOCA UROM Service even running on my BlueField, and48 why does that matter before I write any `doca_urom_*` code?"** —49 worked example: *"my first `doca_urom_*` call returns50 `DOCA_ERROR_NOT_PERMITTED` on a host where DOCA is otherwise51 healthy"*. Answered by the env-precondition matrix in52 [`CAPABILITIES.md ## Safety policy`](CAPABILITIES.md#safety-policy)53 + the service-deployed-and-running check in54 [`TASKS.md ## configure`](TASKS.md#configure) step 1, which55 routes service-side env questions to56 [`doca-public-knowledge-map ## DOCA services`](../../doca-public-knowledge-map/SKILL.md#doca-services).57- **"Is this UROM operation type / atomic / collective supported58 on my device + this DOCA install + this UROM Service59 version?"** — worked example: *"does my BlueField support60 remote atomic Fetch-and-Add for an MPI window?"*. Answered by61 the plugin-discovery rule (`doca_urom_service_get_plugins_list`62 on a started Service — UROM operations are plugin-defined63 Command tasks, so the supported-plugins list is the64 capability surface) in65 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)66 + the discovery step in67 [`TASKS.md ## configure`](TASKS.md#configure).68- **"How does `doca-urom` relate to `doca-rdma` — am I replacing69 it, layering on top, or something else?"** — worked example:70 *"I already have raw `doca-rdma` working; should I rewrite to71 use UROM, or is that the wrong tool?"*. Answered by the72 path-selection rule in73 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)74 (UROM uses the RDMA transport substrate underneath but adds75 the DPU-offload contract on top, and is the right tool only76 when host CPU is the bottleneck due to communication77 overhead — small / simple point-to-point cases stay on78 `doca-rdma`).79- **"Is this UROM API on my installed DOCA version?"** — worked80 example: *"is the collective-ops plugin discoverable via81 `doca_urom_service_get_plugins_list` on DOCA 3.x"*. Answered by the version-compatibility overlay in82 [`CAPABILITIES.md ## Version compatibility`](CAPABILITIES.md#version-compatibility),83 which cross-links the canonical detection chain in84 [`doca-version`](../../doca-version/SKILL.md) and adds the85 UROM-specific *host library and DPU service versions must86 match* overlay.87- **"What does this `DOCA_ERROR_*` from a `doca_urom_*` call88 mean and which layer caused it?"** — worked example:89 *"`DOCA_ERROR_NOT_PERMITTED` on the first90 `doca_urom_*` enqueue after `doca_ctx_start()` succeeded"*.91 Answered by the UROM overlay on the cross-library taxonomy in92 [`CAPABILITIES.md ## Error taxonomy`](CAPABILITIES.md#error-taxonomy)93 + the layered ladder in94 [`TASKS.md ## debug`](TASKS.md#debug) that escalates to95 [`doca-debug`](../../doca-debug/SKILL.md).9697## Audience9899This skill serves **external developers building HPC / UCX / MPI100applications that consume the DOCA UROM library from the host101side** — i.e., users whose code calls `doca_urom_*` (directly in102C / C++, or through FFI / bindings from another language, or103through a UCX-based stack such as OpenMPI / MPICH that has been104wired to use DOCA UROM as a UCX transport) to push remote memory105operations onto the BlueField DPU instead of executing them on106the host CPU. It is *not* for NVIDIA developers contributing to107DOCA UROM itself, nor is it the place to learn how to **deploy /108operate the DOCA UROM Service** on the DPU side — that goes109through the public *DOCA UROM Service* guide via110[`doca-public-knowledge-map ## DOCA services`](../../doca-public-knowledge-map/SKILL.md#doca-services).111112**Language scope.** DOCA UROM ships as a host-side C library113with `pkg-config` module name `doca-urom`. The shipped samples114under `/opt/mellanox/doca/samples/doca_urom/` are written in C115(NVIDIA's choice). C and C++ consumers — including UCX-based116stacks that wrap the library — are the canonical case and the117worked examples in `TASKS.md` assume that path. Other-language118consumers (Rust, Go, Python, …) consume the same `*.so` through119FFI or language-specific bindings; the skill's contribution in120that case is to keep the lifecycle, capability-discovery,121service-deployed-and-running, error-taxonomy, and122RDMA-substrate guidance language-neutral, and to route the agent123to the public C ABI as the authoritative surface that any124wrapper will eventually call.125126## When to load this skill127128Load this skill when the user is doing hands-on DOCA UROM work129**from the host side**, in any language. Concretely:130131- Initializing a UROM Service context (`doca_urom_service_*`) on132 a `doca_dev` that maps to the BlueField the user wants to133 offload to, then creating Worker contexts134 (`doca_urom_worker_*`) attached to that Service, and confirming135 the matching DPU-side UROM Service is reachable before the136 first enqueue.137- Enqueueing remote memory operations (puts, gets, atomics,138 active messages, collective primitives) through the host-side139 `doca_urom_*` API and progressing the DOCA progress engine140 for completions.141- Reading or setting library properties via the host-side UROM142 API and calling `doca_urom_service_get_plugins_list` on a143 started Service to discover which plugins (and therefore which144 operation types / atomics / collectives, since these are145 plugin-defined) this device + this DOCA install + this DPU-side146 UROM Service version actually supports.147- Applying the host-side UROM lifecycle, capability-discovery,148 and error rules to a UCX-based HPC stack (OpenMPI, MPICH,149 custom UCX consumer) that is already wired to use UROM.150 Designing the UCX transport integration itself remains151 upstream-stack work.152- Debugging a `DOCA_ERROR_*` returned from a `doca_urom_*` call153 — in particular disambiguating *DPU-side UROM Service not154 reachable* from *operation type not supported on this device*155 from *standard `doca_dev` access denied* from *underlying156 RDMA transport failure*.157- Designing or extending non-C bindings (Rust, Go, Python, …)158 that wrap the UROM C ABI — for the lifecycle,159 service-deployed-and-running, capability-discovery, and160 error-taxonomy rules the wrapper must honor.161162Do **not** load this skill for general DOCA orientation, install163of DOCA itself, deployment / operation of the DOCA UROM Service164on the DPU side (a separate artifact, with its own public guide165reachable via166[`doca-public-knowledge-map ## DOCA services`](../../doca-public-knowledge-map/SKILL.md#doca-services)),167or non-UROM library questions. For those, use168[`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md).169170## What this skill provides171172This is a **thin loader**. The body keeps only the orientation173needed to pick the right next file. The substantive174UROM-specific material lives in two companion files:175176- `CAPABILITIES.md` — what the host-side UROM API can express on177 this version + this BlueField + this UROM Service version: the178 paired-contract model (host library enqueues; DPU service179 executes); the two host-side context types — the180 `doca_urom_service` (one per BlueField, bound to its181 `doca_dev`) and the `doca_urom_worker` contexts attached to it;182 the enqueue-side operation surface (puts, gets, atomics, active183 messages, collective primitives) delivered as plugin-defined184 Worker Command tasks and named generically because exact185 symbol shapes are plugin- and install-bound; the186 plugin-discovery surface (`doca_urom_service_get_plugins_list`);187 the UROM error taxonomy mapped onto the cross-library `DOCA_ERROR_*` set;188 the observability surface (completion events on the DOCA189 progress engine, capability snapshots, infrastructure-side190 RDMA counters); and the safety policy that gates env191 preconditions (DOCA UROM Service deployed and running on the192 DPU side; host library and DPU service versions agreeing; an193 RDMA-capable BlueField + DOCA install).194- `TASKS.md` — step-by-step workflows for the six in-scope UROM195 verbs: `configure`, `build`, `modify`, `run`, `test`,196 `debug`. Plus a `Deferred task verbs` block that points197 out-of-scope questions at the right next skill.198199The skill assumes a host + BlueField pair where DOCA is already200installed at the standard location, the DOCA UROM Service is201already deployed and running on the BlueField, the underlying202RDMA transport between host and BlueField is healthy, and the203user already has at least a sketch of the HPC / UCX / MPI stack204they want to offload. It does not cover installing DOCA,205deploying the UROM Service container on the BlueField, or206bringing up RDMA / RoCE / IB transport between host and207BlueField — those paths go through208[`doca-setup`](../../doca-setup/SKILL.md), the public *DOCA209UROM Service* guide, and [`doca-rdma`](../doca-rdma/SKILL.md)210respectively.211212## What this skill deliberately does not ship213214This skill is **agent guidance**, not a samples or templates215bundle. To keep the boundary clean, it deliberately does not216contain — and pull requests should not add:217218- **Pre-written DOCA UROM application source code, in any219 language.** The verified UROM source code is the shipped C220 samples at `/opt/mellanox/doca/samples/doca_urom/`. The221 agent's job is to route the user to those files and prescribe222 a minimum-diff modification on them via the universal223 modify-a-sample workflow in224 [`doca-programming-guide`](../../doca-programming-guide/SKILL.md),225 layered with the UROM-specific overrides in226 [`TASKS.md ## modify`](TASKS.md#modify).227- **An MPI / UCX algorithm or collective implementation.** This228 library *offloads* remote memory operations; the algorithm229 selecting which puts / gets / atomics / collectives to issue230 for a given MPI primitive is the user's HPC stack (OpenMPI,231 MPICH, custom UCX consumer) or the user's domain expertise.232 The agent must refuse to invent collective algorithms and233 must route any *"what algorithm should my all-reduce use"*234 question to the upstream MPI / UCX documentation — that is a235 research / stack-design question, not a UROM API question.236- **Standalone build manifests** (`meson.build`,237 `CMakeLists.txt`, `Cargo.toml`, …) parked inside the skill.238 The agent constructs the build manifest *in the user's239 project directory* against the user's installed DOCA, where240 `pkg-config --modversion doca-urom` is the source of truth.241- **A `samples/`, `bindings/`, or `reference/` subtree** of any242 kind. A mock or incomplete artifact in this skill's tree,243 even one labeled "reference", is misleading: users will read244 it as buildable.245- **The DOCA UROM Service surface.** That service is a246 *separate artifact* with its own public guide; routing for247 its deployment / operation lives in248 [`doca-public-knowledge-map ## DOCA services`](../../doca-public-knowledge-map/SKILL.md#doca-services).249 Conflating the library (this skill, host-side enqueue) with250 the service (DPU-side executor) is the single most common251 UROM first-app design error.252253## Loading order2542551. Read this `SKILL.md` first to confirm the user's question is256 in scope (host-side library work; not DPU-side service257 deployment, and not MPI / UCX algorithm design).2582. **For the UROM capability matrix, the paired-contract model259 (host library + DPU service), the Service + Worker context260 model, the enqueue-side operation surface, the261 plugin-discovery rule, the env-precondition policy, the262 error taxonomy, the observability surface, and the safety263 policy, see [CAPABILITIES.md](CAPABILITIES.md).**2643. **For step-by-step workflows — configure, build, modify,265 run, test, debug — see [TASKS.md](TASKS.md).**266267Both companion files cross-link to each other,268[`doca-version`](../../doca-version/SKILL.md) for the canonical269DOCA version-handling rules (with the UROM overlay that the270host library version and the DPU service version must match),271[`doca-rdma`](../doca-rdma/SKILL.md) for the underlying RDMA272transport substrate UROM offloads ride on top of, and273[`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md)274whenever the right answer is "look it up in the public DOCA275UROM library guide, the public DOCA UROM Service guide, or in276the on-disk install layout" rather than "UROM277host-side-specific guidance".278279## Related skills280281- [`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md) —282 the routing table for every public DOCA documentation source283 and the on-disk layout of an installed DOCA package. The284 DOCA UROM library public guide is at285 <https://docs.nvidia.com/doca/sdk/DOCA-UROM/index.html>; the286 DOCA UROM Service is a *different artifact* documented287 separately under the *DOCA services* section of that map.288- [`doca-rdma`](../doca-rdma/SKILL.md) — the underlying RDMA289 transport substrate the BlueField uses to actually move290 bytes between nodes once UROM has offloaded a remote memory291 operation. UROM does NOT replace RDMA; it adds the292 DPU-offload contract on top so the host CPU does not have to293 post the verbs itself. When the user's intent is simple294 point-to-point RDMA and the host CPU is not the bottleneck,295 the right tool is `doca-rdma` directly — UROM adds the296 service-side contract that isn't worth its overhead for that297 case.298- [`doca-setup`](../../doca-setup/SKILL.md) — env preparation,299 install verification, BlueField setup, and the *I have no300 install yet* path with the public NGC DOCA container. This301 skill assumes its preconditions are satisfied AND that the302 DPU-side UROM Service is deployed and running on the303 BlueField.304- [`doca-version`](../../doca-version/SKILL.md) — canonical305 DOCA version-handling rules. This skill's `## Version306 compatibility` cross-links the four-way match rule and adds307 the UROM-specific *host library and DPU service must agree on308 version* overlay.309- [`doca-structured-tools-contract`](../../doca-structured-tools-contract/SKILL.md) —310 the bundle's structured-tools precedence rule (detect /311 prefer / fall back / report). The Command appendix in312 [TASKS.md](TASKS.md) honors this contract.313- [`doca-programming-guide`](../../doca-programming-guide/SKILL.md) —314 general DOCA programming patterns shared by every library:315 the canonical `pkg-config` + meson build pattern, the316 universal modify-a-shipped-sample first-app workflow, the317 universal Core-context lifecycle, the cross-library318 `DOCA_ERROR_*` taxonomy, and the program-side debug order.319 This skill layers UROM specifics on top.320- [`doca-debug`](../../doca-debug/SKILL.md) — the cross-cutting321 debug ladder (install / version / build / link / runtime /322 program / driver). UROM-specific debug (DPU-side UROM323 Service not running / not reachable, host library + DPU324 service version skew, RDMA transport failure underneath the325 UROM offload, operation type not in this device + firmware +326 service version) overlays on top of that ladder.327328The **DOCA UROM Service** that runs on the DPU side is329deliberately **not in scope** for this skill — it is a separate330artifact with its own public guide, reachable through331[`doca-public-knowledge-map ## DOCA services`](../../doca-public-knowledge-map/SKILL.md#doca-services).332Conflating the library and the service is the single most333common UROM first-app design error: the agent must surface the334library / service split explicitly whenever the question335straddles the two.