DOCA Verbs
STOP — most RDMA tasks do NOT belong here
If the task is general RDMA data movement (send / receive / read /
write / atomic between endpoints) and the user did not name a
specific raw QP / CQ / work-request / SRQ / Address-Handle attribute
that the higher-level API genuinely cannot express, this skill is
out of scope. Route to doca-rdma and
follow its non-negotiable: the deliverable links libdoca_rdma and
calls doca_rdma_*.
Loading this raw-verbs skill is never a license to hand-roll
libibverbs / librdmacm. "Raw verbs is fewer lines" or "the high-level
binding is more work" is not a reason. A general-RDMA deliverable
whose ldd shows no libdoca_rdma is a failed task — exactly the
same rule doca-rdma enforces. Raw doca_verbs_*
is in scope only for the narrow attribute-level needs enumerated below;
everything else climbs back up to the matching higher-level library.
Where to start: This skill is the raw-verbs escape hatch
beneath the higher-level DOCA libraries (doca-rdma
for RDMA workloads, doca-eth for Ethernet
queues, doca-rmax for timing-precise
media). The agent's first job, before anything else, is to confirm
the user actually needs to drop down — most users do not, and the
right answer is almost always "stay in the higher-level library".
Open CAPABILITIES.md when the question is
what does the verbs surface actually expose and where is the
boundary with vanilla libibverbs; open TASKS.md when
the user has already confirmed they need raw verbs and wants the
configure / build / modify / run / test / debug workflow for them.
If the user has not installed DOCA yet, route to
doca-setup first.
The decision this skill exists to gate
The single load-bearing decision every conversation that loads this
skill must make, FIRST, before any code-level discussion:
- Has the user confirmed that the matching higher-level DOCA
library does not expose the semantic they need? If no — stop
here, route back to the matching higher-level library:
doca-rdma for general RDMA work
(Send / Receive / Read / Write / Atomic / Sync-Event task
patterns); doca-eth for Ethernet TX /
RX queue patterns; doca-rmax for
timing-precise media / data-over-IP streaming. The most common
baseline-agent failure for raw verbs is recommending them
unnecessarily because the user said the word "verbs" or "QP"
without checking whether the higher-level surface already covers
their case.
- Is the semantic the user needs a specific verb / opcode /
work-request flag / QP attribute / SRQ option that the matching
higher-level library genuinely does not expose? Examples: a
specific raw WR flag the
doca_rdma_task_* abstractions do not
surface; custom completion-queue handling beyond what the DOCA
progress engine exposes; an esoteric QP attribute (path MTU,
PSN tuning, ECE attributes); explicit SRQ control; congestion-
control group (doca_verbs_cc_group_*) attachment to QPs;
Address-Handle attribute tuning (DGID / DLID / SL / SGID index /
hop limit / traffic class / UDP source port). If yes — this
skill is in scope.
- Is the user porting existing libibverbs code into the DOCA
Core model? This skill is in scope, AND the agent must teach
the porting path (replace libibverbs handles with
doca_verbs_*
handles, integrate with the DOCA Core lifecycle through
doca_verbs_context_create, drive completions via the DOCA
progress engine instead of polling CQ directly) rather than
recommend a mechanical 1:1 textual replacement.
If none of (1)-(3) apply, the answer to "should I use
doca-verbs?" is no. Route the user back to the matching
higher-level DOCA library. This is by design: a correctly-loaded
raw-verbs skill that talks the user out of raw verbs is doing its
job.
Example questions this skill answers well
The CLASSES of raw-verbs 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.
- "Should I drop to
doca-verbs for this?" — worked example:
"I want to set a specific raw work-request flag and the
doca_rdma_task_* abstraction does not expose it". Answered by
the path-selection rule in
CAPABILITIES.md ## Capabilities and modes
higher-level-vs-doca-verbs table + the climb back up step in
TASKS.md ## configure.
- "How is
doca-verbs different from libibverbs?" — worked
example: "I have existing ibv_* code; can I just keep using
it and call doca_* next to it?". Answered by the
libibverbs-vs-doca-verbs boundary rule in
CAPABILITIES.md ## Safety policy
- the porting workflow in
TASKS.md ## modify.
- "Is this raw verb / opcode / QP option / SRQ feature
supported on my device + DOCA version?" — worked example:
"does this device advertise the QP feature my raw WR needs".
Answered by the capability-query rule
(
doca_verbs_query_device + the
doca_verbs_device_attr_get_* family) in
CAPABILITIES.md ## Capabilities and modes
- the discovery step in
TASKS.md ## configure.
- "I'm porting libibverbs code into the DOCA Core model — what
does the agent walk me through?" — worked example: "I have a
small libibverbs sender/receiver that uses
IBV_SEND_INLINE on
a custom QP attribute, and I want it to live inside a DOCA Core
context". Answered by the porting overlay in
TASKS.md ## modify +
CAPABILITIES.md ## Safety policy
no-mixing rule.
- "What does this
DOCA_ERROR_* from a raw-verbs call mean?" —
worked example: "DOCA_ERROR_IO_FAILED from a WR submission —
what do I look at?". Answered by the verbs overlay on the
cross-library taxonomy in
CAPABILITIES.md ## Error taxonomy
(which sends the agent to inspect the completion-queue entry,
not the submit return value) + the layered ladder in
TASKS.md ## debug.
- "When do I climb back up from
doca-verbs to the matching
higher-level library?" — worked example: "my raw-verbs
prototype works; do I keep it or refactor onto doca-rdma?".
Answered by the climb-back rule in
CAPABILITIES.md ## Capabilities and modes
(raw verbs is a targeted surface, not a default; once the
specific need is covered, the higher-level surface is the
long-term home).
Audience
This skill serves external developers building applications that
consume the DOCA Verbs library — i.e., users whose code calls
doca_verbs_* (directly in C/C++, or through FFI/bindings from
another language) for raw QP / CQ / PD / MR / SRQ / Address-Handle
/ Ethernet-SQ / Ethernet-RQ control inside a DOCA Core context. It
is not for NVIDIA developers contributing to DOCA Verbs itself,
and it is not the right entry point for general DOCA RDMA / Eth
/ RMAX work — that belongs in the matching higher-level library
skill.
Language scope
DOCA Verbs ships as a C library with pkg-config module name
doca-verbs. The public headers live under the installed DOCA
infrastructure tree
($(pkg-config --variable=includedir doca-common) doca_verbs.h and the
adjacent doca_verbs_*.h family); per the
headers-win-over-docs rule in
doca-version, the headers on the
user's install are the authoritative truth for the live symbol
surface. C and C++ consumers are the canonical case; 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 drop-down decision, libibverbs boundary,
cap-query rule, lifecycle in verbs terms, and error-handling
rule 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 ONLY after the user (or the agent on the user's
behalf) has confirmed the matching higher-level DOCA library does
not expose the semantic they need. Concretely:
- The user explicitly asks "do I need to drop to
doca-verbs for
this?" — load this skill to answer, but expect the answer to be
"no, stay in the higher-level library" unless the user can
name the specific verb / opcode / option the higher-level library
does not surface.
- The user wants a specific raw WR flag, raw QP option, SRQ
feature, custom CQ-handling pattern, or congestion-control group
attachment that the higher-level library does not expose.
- The user is porting existing libibverbs code into the DOCA Core
model and needs the integration path (lifecycle, progress engine,
no-mixing rule).
- A
DOCA_ERROR_* returned from a doca_verbs_* call needs
diagnosis — including the IO_FAILED case where the answer lives
on the completion-queue entry, not the submit return.
- Designing or extending non-C bindings (Rust, Go, Python, …) that
wrap the verbs C ABI — for the boundary, lifecycle, and
cap-query rules the wrapper must honor.
Do not load this skill for: general DOCA RDMA work (use
doca-rdma); general DOCA Ethernet
queueing (use doca-eth); timing-precise
media / data-over-IP streaming (use
doca-rmax); use cases a different
higher-level DOCA library covers (doca-flow
for steering, the storage-transport library for NVMe-oF — routed via
doca-public-knowledge-map);
install of DOCA itself (use
doca-setup); or general DOCA
orientation (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 raw-verbs
material lives in two companion files:
CAPABILITIES.md — what doca-verbs can express on this
version: the higher-level-library-vs-doca-verbs selection table,
the libibverbs-vs-doca-verbs boundary, the verbs object model
(doca_verbs_context + QP / CQ / PD / MR / SRQ /
Address-Handle / Completion-Channel / Ethernet-SQ / Ethernet-RQ /
CC-group) inside DOCA Core, the capability-query surface
(doca_verbs_query_device + doca_verbs_device_attr_get_*),
the raw-verbs error taxonomy (mapped onto the cross-library
DOCA_ERROR_* set, with the IO_FAILED → completion-queue-entry
overlay), the observability surface (DOCA progress engine vs
manual CQ polling vs comp-channel event delivery), and the
safety policy that gates the no-mixing-with-libibverbs rule.
TASKS.md — step-by-step workflows for the six in-scope verbs:
configure, build, modify, run, test, debug. Plus a
Deferred task verbs block that points out-of-scope questions
at the right next skill. Every workflow assumes the drop-down
decision in this SKILL.md has already been made; the
## configure step always begins by re-confirming it.
The skill assumes a host or BlueField where DOCA is already
installed at the standard location and the user has the privileges
their public install profile expects (the RDMA stack on host with
proper module loads, same as
doca-rdma). It does not cover
installing DOCA — that path goes through
doca-setup.
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 Verbs application source code, in any
language. The verified verbs source code is the shipped C
samples on the user's install (path discoverable via
ls /opt/mellanox/doca/samples/); 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 verbs-specific overrides in
TASKS.md ## modify.
- 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-verbs
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.
- A migration script from libibverbs to
doca-verbs. The
porting path is judgment, not a mechanical textual
replacement — see
TASKS.md ## modify for why.
Loading order
- Read this
SKILL.md first to confirm the user's question is in
scope — i.e., to walk the drop-down decision above.
- For the higher-level-library-vs-doca-verbs split, the
libibverbs-vs-doca-verbs boundary, the verbs object model,
capability discovery, error taxonomy, observability, and
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, the matching
higher-level libraries
(doca-rdma,
doca-eth,
doca-rmax) as the climb-back homes,
doca-common for the foundation
primitives every verbs context rests on (doca_dev /
doca_pe / doca_ctx),
doca-version for the canonical
version-handling rules, and
doca-public-knowledge-map
whenever the right answer is "look it up in the public docs or the
installed package layout" rather than "verbs-specific guidance".
Related skills
doca-rdma — the canonical higher-level
DOCA RDMA library and the home this skill routes most RDMA users
back to. Every conversation that loads doca-verbs for an
RDMA-class question should also have doca-rdma loaded so the
climb-back-up answer is immediate when the raw-verbs need turns
out to be coverable there.
doca-eth — the canonical higher-level
DOCA Ethernet queue library. doca-verbs also exposes
Ethernet-side SQ / RQ verbs (doca_verbs_eth_sq_*,
doca_verbs_eth_rq_*); when the user has confirmed the
higher-level doca-eth does not expose the option they need
(e.g., explicit TS-source-type tuning, plane-index pinning,
multi-pkt-send-WQE), this skill takes over.
doca-rmax — the canonical higher-level
DOCA Rivermax library for timing-precise media. Most Rivermax
cases should stay in doca-rmax; raw verbs is the escape hatch
for the rare media use case where the user needs a verb the
Rivermax integration does not expose.
doca-common — the foundation library
every DOCA context (including doca_verbs_context) rests on.
The doca_dev / doca_pe / doca_ctx primitives, the
capability-query rule against the active doca_devinfo, and
the lifecycle are owned there; this skill layers verbs-specific
patterns on top.
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
Verbs public guide is listed there; this skill does not
duplicate the URL.
doca-setup — env preparation,
install verification, and the I have no install yet path
with the public NGC DOCA container. This skill assumes its
preconditions are satisfied.
doca-version — canonical DOCA
version-handling rules. This skill's ## Version compatibility
cross-links the four-way match rule (with doca-verbs.pc joining
the match set) and the cap-query-is-runtime-authority rule.
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
lifecycle, the cross-library DOCA_ERROR_* taxonomy, and the
program-side debug order. This skill layers raw-verbs specifics
on top.
doca-debug — the cross-cutting
debug ladder (install / version / build / link / runtime /
program / driver). Raw-verbs-specific debug (completion-entry
inspection, no-mixing-with-libibverbs, lifecycle in verbs terms)
overlays on top of that ladder.
doca-hardware-safety —
the cross-cutting hardware-safety meta-policy this skill's
## Safety policy overlays.
1---2name: doca-verbs3description: Use this skill when the user is dropping below the higher-level DOCA libraries (doca-rdma / doca-eth / doca-rmax) into the raw-verbs escape hatch — managing QP / CQ / PD / MR / SRQ / AH / CC-group / Ethernet-SQ-RQ primitives inside DOCA Core, porting libibverbs code into the DOCA Core model, capability-querying a specific verb / opcode / WR flag / QP attribute via doca_verbs_query_device, or debugging DOCA_ERROR_* from doca_verbs_* calls. Trigger even when the user does not say "doca-verbs" — implicit phrasings include "raw QP attribute the task API doesn't expose", "keep my ibv_* code next to doca_* on the same QP", "IO_FAILED on WR submit", "QP state transition rejected", "attach a congestion- control group", or "porting my libibverbs code". The skill's first job is to route MOST users back UP to the higher-level library. Refuse and route elsewhere for general doca-rdma / doca-eth / doca-rmax workloads, DOCA install, Core internals, and general libibverbs theory — those belong to other skills.4license: Apache-2.05---67# DOCA Verbs89## STOP — most RDMA tasks do NOT belong here1011If the task is general RDMA **data movement** (send / receive / read /12write / atomic between endpoints) and the user did **not** name a13specific raw QP / CQ / work-request / SRQ / Address-Handle attribute14that the higher-level API genuinely cannot express, this skill is15**out of scope**. Route to [`doca-rdma`](../doca-rdma/SKILL.md) and16follow its non-negotiable: the deliverable **links `libdoca_rdma` and17calls `doca_rdma_*`**.1819Loading this raw-verbs skill is **never** a license to hand-roll20`libibverbs` / `librdmacm`. "Raw verbs is fewer lines" or "the high-level21binding is more work" is **not** a reason. A general-RDMA deliverable22whose `ldd` shows no `libdoca_rdma` is a **failed task** — exactly the23same rule [`doca-rdma`](../doca-rdma/SKILL.md) enforces. Raw `doca_verbs_*`24is in scope only for the narrow attribute-level needs enumerated below;25everything else climbs back up to the matching higher-level library.2627**Where to start:** This skill is the **raw-verbs escape hatch28beneath the higher-level DOCA libraries** ([`doca-rdma`](../doca-rdma/SKILL.md)29for RDMA workloads, [`doca-eth`](../doca-eth/SKILL.md) for Ethernet30queues, [`doca-rmax`](../doca-rmax/SKILL.md) for timing-precise31media). The agent's first job, before anything else, is to confirm32the user actually needs to drop down — most users do not, and the33right answer is almost always *"stay in the higher-level library"*.34Open [`CAPABILITIES.md`](CAPABILITIES.md) when the question is35*what does the verbs surface actually expose and where is the36boundary with vanilla libibverbs*; open [`TASKS.md`](TASKS.md) when37the user has *already confirmed* they need raw verbs and wants the38configure / build / modify / run / test / debug workflow for them.39If the user has not installed DOCA yet, route to40[`doca-setup`](../../doca-setup/SKILL.md) first.4142## The decision this skill exists to gate4344The single load-bearing decision every conversation that loads this45skill must make, FIRST, before any code-level discussion:46471. **Has the user confirmed that the matching higher-level DOCA48 library does not expose the semantic they need?** If no — stop49 here, route back to the matching higher-level library:50 [`doca-rdma`](../doca-rdma/SKILL.md) for general RDMA work51 (Send / Receive / Read / Write / Atomic / Sync-Event task52 patterns); [`doca-eth`](../doca-eth/SKILL.md) for Ethernet TX /53 RX queue patterns; [`doca-rmax`](../doca-rmax/SKILL.md) for54 timing-precise media / data-over-IP streaming. The most common55 baseline-agent failure for raw verbs is recommending them56 *unnecessarily* because the user said the word "verbs" or "QP"57 without checking whether the higher-level surface already covers58 their case.592. **Is the semantic the user needs a specific verb / opcode /60 work-request flag / QP attribute / SRQ option that the matching61 higher-level library genuinely does not expose?** Examples: a62 specific raw WR flag the `doca_rdma_task_*` abstractions do not63 surface; custom completion-queue handling beyond what the DOCA64 progress engine exposes; an esoteric QP attribute (path MTU,65 PSN tuning, ECE attributes); explicit SRQ control; congestion-66 control group (`doca_verbs_cc_group_*`) attachment to QPs;67 Address-Handle attribute tuning (DGID / DLID / SL / SGID index /68 hop limit / traffic class / UDP source port). If yes — this69 skill is in scope.703. **Is the user porting existing libibverbs code into the DOCA71 Core model?** This skill is in scope, AND the agent must teach72 the porting path (replace libibverbs handles with `doca_verbs_*`73 handles, integrate with the DOCA Core lifecycle through74 `doca_verbs_context_create`, drive completions via the DOCA75 progress engine instead of polling CQ directly) rather than76 recommend a mechanical 1:1 textual replacement.7778If none of (1)-(3) apply, the answer to *"should I use79`doca-verbs`?"* is **no**. Route the user back to the matching80higher-level DOCA library. This is by design: a correctly-loaded81raw-verbs skill that talks the user *out* of raw verbs is doing its82job.8384## Example questions this skill answers well8586The CLASSES of raw-verbs questions this skill is built to answer,87each with one worked example. The agent should treat the *class* as88the load-bearing piece — the worked example is a single instance.8990- **"Should I drop to `doca-verbs` for this?"** — worked example:91 *"I want to set a specific raw work-request flag and the92 `doca_rdma_task_*` abstraction does not expose it"*. Answered by93 the path-selection rule in94 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)95 higher-level-vs-doca-verbs table + the *climb back up* step in96 [`TASKS.md ## configure`](TASKS.md#configure).97- **"How is `doca-verbs` different from `libibverbs`?"** — worked98 example: *"I have existing `ibv_*` code; can I just keep using99 it and call `doca_*` next to it?"*. Answered by the100 libibverbs-vs-doca-verbs boundary rule in101 [`CAPABILITIES.md ## Safety policy`](CAPABILITIES.md#safety-policy)102 + the porting workflow in103 [`TASKS.md ## modify`](TASKS.md#modify).104- **"Is this raw verb / opcode / QP option / SRQ feature105 supported on my device + DOCA version?"** — worked example:106 *"does this device advertise the QP feature my raw WR needs"*.107 Answered by the capability-query rule108 (`doca_verbs_query_device` + the109 `doca_verbs_device_attr_get_*` family) in110 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)111 + the discovery step in112 [`TASKS.md ## configure`](TASKS.md#configure).113- **"I'm porting libibverbs code into the DOCA Core model — what114 does the agent walk me through?"** — worked example: *"I have a115 small libibverbs sender/receiver that uses `IBV_SEND_INLINE` on116 a custom QP attribute, and I want it to live inside a DOCA Core117 context"*. Answered by the porting overlay in118 [`TASKS.md ## modify`](TASKS.md#modify) +119 [`CAPABILITIES.md ## Safety policy`](CAPABILITIES.md#safety-policy)120 no-mixing rule.121- **"What does this `DOCA_ERROR_*` from a raw-verbs call mean?"** —122 worked example: *"`DOCA_ERROR_IO_FAILED` from a WR submission —123 what do I look at?"*. Answered by the verbs overlay on the124 cross-library taxonomy in125 [`CAPABILITIES.md ## Error taxonomy`](CAPABILITIES.md#error-taxonomy)126 (which sends the agent to inspect the completion-queue entry,127 not the submit return value) + the layered ladder in128 [`TASKS.md ## debug`](TASKS.md#debug).129- **"When do I climb back up from `doca-verbs` to the matching130 higher-level library?"** — worked example: *"my raw-verbs131 prototype works; do I keep it or refactor onto `doca-rdma`?"*.132 Answered by the climb-back rule in133 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)134 (raw verbs is a *targeted* surface, not a default; once the135 specific need is covered, the higher-level surface is the136 long-term home).137138## Audience139140This skill serves **external developers building applications that141consume the DOCA Verbs library** — i.e., users whose code calls142`doca_verbs_*` (directly in C/C++, or through FFI/bindings from143another language) for raw QP / CQ / PD / MR / SRQ / Address-Handle144/ Ethernet-SQ / Ethernet-RQ control inside a DOCA Core context. It145is *not* for NVIDIA developers contributing to DOCA Verbs itself,146and it is *not* the right entry point for general DOCA RDMA / Eth147/ RMAX work — that belongs in the matching higher-level library148skill.149150## Language scope151152DOCA Verbs ships as a C library with `pkg-config` module name153`doca-verbs`. The public headers live under the installed DOCA154infrastructure tree155(`$(pkg-config --variable=includedir doca-common) doca_verbs.h` and the156adjacent `doca_verbs_*.h` family); per the157headers-win-over-docs rule in158[`doca-version`](../../doca-version/SKILL.md), the headers on the159user's install are the authoritative truth for the live symbol160surface. C and C++ consumers are the canonical case; the worked161examples in `TASKS.md` assume that path. Other-language consumers162(Rust, Go, Python, …) consume the same `*.so` through FFI or163language-specific bindings; the skill's contribution in that case164is to keep the *drop-down decision*, *libibverbs boundary*,165*cap-query rule*, *lifecycle in verbs terms*, and *error-handling166rule* language-neutral, and to route the agent to the public C ABI167as the authoritative surface that any wrapper will eventually168call.169170## When to load this skill171172Load this skill ONLY after the user (or the agent on the user's173behalf) has confirmed the matching higher-level DOCA library does174not expose the semantic they need. Concretely:175176- The user explicitly asks *"do I need to drop to `doca-verbs` for177 this?"* — load this skill to answer, but expect the answer to be178 *"no, stay in the higher-level library"* unless the user can179 name the specific verb / opcode / option the higher-level library180 does not surface.181- The user wants a specific raw WR flag, raw QP option, SRQ182 feature, custom CQ-handling pattern, or congestion-control group183 attachment that the higher-level library does not expose.184- The user is porting existing libibverbs code into the DOCA Core185 model and needs the integration path (lifecycle, progress engine,186 no-mixing rule).187- A `DOCA_ERROR_*` returned from a `doca_verbs_*` call needs188 diagnosis — including the IO_FAILED case where the answer lives189 on the completion-queue entry, not the submit return.190- Designing or extending non-C bindings (Rust, Go, Python, …) that191 wrap the verbs C ABI — for the boundary, lifecycle, and192 cap-query rules the wrapper must honor.193194Do **not** load this skill for: general DOCA RDMA work (use195[`doca-rdma`](../doca-rdma/SKILL.md)); general DOCA Ethernet196queueing (use [`doca-eth`](../doca-eth/SKILL.md)); timing-precise197media / data-over-IP streaming (use198[`doca-rmax`](../doca-rmax/SKILL.md)); use cases a different199higher-level DOCA library covers ([`doca-flow`](../doca-flow/SKILL.md)200for steering, the storage-transport library for NVMe-oF — routed via201[`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md));202install of DOCA itself (use203[`doca-setup`](../../doca-setup/SKILL.md)); or general DOCA204orientation (use205[`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md)).206207## What this skill provides208209This is a **thin loader**. The body keeps only the orientation210needed to pick the right next file. The substantive raw-verbs211material lives in two companion files:212213- `CAPABILITIES.md` — what `doca-verbs` can express on this214 version: the higher-level-library-vs-doca-verbs selection table,215 the libibverbs-vs-doca-verbs boundary, the verbs object model216 (`doca_verbs_context` + QP / CQ / PD / MR / SRQ /217 Address-Handle / Completion-Channel / Ethernet-SQ / Ethernet-RQ /218 CC-group) inside DOCA Core, the capability-query surface219 (`doca_verbs_query_device` + `doca_verbs_device_attr_get_*`),220 the raw-verbs error taxonomy (mapped onto the cross-library221 `DOCA_ERROR_*` set, with the IO_FAILED → completion-queue-entry222 overlay), the observability surface (DOCA progress engine vs223 manual CQ polling vs comp-channel event delivery), and the224 safety policy that gates the no-mixing-with-libibverbs rule.225- `TASKS.md` — step-by-step workflows for the six in-scope verbs:226 `configure`, `build`, `modify`, `run`, `test`, `debug`. Plus a227 `Deferred task verbs` block that points out-of-scope questions228 at the right next skill. Every workflow assumes the drop-down229 decision in this `SKILL.md` has already been made; the230 `## configure` step always begins by re-confirming it.231232The skill assumes a host or BlueField where DOCA is already233installed at the standard location and the user has the privileges234their public install profile expects (the RDMA stack on host with235proper module loads, same as236[`doca-rdma`](../doca-rdma/SKILL.md)). It does not cover237installing DOCA — that path goes through238[`doca-setup`](../../doca-setup/SKILL.md).239240## What this skill deliberately does not ship241242This skill is **agent guidance**, not a samples or templates243bundle. To keep the boundary clean, it deliberately does not244contain — and pull requests should not add:245246- **Pre-written DOCA Verbs application source code, in any247 language.** The verified verbs source code is the shipped C248 samples on the user's install (path discoverable via `ls249 /opt/mellanox/doca/samples/`); the agent's job is to route the250 user to those files and prescribe a minimum-diff modification on251 them via the universal modify-a-sample workflow in252 [`doca-programming-guide`](../../doca-programming-guide/SKILL.md),253 layered with the verbs-specific overrides in254 [`TASKS.md ## modify`](TASKS.md#modify).255- **Standalone build manifests** (`meson.build`, `CMakeLists.txt`,256 `Cargo.toml`, …) parked inside the skill. The agent constructs257 the build manifest *in the user's project directory* against the258 user's installed DOCA, where `pkg-config --modversion doca-verbs`259 is the source of truth.260- **A `samples/`, `bindings/`, or `reference/` subtree** of any261 kind. A mock or incomplete artifact in this skill's tree, even262 one labeled "reference", is misleading: users will read it as263 buildable.264- **A migration script from libibverbs to `doca-verbs`.** The265 porting path is *judgment*, not a mechanical textual266 replacement — see267 [`TASKS.md ## modify`](TASKS.md#modify) for why.268269## Loading order2702711. Read this `SKILL.md` first to confirm the user's question is in272 scope — i.e., to walk the drop-down decision above.2732. **For the higher-level-library-vs-doca-verbs split, the274 libibverbs-vs-doca-verbs boundary, the verbs object model,275 capability discovery, error taxonomy, observability, and276 safety policy, see [CAPABILITIES.md](CAPABILITIES.md).**2773. **For step-by-step workflows — configure, build, modify, run,278 test, debug — see [TASKS.md](TASKS.md).**279280Both companion files cross-link to each other, the matching281higher-level libraries282([`doca-rdma`](../doca-rdma/SKILL.md),283[`doca-eth`](../doca-eth/SKILL.md),284[`doca-rmax`](../doca-rmax/SKILL.md)) as the climb-back homes,285[`doca-common`](../doca-common/SKILL.md) for the foundation286primitives every verbs context rests on (`doca_dev` /287`doca_pe` / `doca_ctx`),288[`doca-version`](../../doca-version/SKILL.md) for the canonical289version-handling rules, and290[`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md)291whenever the right answer is "look it up in the public docs or the292installed package layout" rather than "verbs-specific guidance".293294## Related skills295296- [`doca-rdma`](../doca-rdma/SKILL.md) — the canonical higher-level297 DOCA RDMA library and the home this skill routes most RDMA users298 *back* to. Every conversation that loads `doca-verbs` for an299 RDMA-class question should also have `doca-rdma` loaded so the300 climb-back-up answer is immediate when the raw-verbs need turns301 out to be coverable there.302- [`doca-eth`](../doca-eth/SKILL.md) — the canonical higher-level303 DOCA Ethernet queue library. `doca-verbs` also exposes304 Ethernet-side SQ / RQ verbs (`doca_verbs_eth_sq_*`,305 `doca_verbs_eth_rq_*`); when the user has confirmed the306 higher-level `doca-eth` does not expose the option they need307 (e.g., explicit TS-source-type tuning, plane-index pinning,308 multi-pkt-send-WQE), this skill takes over.309- [`doca-rmax`](../doca-rmax/SKILL.md) — the canonical higher-level310 DOCA Rivermax library for timing-precise media. Most Rivermax311 cases should stay in `doca-rmax`; raw verbs is the escape hatch312 for the rare media use case where the user needs a verb the313 Rivermax integration does not expose.314- [`doca-common`](../doca-common/SKILL.md) — the foundation library315 every DOCA context (including `doca_verbs_context`) rests on.316 The `doca_dev` / `doca_pe` / `doca_ctx` primitives, the317 capability-query rule against the active `doca_devinfo`, and318 the lifecycle are owned there; this skill layers verbs-specific319 patterns on top.320- [`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md) —321 the routing table for every public DOCA documentation source322 and the on-disk layout of an installed DOCA package. The DOCA323 Verbs public guide is listed there; this skill does not324 duplicate the URL.325- [`doca-setup`](../../doca-setup/SKILL.md) — env preparation,326 install verification, and the *I have no install yet* path327 with the public NGC DOCA container. This skill assumes its328 preconditions are satisfied.329- [`doca-version`](../../doca-version/SKILL.md) — canonical DOCA330 version-handling rules. This skill's `## Version compatibility`331 cross-links the four-way match rule (with `doca-verbs.pc` joining332 the match set) and the cap-query-is-runtime-authority rule.333- [`doca-structured-tools-contract`](../../doca-structured-tools-contract/SKILL.md) —334 the bundle's structured-tools precedence rule (detect / prefer /335 fall back / report). The Command appendix in336 [TASKS.md](TASKS.md) honors this contract.337- [`doca-programming-guide`](../../doca-programming-guide/SKILL.md) —338 general DOCA programming patterns shared by every library: the339 canonical `pkg-config` + meson build pattern, the universal340 modify-a-shipped-sample first-app workflow, the universal341 lifecycle, the cross-library `DOCA_ERROR_*` taxonomy, and the342 program-side debug order. This skill layers raw-verbs specifics343 on top.344- [`doca-debug`](../../doca-debug/SKILL.md) — the cross-cutting345 debug ladder (install / version / build / link / runtime /346 program / driver). Raw-verbs-specific debug (completion-entry347 inspection, no-mixing-with-libibverbs, lifecycle in verbs terms)348 overlays on top of that ladder.349- [`doca-hardware-safety`](../../doca-hardware-safety/SKILL.md) —350 the cross-cutting hardware-safety meta-policy this skill's351 `## Safety policy` overlays.