[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-jetson-customize-fan":3,"mdc--gtez8a-key":31,"related-repo-nvidia-jetson-customize-fan":2478,"related-org-nvidia-jetson-customize-fan":2582},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":26,"sourceUrl":29,"mdContent":30},"jetson-customize-fan","customize Jetson fan profiles","Use when you need to add, remove, edit, list, or change the boot default of an nvfancontrol fan profile on a Jetson\u002FTegra (Orin, Thor) target. Triggers: edit fan profile, tune fan curve.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,19],{"name":13,"slug":14,"type":15},"Performance","performance","tag",{"name":17,"slug":18,"type":15},"Hardware","hardware",{"name":9,"slug":8,"type":15},2473,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills","2026-07-14T05:28:37.008245","Apache-2.0",281,[],{"repoUrl":21,"stars":20,"forks":24,"topics":27,"description":28},[],"AI agent skills published by NVIDIA","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fjetson-customize-fan","---\nname: jetson-customize-fan\ndescription: >-\n  Use when you need to add, remove, edit, list, or change the boot\n  default of an nvfancontrol fan profile on a Jetson\u002FTegra (Orin,\n  Thor) target. Triggers: edit fan profile, tune fan curve.\nversion: 0.0.1\nlicense: \"Apache-2.0\"\nmetadata:\n  data-classification: public\n  author: \"Jetson Team\"\n  tags:\n    - thermal\n    - fan\n    - nvfancontrol\n    - profile\n  domain: thermal\n---\n\n# Modify nvfancontrol Fan Profile (BSP-side)\n\n## Purpose\n\nEdit the per-board nvfancontrol configuration so the device boots\nwith the desired fan curve \u002F control mode \u002F governor \u002F default\nprofile. BSP-side only — all writes land in the overlay tracker,\nthe upstream `bsp_image` copy is read-only.\n\nThis skill handles BSP-side edits to the per-board nvfancontrol configuration file: adding profiles, removing profiles, editing the temp → PWM \u002F RPM curves, changing the boot default profile \u002F control mode \u002F governor, and listing defined profiles. Applies on Jetson \u002F Tegra platforms (T234 Orin, T264 Thor).\n\n## File format (canonical, per the BSP file header)\n\n```\nPOLLING_INTERVAL \u003Cseconds>\n\n\u003CFAN \u003Cindex>>\n    TMARGIN \u003CENABLED|DISABLED>\n    FAN_GOVERNOR \u003Ctype> {\n        STEP_SIZE \u003Cint>\n    }\n    FAN_CONTROL \u003Cclose_loop|open_loop> {\n        RPM_TOLERANCE \u003Crpm>\n    }\n    FAN_PROFILE \u003Cname> {\n        # TEMP HYST PWM RPM\n        \u003CT0> \u003CH0> \u003CP0> \u003CR0>\n        ...\n    }\n    FAN_PROFILE \u003Cname> { ... }       # one or more profiles\n    THERMAL_GROUP \u003Cid> {\n        GROUP_MAX_TEMP \u003CC>\n        # zone-name \u003Ccoeffs csv> \u003Cmax-temp>\n        \u003Czone> \u003Ccoeffs> \u003Cmax-temp>\n        ...\n    }\n    FAN_DEFAULT_CONTROL  \u003Cclose_loop|open_loop>\n    FAN_DEFAULT_PROFILE  \u003Cname>\n    FAN_DEFAULT_GOVERNOR \u003Ctype>\n    KICKSTART_PWM \u003C0..255>\n```\n\nRules:\n\n- **Profile curve tuples are 4-column**: `TEMP HYST PWM RPM`. Sort points by ascending `TEMP`; the daemon interpolates between them.\n- **`PWM` is `0..255`** (8-bit duty cycle); **`RPM`** is the close-loop target speed. A trailing `0 0` row at the high end pins the fan off above `GROUP_MAX_TEMP`.\n- **`HYST`** is hysteresis (°C) at that point — the controller waits `HYST` degrees of cooling before stepping the curve down.\n- **`FAN_DEFAULT_PROFILE`** must reference an existing `FAN_PROFILE` block in the same `\u003CFAN N>`. nvfancontrol fails to start if the default names a missing profile.\n- **`FAN_DEFAULT_CONTROL`** = `close_loop` (drives toward target RPM, requires tach) or `open_loop` (writes PWM directly).\n- **`FAN_DEFAULT_GOVERNOR`** = `cont` (continuous interpolation) and other family-specific values; copy verbatim from existing per-board files when introducing one.\n- **`THERMAL_GROUP`** maps thermal zones to the controller's input. Coefficients are a 20-element CSV — copy verbatim from existing entries; values vary by chip family and zone.\n- **`\u003CFAN N>`** is one block per fan index (typical: `\u003CFAN 1>`). Block boundaries `\u003C...>` and `{...}` are strict; preserve indentation matching neighboring lines.\n- **Curves are characterised, not invented.** Add or edit curves from real thermal-acoustic data for the platform; do not interpolate from neighbouring profiles or copy across chip families.\n\n## Prerequisites\n\nResolve the active profile per\n[`..\u002F..\u002Fcontext\u002Ftarget-platform-contract.md`](..\u002F..\u002Fcontext\u002Ftarget-platform-contract.md).\nRefuse and route in these cases:\n\n| Condition | Refuse with |\n|---|---|\n| No active profile, or `active: NA` | Route to `\u002Fjetson-set-target` or `\u002Fjetson-init-target`. |\n| Profile lacks `bsp_image:` block | Route to `\u002Fjetson-init-image`. |\n| `\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F` missing | Route to `\u002Fjetson-init-image`. |\n| `\u003Csource.root_path>\u002FLinux_for_Tegra\u002F` missing or not a git repo | Route to `\u002Fjetson-init-source`. |\n\nResolve paths:\n\n- `\u003Cbsp_image.root_path>` from `bsp_image.root_path:` if present, else `\u003Cworkspace>\u002FImage`.\n- `\u003Csource.root_path>` from `source.root_path:` if present, else `\u003Cworkspace>\u002FSource`.\n\n`\u003Cbsp_image.root_path>` is **read-only** for this skill; every write lands\nunder `\u003Csource.root_path>` (the overlay tracker). This is the workflow\ninvariant in\n[`..\u002F..\u002Fcontext\u002Fbsp-customization-workflow.md#workflow-invariants`](..\u002F..\u002Fcontext\u002Fbsp-customization-workflow.md#workflow-invariants) —\nhand-editing upstream silently destroys the diff trail and makes\n`\u002Fjetson-promote-image` a noop.\n\n## The per-board file\n\nThe conf this skill edits has the relative path:\n\n```\nLinux_for_Tegra\u002Frootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002Fnvfancontrol_\u003Cactive-sku>.conf\n```\n\nIt lives in **two** roots; the skill walks both:\n\n| Role | Location | Skill writes? |\n|---|---|---|\n| Detection + pristine source | `\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002Frootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F` | no — read-only |\n| Overlay edit target + git commit | `\u003Csource.root_path>\u002FLinux_for_Tegra\u002Frootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F` | yes |\n\nSubsequent sections refer to **the per-board file** to mean the overlay copy\nunder `\u003Csource.root_path>`. Operations 1–4 all read, edit, and save against\nthat overlay copy. The `\u003Cbsp_image.root_path>` copy is read once during the\n\"Resolving `\u003Cactive-sku>`\" detection step and once during the\n[Overlay edit recipe](#overlay-edit-recipe-apply-before-any-operation)'s\npristine-import step, then never touched again.\n\n### Resolving `\u003Cactive-sku>` — which file to edit\n\nFilename conventions vary per product family:\n\n- `nvfancontrol_\u003Cmodule.id>_\u003Cmodule.sku>.conf` — most Orin parts (e.g. `nvfancontrol_p3767_0000.conf`, `nvfancontrol_p3701_0008.conf`).\n- `nvfancontrol_\u003Cmodule.id>_\u003Cmodule.sku>_\u003Ccarrier.id>_\u003Ccarrier.sku>.conf` — Thor variants where the carrier disambiguates (e.g. `nvfancontrol_p3834_0008_p4071_0000.conf`).\n- `nvfancontrol_\u003Ccarrier>_\u003Csku>_\u003Crev>.conf` — IGX revision variants (e.g. `nvfancontrol_p3740_0002_b01.conf`).\n\nThe nvfancontrol daemon resolves the right file at startup based on the booted hardware's DT compatible plus board IDs (no helper script — it's done inside the binary). To map BSP-side without a running target, against `\u003Cbsp_image.root_path>`:\n\n1. List `\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002Frootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F`.\n2. Filter to filenames that contain `\u003Cmodule.id>_\u003Cmodule.sku>` from the active profile.\n3. If multiple candidates remain, refine with `\u003Ccarrier.id>_\u003Ccarrier.sku>` and (when relevant) the carrier revision tag.\n4. If still ambiguous, run the per-board flash conf dispatch chain to read the kernel DTB's `compatible` and pick the file whose name aligns with the resolved board \u002F carrier.\n5. Verify the chosen file actually exists under `\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002Frootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F`.\n\nDon't blindly compose a filename — the naming convention varies by product family.\n\n### Propagation set — confs to keep in sync\n\nThe active-SKU file is rarely the only conf that should carry a customization. After editing it, **apply the same edit to every sibling in the propagation set** so the change survives regardless of which module \u002F baseboard SKU is booted:\n\n- **The reference platform's nvfancontrol conf** — the upstream conf the active file was forked from (resolve via `reference_devkit` in the active profile, or `jetson-derive-carrier` fork ancestry). For a BSP that contains only the reference (no derived carriers), this is the same file as the active and the rule reduces to a no-op.\n- **Every carrier-derived nvfancontrol conf** — each `nvfancontrol_*.conf` produced by `jetson-derive-carrier` for a custom carrier on top of the same module SKU.\n\n**\"Apply the same edit\" ≠ blanket file copy.** Port the changed `FAN_PROFILE` \u002F control lines into each sibling; preserve every other line. Sibling confs often hold carrier-specific deltas (different `THERMAL_GROUP` coefficients for a different thermal solution, different tach `RPM` ceilings) that must stay intact — a blanket overwrite would mis-tune the fan on those carriers. Blanket-copying is safe **only** when both confs were byte-identical before the edit.\n\n## Overlay edit recipe (apply before any Operation)\n\nFollow the canonical\n[Off-skill edits recipe](..\u002F..\u002Fcontext\u002Fbsp-customization-workflow.md#off-skill-edits)\nin the workflow doc — pristine import + customization commit pair, both\ngated by the preview gate. Apply once per run, covering every per-board\nfile the run touches (the active conf plus every sibling in the\n[Propagation set](#propagation-set--confs-to-keep-in-sync)).\n\nConcrete substitutions for this skill:\n\n- `\u003Crel>\u002F\u003Cfile>` is `rootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F\u003Cconf>`.\n- Suggested pristine-import message:\n  `import pristine: \u003Ccomma-separated rel paths of imported confs>`,\n  body `Source: \u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F (BSP \u003Cbsp_image.version>)`.\n- Suggested customization-commit header:\n  `jetson-customize-fan: \u003Csummary>`,\n  body lines like `nvfancontrol_p3767_0000.conf: added FAN_PROFILE static (open-loop, PWM=255 flat), FAN_DEFAULT_CONTROL close_loop -> open_loop, FAN_DEFAULT_PROFILE quiet -> static`.\n\n## Instructions\n\nPick the operation that matches the user's intent and follow the\nmatching subsection. All write-side operations (1–4) must first\napply the [Overlay edit recipe](#overlay-edit-recipe-apply-before-any-operation).\n\n- Operation 1 — Add a new fan profile.\n- Operation 2 — Remove a fan profile.\n- Operation 3 — Edit an existing fan profile (curve, hysteresis).\n- Operation 4 — Change the boot default (control \u002F profile \u002F governor).\n- Operation 5 — List defined fan profiles (read-only).\n\nAfter any write-side operation, run the Deploy chain (`## Deploy`)\nto land the change on the device.\n\n## Examples\n\nAdd an aggressive profile to a P3767-0000 (Orin Nano dev kit) target\nand pin it as the boot default:\n\n```\n\u002Fjetson-customize-fan\n> add a profile called \"aggressive\" with the curve {0:255, 40:150, 80:0}\n> set FAN_DEFAULT_PROFILE to aggressive\n```\n\nSoften the fan ramp on the existing `quiet` profile (raise HYST,\nlower mid-PWM):\n\n```\n\u002Fjetson-customize-fan\n> edit FAN_PROFILE quiet — raise HYST to 5 from 30 °C up, drop PWM at 60 °C to 80\n```\n\nList which profiles the active SKU currently defines and which is\nthe boot default:\n\n```\n\u002Fjetson-customize-fan\n> list defined fan profiles\n```\n\n## Operation 1 — Add a new fan profile\n\nApply the [Overlay edit recipe](#overlay-edit-recipe-apply-before-any-operation) first.\n\n1. In the per-board file, inside the `\u003CFAN N>` block, add a new `FAN_PROFILE \u003Cname> { ... }` between existing profiles. Daemon parse order doesn't matter, but grouping with siblings keeps the file scannable.\n2. Pick `\u003Cname>` lowercase, no whitespace (e.g. `quiet`, `cool`, `aggressive`).\n3. Fill the curve table — 4-column `TEMP HYST PWM RPM` tuples, ascending `TEMP`. End with at least one row above `GROUP_MAX_TEMP` so behavior at over-temp is defined.\n\nExample skeleton:\n\n```\nFAN_PROFILE aggressive {\n    #TEMP HYST PWM RPM\n    0    0    255 6000\n    20   2    255 6000\n    40   2    150 3500\n    60   2    50  1500\n    80   0    0   0\n    105  0    0   0\n}\n```\n\nValidate (see Rules):\n\n- Every `TEMP` lies within `0..GROUP_MAX_TEMP` of the `THERMAL_GROUP`.\n- `PWM` ∈ `[0, 255]`; `RPM` ≤ the platform's tach-reported max (varies by fan part).\n- Tuples are sorted ascending by `TEMP`.\n\nIf you intend the new profile to be the boot default, follow Operation 4.\n\n## Operation 2 — Remove a fan profile\n\nApply the [Overlay edit recipe](#overlay-edit-recipe-apply-before-any-operation) first.\n\n1. In the per-board file, delete the entire `FAN_PROFILE \u003Cname> { ... }` block including all curve rows and the closing `}`.\n2. If the deleted `\u003Cname>` matches the trailing `FAN_DEFAULT_PROFILE`, point `FAN_DEFAULT_PROFILE` at a remaining profile — otherwise the daemon fails to start.\n3. Search for hard-coded references in the rootfs before declaring the change safe:\n   ```bash\n   grep -rn \"nvfancontrol.*profile\\|FAN_PROFILE\" \\\n     Linux_for_Tegra\u002Frootfs\u002Fetc 2>\u002Fdev\u002Fnull\n   ```\n\nThe remaining profiles do not need renaming.\n\n## Operation 3 — Edit an existing fan profile\n\nApply the [Overlay edit recipe](#overlay-edit-recipe-apply-before-any-operation) first.\n\n1. In the per-board file, modify the curve rows of the target `FAN_PROFILE \u003Cname>`. Keep the 4-column `TEMP HYST PWM RPM` shape.\n2. Maintain ascending `TEMP` ordering; insert or remove rows as needed.\n3. Adjust `HYST` to tune anti-oscillation: too low → fan thrashes near a curve point; too high → fan lags reality.\n4. Validate per Operation 1's rules.\n\nEdits to `KICKSTART_PWM`, `RPM_TOLERANCE` (inside `FAN_CONTROL`), or `STEP_SIZE` (inside `FAN_GOVERNOR`) sit outside the profiles but tune the same fan; same per-board file.\n\n## Operation 4 — Change the boot default\n\nApply the [Overlay edit recipe](#overlay-edit-recipe-apply-before-any-operation) first.\n\nEdit the trailing default lines inside the `\u003CFAN N>` block:\n\n```\nFAN_DEFAULT_CONTROL  \u003Cclose_loop|open_loop>\nFAN_DEFAULT_PROFILE  \u003Cname>\nFAN_DEFAULT_GOVERNOR \u003Ctype>\n```\n\n`FAN_DEFAULT_PROFILE` must reference an existing `FAN_PROFILE` in the same `\u003CFAN N>` block. `FAN_DEFAULT_CONTROL` and `FAN_DEFAULT_GOVERNOR` must reference values the binary supports — copy from existing per-board files when changing.\n\n## Operation 5 — List defined fan profiles\n\nThis is a read-only operation; no overlay-tracker setup is needed. Run\nagainst whichever copy you want to inspect (`\u003Cbsp_image.root_path>\u002F...`\nfor the pristine state, `\u003Csource.root_path>\u002F...` for the post-edit state):\n\n```bash\ngrep -E '^[[:space:]]*FAN_PROFILE ' \u003Cper-board file>\ngrep -E '^[[:space:]]*FAN_DEFAULT_'  \u003Cper-board file>\n```\n\nThe first prints every profile name in the file; the second prints the boot defaults (control \u002F profile \u002F governor).\n\n## Limitations\n\n- BSP-side scope only — this skill never touches a running target's\n  `\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F` directly. Live tuning requires\n  reboot via Deploy, or the side-channel `scp + systemctl restart`\n  flow described in `## Deploy`.\n- Edits land in the overlay copy under `\u003Csource.root_path>` only;\n  the `\u003Cbsp_image.root_path>` copy is read-only and is rewritten by\n  `\u002Fjetson-promote-image`. Hand-editing `bsp_image` is silently lost\n  on the next `\u002Fjetson-init-image` re-extract.\n- Curve tuples must reflect characterised thermal-acoustic data for\n  the platform — this skill does not interpolate or copy curves\n  across chip families.\n- Propagation across sibling carriers (same module SKU) is partial\n  by design: only the changed `FAN_PROFILE` \u002F control lines are\n  ported, never a blanket file overwrite, since sibling confs may\n  hold carrier-specific `THERMAL_GROUP` \u002F RPM ceilings.\n- Curve point limits are family-specific; copy verbatim from existing\n  confs when introducing new `THERMAL_GROUP` coefficients or\n  `FAN_DEFAULT_GOVERNOR` values.\n\n## Troubleshooting\n\n| Error | Cause | Solution |\n|---|---|---|\n| nvfancontrol.service fails to start after edit | `FAN_DEFAULT_PROFILE` references a profile that was removed or renamed | Set `FAN_DEFAULT_PROFILE` to an existing `FAN_PROFILE \u003Cname>` in the same `\u003CFAN N>`. |\n| Fan thrashes near a curve point | `HYST` too low | Raise `HYST` on the affected row (typical 2–5 °C). |\n| Fan lags reality | `HYST` too high | Lower `HYST` on the affected row. |\n| Fan never spins up at high temp | Curve missing a row above `GROUP_MAX_TEMP`, or trailing `0 0` truncates above ambient | Add a high-temp tuple with non-zero PWM\u002FRPM; pin the over-temp row only above `GROUP_MAX_TEMP`. |\n| Daemon parse error referencing column count | Curve row not 4-column `TEMP HYST PWM RPM` | Restore 4-column shape; remove trailing whitespace and stray columns. |\n| `RPM` target never reached in close-loop | Target above tach-reported max, or `FAN_CONTROL` set to `open_loop` | Lower `RPM` to within the fan's mechanical max, or switch `FAN_DEFAULT_CONTROL` to `close_loop`. |\n| Change vanished after `\u002Fjetson-init-image` re-extract | Edit landed in `\u003Cbsp_image.root_path>` instead of `\u003Csource.root_path>` overlay | Re-apply via the [Overlay edit recipe](#overlay-edit-recipe-apply-before-any-operation) so the change is committed in the overlay tracker. |\n| Sibling carrier boots with wrong tach ceiling after propagation | Blanket file copy clobbered carrier-specific `THERMAL_GROUP` \u002F `RPM` rows | Port only the changed lines per [Propagation set](#propagation-set--confs-to-keep-in-sync); restore the carrier's original `THERMAL_GROUP`. |\n\n## Deploy\n\nThe customization commit in the overlay tracker does not reach the device\non its own. The Deploy chain:\n\n1. **`\u002Fjetson-promote-image`** — copies every tracked file in the overlay\n   into `\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F`. Diff-aware (skip\n   byte-identical); uses `sudo cp -p` for `rootfs\u002F*` destinations.\n2. **`\u002Fjetson-flash-image`** — flashes the updated `bsp_image` to the\n   device.\n3. (Alternate, no flash) Copy `\u003Csource.root_path>\u002FLinux_for_Tegra\u002Frootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F\u003Cconf>`\n   directly to the running target's `\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F\u003Cconf>`,\n   then `sudo systemctl restart nvfancontrol.service` (or reboot).\n\nEditing `\u003Csource.root_path>\u002F...` without committing — or editing\n`\u003Cbsp_image.root_path>\u002F...` directly — does nothing for `\u002Fjetson-promote-image`\nand is silently lost on the next `\u002Fjetson-init-image` re-extract.\n",{"data":32,"body":42},{"name":4,"description":6,"version":33,"license":23,"metadata":34},"0.0.1",{"data-classification":35,"author":36,"tags":37,"domain":38},"public","Jetson Team",[38,39,40,41],"thermal","fan","nvfancontrol","profile",{"type":43,"children":44},"root",[45,54,61,76,81,87,99,104,348,354,371,509,514,567,609,615,620,629,641,712,754,768,773,839,851,916,921,927,939,993,1031,1037,1057,1062,1122,1128,1138,1166,1179,1185,1190,1199,1212,1221,1226,1235,1241,1252,1334,1339,1348,1353,1418,1423,1429,1438,1559,1564,1570,1579,1631,1674,1680,1689,1701,1710,1746,1752,1773,1877,1882,1888,2001,2007,2340,2346,2351,2440,2472],{"type":46,"tag":47,"props":48,"children":50},"element","h1",{"id":49},"modify-nvfancontrol-fan-profile-bsp-side",[51],{"type":52,"value":53},"text","Modify nvfancontrol Fan Profile (BSP-side)",{"type":46,"tag":55,"props":56,"children":58},"h2",{"id":57},"purpose",[59],{"type":52,"value":60},"Purpose",{"type":46,"tag":62,"props":63,"children":64},"p",{},[65,67,74],{"type":52,"value":66},"Edit the per-board nvfancontrol configuration so the device boots\nwith the desired fan curve \u002F control mode \u002F governor \u002F default\nprofile. BSP-side only — all writes land in the overlay tracker,\nthe upstream ",{"type":46,"tag":68,"props":69,"children":71},"code",{"className":70},[],[72],{"type":52,"value":73},"bsp_image",{"type":52,"value":75}," copy is read-only.",{"type":46,"tag":62,"props":77,"children":78},{},[79],{"type":52,"value":80},"This skill handles BSP-side edits to the per-board nvfancontrol configuration file: adding profiles, removing profiles, editing the temp → PWM \u002F RPM curves, changing the boot default profile \u002F control mode \u002F governor, and listing defined profiles. Applies on Jetson \u002F Tegra platforms (T234 Orin, T264 Thor).",{"type":46,"tag":55,"props":82,"children":84},{"id":83},"file-format-canonical-per-the-bsp-file-header",[85],{"type":52,"value":86},"File format (canonical, per the BSP file header)",{"type":46,"tag":88,"props":89,"children":93},"pre",{"className":90,"code":92,"language":52},[91],"language-text","POLLING_INTERVAL \u003Cseconds>\n\n\u003CFAN \u003Cindex>>\n    TMARGIN \u003CENABLED|DISABLED>\n    FAN_GOVERNOR \u003Ctype> {\n        STEP_SIZE \u003Cint>\n    }\n    FAN_CONTROL \u003Cclose_loop|open_loop> {\n        RPM_TOLERANCE \u003Crpm>\n    }\n    FAN_PROFILE \u003Cname> {\n        # TEMP HYST PWM RPM\n        \u003CT0> \u003CH0> \u003CP0> \u003CR0>\n        ...\n    }\n    FAN_PROFILE \u003Cname> { ... }       # one or more profiles\n    THERMAL_GROUP \u003Cid> {\n        GROUP_MAX_TEMP \u003CC>\n        # zone-name \u003Ccoeffs csv> \u003Cmax-temp>\n        \u003Czone> \u003Ccoeffs> \u003Cmax-temp>\n        ...\n    }\n    FAN_DEFAULT_CONTROL  \u003Cclose_loop|open_loop>\n    FAN_DEFAULT_PROFILE  \u003Cname>\n    FAN_DEFAULT_GOVERNOR \u003Ctype>\n    KICKSTART_PWM \u003C0..255>\n",[94],{"type":46,"tag":68,"props":95,"children":97},{"__ignoreMap":96},"",[98],{"type":52,"value":92},{"type":46,"tag":62,"props":100,"children":101},{},[102],{"type":52,"value":103},"Rules:",{"type":46,"tag":105,"props":106,"children":107},"ul",{},[108,136,185,206,236,266,287,301,338],{"type":46,"tag":109,"props":110,"children":111},"li",{},[112,118,120,126,128,134],{"type":46,"tag":113,"props":114,"children":115},"strong",{},[116],{"type":52,"value":117},"Profile curve tuples are 4-column",{"type":52,"value":119},": ",{"type":46,"tag":68,"props":121,"children":123},{"className":122},[],[124],{"type":52,"value":125},"TEMP HYST PWM RPM",{"type":52,"value":127},". Sort points by ascending ",{"type":46,"tag":68,"props":129,"children":131},{"className":130},[],[132],{"type":52,"value":133},"TEMP",{"type":52,"value":135},"; the daemon interpolates between them.",{"type":46,"tag":109,"props":137,"children":138},{},[139,156,158,167,169,175,177,183],{"type":46,"tag":113,"props":140,"children":141},{},[142,148,150],{"type":46,"tag":68,"props":143,"children":145},{"className":144},[],[146],{"type":52,"value":147},"PWM",{"type":52,"value":149}," is ",{"type":46,"tag":68,"props":151,"children":153},{"className":152},[],[154],{"type":52,"value":155},"0..255",{"type":52,"value":157}," (8-bit duty cycle); ",{"type":46,"tag":113,"props":159,"children":160},{},[161],{"type":46,"tag":68,"props":162,"children":164},{"className":163},[],[165],{"type":52,"value":166},"RPM",{"type":52,"value":168}," is the close-loop target speed. A trailing ",{"type":46,"tag":68,"props":170,"children":172},{"className":171},[],[173],{"type":52,"value":174},"0 0",{"type":52,"value":176}," row at the high end pins the fan off above ",{"type":46,"tag":68,"props":178,"children":180},{"className":179},[],[181],{"type":52,"value":182},"GROUP_MAX_TEMP",{"type":52,"value":184},".",{"type":46,"tag":109,"props":186,"children":187},{},[188,197,199,204],{"type":46,"tag":113,"props":189,"children":190},{},[191],{"type":46,"tag":68,"props":192,"children":194},{"className":193},[],[195],{"type":52,"value":196},"HYST",{"type":52,"value":198}," is hysteresis (°C) at that point — the controller waits ",{"type":46,"tag":68,"props":200,"children":202},{"className":201},[],[203],{"type":52,"value":196},{"type":52,"value":205}," degrees of cooling before stepping the curve down.",{"type":46,"tag":109,"props":207,"children":208},{},[209,218,220,226,228,234],{"type":46,"tag":113,"props":210,"children":211},{},[212],{"type":46,"tag":68,"props":213,"children":215},{"className":214},[],[216],{"type":52,"value":217},"FAN_DEFAULT_PROFILE",{"type":52,"value":219}," must reference an existing ",{"type":46,"tag":68,"props":221,"children":223},{"className":222},[],[224],{"type":52,"value":225},"FAN_PROFILE",{"type":52,"value":227}," block in the same ",{"type":46,"tag":68,"props":229,"children":231},{"className":230},[],[232],{"type":52,"value":233},"\u003CFAN N>",{"type":52,"value":235},". nvfancontrol fails to start if the default names a missing profile.",{"type":46,"tag":109,"props":237,"children":238},{},[239,248,250,256,258,264],{"type":46,"tag":113,"props":240,"children":241},{},[242],{"type":46,"tag":68,"props":243,"children":245},{"className":244},[],[246],{"type":52,"value":247},"FAN_DEFAULT_CONTROL",{"type":52,"value":249}," = ",{"type":46,"tag":68,"props":251,"children":253},{"className":252},[],[254],{"type":52,"value":255},"close_loop",{"type":52,"value":257}," (drives toward target RPM, requires tach) or ",{"type":46,"tag":68,"props":259,"children":261},{"className":260},[],[262],{"type":52,"value":263},"open_loop",{"type":52,"value":265}," (writes PWM directly).",{"type":46,"tag":109,"props":267,"children":268},{},[269,278,279,285],{"type":46,"tag":113,"props":270,"children":271},{},[272],{"type":46,"tag":68,"props":273,"children":275},{"className":274},[],[276],{"type":52,"value":277},"FAN_DEFAULT_GOVERNOR",{"type":52,"value":249},{"type":46,"tag":68,"props":280,"children":282},{"className":281},[],[283],{"type":52,"value":284},"cont",{"type":52,"value":286}," (continuous interpolation) and other family-specific values; copy verbatim from existing per-board files when introducing one.",{"type":46,"tag":109,"props":288,"children":289},{},[290,299],{"type":46,"tag":113,"props":291,"children":292},{},[293],{"type":46,"tag":68,"props":294,"children":296},{"className":295},[],[297],{"type":52,"value":298},"THERMAL_GROUP",{"type":52,"value":300}," maps thermal zones to the controller's input. Coefficients are a 20-element CSV — copy verbatim from existing entries; values vary by chip family and zone.",{"type":46,"tag":109,"props":302,"children":303},{},[304,312,314,320,322,328,330,336],{"type":46,"tag":113,"props":305,"children":306},{},[307],{"type":46,"tag":68,"props":308,"children":310},{"className":309},[],[311],{"type":52,"value":233},{"type":52,"value":313}," is one block per fan index (typical: ",{"type":46,"tag":68,"props":315,"children":317},{"className":316},[],[318],{"type":52,"value":319},"\u003CFAN 1>",{"type":52,"value":321},"). Block boundaries ",{"type":46,"tag":68,"props":323,"children":325},{"className":324},[],[326],{"type":52,"value":327},"\u003C...>",{"type":52,"value":329}," and ",{"type":46,"tag":68,"props":331,"children":333},{"className":332},[],[334],{"type":52,"value":335},"{...}",{"type":52,"value":337}," are strict; preserve indentation matching neighboring lines.",{"type":46,"tag":109,"props":339,"children":340},{},[341,346],{"type":46,"tag":113,"props":342,"children":343},{},[344],{"type":52,"value":345},"Curves are characterised, not invented.",{"type":52,"value":347}," Add or edit curves from real thermal-acoustic data for the platform; do not interpolate from neighbouring profiles or copy across chip families.",{"type":46,"tag":55,"props":349,"children":351},{"id":350},"prerequisites",[352],{"type":52,"value":353},"Prerequisites",{"type":46,"tag":62,"props":355,"children":356},{},[357,359,369],{"type":52,"value":358},"Resolve the active profile per\n",{"type":46,"tag":360,"props":361,"children":363},"a",{"href":362},"..\u002F..\u002Fcontext\u002Ftarget-platform-contract.md",[364],{"type":46,"tag":68,"props":365,"children":367},{"className":366},[],[368],{"type":52,"value":362},{"type":52,"value":370},".\nRefuse and route in these cases:",{"type":46,"tag":372,"props":373,"children":374},"table",{},[375,394],{"type":46,"tag":376,"props":377,"children":378},"thead",{},[379],{"type":46,"tag":380,"props":381,"children":382},"tr",{},[383,389],{"type":46,"tag":384,"props":385,"children":386},"th",{},[387],{"type":52,"value":388},"Condition",{"type":46,"tag":384,"props":390,"children":391},{},[392],{"type":52,"value":393},"Refuse with",{"type":46,"tag":395,"props":396,"children":397},"tbody",{},[398,433,460,484],{"type":46,"tag":380,"props":399,"children":400},{},[401,413],{"type":46,"tag":402,"props":403,"children":404},"td",{},[405,407],{"type":52,"value":406},"No active profile, or ",{"type":46,"tag":68,"props":408,"children":410},{"className":409},[],[411],{"type":52,"value":412},"active: NA",{"type":46,"tag":402,"props":414,"children":415},{},[416,418,424,426,432],{"type":52,"value":417},"Route to ",{"type":46,"tag":68,"props":419,"children":421},{"className":420},[],[422],{"type":52,"value":423},"\u002Fjetson-set-target",{"type":52,"value":425}," or ",{"type":46,"tag":68,"props":427,"children":429},{"className":428},[],[430],{"type":52,"value":431},"\u002Fjetson-init-target",{"type":52,"value":184},{"type":46,"tag":380,"props":434,"children":435},{},[436,449],{"type":46,"tag":402,"props":437,"children":438},{},[439,441,447],{"type":52,"value":440},"Profile lacks ",{"type":46,"tag":68,"props":442,"children":444},{"className":443},[],[445],{"type":52,"value":446},"bsp_image:",{"type":52,"value":448}," block",{"type":46,"tag":402,"props":450,"children":451},{},[452,453,459],{"type":52,"value":417},{"type":46,"tag":68,"props":454,"children":456},{"className":455},[],[457],{"type":52,"value":458},"\u002Fjetson-init-image",{"type":52,"value":184},{"type":46,"tag":380,"props":461,"children":462},{},[463,474],{"type":46,"tag":402,"props":464,"children":465},{},[466,472],{"type":46,"tag":68,"props":467,"children":469},{"className":468},[],[470],{"type":52,"value":471},"\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F",{"type":52,"value":473}," missing",{"type":46,"tag":402,"props":475,"children":476},{},[477,478,483],{"type":52,"value":417},{"type":46,"tag":68,"props":479,"children":481},{"className":480},[],[482],{"type":52,"value":458},{"type":52,"value":184},{"type":46,"tag":380,"props":485,"children":486},{},[487,498],{"type":46,"tag":402,"props":488,"children":489},{},[490,496],{"type":46,"tag":68,"props":491,"children":493},{"className":492},[],[494],{"type":52,"value":495},"\u003Csource.root_path>\u002FLinux_for_Tegra\u002F",{"type":52,"value":497}," missing or not a git repo",{"type":46,"tag":402,"props":499,"children":500},{},[501,502,508],{"type":52,"value":417},{"type":46,"tag":68,"props":503,"children":505},{"className":504},[],[506],{"type":52,"value":507},"\u002Fjetson-init-source",{"type":52,"value":184},{"type":46,"tag":62,"props":510,"children":511},{},[512],{"type":52,"value":513},"Resolve paths:",{"type":46,"tag":105,"props":515,"children":516},{},[517,543],{"type":46,"tag":109,"props":518,"children":519},{},[520,526,528,534,536,542],{"type":46,"tag":68,"props":521,"children":523},{"className":522},[],[524],{"type":52,"value":525},"\u003Cbsp_image.root_path>",{"type":52,"value":527}," from ",{"type":46,"tag":68,"props":529,"children":531},{"className":530},[],[532],{"type":52,"value":533},"bsp_image.root_path:",{"type":52,"value":535}," if present, else ",{"type":46,"tag":68,"props":537,"children":539},{"className":538},[],[540],{"type":52,"value":541},"\u003Cworkspace>\u002FImage",{"type":52,"value":184},{"type":46,"tag":109,"props":544,"children":545},{},[546,552,553,559,560,566],{"type":46,"tag":68,"props":547,"children":549},{"className":548},[],[550],{"type":52,"value":551},"\u003Csource.root_path>",{"type":52,"value":527},{"type":46,"tag":68,"props":554,"children":556},{"className":555},[],[557],{"type":52,"value":558},"source.root_path:",{"type":52,"value":535},{"type":46,"tag":68,"props":561,"children":563},{"className":562},[],[564],{"type":52,"value":565},"\u003Cworkspace>\u002FSource",{"type":52,"value":184},{"type":46,"tag":62,"props":568,"children":569},{},[570,575,576,581,583,588,590,599,601,607],{"type":46,"tag":68,"props":571,"children":573},{"className":572},[],[574],{"type":52,"value":525},{"type":52,"value":149},{"type":46,"tag":113,"props":577,"children":578},{},[579],{"type":52,"value":580},"read-only",{"type":52,"value":582}," for this skill; every write lands\nunder ",{"type":46,"tag":68,"props":584,"children":586},{"className":585},[],[587],{"type":52,"value":551},{"type":52,"value":589}," (the overlay tracker). This is the workflow\ninvariant in\n",{"type":46,"tag":360,"props":591,"children":593},{"href":592},"..\u002F..\u002Fcontext\u002Fbsp-customization-workflow.md#workflow-invariants",[594],{"type":46,"tag":68,"props":595,"children":597},{"className":596},[],[598],{"type":52,"value":592},{"type":52,"value":600}," —\nhand-editing upstream silently destroys the diff trail and makes\n",{"type":46,"tag":68,"props":602,"children":604},{"className":603},[],[605],{"type":52,"value":606},"\u002Fjetson-promote-image",{"type":52,"value":608}," a noop.",{"type":46,"tag":55,"props":610,"children":612},{"id":611},"the-per-board-file",[613],{"type":52,"value":614},"The per-board file",{"type":46,"tag":62,"props":616,"children":617},{},[618],{"type":52,"value":619},"The conf this skill edits has the relative path:",{"type":46,"tag":88,"props":621,"children":624},{"className":622,"code":623,"language":52},[91],"Linux_for_Tegra\u002Frootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002Fnvfancontrol_\u003Cactive-sku>.conf\n",[625],{"type":46,"tag":68,"props":626,"children":627},{"__ignoreMap":96},[628],{"type":52,"value":623},{"type":46,"tag":62,"props":630,"children":631},{},[632,634,639],{"type":52,"value":633},"It lives in ",{"type":46,"tag":113,"props":635,"children":636},{},[637],{"type":52,"value":638},"two",{"type":52,"value":640}," roots; the skill walks both:",{"type":46,"tag":372,"props":642,"children":643},{},[644,665],{"type":46,"tag":376,"props":645,"children":646},{},[647],{"type":46,"tag":380,"props":648,"children":649},{},[650,655,660],{"type":46,"tag":384,"props":651,"children":652},{},[653],{"type":52,"value":654},"Role",{"type":46,"tag":384,"props":656,"children":657},{},[658],{"type":52,"value":659},"Location",{"type":46,"tag":384,"props":661,"children":662},{},[663],{"type":52,"value":664},"Skill writes?",{"type":46,"tag":395,"props":666,"children":667},{},[668,690],{"type":46,"tag":380,"props":669,"children":670},{},[671,676,685],{"type":46,"tag":402,"props":672,"children":673},{},[674],{"type":52,"value":675},"Detection + pristine source",{"type":46,"tag":402,"props":677,"children":678},{},[679],{"type":46,"tag":68,"props":680,"children":682},{"className":681},[],[683],{"type":52,"value":684},"\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002Frootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F",{"type":46,"tag":402,"props":686,"children":687},{},[688],{"type":52,"value":689},"no — read-only",{"type":46,"tag":380,"props":691,"children":692},{},[693,698,707],{"type":46,"tag":402,"props":694,"children":695},{},[696],{"type":52,"value":697},"Overlay edit target + git commit",{"type":46,"tag":402,"props":699,"children":700},{},[701],{"type":46,"tag":68,"props":702,"children":704},{"className":703},[],[705],{"type":52,"value":706},"\u003Csource.root_path>\u002FLinux_for_Tegra\u002Frootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F",{"type":46,"tag":402,"props":708,"children":709},{},[710],{"type":52,"value":711},"yes",{"type":46,"tag":62,"props":713,"children":714},{},[715,717,722,724,729,731,736,738,744,746,752],{"type":52,"value":716},"Subsequent sections refer to ",{"type":46,"tag":113,"props":718,"children":719},{},[720],{"type":52,"value":721},"the per-board file",{"type":52,"value":723}," to mean the overlay copy\nunder ",{"type":46,"tag":68,"props":725,"children":727},{"className":726},[],[728],{"type":52,"value":551},{"type":52,"value":730},". Operations 1–4 all read, edit, and save against\nthat overlay copy. The ",{"type":46,"tag":68,"props":732,"children":734},{"className":733},[],[735],{"type":52,"value":525},{"type":52,"value":737}," copy is read once during the\n\"Resolving ",{"type":46,"tag":68,"props":739,"children":741},{"className":740},[],[742],{"type":52,"value":743},"\u003Cactive-sku>",{"type":52,"value":745},"\" detection step and once during the\n",{"type":46,"tag":360,"props":747,"children":749},{"href":748},"#overlay-edit-recipe-apply-before-any-operation",[750],{"type":52,"value":751},"Overlay edit recipe",{"type":52,"value":753},"'s\npristine-import step, then never touched again.",{"type":46,"tag":755,"props":756,"children":758},"h3",{"id":757},"resolving-active-sku-which-file-to-edit",[759,761,766],{"type":52,"value":760},"Resolving ",{"type":46,"tag":68,"props":762,"children":764},{"className":763},[],[765],{"type":52,"value":743},{"type":52,"value":767}," — which file to edit",{"type":46,"tag":62,"props":769,"children":770},{},[771],{"type":52,"value":772},"Filename conventions vary per product family:",{"type":46,"tag":105,"props":774,"children":775},{},[776,803,821],{"type":46,"tag":109,"props":777,"children":778},{},[779,785,787,793,795,801],{"type":46,"tag":68,"props":780,"children":782},{"className":781},[],[783],{"type":52,"value":784},"nvfancontrol_\u003Cmodule.id>_\u003Cmodule.sku>.conf",{"type":52,"value":786}," — most Orin parts (e.g. ",{"type":46,"tag":68,"props":788,"children":790},{"className":789},[],[791],{"type":52,"value":792},"nvfancontrol_p3767_0000.conf",{"type":52,"value":794},", ",{"type":46,"tag":68,"props":796,"children":798},{"className":797},[],[799],{"type":52,"value":800},"nvfancontrol_p3701_0008.conf",{"type":52,"value":802},").",{"type":46,"tag":109,"props":804,"children":805},{},[806,812,814,820],{"type":46,"tag":68,"props":807,"children":809},{"className":808},[],[810],{"type":52,"value":811},"nvfancontrol_\u003Cmodule.id>_\u003Cmodule.sku>_\u003Ccarrier.id>_\u003Ccarrier.sku>.conf",{"type":52,"value":813}," — Thor variants where the carrier disambiguates (e.g. ",{"type":46,"tag":68,"props":815,"children":817},{"className":816},[],[818],{"type":52,"value":819},"nvfancontrol_p3834_0008_p4071_0000.conf",{"type":52,"value":802},{"type":46,"tag":109,"props":822,"children":823},{},[824,830,832,838],{"type":46,"tag":68,"props":825,"children":827},{"className":826},[],[828],{"type":52,"value":829},"nvfancontrol_\u003Ccarrier>_\u003Csku>_\u003Crev>.conf",{"type":52,"value":831}," — IGX revision variants (e.g. ",{"type":46,"tag":68,"props":833,"children":835},{"className":834},[],[836],{"type":52,"value":837},"nvfancontrol_p3740_0002_b01.conf",{"type":52,"value":802},{"type":46,"tag":62,"props":840,"children":841},{},[842,844,849],{"type":52,"value":843},"The nvfancontrol daemon resolves the right file at startup based on the booted hardware's DT compatible plus board IDs (no helper script — it's done inside the binary). To map BSP-side without a running target, against ",{"type":46,"tag":68,"props":845,"children":847},{"className":846},[],[848],{"type":52,"value":525},{"type":52,"value":850},":",{"type":46,"tag":852,"props":853,"children":854},"ol",{},[855,866,879,892,905],{"type":46,"tag":109,"props":856,"children":857},{},[858,860,865],{"type":52,"value":859},"List ",{"type":46,"tag":68,"props":861,"children":863},{"className":862},[],[864],{"type":52,"value":684},{"type":52,"value":184},{"type":46,"tag":109,"props":867,"children":868},{},[869,871,877],{"type":52,"value":870},"Filter to filenames that contain ",{"type":46,"tag":68,"props":872,"children":874},{"className":873},[],[875],{"type":52,"value":876},"\u003Cmodule.id>_\u003Cmodule.sku>",{"type":52,"value":878}," from the active profile.",{"type":46,"tag":109,"props":880,"children":881},{},[882,884,890],{"type":52,"value":883},"If multiple candidates remain, refine with ",{"type":46,"tag":68,"props":885,"children":887},{"className":886},[],[888],{"type":52,"value":889},"\u003Ccarrier.id>_\u003Ccarrier.sku>",{"type":52,"value":891}," and (when relevant) the carrier revision tag.",{"type":46,"tag":109,"props":893,"children":894},{},[895,897,903],{"type":52,"value":896},"If still ambiguous, run the per-board flash conf dispatch chain to read the kernel DTB's ",{"type":46,"tag":68,"props":898,"children":900},{"className":899},[],[901],{"type":52,"value":902},"compatible",{"type":52,"value":904}," and pick the file whose name aligns with the resolved board \u002F carrier.",{"type":46,"tag":109,"props":906,"children":907},{},[908,910,915],{"type":52,"value":909},"Verify the chosen file actually exists under ",{"type":46,"tag":68,"props":911,"children":913},{"className":912},[],[914],{"type":52,"value":684},{"type":52,"value":184},{"type":46,"tag":62,"props":917,"children":918},{},[919],{"type":52,"value":920},"Don't blindly compose a filename — the naming convention varies by product family.",{"type":46,"tag":755,"props":922,"children":924},{"id":923},"propagation-set-confs-to-keep-in-sync",[925],{"type":52,"value":926},"Propagation set — confs to keep in sync",{"type":46,"tag":62,"props":928,"children":929},{},[930,932,937],{"type":52,"value":931},"The active-SKU file is rarely the only conf that should carry a customization. After editing it, ",{"type":46,"tag":113,"props":933,"children":934},{},[935],{"type":52,"value":936},"apply the same edit to every sibling in the propagation set",{"type":52,"value":938}," so the change survives regardless of which module \u002F baseboard SKU is booted:",{"type":46,"tag":105,"props":940,"children":941},{},[942,968],{"type":46,"tag":109,"props":943,"children":944},{},[945,950,952,958,960,966],{"type":46,"tag":113,"props":946,"children":947},{},[948],{"type":52,"value":949},"The reference platform's nvfancontrol conf",{"type":52,"value":951}," — the upstream conf the active file was forked from (resolve via ",{"type":46,"tag":68,"props":953,"children":955},{"className":954},[],[956],{"type":52,"value":957},"reference_devkit",{"type":52,"value":959}," in the active profile, or ",{"type":46,"tag":68,"props":961,"children":963},{"className":962},[],[964],{"type":52,"value":965},"jetson-derive-carrier",{"type":52,"value":967}," fork ancestry). For a BSP that contains only the reference (no derived carriers), this is the same file as the active and the rule reduces to a no-op.",{"type":46,"tag":109,"props":969,"children":970},{},[971,976,978,984,986,991],{"type":46,"tag":113,"props":972,"children":973},{},[974],{"type":52,"value":975},"Every carrier-derived nvfancontrol conf",{"type":52,"value":977}," — each ",{"type":46,"tag":68,"props":979,"children":981},{"className":980},[],[982],{"type":52,"value":983},"nvfancontrol_*.conf",{"type":52,"value":985}," produced by ",{"type":46,"tag":68,"props":987,"children":989},{"className":988},[],[990],{"type":52,"value":965},{"type":52,"value":992}," for a custom carrier on top of the same module SKU.",{"type":46,"tag":62,"props":994,"children":995},{},[996,1001,1003,1008,1010,1015,1017,1022,1024,1029],{"type":46,"tag":113,"props":997,"children":998},{},[999],{"type":52,"value":1000},"\"Apply the same edit\" ≠ blanket file copy.",{"type":52,"value":1002}," Port the changed ",{"type":46,"tag":68,"props":1004,"children":1006},{"className":1005},[],[1007],{"type":52,"value":225},{"type":52,"value":1009}," \u002F control lines into each sibling; preserve every other line. Sibling confs often hold carrier-specific deltas (different ",{"type":46,"tag":68,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":52,"value":298},{"type":52,"value":1016}," coefficients for a different thermal solution, different tach ",{"type":46,"tag":68,"props":1018,"children":1020},{"className":1019},[],[1021],{"type":52,"value":166},{"type":52,"value":1023}," ceilings) that must stay intact — a blanket overwrite would mis-tune the fan on those carriers. Blanket-copying is safe ",{"type":46,"tag":113,"props":1025,"children":1026},{},[1027],{"type":52,"value":1028},"only",{"type":52,"value":1030}," when both confs were byte-identical before the edit.",{"type":46,"tag":55,"props":1032,"children":1034},{"id":1033},"overlay-edit-recipe-apply-before-any-operation",[1035],{"type":52,"value":1036},"Overlay edit recipe (apply before any Operation)",{"type":46,"tag":62,"props":1038,"children":1039},{},[1040,1042,1048,1050,1056],{"type":52,"value":1041},"Follow the canonical\n",{"type":46,"tag":360,"props":1043,"children":1045},{"href":1044},"..\u002F..\u002Fcontext\u002Fbsp-customization-workflow.md#off-skill-edits",[1046],{"type":52,"value":1047},"Off-skill edits recipe",{"type":52,"value":1049},"\nin the workflow doc — pristine import + customization commit pair, both\ngated by the preview gate. Apply once per run, covering every per-board\nfile the run touches (the active conf plus every sibling in the\n",{"type":46,"tag":360,"props":1051,"children":1053},{"href":1052},"#propagation-set--confs-to-keep-in-sync",[1054],{"type":52,"value":1055},"Propagation set",{"type":52,"value":802},{"type":46,"tag":62,"props":1058,"children":1059},{},[1060],{"type":52,"value":1061},"Concrete substitutions for this skill:",{"type":46,"tag":105,"props":1063,"children":1064},{},[1065,1082,1102],{"type":46,"tag":109,"props":1066,"children":1067},{},[1068,1074,1075,1081],{"type":46,"tag":68,"props":1069,"children":1071},{"className":1070},[],[1072],{"type":52,"value":1073},"\u003Crel>\u002F\u003Cfile>",{"type":52,"value":149},{"type":46,"tag":68,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":52,"value":1080},"rootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F\u003Cconf>",{"type":52,"value":184},{"type":46,"tag":109,"props":1083,"children":1084},{},[1085,1087,1093,1095,1101],{"type":52,"value":1086},"Suggested pristine-import message:\n",{"type":46,"tag":68,"props":1088,"children":1090},{"className":1089},[],[1091],{"type":52,"value":1092},"import pristine: \u003Ccomma-separated rel paths of imported confs>",{"type":52,"value":1094},",\nbody ",{"type":46,"tag":68,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":52,"value":1100},"Source: \u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F (BSP \u003Cbsp_image.version>)",{"type":52,"value":184},{"type":46,"tag":109,"props":1103,"children":1104},{},[1105,1107,1113,1115,1121],{"type":52,"value":1106},"Suggested customization-commit header:\n",{"type":46,"tag":68,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":52,"value":1112},"jetson-customize-fan: \u003Csummary>",{"type":52,"value":1114},",\nbody lines like ",{"type":46,"tag":68,"props":1116,"children":1118},{"className":1117},[],[1119],{"type":52,"value":1120},"nvfancontrol_p3767_0000.conf: added FAN_PROFILE static (open-loop, PWM=255 flat), FAN_DEFAULT_CONTROL close_loop -> open_loop, FAN_DEFAULT_PROFILE quiet -> static",{"type":52,"value":184},{"type":46,"tag":55,"props":1123,"children":1125},{"id":1124},"instructions",[1126],{"type":52,"value":1127},"Instructions",{"type":46,"tag":62,"props":1129,"children":1130},{},[1131,1133,1137],{"type":52,"value":1132},"Pick the operation that matches the user's intent and follow the\nmatching subsection. All write-side operations (1–4) must first\napply the ",{"type":46,"tag":360,"props":1134,"children":1135},{"href":748},[1136],{"type":52,"value":751},{"type":52,"value":184},{"type":46,"tag":105,"props":1139,"children":1140},{},[1141,1146,1151,1156,1161],{"type":46,"tag":109,"props":1142,"children":1143},{},[1144],{"type":52,"value":1145},"Operation 1 — Add a new fan profile.",{"type":46,"tag":109,"props":1147,"children":1148},{},[1149],{"type":52,"value":1150},"Operation 2 — Remove a fan profile.",{"type":46,"tag":109,"props":1152,"children":1153},{},[1154],{"type":52,"value":1155},"Operation 3 — Edit an existing fan profile (curve, hysteresis).",{"type":46,"tag":109,"props":1157,"children":1158},{},[1159],{"type":52,"value":1160},"Operation 4 — Change the boot default (control \u002F profile \u002F governor).",{"type":46,"tag":109,"props":1162,"children":1163},{},[1164],{"type":52,"value":1165},"Operation 5 — List defined fan profiles (read-only).",{"type":46,"tag":62,"props":1167,"children":1168},{},[1169,1171,1177],{"type":52,"value":1170},"After any write-side operation, run the Deploy chain (",{"type":46,"tag":68,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":52,"value":1176},"## Deploy",{"type":52,"value":1178},")\nto land the change on the device.",{"type":46,"tag":55,"props":1180,"children":1182},{"id":1181},"examples",[1183],{"type":52,"value":1184},"Examples",{"type":46,"tag":62,"props":1186,"children":1187},{},[1188],{"type":52,"value":1189},"Add an aggressive profile to a P3767-0000 (Orin Nano dev kit) target\nand pin it as the boot default:",{"type":46,"tag":88,"props":1191,"children":1194},{"className":1192,"code":1193,"language":52},[91],"\u002Fjetson-customize-fan\n> add a profile called \"aggressive\" with the curve {0:255, 40:150, 80:0}\n> set FAN_DEFAULT_PROFILE to aggressive\n",[1195],{"type":46,"tag":68,"props":1196,"children":1197},{"__ignoreMap":96},[1198],{"type":52,"value":1193},{"type":46,"tag":62,"props":1200,"children":1201},{},[1202,1204,1210],{"type":52,"value":1203},"Soften the fan ramp on the existing ",{"type":46,"tag":68,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":52,"value":1209},"quiet",{"type":52,"value":1211}," profile (raise HYST,\nlower mid-PWM):",{"type":46,"tag":88,"props":1213,"children":1216},{"className":1214,"code":1215,"language":52},[91],"\u002Fjetson-customize-fan\n> edit FAN_PROFILE quiet — raise HYST to 5 from 30 °C up, drop PWM at 60 °C to 80\n",[1217],{"type":46,"tag":68,"props":1218,"children":1219},{"__ignoreMap":96},[1220],{"type":52,"value":1215},{"type":46,"tag":62,"props":1222,"children":1223},{},[1224],{"type":52,"value":1225},"List which profiles the active SKU currently defines and which is\nthe boot default:",{"type":46,"tag":88,"props":1227,"children":1230},{"className":1228,"code":1229,"language":52},[91],"\u002Fjetson-customize-fan\n> list defined fan profiles\n",[1231],{"type":46,"tag":68,"props":1232,"children":1233},{"__ignoreMap":96},[1234],{"type":52,"value":1229},{"type":46,"tag":55,"props":1236,"children":1238},{"id":1237},"operation-1-add-a-new-fan-profile",[1239],{"type":52,"value":1240},"Operation 1 — Add a new fan profile",{"type":46,"tag":62,"props":1242,"children":1243},{},[1244,1246,1250],{"type":52,"value":1245},"Apply the ",{"type":46,"tag":360,"props":1247,"children":1248},{"href":748},[1249],{"type":52,"value":751},{"type":52,"value":1251}," first.",{"type":46,"tag":852,"props":1253,"children":1254},{},[1255,1275,1308],{"type":46,"tag":109,"props":1256,"children":1257},{},[1258,1260,1265,1267,1273],{"type":52,"value":1259},"In the per-board file, inside the ",{"type":46,"tag":68,"props":1261,"children":1263},{"className":1262},[],[1264],{"type":52,"value":233},{"type":52,"value":1266}," block, add a new ",{"type":46,"tag":68,"props":1268,"children":1270},{"className":1269},[],[1271],{"type":52,"value":1272},"FAN_PROFILE \u003Cname> { ... }",{"type":52,"value":1274}," between existing profiles. Daemon parse order doesn't matter, but grouping with siblings keeps the file scannable.",{"type":46,"tag":109,"props":1276,"children":1277},{},[1278,1280,1286,1288,1293,1294,1300,1301,1307],{"type":52,"value":1279},"Pick ",{"type":46,"tag":68,"props":1281,"children":1283},{"className":1282},[],[1284],{"type":52,"value":1285},"\u003Cname>",{"type":52,"value":1287}," lowercase, no whitespace (e.g. ",{"type":46,"tag":68,"props":1289,"children":1291},{"className":1290},[],[1292],{"type":52,"value":1209},{"type":52,"value":794},{"type":46,"tag":68,"props":1295,"children":1297},{"className":1296},[],[1298],{"type":52,"value":1299},"cool",{"type":52,"value":794},{"type":46,"tag":68,"props":1302,"children":1304},{"className":1303},[],[1305],{"type":52,"value":1306},"aggressive",{"type":52,"value":802},{"type":46,"tag":109,"props":1309,"children":1310},{},[1311,1313,1318,1320,1325,1327,1332],{"type":52,"value":1312},"Fill the curve table — 4-column ",{"type":46,"tag":68,"props":1314,"children":1316},{"className":1315},[],[1317],{"type":52,"value":125},{"type":52,"value":1319}," tuples, ascending ",{"type":46,"tag":68,"props":1321,"children":1323},{"className":1322},[],[1324],{"type":52,"value":133},{"type":52,"value":1326},". End with at least one row above ",{"type":46,"tag":68,"props":1328,"children":1330},{"className":1329},[],[1331],{"type":52,"value":182},{"type":52,"value":1333}," so behavior at over-temp is defined.",{"type":46,"tag":62,"props":1335,"children":1336},{},[1337],{"type":52,"value":1338},"Example skeleton:",{"type":46,"tag":88,"props":1340,"children":1343},{"className":1341,"code":1342,"language":52},[91],"FAN_PROFILE aggressive {\n    #TEMP HYST PWM RPM\n    0    0    255 6000\n    20   2    255 6000\n    40   2    150 3500\n    60   2    50  1500\n    80   0    0   0\n    105  0    0   0\n}\n",[1344],{"type":46,"tag":68,"props":1345,"children":1346},{"__ignoreMap":96},[1347],{"type":52,"value":1342},{"type":46,"tag":62,"props":1349,"children":1350},{},[1351],{"type":52,"value":1352},"Validate (see Rules):",{"type":46,"tag":105,"props":1354,"children":1355},{},[1356,1382,1407],{"type":46,"tag":109,"props":1357,"children":1358},{},[1359,1361,1366,1368,1374,1376,1381],{"type":52,"value":1360},"Every ",{"type":46,"tag":68,"props":1362,"children":1364},{"className":1363},[],[1365],{"type":52,"value":133},{"type":52,"value":1367}," lies within ",{"type":46,"tag":68,"props":1369,"children":1371},{"className":1370},[],[1372],{"type":52,"value":1373},"0..GROUP_MAX_TEMP",{"type":52,"value":1375}," of the ",{"type":46,"tag":68,"props":1377,"children":1379},{"className":1378},[],[1380],{"type":52,"value":298},{"type":52,"value":184},{"type":46,"tag":109,"props":1383,"children":1384},{},[1385,1390,1392,1398,1400,1405],{"type":46,"tag":68,"props":1386,"children":1388},{"className":1387},[],[1389],{"type":52,"value":147},{"type":52,"value":1391}," ∈ ",{"type":46,"tag":68,"props":1393,"children":1395},{"className":1394},[],[1396],{"type":52,"value":1397},"[0, 255]",{"type":52,"value":1399},"; ",{"type":46,"tag":68,"props":1401,"children":1403},{"className":1402},[],[1404],{"type":52,"value":166},{"type":52,"value":1406}," ≤ the platform's tach-reported max (varies by fan part).",{"type":46,"tag":109,"props":1408,"children":1409},{},[1410,1412,1417],{"type":52,"value":1411},"Tuples are sorted ascending by ",{"type":46,"tag":68,"props":1413,"children":1415},{"className":1414},[],[1416],{"type":52,"value":133},{"type":52,"value":184},{"type":46,"tag":62,"props":1419,"children":1420},{},[1421],{"type":52,"value":1422},"If you intend the new profile to be the boot default, follow Operation 4.",{"type":46,"tag":55,"props":1424,"children":1426},{"id":1425},"operation-2-remove-a-fan-profile",[1427],{"type":52,"value":1428},"Operation 2 — Remove a fan profile",{"type":46,"tag":62,"props":1430,"children":1431},{},[1432,1433,1437],{"type":52,"value":1245},{"type":46,"tag":360,"props":1434,"children":1435},{"href":748},[1436],{"type":52,"value":751},{"type":52,"value":1251},{"type":46,"tag":852,"props":1439,"children":1440},{},[1441,1460,1486],{"type":46,"tag":109,"props":1442,"children":1443},{},[1444,1446,1451,1453,1459],{"type":52,"value":1445},"In the per-board file, delete the entire ",{"type":46,"tag":68,"props":1447,"children":1449},{"className":1448},[],[1450],{"type":52,"value":1272},{"type":52,"value":1452}," block including all curve rows and the closing ",{"type":46,"tag":68,"props":1454,"children":1456},{"className":1455},[],[1457],{"type":52,"value":1458},"}",{"type":52,"value":184},{"type":46,"tag":109,"props":1461,"children":1462},{},[1463,1465,1470,1472,1477,1479,1484],{"type":52,"value":1464},"If the deleted ",{"type":46,"tag":68,"props":1466,"children":1468},{"className":1467},[],[1469],{"type":52,"value":1285},{"type":52,"value":1471}," matches the trailing ",{"type":46,"tag":68,"props":1473,"children":1475},{"className":1474},[],[1476],{"type":52,"value":217},{"type":52,"value":1478},", point ",{"type":46,"tag":68,"props":1480,"children":1482},{"className":1481},[],[1483],{"type":52,"value":217},{"type":52,"value":1485}," at a remaining profile — otherwise the daemon fails to start.",{"type":46,"tag":109,"props":1487,"children":1488},{},[1489,1491],{"type":52,"value":1490},"Search for hard-coded references in the rootfs before declaring the change safe:\n",{"type":46,"tag":88,"props":1492,"children":1496},{"className":1493,"code":1494,"language":1495,"meta":96,"style":96},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","grep -rn \"nvfancontrol.*profile\\|FAN_PROFILE\" \\\n  Linux_for_Tegra\u002Frootfs\u002Fetc 2>\u002Fdev\u002Fnull\n","bash",[1497],{"type":46,"tag":68,"props":1498,"children":1499},{"__ignoreMap":96},[1500,1540],{"type":46,"tag":1501,"props":1502,"children":1505},"span",{"class":1503,"line":1504},"line",1,[1506,1512,1518,1524,1529,1534],{"type":46,"tag":1501,"props":1507,"children":1509},{"style":1508},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1510],{"type":52,"value":1511},"grep",{"type":46,"tag":1501,"props":1513,"children":1515},{"style":1514},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1516],{"type":52,"value":1517}," -rn",{"type":46,"tag":1501,"props":1519,"children":1521},{"style":1520},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1522],{"type":52,"value":1523}," \"",{"type":46,"tag":1501,"props":1525,"children":1526},{"style":1514},[1527],{"type":52,"value":1528},"nvfancontrol.*profile\\|FAN_PROFILE",{"type":46,"tag":1501,"props":1530,"children":1531},{"style":1520},[1532],{"type":52,"value":1533},"\"",{"type":46,"tag":1501,"props":1535,"children":1537},{"style":1536},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1538],{"type":52,"value":1539}," \\\n",{"type":46,"tag":1501,"props":1541,"children":1543},{"class":1503,"line":1542},2,[1544,1549,1554],{"type":46,"tag":1501,"props":1545,"children":1546},{"style":1514},[1547],{"type":52,"value":1548},"  Linux_for_Tegra\u002Frootfs\u002Fetc",{"type":46,"tag":1501,"props":1550,"children":1551},{"style":1520},[1552],{"type":52,"value":1553}," 2>",{"type":46,"tag":1501,"props":1555,"children":1556},{"style":1514},[1557],{"type":52,"value":1558},"\u002Fdev\u002Fnull\n",{"type":46,"tag":62,"props":1560,"children":1561},{},[1562],{"type":52,"value":1563},"The remaining profiles do not need renaming.",{"type":46,"tag":55,"props":1565,"children":1567},{"id":1566},"operation-3-edit-an-existing-fan-profile",[1568],{"type":52,"value":1569},"Operation 3 — Edit an existing fan profile",{"type":46,"tag":62,"props":1571,"children":1572},{},[1573,1574,1578],{"type":52,"value":1245},{"type":46,"tag":360,"props":1575,"children":1576},{"href":748},[1577],{"type":52,"value":751},{"type":52,"value":1251},{"type":46,"tag":852,"props":1580,"children":1581},{},[1582,1602,1614,1626],{"type":46,"tag":109,"props":1583,"children":1584},{},[1585,1587,1593,1595,1600],{"type":52,"value":1586},"In the per-board file, modify the curve rows of the target ",{"type":46,"tag":68,"props":1588,"children":1590},{"className":1589},[],[1591],{"type":52,"value":1592},"FAN_PROFILE \u003Cname>",{"type":52,"value":1594},". Keep the 4-column ",{"type":46,"tag":68,"props":1596,"children":1598},{"className":1597},[],[1599],{"type":52,"value":125},{"type":52,"value":1601}," shape.",{"type":46,"tag":109,"props":1603,"children":1604},{},[1605,1607,1612],{"type":52,"value":1606},"Maintain ascending ",{"type":46,"tag":68,"props":1608,"children":1610},{"className":1609},[],[1611],{"type":52,"value":133},{"type":52,"value":1613}," ordering; insert or remove rows as needed.",{"type":46,"tag":109,"props":1615,"children":1616},{},[1617,1619,1624],{"type":52,"value":1618},"Adjust ",{"type":46,"tag":68,"props":1620,"children":1622},{"className":1621},[],[1623],{"type":52,"value":196},{"type":52,"value":1625}," to tune anti-oscillation: too low → fan thrashes near a curve point; too high → fan lags reality.",{"type":46,"tag":109,"props":1627,"children":1628},{},[1629],{"type":52,"value":1630},"Validate per Operation 1's rules.",{"type":46,"tag":62,"props":1632,"children":1633},{},[1634,1636,1642,1643,1649,1651,1657,1659,1665,1666,1672],{"type":52,"value":1635},"Edits to ",{"type":46,"tag":68,"props":1637,"children":1639},{"className":1638},[],[1640],{"type":52,"value":1641},"KICKSTART_PWM",{"type":52,"value":794},{"type":46,"tag":68,"props":1644,"children":1646},{"className":1645},[],[1647],{"type":52,"value":1648},"RPM_TOLERANCE",{"type":52,"value":1650}," (inside ",{"type":46,"tag":68,"props":1652,"children":1654},{"className":1653},[],[1655],{"type":52,"value":1656},"FAN_CONTROL",{"type":52,"value":1658},"), or ",{"type":46,"tag":68,"props":1660,"children":1662},{"className":1661},[],[1663],{"type":52,"value":1664},"STEP_SIZE",{"type":52,"value":1650},{"type":46,"tag":68,"props":1667,"children":1669},{"className":1668},[],[1670],{"type":52,"value":1671},"FAN_GOVERNOR",{"type":52,"value":1673},") sit outside the profiles but tune the same fan; same per-board file.",{"type":46,"tag":55,"props":1675,"children":1677},{"id":1676},"operation-4-change-the-boot-default",[1678],{"type":52,"value":1679},"Operation 4 — Change the boot default",{"type":46,"tag":62,"props":1681,"children":1682},{},[1683,1684,1688],{"type":52,"value":1245},{"type":46,"tag":360,"props":1685,"children":1686},{"href":748},[1687],{"type":52,"value":751},{"type":52,"value":1251},{"type":46,"tag":62,"props":1690,"children":1691},{},[1692,1694,1699],{"type":52,"value":1693},"Edit the trailing default lines inside the ",{"type":46,"tag":68,"props":1695,"children":1697},{"className":1696},[],[1698],{"type":52,"value":233},{"type":52,"value":1700}," block:",{"type":46,"tag":88,"props":1702,"children":1705},{"className":1703,"code":1704,"language":52},[91],"FAN_DEFAULT_CONTROL  \u003Cclose_loop|open_loop>\nFAN_DEFAULT_PROFILE  \u003Cname>\nFAN_DEFAULT_GOVERNOR \u003Ctype>\n",[1706],{"type":46,"tag":68,"props":1707,"children":1708},{"__ignoreMap":96},[1709],{"type":52,"value":1704},{"type":46,"tag":62,"props":1711,"children":1712},{},[1713,1718,1719,1724,1726,1731,1733,1738,1739,1744],{"type":46,"tag":68,"props":1714,"children":1716},{"className":1715},[],[1717],{"type":52,"value":217},{"type":52,"value":219},{"type":46,"tag":68,"props":1720,"children":1722},{"className":1721},[],[1723],{"type":52,"value":225},{"type":52,"value":1725}," in the same ",{"type":46,"tag":68,"props":1727,"children":1729},{"className":1728},[],[1730],{"type":52,"value":233},{"type":52,"value":1732}," block. ",{"type":46,"tag":68,"props":1734,"children":1736},{"className":1735},[],[1737],{"type":52,"value":247},{"type":52,"value":329},{"type":46,"tag":68,"props":1740,"children":1742},{"className":1741},[],[1743],{"type":52,"value":277},{"type":52,"value":1745}," must reference values the binary supports — copy from existing per-board files when changing.",{"type":46,"tag":55,"props":1747,"children":1749},{"id":1748},"operation-5-list-defined-fan-profiles",[1750],{"type":52,"value":1751},"Operation 5 — List defined fan profiles",{"type":46,"tag":62,"props":1753,"children":1754},{},[1755,1757,1763,1765,1771],{"type":52,"value":1756},"This is a read-only operation; no overlay-tracker setup is needed. Run\nagainst whichever copy you want to inspect (",{"type":46,"tag":68,"props":1758,"children":1760},{"className":1759},[],[1761],{"type":52,"value":1762},"\u003Cbsp_image.root_path>\u002F...",{"type":52,"value":1764},"\nfor the pristine state, ",{"type":46,"tag":68,"props":1766,"children":1768},{"className":1767},[],[1769],{"type":52,"value":1770},"\u003Csource.root_path>\u002F...",{"type":52,"value":1772}," for the post-edit state):",{"type":46,"tag":88,"props":1774,"children":1776},{"className":1493,"code":1775,"language":1495,"meta":96,"style":96},"grep -E '^[[:space:]]*FAN_PROFILE ' \u003Cper-board file>\ngrep -E '^[[:space:]]*FAN_DEFAULT_'  \u003Cper-board file>\n",[1777],{"type":46,"tag":68,"props":1778,"children":1779},{"__ignoreMap":96},[1780,1832],{"type":46,"tag":1501,"props":1781,"children":1782},{"class":1503,"line":1504},[1783,1787,1792,1797,1802,1807,1812,1817,1822,1827],{"type":46,"tag":1501,"props":1784,"children":1785},{"style":1508},[1786],{"type":52,"value":1511},{"type":46,"tag":1501,"props":1788,"children":1789},{"style":1514},[1790],{"type":52,"value":1791}," -E",{"type":46,"tag":1501,"props":1793,"children":1794},{"style":1520},[1795],{"type":52,"value":1796}," '",{"type":46,"tag":1501,"props":1798,"children":1799},{"style":1514},[1800],{"type":52,"value":1801},"^[[:space:]]*FAN_PROFILE ",{"type":46,"tag":1501,"props":1803,"children":1804},{"style":1520},[1805],{"type":52,"value":1806},"'",{"type":46,"tag":1501,"props":1808,"children":1809},{"style":1520},[1810],{"type":52,"value":1811}," \u003C",{"type":46,"tag":1501,"props":1813,"children":1814},{"style":1514},[1815],{"type":52,"value":1816},"per-board",{"type":46,"tag":1501,"props":1818,"children":1819},{"style":1514},[1820],{"type":52,"value":1821}," fil",{"type":46,"tag":1501,"props":1823,"children":1824},{"style":1536},[1825],{"type":52,"value":1826},"e",{"type":46,"tag":1501,"props":1828,"children":1829},{"style":1520},[1830],{"type":52,"value":1831},">\n",{"type":46,"tag":1501,"props":1833,"children":1834},{"class":1503,"line":1542},[1835,1839,1843,1847,1852,1856,1861,1865,1869,1873],{"type":46,"tag":1501,"props":1836,"children":1837},{"style":1508},[1838],{"type":52,"value":1511},{"type":46,"tag":1501,"props":1840,"children":1841},{"style":1514},[1842],{"type":52,"value":1791},{"type":46,"tag":1501,"props":1844,"children":1845},{"style":1520},[1846],{"type":52,"value":1796},{"type":46,"tag":1501,"props":1848,"children":1849},{"style":1514},[1850],{"type":52,"value":1851},"^[[:space:]]*FAN_DEFAULT_",{"type":46,"tag":1501,"props":1853,"children":1854},{"style":1520},[1855],{"type":52,"value":1806},{"type":46,"tag":1501,"props":1857,"children":1858},{"style":1520},[1859],{"type":52,"value":1860},"  \u003C",{"type":46,"tag":1501,"props":1862,"children":1863},{"style":1514},[1864],{"type":52,"value":1816},{"type":46,"tag":1501,"props":1866,"children":1867},{"style":1514},[1868],{"type":52,"value":1821},{"type":46,"tag":1501,"props":1870,"children":1871},{"style":1536},[1872],{"type":52,"value":1826},{"type":46,"tag":1501,"props":1874,"children":1875},{"style":1520},[1876],{"type":52,"value":1831},{"type":46,"tag":62,"props":1878,"children":1879},{},[1880],{"type":52,"value":1881},"The first prints every profile name in the file; the second prints the boot defaults (control \u002F profile \u002F governor).",{"type":46,"tag":55,"props":1883,"children":1885},{"id":1884},"limitations",[1886],{"type":52,"value":1887},"Limitations",{"type":46,"tag":105,"props":1889,"children":1890},{},[1891,1918,1958,1963,1982],{"type":46,"tag":109,"props":1892,"children":1893},{},[1894,1896,1902,1904,1910,1912,1917],{"type":52,"value":1895},"BSP-side scope only — this skill never touches a running target's\n",{"type":46,"tag":68,"props":1897,"children":1899},{"className":1898},[],[1900],{"type":52,"value":1901},"\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F",{"type":52,"value":1903}," directly. Live tuning requires\nreboot via Deploy, or the side-channel ",{"type":46,"tag":68,"props":1905,"children":1907},{"className":1906},[],[1908],{"type":52,"value":1909},"scp + systemctl restart",{"type":52,"value":1911},"\nflow described in ",{"type":46,"tag":68,"props":1913,"children":1915},{"className":1914},[],[1916],{"type":52,"value":1176},{"type":52,"value":184},{"type":46,"tag":109,"props":1919,"children":1920},{},[1921,1923,1928,1930,1935,1937,1942,1944,1949,1951,1956],{"type":52,"value":1922},"Edits land in the overlay copy under ",{"type":46,"tag":68,"props":1924,"children":1926},{"className":1925},[],[1927],{"type":52,"value":551},{"type":52,"value":1929}," only;\nthe ",{"type":46,"tag":68,"props":1931,"children":1933},{"className":1932},[],[1934],{"type":52,"value":525},{"type":52,"value":1936}," copy is read-only and is rewritten by\n",{"type":46,"tag":68,"props":1938,"children":1940},{"className":1939},[],[1941],{"type":52,"value":606},{"type":52,"value":1943},". Hand-editing ",{"type":46,"tag":68,"props":1945,"children":1947},{"className":1946},[],[1948],{"type":52,"value":73},{"type":52,"value":1950}," is silently lost\non the next ",{"type":46,"tag":68,"props":1952,"children":1954},{"className":1953},[],[1955],{"type":52,"value":458},{"type":52,"value":1957}," re-extract.",{"type":46,"tag":109,"props":1959,"children":1960},{},[1961],{"type":52,"value":1962},"Curve tuples must reflect characterised thermal-acoustic data for\nthe platform — this skill does not interpolate or copy curves\nacross chip families.",{"type":46,"tag":109,"props":1964,"children":1965},{},[1966,1968,1973,1975,1980],{"type":52,"value":1967},"Propagation across sibling carriers (same module SKU) is partial\nby design: only the changed ",{"type":46,"tag":68,"props":1969,"children":1971},{"className":1970},[],[1972],{"type":52,"value":225},{"type":52,"value":1974}," \u002F control lines are\nported, never a blanket file overwrite, since sibling confs may\nhold carrier-specific ",{"type":46,"tag":68,"props":1976,"children":1978},{"className":1977},[],[1979],{"type":52,"value":298},{"type":52,"value":1981}," \u002F RPM ceilings.",{"type":46,"tag":109,"props":1983,"children":1984},{},[1985,1987,1992,1994,1999],{"type":52,"value":1986},"Curve point limits are family-specific; copy verbatim from existing\nconfs when introducing new ",{"type":46,"tag":68,"props":1988,"children":1990},{"className":1989},[],[1991],{"type":52,"value":298},{"type":52,"value":1993}," coefficients or\n",{"type":46,"tag":68,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":52,"value":277},{"type":52,"value":2000}," values.",{"type":46,"tag":55,"props":2002,"children":2004},{"id":2003},"troubleshooting",[2005],{"type":52,"value":2006},"Troubleshooting",{"type":46,"tag":372,"props":2008,"children":2009},{},[2010,2031],{"type":46,"tag":376,"props":2011,"children":2012},{},[2013],{"type":46,"tag":380,"props":2014,"children":2015},{},[2016,2021,2026],{"type":46,"tag":384,"props":2017,"children":2018},{},[2019],{"type":52,"value":2020},"Error",{"type":46,"tag":384,"props":2022,"children":2023},{},[2024],{"type":52,"value":2025},"Cause",{"type":46,"tag":384,"props":2027,"children":2028},{},[2029],{"type":52,"value":2030},"Solution",{"type":46,"tag":395,"props":2032,"children":2033},{},[2034,2076,2106,2136,2174,2197,2251,2296],{"type":46,"tag":380,"props":2035,"children":2036},{},[2037,2042,2052],{"type":46,"tag":402,"props":2038,"children":2039},{},[2040],{"type":52,"value":2041},"nvfancontrol.service fails to start after edit",{"type":46,"tag":402,"props":2043,"children":2044},{},[2045,2050],{"type":46,"tag":68,"props":2046,"children":2048},{"className":2047},[],[2049],{"type":52,"value":217},{"type":52,"value":2051}," references a profile that was removed or renamed",{"type":46,"tag":402,"props":2053,"children":2054},{},[2055,2057,2062,2064,2069,2070,2075],{"type":52,"value":2056},"Set ",{"type":46,"tag":68,"props":2058,"children":2060},{"className":2059},[],[2061],{"type":52,"value":217},{"type":52,"value":2063}," to an existing ",{"type":46,"tag":68,"props":2065,"children":2067},{"className":2066},[],[2068],{"type":52,"value":1592},{"type":52,"value":1725},{"type":46,"tag":68,"props":2071,"children":2073},{"className":2072},[],[2074],{"type":52,"value":233},{"type":52,"value":184},{"type":46,"tag":380,"props":2077,"children":2078},{},[2079,2084,2094],{"type":46,"tag":402,"props":2080,"children":2081},{},[2082],{"type":52,"value":2083},"Fan thrashes near a curve point",{"type":46,"tag":402,"props":2085,"children":2086},{},[2087,2092],{"type":46,"tag":68,"props":2088,"children":2090},{"className":2089},[],[2091],{"type":52,"value":196},{"type":52,"value":2093}," too low",{"type":46,"tag":402,"props":2095,"children":2096},{},[2097,2099,2104],{"type":52,"value":2098},"Raise ",{"type":46,"tag":68,"props":2100,"children":2102},{"className":2101},[],[2103],{"type":52,"value":196},{"type":52,"value":2105}," on the affected row (typical 2–5 °C).",{"type":46,"tag":380,"props":2107,"children":2108},{},[2109,2114,2124],{"type":46,"tag":402,"props":2110,"children":2111},{},[2112],{"type":52,"value":2113},"Fan lags reality",{"type":46,"tag":402,"props":2115,"children":2116},{},[2117,2122],{"type":46,"tag":68,"props":2118,"children":2120},{"className":2119},[],[2121],{"type":52,"value":196},{"type":52,"value":2123}," too high",{"type":46,"tag":402,"props":2125,"children":2126},{},[2127,2129,2134],{"type":52,"value":2128},"Lower ",{"type":46,"tag":68,"props":2130,"children":2132},{"className":2131},[],[2133],{"type":52,"value":196},{"type":52,"value":2135}," on the affected row.",{"type":46,"tag":380,"props":2137,"children":2138},{},[2139,2144,2163],{"type":46,"tag":402,"props":2140,"children":2141},{},[2142],{"type":52,"value":2143},"Fan never spins up at high temp",{"type":46,"tag":402,"props":2145,"children":2146},{},[2147,2149,2154,2156,2161],{"type":52,"value":2148},"Curve missing a row above ",{"type":46,"tag":68,"props":2150,"children":2152},{"className":2151},[],[2153],{"type":52,"value":182},{"type":52,"value":2155},", or trailing ",{"type":46,"tag":68,"props":2157,"children":2159},{"className":2158},[],[2160],{"type":52,"value":174},{"type":52,"value":2162}," truncates above ambient",{"type":46,"tag":402,"props":2164,"children":2165},{},[2166,2168,2173],{"type":52,"value":2167},"Add a high-temp tuple with non-zero PWM\u002FRPM; pin the over-temp row only above ",{"type":46,"tag":68,"props":2169,"children":2171},{"className":2170},[],[2172],{"type":52,"value":182},{"type":52,"value":184},{"type":46,"tag":380,"props":2175,"children":2176},{},[2177,2182,2192],{"type":46,"tag":402,"props":2178,"children":2179},{},[2180],{"type":52,"value":2181},"Daemon parse error referencing column count",{"type":46,"tag":402,"props":2183,"children":2184},{},[2185,2187],{"type":52,"value":2186},"Curve row not 4-column ",{"type":46,"tag":68,"props":2188,"children":2190},{"className":2189},[],[2191],{"type":52,"value":125},{"type":46,"tag":402,"props":2193,"children":2194},{},[2195],{"type":52,"value":2196},"Restore 4-column shape; remove trailing whitespace and stray columns.",{"type":46,"tag":380,"props":2198,"children":2199},{},[2200,2210,2227],{"type":46,"tag":402,"props":2201,"children":2202},{},[2203,2208],{"type":46,"tag":68,"props":2204,"children":2206},{"className":2205},[],[2207],{"type":52,"value":166},{"type":52,"value":2209}," target never reached in close-loop",{"type":46,"tag":402,"props":2211,"children":2212},{},[2213,2215,2220,2222],{"type":52,"value":2214},"Target above tach-reported max, or ",{"type":46,"tag":68,"props":2216,"children":2218},{"className":2217},[],[2219],{"type":52,"value":1656},{"type":52,"value":2221}," set to ",{"type":46,"tag":68,"props":2223,"children":2225},{"className":2224},[],[2226],{"type":52,"value":263},{"type":46,"tag":402,"props":2228,"children":2229},{},[2230,2231,2236,2238,2243,2245,2250],{"type":52,"value":2128},{"type":46,"tag":68,"props":2232,"children":2234},{"className":2233},[],[2235],{"type":52,"value":166},{"type":52,"value":2237}," to within the fan's mechanical max, or switch ",{"type":46,"tag":68,"props":2239,"children":2241},{"className":2240},[],[2242],{"type":52,"value":247},{"type":52,"value":2244}," to ",{"type":46,"tag":68,"props":2246,"children":2248},{"className":2247},[],[2249],{"type":52,"value":255},{"type":52,"value":184},{"type":46,"tag":380,"props":2252,"children":2253},{},[2254,2266,2285],{"type":46,"tag":402,"props":2255,"children":2256},{},[2257,2259,2264],{"type":52,"value":2258},"Change vanished after ",{"type":46,"tag":68,"props":2260,"children":2262},{"className":2261},[],[2263],{"type":52,"value":458},{"type":52,"value":2265}," re-extract",{"type":46,"tag":402,"props":2267,"children":2268},{},[2269,2271,2276,2278,2283],{"type":52,"value":2270},"Edit landed in ",{"type":46,"tag":68,"props":2272,"children":2274},{"className":2273},[],[2275],{"type":52,"value":525},{"type":52,"value":2277}," instead of ",{"type":46,"tag":68,"props":2279,"children":2281},{"className":2280},[],[2282],{"type":52,"value":551},{"type":52,"value":2284}," overlay",{"type":46,"tag":402,"props":2286,"children":2287},{},[2288,2290,2294],{"type":52,"value":2289},"Re-apply via the ",{"type":46,"tag":360,"props":2291,"children":2292},{"href":748},[2293],{"type":52,"value":751},{"type":52,"value":2295}," so the change is committed in the overlay tracker.",{"type":46,"tag":380,"props":2297,"children":2298},{},[2299,2304,2323],{"type":46,"tag":402,"props":2300,"children":2301},{},[2302],{"type":52,"value":2303},"Sibling carrier boots with wrong tach ceiling after propagation",{"type":46,"tag":402,"props":2305,"children":2306},{},[2307,2309,2314,2316,2321],{"type":52,"value":2308},"Blanket file copy clobbered carrier-specific ",{"type":46,"tag":68,"props":2310,"children":2312},{"className":2311},[],[2313],{"type":52,"value":298},{"type":52,"value":2315}," \u002F ",{"type":46,"tag":68,"props":2317,"children":2319},{"className":2318},[],[2320],{"type":52,"value":166},{"type":52,"value":2322}," rows",{"type":46,"tag":402,"props":2324,"children":2325},{},[2326,2328,2332,2334,2339],{"type":52,"value":2327},"Port only the changed lines per ",{"type":46,"tag":360,"props":2329,"children":2330},{"href":1052},[2331],{"type":52,"value":1055},{"type":52,"value":2333},"; restore the carrier's original ",{"type":46,"tag":68,"props":2335,"children":2337},{"className":2336},[],[2338],{"type":52,"value":298},{"type":52,"value":184},{"type":46,"tag":55,"props":2341,"children":2343},{"id":2342},"deploy",[2344],{"type":52,"value":2345},"Deploy",{"type":46,"tag":62,"props":2347,"children":2348},{},[2349],{"type":52,"value":2350},"The customization commit in the overlay tracker does not reach the device\non its own. The Deploy chain:",{"type":46,"tag":852,"props":2352,"children":2353},{},[2354,2390,2411],{"type":46,"tag":109,"props":2355,"children":2356},{},[2357,2365,2367,2372,2374,2380,2382,2388],{"type":46,"tag":113,"props":2358,"children":2359},{},[2360],{"type":46,"tag":68,"props":2361,"children":2363},{"className":2362},[],[2364],{"type":52,"value":606},{"type":52,"value":2366}," — copies every tracked file in the overlay\ninto ",{"type":46,"tag":68,"props":2368,"children":2370},{"className":2369},[],[2371],{"type":52,"value":471},{"type":52,"value":2373},". Diff-aware (skip\nbyte-identical); uses ",{"type":46,"tag":68,"props":2375,"children":2377},{"className":2376},[],[2378],{"type":52,"value":2379},"sudo cp -p",{"type":52,"value":2381}," for ",{"type":46,"tag":68,"props":2383,"children":2385},{"className":2384},[],[2386],{"type":52,"value":2387},"rootfs\u002F*",{"type":52,"value":2389}," destinations.",{"type":46,"tag":109,"props":2391,"children":2392},{},[2393,2402,2404,2409],{"type":46,"tag":113,"props":2394,"children":2395},{},[2396],{"type":46,"tag":68,"props":2397,"children":2399},{"className":2398},[],[2400],{"type":52,"value":2401},"\u002Fjetson-flash-image",{"type":52,"value":2403}," — flashes the updated ",{"type":46,"tag":68,"props":2405,"children":2407},{"className":2406},[],[2408],{"type":52,"value":73},{"type":52,"value":2410}," to the\ndevice.",{"type":46,"tag":109,"props":2412,"children":2413},{},[2414,2416,2422,2424,2430,2432,2438],{"type":52,"value":2415},"(Alternate, no flash) Copy ",{"type":46,"tag":68,"props":2417,"children":2419},{"className":2418},[],[2420],{"type":52,"value":2421},"\u003Csource.root_path>\u002FLinux_for_Tegra\u002Frootfs\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F\u003Cconf>",{"type":52,"value":2423},"\ndirectly to the running target's ",{"type":46,"tag":68,"props":2425,"children":2427},{"className":2426},[],[2428],{"type":52,"value":2429},"\u002Fetc\u002Fnvpower\u002Fnvfancontrol\u002F\u003Cconf>",{"type":52,"value":2431},",\nthen ",{"type":46,"tag":68,"props":2433,"children":2435},{"className":2434},[],[2436],{"type":52,"value":2437},"sudo systemctl restart nvfancontrol.service",{"type":52,"value":2439}," (or reboot).",{"type":46,"tag":62,"props":2441,"children":2442},{},[2443,2445,2450,2452,2457,2459,2464,2466,2471],{"type":52,"value":2444},"Editing ",{"type":46,"tag":68,"props":2446,"children":2448},{"className":2447},[],[2449],{"type":52,"value":1770},{"type":52,"value":2451}," without committing — or editing\n",{"type":46,"tag":68,"props":2453,"children":2455},{"className":2454},[],[2456],{"type":52,"value":1762},{"type":52,"value":2458}," directly — does nothing for ",{"type":46,"tag":68,"props":2460,"children":2462},{"className":2461},[],[2463],{"type":52,"value":606},{"type":52,"value":2465},"\nand is silently lost on the next ",{"type":46,"tag":68,"props":2467,"children":2469},{"className":2468},[],[2470],{"type":52,"value":458},{"type":52,"value":1957},{"type":46,"tag":2473,"props":2474,"children":2475},"style",{},[2476],{"type":52,"value":2477},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2479,"total":2581},[2480,2495,2509,2523,2535,2552,2567],{"slug":2481,"name":2481,"fn":2482,"description":2483,"org":2484,"tags":2485,"stars":20,"repoUrl":21,"updatedAt":2494},"accelerated-computing-cudf","accelerate data processing with cuDF","Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV\u002FParquet I\u002FO, nullable semantics, and multi-GPU DataFrame workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2486,2489,2492,2493],{"name":2487,"slug":2488,"type":15},"Data Analysis","data-analysis",{"name":2490,"slug":2491,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-07-14T05:28:43.176466",{"slug":2496,"name":2496,"fn":2497,"description":2498,"org":2499,"tags":2500,"stars":20,"repoUrl":21,"updatedAt":2508},"aiq-deploy","deploy and manage NVIDIA AI-Q infrastructure","Use when asked to install, deploy, run, validate, troubleshoot, or stop NVIDIA AI-Q Blueprint infrastructure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2501,2504,2507],{"name":2502,"slug":2503,"type":15},"Deployment","deployment",{"name":2505,"slug":2506,"type":15},"Infrastructure","infrastructure",{"name":9,"slug":8,"type":15},"2026-07-14T05:29:06.667109",{"slug":2510,"name":2510,"fn":2511,"description":2512,"org":2513,"tags":2514,"stars":20,"repoUrl":21,"updatedAt":2522},"aiq-research","conduct deep research with AI-Q","Use when asked to run deep research or AI-Q research through a reachable NVIDIA AI-Q Blueprint backend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2515,2518,2519],{"name":2516,"slug":2517,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":2520,"slug":2521,"type":15},"Research","research","2026-07-14T05:28:06.816956",{"slug":2524,"name":2524,"fn":2525,"description":2526,"org":2527,"tags":2528,"stars":20,"repoUrl":21,"updatedAt":2534},"amc-run-sample-calibration","run AMC sample dataset calibration","Run end-to-end calibration on the shipped sample dataset (sdg_08_2_sample_data_010926.zip) against a running AMC microservice. Use when user says 'test sample dataset', 'run sample calibration', 'verify AMC install', or 'launch and test'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2529,2530,2531],{"name":2487,"slug":2488,"type":15},{"name":9,"slug":8,"type":15},{"name":2532,"slug":2533,"type":15},"Testing","testing","2026-07-17T05:29:03.913266",{"slug":2536,"name":2536,"fn":2537,"description":2538,"org":2539,"tags":2540,"stars":20,"repoUrl":21,"updatedAt":2551},"amc-run-video-calibration","calibrate video datasets with AutoMagicCalib","Calibrate a new dataset from pre-recorded video files via the AutoMagicCalib REST API. Use when user has local MP4s and says 'calibrate my videos', 'run AMC on these videos', or similar. For RTSP\u002Flive streams, use amc-run-rtsp-calibration instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2541,2544,2547,2548],{"name":2542,"slug":2543,"type":15},"Automation","automation",{"name":2545,"slug":2546,"type":15},"Imaging","imaging",{"name":9,"slug":8,"type":15},{"name":2549,"slug":2550,"type":15},"Video","video","2026-07-17T05:28:53.905004",{"slug":2553,"name":2553,"fn":2554,"description":2555,"org":2556,"tags":2557,"stars":20,"repoUrl":21,"updatedAt":2566},"amc-setup-calibration-stack","deploy AutoMagicCalib microservice with Docker","Launch AutoMagicCalib microservice and web UI from NGC release images via Docker Compose. Use when user says 'deploy auto calibration', 'launch auto calibration', 'launch AMC', 'start MS+UI', or 'set up auto-magic-calib'. Requires NGC API key.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2558,2559,2562,2563],{"name":2502,"slug":2503,"type":15},{"name":2560,"slug":2561,"type":15},"Docker","docker",{"name":9,"slug":8,"type":15},{"name":2564,"slug":2565,"type":15},"Operations","operations","2026-07-17T05:28:56.913999",{"slug":2568,"name":2568,"fn":2569,"description":2570,"org":2571,"tags":2572,"stars":20,"repoUrl":21,"updatedAt":2580},"cudaq-guide","develop quantum applications with CUDA-Q","CUDA-Q onboarding guide for installation, test programs, GPU simulation, QPU hardware, and quantum applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2573,2574,2577],{"name":9,"slug":8,"type":15},{"name":2575,"slug":2576,"type":15},"Quantum Computing","quantum-computing",{"name":2578,"slug":2579,"type":15},"Simulation","simulation","2026-07-14T05:26:58.898253",305,{"items":2583,"total":2734},[2584,2602,2618,2629,2641,2655,2668,2682,2693,2702,2716,2725],{"slug":2585,"name":2585,"fn":2586,"description":2587,"org":2588,"tags":2589,"stars":2599,"repoUrl":2600,"updatedAt":2601},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2590,2593,2596],{"name":2591,"slug":2592,"type":15},"Documentation","documentation",{"name":2594,"slug":2595,"type":15},"MCP","mcp",{"name":2597,"slug":2598,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":2603,"name":2603,"fn":2604,"description":2605,"org":2606,"tags":2607,"stars":2615,"repoUrl":2616,"updatedAt":2617},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2608,2611,2612],{"name":2609,"slug":2610,"type":15},"Containers","containers",{"name":2502,"slug":2503,"type":15},{"name":2613,"slug":2614,"type":15},"Python","python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":2619,"name":2619,"fn":2620,"description":2621,"org":2622,"tags":2623,"stars":2615,"repoUrl":2616,"updatedAt":2628},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2624,2627],{"name":2625,"slug":2626,"type":15},"CI\u002FCD","ci-cd",{"name":2502,"slug":2503,"type":15},"2026-07-14T05:25:59.97109",{"slug":2630,"name":2630,"fn":2631,"description":2632,"org":2633,"tags":2634,"stars":2615,"repoUrl":2616,"updatedAt":2640},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2635,2636,2637],{"name":2625,"slug":2626,"type":15},{"name":2502,"slug":2503,"type":15},{"name":2638,"slug":2639,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":2642,"name":2642,"fn":2643,"description":2644,"org":2645,"tags":2646,"stars":2615,"repoUrl":2616,"updatedAt":2654},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2647,2650,2651],{"name":2648,"slug":2649,"type":15},"Debugging","debugging",{"name":2638,"slug":2639,"type":15},{"name":2652,"slug":2653,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":2656,"name":2656,"fn":2657,"description":2658,"org":2659,"tags":2660,"stars":2615,"repoUrl":2616,"updatedAt":2667},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2661,2664],{"name":2662,"slug":2663,"type":15},"Best Practices","best-practices",{"name":2665,"slug":2666,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":2669,"name":2669,"fn":2670,"description":2671,"org":2672,"tags":2673,"stars":2615,"repoUrl":2616,"updatedAt":2681},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2674,2677,2680],{"name":2675,"slug":2676,"type":15},"Machine Learning","machine-learning",{"name":2678,"slug":2679,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":2683,"name":2683,"fn":2684,"description":2685,"org":2686,"tags":2687,"stars":2615,"repoUrl":2616,"updatedAt":2692},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2688,2691],{"name":2689,"slug":2690,"type":15},"QA","qa",{"name":2532,"slug":2533,"type":15},"2026-07-14T05:25:53.673039",{"slug":2694,"name":2694,"fn":2695,"description":2696,"org":2697,"tags":2698,"stars":2615,"repoUrl":2616,"updatedAt":2701},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2699,2700],{"name":2502,"slug":2503,"type":15},{"name":2505,"slug":2506,"type":15},"2026-07-14T05:25:49.362534",{"slug":2703,"name":2703,"fn":2704,"description":2705,"org":2706,"tags":2707,"stars":2615,"repoUrl":2616,"updatedAt":2715},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2708,2711,2712],{"name":2709,"slug":2710,"type":15},"Code Review","code-review",{"name":2638,"slug":2639,"type":15},{"name":2713,"slug":2714,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":2717,"name":2717,"fn":2718,"description":2719,"org":2720,"tags":2721,"stars":2615,"repoUrl":2616,"updatedAt":2724},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2722,2723],{"name":2689,"slug":2690,"type":15},{"name":2532,"slug":2533,"type":15},"2026-07-14T05:25:54.928983",{"slug":2726,"name":2726,"fn":2727,"description":2728,"org":2729,"tags":2730,"stars":2615,"repoUrl":2616,"updatedAt":2733},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2731,2732],{"name":2542,"slug":2543,"type":15},{"name":2625,"slug":2626,"type":15},"2026-07-30T05:29:03.275638",496]