DOCA Firefly Service
Subsystem inventory (Run-12 correction, verified Run-13).
DOCA Firefly is NOT just "a PTP daemon." The shipped
doca_firefly.yaml exposes six PTP-stack subsystems via
environment variables, each with its own *_STATE,
*_CONFIG_FILE, and (where relevant) *_INTERFACE /
*_DEVICE knobs (the count is six because the PTP Monitor
subsystem ships an internal phc2sys monitor client that is
distinct from the standalone PHC2SYS subsystem — both ship in
the same container image):
- PTP (
PTP_STATE, PTP_INTERFACE, PTP_CONFIG_FILE) —
the ptp4l daemon (or master, depending on profile) that
drives the BlueField PHC.
- PTP Monitor (
MONITOR_STATE, MONITOR_CONFIG_FILE,
MONITOR_CLIENT_TYPE, MONITOR_CLIENT_PHC2SYS_INTERFACE,
MONITOR_CLIENT_CONNECTION_TIMEOUT) — the monitor server +
client surface; the internal phc2sys monitor client
(MONITOR_CLIENT_TYPE=phc2sys) is a real subsystem inside
Firefly, not just a host-side concern.
- PHC2SYS (
PHC2SYS_STATE, PHC2SYS_ARGS,
PHC2SYS_CONFIG_FILE) — the container-internal phc2sys
instance; the bundle previously framed phc2sys as
host-only, which is wrong.
- PPS (
PPS_STATE, PPS_DEVICE) — the Pulse-Per-Second
output (with the additional enable_while_running and
do_nothing states beyond plain enable/disable).
- SyncE (
SYNCE_STATE, SYNCE_INTERFACE,
SYNCE_CONFIG_FILE) — Synchronous Ethernet frequency
distribution; orthogonal to PTP.
- Firefly Servo (
SERVO_STATE, SERVO_CONFIG_FILE) —
the proprietary Firefly servo loop (alternative to the
upstream linuxptp servo).
The valid PROFILE values are exactly default / media /
telco-l2 / custom (per doca_firefly.yaml comments) —
the agent must not invent additional values. Subsystems configured
as defined_by_profile are controlled by the active PROFILE.
Configuration-override env vars follow the pattern
CONF_<SUBSYSTEM>_<section>_<key> (e.g.
CONF_PTP_global_priority1, CONF_SYNCE_global_backend,
CONF_MONITOR_global_telemetry_export); these are the
documented surface for overriding individual config keys
without shipping a full custom config file.
Configuration hierarchy: the mounted Firefly config file is
mandatory and owns the primary PTP axes (role, profile, domain,
interface, and transport). CONF_<SUBSYSTEM>_<section>_<key>
variables are optional, documented per-key overrides of that file;
they are not a second standalone configuration model.
Where to start: This skill is for operating the DOCA Firefly
Service container, not for linking against a library. Firefly is
the PTP / PHC2SYS / PPS / SyncE / Servo / Monitor stack that
drives and observes the BlueField PTP Hardware Clock (PHC); it is
not the host-side time follower, not the consumer workload, and
not a programming surface. If the user wants to deploy the
container, open TASKS.md and start at
## configure. If the question is what shape
of service is Firefly and what PTP roles / profiles does it speak,
start at CAPABILITIES.md. If DOCA is not installed
on the BlueField yet, route to
doca-setup first. If the user's
real question is "I have a Rivermax SMPTE workload and the docs say I
need PTP", the right pairing is this skill plus
doca-rmax — Firefly disciplines
the PHC; Rivermax reads the disciplined time.
Example questions this skill answers well
The CLASSES of Firefly 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.
- "Do I actually need Firefly, or is NTP / chrony good enough?" —
worked example: "my distributed app is fine on chrony today; is
there a reason to add PTP?". Answered by the PTP-vs-NTP path-
selection rule in
CAPABILITIES.md ## Safety policy
- the env-prep checklist in
TASKS.md ## configure.
- "What four PTP configuration axes do I have to decide before
starting the container?" — worked example: "a SMPTE ST 2110
broadcast plant that wants Firefly in slave role on the wire-side
port". Answered by the four-axis configuration table in
CAPABILITIES.md ## Capabilities and modes
- the PTP-config step in
TASKS.md ## configure.
- "Firefly's container is running but the host's time isn't
following — what did I miss?" — worked example: "
ptp4l /
Firefly says it's locked but chronyc tracking on the host shows
drift". Answered by the END-TO-END time-sync discipline in
CAPABILITIES.md ## Safety policy
- the host-follower step in
TASKS.md ## configure.
- "PTP locks but the offset / jitter is way past spec — what's
wrong with the path?" — worked example: "sync acquired but offset
is in the tens of microseconds". Answered by the PTP-aware-path
rule in
CAPABILITIES.md ## Safety policy
- the layered debug ladder in
TASKS.md ## debug.
- "How does Firefly pair with a Rivermax SMPTE workload?" —
worked example: "SMPTE ST 2110 video sender that needs to be PTP-
locked". Answered by the Rivermax-pairing rule in
CAPABILITIES.md ## Capabilities and modes
- the pairing step in
TASKS.md ## configure, which routes the
Rivermax side to
doca-rmax and refuses to
collapse the two services into one.
- "My Firefly container starts but PTP never reaches
SLAVE / MASTER state — was it role, domain, profile, or
interface?" — worked example: "container green but the
ports-state output never advances past LISTENING". Answered by
the four-axis-mismatch rule in
CAPABILITIES.md ## Error taxonomy
- the layered ladder in
TASKS.md ## debug.
Audience
This skill serves external operators and platform teams who deploy
the DOCA Firefly Service container to provide PTP-grade time
synchronization to time-sensitive workloads on BlueField + the host
behind it. Concretely: people running the Firefly container on
BlueField Arm, choosing its PTP role / profile / domain / interface
from the public Firefly guide, wiring the host-side follower (chrony
with the PHC source, or ptp4l reading the PHC) so the host clock
tracks the BlueField PHC, and validating the end-to-end discipline
before scaling a Rivermax, 5G UPF, financial-trading, or distributed-
database workload that depends on it.
It is not for NVIDIA developers contributing to Firefly itself,
and it is not a programming guide for building applications on
top of DOCA libraries (that is
doca-programming-guide
plus the matching libs/<library> skill). Firefly is a service,
not a library: the operator runs a container and configures PTP via
the documented config surface; they do not link against a
libfirefly.so to write their own program.
Path selection up front. Use Firefly when sub-microsecond,
PTP-grade time precision is required on BlueField AND the host (SMPTE
ST 2110 broadcast workloads layered on Rivermax, 5G UPF time
requirements, distributed systems that need PTP-grade time, anything
where NTP / chrony jitter is not tight enough). Do not reach for
Firefly when NTP / chrony already meets the workload's time-precision
budget, when no PTP-aware switching / boundary-clock infrastructure
exists in the path, or when pure software-side time precision is
sufficient — in those cases the correct answer is to keep the host's
existing chrony / NTP setup and route the agent away from Firefly,
not to deploy it speculatively.
When to load this skill
Load this skill when the user is doing hands-on Firefly deployment
work on a BlueField where DOCA is already installed. Concretely:
- Deciding whether Firefly is the right answer for the user's
time-precision requirement (vs. keeping NTP / chrony on the host).
- Deploying the Firefly container on BlueField Arm — choosing image
source per the public DOCA Firefly Service Guide, mounting the
Firefly config, and starting / stopping the container.
- Choosing the four PTP configuration axes — PTP role (master /
slave / boundary clock / transparent clock), profile (the
PROFILE env var accepts EXACTLY default / media /
telco-l2 / custom per services/firefly/doca_firefly.yaml;
these map onto industry PTP profile names: default → IEEE 1588,
media → SMPTE 2059-2, telco-l2 → G.8275.1 only (G.8275.2
corresponds to the separate telco-l3 config, reached via
custom) — do NOT put the industry names directly into the env
var), domain number,
network interface — for the user's deployment.
- Wiring the host-side follower so the host clock tracks the
BlueField PHC (chrony with the PHC source, or
ptp4l /
phc2sys reading the PHC) — without this step the host clock
does NOT follow the Firefly-disciplined PHC, regardless of how
cleanly Firefly comes up.
- Pairing Firefly with a time-sensitive consumer workload (Rivermax
SMPTE, 5G UPF, finance, distributed databases) and validating
the end-to-end discipline.
- Reading the Firefly container's logs, the PHC offset, the
ports-state output, or any other documented observability surface
to confirm PTP is locked.
- Debugging a Firefly deployment where the container is healthy but
PTP is not syncing, or PTP is syncing but the host clock is not
following, or sync is up but jitter is past spec.
Do not load this skill for general DOCA orientation, install of
DOCA itself, library-API questions, or non-PTP time topics. For
those, route via
doca-public-knowledge-map,
doca-setup, or the matching
libs/<library> skill.
What this skill provides
This is a thin loader. Substantive material lives in two
companion files:
CAPABILITIES.md — Firefly's architecture (container that drives
the BlueField PHC and speaks PTP on the wire), the four PTP
configuration axes (role / profile / domain / interface, with
transport as a fifth knob), the deployment shape (container on
BlueField Arm per the public Container Deployment Guide), the
pairing surface (Rivermax + host-side time-sync follower), the
observability surface (container logs + PHC offset + ports state),
the error taxonomy (four-axis-mismatch / host-follower / PTP-aware-
path / container-runtime), and the safety policy (PTP-vs-NTP path
selection, END-TO-END discipline, smoke-before-scale).
TASKS.md — step-by-step workflows for the in-scope Firefly
verbs: configure, build, modify, run, test, debug,
plus a Deferred task verbs block routing out-of-scope questions
and a Command appendix of recurring commands.
The skill assumes a BlueField where DOCA is already installed and
the operator has the privileges the public Firefly Service Guide
expects to pull, run, and configure containers on BlueField Arm.
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 templates or sample-config
bundle. To keep the boundary clean, it deliberately does not contain —
and pull requests should not add:
- Pre-baked Firefly configuration files (full PTP config blocks,
ready-to-run role / profile / domain bundles) intended to be
copy-pasted into production. PTP configuration is deployment-
specific (per the user's profile, domain plan, interface naming,
and upstream PTP topology); the safe answer for an external
operator is to derive the config from the public Firefly Service
Guide against their own deployment. The agent's job is to
prescribe the procedure and the four-axis decision, not to
ship a config the user might run unmodified.
- Container image names, tags, or registry paths. The
authoritative image source is the public DOCA Firefly Service
Guide reachable through
doca-public-knowledge-map ## DOCA services;
Firefly's image tag is version-bound and changes between DOCA
releases. Inventing or memorizing a tag is the canonical
hallucination failure mode for a service skill.
- Host-side chrony stanzas or
ptp4l / phc2sys config files.
Those are host-environment-specific and live on the host, not
inside the Firefly container. The skill names that the
host-side follower must be wired and what its source must be
(the BlueField PHC); the chrony / ptp4l config bodies belong
to the host operator and to upstream Linux PTP documentation.
- A
samples/, templates/, or reference/ 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
SKILL.md first to confirm the user's question is in
scope and that Firefly is the right answer at all (vs. keeping
NTP / chrony on the host).
- For Firefly's deployment shape, the four PTP configuration
axes, the Rivermax + host-follower pairing surface, the error
taxonomy, the observability surface, and the END-TO-END safety
policy, see CAPABILITIES.md.
- For step-by-step workflows — configure, build, modify, run,
test, debug — see TASKS.md.
Related skills
doca-public-knowledge-map
— the routing table to the public DOCA Firefly Service Guide and
the rest of the public DOCA documentation set. The Firefly URL is
listed under
## DOCA services.
doca-setup — env preparation and
install verification on the BlueField where the Firefly container
will run, including the I have no install yet path via the
public NGC DOCA container. This skill assumes its preconditions
are satisfied on BlueField Arm.
doca-version — canonical DOCA
version-handling rules. Firefly's container tag is version-bound;
this skill's ## Version compatibility cross-links the four-way
match rule and adds the container-tag-lags-host-package 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 patterns. Firefly is service-shaped not library-
shaped, so the build / modify / first-app pattern there does not
apply directly, but the cross-library debug discipline (frontend-
before-backend, env-before-program) remains useful when Firefly
reports an error that originated in the container runtime or in
a DOCA library it called.
doca-rmax — the canonical
paired workload. SMPTE ST 2110 Rivermax streams depend on a
Firefly-disciplined PHC; Firefly is the time-source side and
Rivermax is the timing-precise data-plane side. The two skills
load together for any broadcast-style deployment, and they do
NOT collapse into one another — Firefly does not stream media;
Rivermax does not discipline the PHC.
doca-dms — sibling service skill. The
agent reading both skills should see the same service-skill shape
(container, BlueField Arm, deployment pattern, smoke-before-scale,
env preconditions, config schema) layered on top of a different
per-service domain (DMS = device management via gNMI / gNOI;
Firefly = time synchronization via PTP).
doca-debug — the cross-cutting
debug ladder (install / version / build / link / runtime /
program / driver). Firefly-specific debug (PTP not syncing,
host clock not following, jitter past spec) overlays on top of
that ladder.
1---2name: doca-firefly3description: Use this skill when the user is operating the DOCA Firefly Service container on BlueField — picking the four PTP configuration axes (role / profile / domain / interface), wiring the BlueField PHC + host follower + consumer workload pairing, deciding whether PTP-grade time is even needed (vs. chrony / NTP), or debugging a Firefly deployment where PTP isn't syncing or the host clock isn't following. Trigger even when the user does not explicitly mention "DOCA Firefly" or "PTP" — typical implicit phrasings include "container green but PTP never advances past LISTENING", "Firefly says synced but the host clock still drifts", "sync acquired but offset is tens of microseconds", "my Rivermax SMPTE workload needs PTP", or "is chrony good enough". Refuse and route elsewhere for installing DOCA, host-side chrony / ptp4l config bodies, PTP topology / boundary-clock design, building DOCA apps that read the disciplined PHC, or other DOCA services (DMS, Flow-Inspector, HBN) — those belong to other skills.4license: Apache-2.05---67# DOCA Firefly Service89> **Subsystem inventory (Run-12 correction, verified Run-13).**10> DOCA Firefly is NOT just "a PTP daemon." The shipped11> `doca_firefly.yaml` exposes **six** PTP-stack subsystems via12> environment variables, each with its own `*_STATE`,13> `*_CONFIG_FILE`, and (where relevant) `*_INTERFACE` /14> `*_DEVICE` knobs (the count is six because the PTP Monitor15> subsystem ships an internal `phc2sys` monitor client that is16> distinct from the standalone PHC2SYS subsystem — both ship in17> the same container image):18>19> 1. **PTP** (`PTP_STATE`, `PTP_INTERFACE`, `PTP_CONFIG_FILE`) —20> the `ptp4l` daemon (or master, depending on profile) that21> drives the BlueField PHC.22> 2. **PTP Monitor** (`MONITOR_STATE`, `MONITOR_CONFIG_FILE`,23> `MONITOR_CLIENT_TYPE`, `MONITOR_CLIENT_PHC2SYS_INTERFACE`,24> `MONITOR_CLIENT_CONNECTION_TIMEOUT`) — the monitor server +25> client surface; the **internal `phc2sys` monitor client**26> (`MONITOR_CLIENT_TYPE=phc2sys`) is a real subsystem inside27> Firefly, not just a host-side concern.28> 3. **PHC2SYS** (`PHC2SYS_STATE`, `PHC2SYS_ARGS`,29> `PHC2SYS_CONFIG_FILE`) — the **container-internal** `phc2sys`30> instance; the bundle previously framed `phc2sys` as31> host-only, which is wrong.32> 4. **PPS** (`PPS_STATE`, `PPS_DEVICE`) — the Pulse-Per-Second33> output (with the additional `enable_while_running` and34> `do_nothing` states beyond plain enable/disable).35> 5. **SyncE** (`SYNCE_STATE`, `SYNCE_INTERFACE`,36> `SYNCE_CONFIG_FILE`) — Synchronous Ethernet frequency37> distribution; orthogonal to PTP.38> 6. **Firefly Servo** (`SERVO_STATE`, `SERVO_CONFIG_FILE`) —39> the proprietary Firefly servo loop (alternative to the40> upstream linuxptp servo).41>42> The valid `PROFILE` values are exactly **`default` / `media` /43> `telco-l2` / `custom`** (per `doca_firefly.yaml` comments) —44> the agent must not invent additional values. Subsystems configured45> as `defined_by_profile` are controlled by the active `PROFILE`.46>47> Configuration-override env vars follow the pattern48> `CONF_<SUBSYSTEM>_<section>_<key>` (e.g.49> `CONF_PTP_global_priority1`, `CONF_SYNCE_global_backend`,50> `CONF_MONITOR_global_telemetry_export`); these are the51> documented surface for overriding individual config keys52> without shipping a full custom config file.53>54> **Configuration hierarchy:** the mounted Firefly config file is55> mandatory and owns the primary PTP axes (role, profile, domain,56> interface, and transport). `CONF_<SUBSYSTEM>_<section>_<key>`57> variables are optional, documented per-key overrides of that file;58> they are not a second standalone configuration model.5960**Where to start:** This skill is for *operating* the DOCA Firefly61Service container, not for *linking against* a library. Firefly is62the **PTP / PHC2SYS / PPS / SyncE / Servo / Monitor** stack that63drives and observes the BlueField PTP Hardware Clock (PHC); it is64*not* the host-side time follower, *not* the consumer workload, and65*not* a programming surface. If the user wants to *deploy* the66container, open [`TASKS.md`](TASKS.md) and start at67[`## configure`](TASKS.md#configure). If the question is *what shape68of service is Firefly and what PTP roles / profiles does it speak*,69start at [`CAPABILITIES.md`](CAPABILITIES.md). If DOCA is not installed70on the BlueField yet, route to71[`doca-setup`](../../doca-setup/SKILL.md) first. If the user's72real question is *"I have a Rivermax SMPTE workload and the docs say I73need PTP"*, the right pairing is this skill **plus**74[`doca-rmax`](../../libs/doca-rmax/SKILL.md) — Firefly disciplines75the PHC; Rivermax reads the disciplined time.7677## Example questions this skill answers well7879The CLASSES of Firefly questions this skill is built to answer, each80with one worked example. The class is the load-bearing piece; the81worked example is one instance.8283- **"Do I actually need Firefly, or is NTP / chrony good enough?"** —84 worked example: *"my distributed app is fine on chrony today; is85 there a reason to add PTP?"*. Answered by the PTP-vs-NTP path-86 selection rule in87 [`CAPABILITIES.md ## Safety policy`](CAPABILITIES.md#safety-policy)88 + the env-prep checklist in89 [`TASKS.md ## configure`](TASKS.md#configure).90- **"What four PTP configuration axes do I have to decide before91 starting the container?"** — worked example: *"a SMPTE ST 211092 broadcast plant that wants Firefly in slave role on the wire-side93 port"*. Answered by the four-axis configuration table in94 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)95 + the PTP-config step in96 [`TASKS.md ## configure`](TASKS.md#configure).97- **"Firefly's container is running but the host's time isn't98 following — what did I miss?"** — worked example: *"`ptp4l` /99 Firefly says it's locked but `chronyc tracking` on the host shows100 drift"*. Answered by the END-TO-END time-sync discipline in101 [`CAPABILITIES.md ## Safety policy`](CAPABILITIES.md#safety-policy)102 + the host-follower step in103 [`TASKS.md ## configure`](TASKS.md#configure).104- **"PTP locks but the offset / jitter is way past spec — what's105 wrong with the path?"** — worked example: *"sync acquired but offset106 is in the tens of microseconds"*. Answered by the PTP-aware-path107 rule in108 [`CAPABILITIES.md ## Safety policy`](CAPABILITIES.md#safety-policy)109 + the layered debug ladder in110 [`TASKS.md ## debug`](TASKS.md#debug).111- **"How does Firefly pair with a Rivermax SMPTE workload?"** —112 worked example: *"SMPTE ST 2110 video sender that needs to be PTP-113 locked"*. Answered by the Rivermax-pairing rule in114 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)115 + the pairing step in116 [`TASKS.md ## configure`](TASKS.md#configure), which routes the117 Rivermax side to118 [`doca-rmax`](../../libs/doca-rmax/SKILL.md) and refuses to119 collapse the two services into one.120- **"My Firefly container starts but PTP never reaches121 `SLAVE` / `MASTER` state — was it role, domain, profile, or122 interface?"** — worked example: *"container green but the123 ports-state output never advances past `LISTENING`"*. Answered by124 the four-axis-mismatch rule in125 [`CAPABILITIES.md ## Error taxonomy`](CAPABILITIES.md#error-taxonomy)126 + the layered ladder in127 [`TASKS.md ## debug`](TASKS.md#debug).128129## Audience130131This skill serves **external operators and platform teams who deploy132the DOCA Firefly Service container** to provide PTP-grade time133synchronization to time-sensitive workloads on BlueField + the host134behind it. Concretely: people running the Firefly container on135BlueField Arm, choosing its PTP role / profile / domain / interface136from the public Firefly guide, wiring the host-side follower (chrony137with the PHC source, or `ptp4l` reading the PHC) so the host clock138tracks the BlueField PHC, and validating the end-to-end discipline139 before scaling a Rivermax, 5G UPF, financial-trading, or distributed-140database workload that depends on it.141142It is **not** for NVIDIA developers contributing to Firefly itself,143and it is **not** a programming guide for *building applications on144top of* DOCA libraries (that is145[`doca-programming-guide`](../../doca-programming-guide/SKILL.md)146plus the matching `libs/<library>` skill). Firefly is a **service**,147not a library: the operator runs a container and configures PTP via148the documented config surface; they do not link against a149`libfirefly.so` to write their own program.150151**Path selection up front.** Use Firefly when sub-microsecond,152PTP-grade time precision is required on BlueField AND the host (SMPTE153ST 2110 broadcast workloads layered on Rivermax, 5G UPF time154requirements, distributed systems that need PTP-grade time, anything155where NTP / chrony jitter is not tight enough). Do **not** reach for156Firefly when NTP / chrony already meets the workload's time-precision157budget, when no PTP-aware switching / boundary-clock infrastructure158exists in the path, or when pure software-side time precision is159sufficient — in those cases the correct answer is to keep the host's160existing chrony / NTP setup and route the agent away from Firefly,161not to deploy it speculatively.162163## When to load this skill164165Load this skill when the user is doing **hands-on Firefly deployment166work** on a BlueField where DOCA is already installed. Concretely:167168- Deciding *whether* Firefly is the right answer for the user's169 time-precision requirement (vs. keeping NTP / chrony on the host).170- Deploying the Firefly container on BlueField Arm — choosing image171 source per the public DOCA Firefly Service Guide, mounting the172 Firefly config, and starting / stopping the container.173- Choosing the four PTP configuration axes — PTP role (master /174 slave / boundary clock / transparent clock), profile (the175 `PROFILE` env var accepts EXACTLY `default` / `media` /176 `telco-l2` / `custom` per `services/firefly/doca_firefly.yaml`;177 these map onto industry PTP profile names: `default` → IEEE 1588,178 `media` → SMPTE 2059-2, `telco-l2` → G.8275.1 only (G.8275.2179 corresponds to the separate `telco-l3` config, reached via180 `custom`) — do NOT put the industry names directly into the env181 var), domain number,182 network interface — for the user's deployment.183- Wiring the host-side follower so the host clock tracks the184 BlueField PHC (chrony with the PHC source, or `ptp4l` /185 `phc2sys` reading the PHC) — without this step the host clock186 does NOT follow the Firefly-disciplined PHC, regardless of how187 cleanly Firefly comes up.188- Pairing Firefly with a time-sensitive consumer workload (Rivermax189 SMPTE, 5G UPF, finance, distributed databases) and validating190 the end-to-end discipline.191- Reading the Firefly container's logs, the PHC offset, the192 ports-state output, or any other documented observability surface193 to confirm PTP is locked.194- Debugging a Firefly deployment where the container is healthy but195 PTP is not syncing, or PTP is syncing but the host clock is not196 following, or sync is up but jitter is past spec.197198Do **not** load this skill for general DOCA orientation, install of199DOCA itself, library-API questions, or non-PTP time topics. For200those, route via201[`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md),202[`doca-setup`](../../doca-setup/SKILL.md), or the matching203`libs/<library>` skill.204205## What this skill provides206207This is a **thin loader**. Substantive material lives in two208companion files:209210- `CAPABILITIES.md` — Firefly's architecture (container that drives211 the BlueField PHC and speaks PTP on the wire), the four PTP212 configuration axes (role / profile / domain / interface, with213 transport as a fifth knob), the deployment shape (container on214 BlueField Arm per the public Container Deployment Guide), the215 pairing surface (Rivermax + host-side time-sync follower), the216 observability surface (container logs + PHC offset + ports state),217 the error taxonomy (four-axis-mismatch / host-follower / PTP-aware-218 path / container-runtime), and the safety policy (PTP-vs-NTP path219 selection, END-TO-END discipline, smoke-before-scale).220- `TASKS.md` — step-by-step workflows for the in-scope Firefly221 verbs: `configure`, `build`, `modify`, `run`, `test`, `debug`,222 plus a `Deferred task verbs` block routing out-of-scope questions223 and a `Command appendix` of recurring commands.224225The skill assumes a BlueField where DOCA is already installed and226the operator has the privileges the public Firefly Service Guide227expects to pull, run, and configure containers on BlueField Arm.228It does not cover installing DOCA — that path goes through229[`doca-setup`](../../doca-setup/SKILL.md).230231## What this skill deliberately does not ship232233This skill is **agent guidance**, not a templates or sample-config234bundle. To keep the boundary clean, it deliberately does not contain —235and pull requests should not add:236237- **Pre-baked Firefly configuration files** (full PTP config blocks,238 ready-to-run role / profile / domain bundles) intended to be239 copy-pasted into production. PTP configuration is deployment-240 specific (per the user's profile, domain plan, interface naming,241 and upstream PTP topology); the safe answer for an external242 operator is to derive the config from the public Firefly Service243 Guide against their own deployment. The agent's job is to244 prescribe the *procedure* and the *four-axis decision*, not to245 ship a config the user might run unmodified.246- **Container image names, tags, or registry paths.** The247 authoritative image source is the public DOCA Firefly Service248 Guide reachable through249 [`doca-public-knowledge-map ## DOCA services`](../../doca-public-knowledge-map/SKILL.md#doca-services);250 Firefly's image tag is version-bound and changes between DOCA251 releases. Inventing or memorizing a tag is the canonical252 hallucination failure mode for a service skill.253- **Host-side chrony stanzas or `ptp4l` / `phc2sys` config files.**254 Those are host-environment-specific and live on the host, not255 inside the Firefly container. The skill names *that* the256 host-side follower must be wired and *what its source must be*257 (the BlueField PHC); the chrony / `ptp4l` config bodies belong258 to the host operator and to upstream Linux PTP documentation.259- **A `samples/`, `templates/`, or `reference/` subtree** of any260 kind. A mock or incomplete artifact in this skill's tree, even261 one labeled *"reference"*, is misleading: operators will read it262 as production-ready.263264## Loading order2652661. Read this `SKILL.md` first to confirm the user's question is in267 scope **and** that Firefly is the right answer at all (vs. keeping268 NTP / chrony on the host).2692. **For Firefly's deployment shape, the four PTP configuration270 axes, the Rivermax + host-follower pairing surface, the error271 taxonomy, the observability surface, and the END-TO-END safety272 policy, see [CAPABILITIES.md](CAPABILITIES.md).**2733. **For step-by-step workflows — configure, build, modify, run,274 test, debug — see [TASKS.md](TASKS.md).**275276## Related skills277278- [`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md)279 — the routing table to the public DOCA Firefly Service Guide and280 the rest of the public DOCA documentation set. The Firefly URL is281 listed under282 [`## DOCA services`](../../doca-public-knowledge-map/SKILL.md#doca-services).283- [`doca-setup`](../../doca-setup/SKILL.md) — env preparation and284 install verification on the BlueField where the Firefly container285 will run, including the *I have no install yet* path via the286 public NGC DOCA container. This skill assumes its preconditions287 are satisfied on BlueField Arm.288- [`doca-version`](../../doca-version/SKILL.md) — canonical DOCA289 version-handling rules. Firefly's container tag is version-bound;290 this skill's `## Version compatibility` cross-links the four-way291 match rule and adds the container-tag-lags-host-package overlay.292- [`doca-structured-tools-contract`](../../doca-structured-tools-contract/SKILL.md) —293 the bundle's structured-tools precedence rule (detect / prefer /294 fall back / report). The Command appendix in [TASKS.md](TASKS.md)295 honors this contract.296- [`doca-programming-guide`](../../doca-programming-guide/SKILL.md)297 — general DOCA patterns. Firefly is service-shaped not library-298 shaped, so the build / modify / first-app pattern there does not299 apply directly, but the cross-library debug discipline (frontend-300 before-backend, env-before-program) remains useful when Firefly301 reports an error that originated in the container runtime or in302 a DOCA library it called.303- [`doca-rmax`](../../libs/doca-rmax/SKILL.md) — the canonical304 paired workload. SMPTE ST 2110 Rivermax streams depend on a305 Firefly-disciplined PHC; Firefly is the time-source side and306 Rivermax is the timing-precise data-plane side. The two skills307 load together for any broadcast-style deployment, and they do308 NOT collapse into one another — Firefly does not stream media;309 Rivermax does not discipline the PHC.310- [`doca-dms`](../doca-dms/SKILL.md) — sibling service skill. The311 agent reading both skills should see the same service-skill shape312 (container, BlueField Arm, deployment pattern, smoke-before-scale,313 env preconditions, config schema) layered on top of a different314 per-service domain (DMS = device management via gNMI / gNOI;315 Firefly = time synchronization via PTP).316- [`doca-debug`](../../doca-debug/SKILL.md) — the cross-cutting317 debug ladder (install / version / build / link / runtime /318 program / driver). Firefly-specific debug (PTP not syncing,319 host clock not following, jitter past spec) overlays on top of320 that ladder.