A skill your agent uses when you need to add, remove, edit, list, or change the boot default of an nvfancontrol fan profile on a Jetson/Tegra (Orin, Thor) target.
Install the "jetson-customize-fan" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/jetson-customize-fan into .claude/skills/jetson-customize-fan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetson-customize-fan", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add NVIDIA/skills --skill jetson-customize-fan -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "jetson-customize-fan" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/jetson-customize-fan into .agents/skills/jetson-customize-fan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetson-customize-fan", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add NVIDIA/skills --skill jetson-customize-fan -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "jetson-customize-fan" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/jetson-customize-fan into .cursor/skills/jetson-customize-fan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetson-customize-fan", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add NVIDIA/skills --skill jetson-customize-fan -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "jetson-customize-fan" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/jetson-customize-fan into .gemini/skills/jetson-customize-fan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetson-customize-fan", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add NVIDIA/skills --skill jetson-customize-fan -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "jetson-customize-fan" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/jetson-customize-fan into .github/skills/jetson-customize-fan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetson-customize-fan", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add NVIDIA/skills --skill jetson-customize-fan -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "jetson-customize-fan" agent skill from https://github.com/NVIDIA/skills/tree/main/skills/jetson-customize-fan into .opencode/skills/jetson-customize-fan/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jetson-customize-fan", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
jetson-customize-fan
GitHub stars
3.5k
Token cost
~4.3k tokens
SKILL.md length
1,833 words
Files
5
Skills in repo
386
Repo updated
First seen
Licence
Apache-2.0
At a glance
A skill your agent uses when you need to add, remove, edit, list, or change the boot default of an nvfancontrol fan profile on a Jetson/Tegra (Orin, Thor) target.
Works in 5 steps: List… → Filter to filenames that contain _ from… → If multiple candidates remain, refine… → …
You need to add
SKILL.md covers Purpose, File format (canonical, per…, Prerequisites and The per-board file, plus 11 more sections
Calls scp
What it does
Jetson Customize Fan is an agent skill from NVIDIA/skills, published by the product's own GitHub organization. Use when you need to add, remove, edit, list, or change the boot default of an nvfancontrol fan profile on a Jetson/Tegra (Orin, Thor) target. Triggers: edit fan profile, tune fan curve.
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files (for example `BENCHMARK.md`, `evals/evals.json` and `skill-card.md`).
It sits in AI & LLM Engineering, covering GPU and accelerator computing. It works with NVIDIA AI Platform. The repository describes itself as: Agent Skills for NVIDIA products — install into Claude Code, Codex, and other coding agents to run Physical AI, robotics, simulation, CUDA, and RAG workflows end to end. The licence is Apache-2.0.
When your agent uses it
You need to add
Change the boot default of an nvfancontrol fan profile on a Jetson/Tegra (Orin
Example prompts
“/jetson-customize-fan”
Workflow steps
5 steps, taken from the first numbered list in SKILL.md.
2Filter to filenames that contain _ from the active profile.
3If multiple candidates remain, refine with _ and (when relevant) the carrier revision tag.
4If still ambiguous, run the per-board flash conf dispatch chain to read the kernel DTB's compatible and pick the file whose name aligns…
5Verify the chosen file actually exists under /Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/.
What it can do on your machine
Read from SKILL.md and the folder at commit dfdd080. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
Shell commands in SKILL.md call:
scp
From the folder's file list and the shell code blocks in SKILL.md.
Network
No URLs in SKILL.md. Its commands use scp, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Jetson Customize Fan loads about 4.3k tokens when it runs. Until then it costs about 52 tokens; SKILL.md has 1,833 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~52
When it runs· the whole SKILL.md, loaded when a task matches
~4.3k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check: notes
The automated check noted patterns worth knowing about, such as sudo or a known installer.
NoteRuns commands with sudoSKILL.md:332
byte-identical); uses `sudo cp -p` for `rootfs/*` destinations.
NoteRuns commands with sudoSKILL.md:337
then `sudo systemctl restart nvfancontrol.service` (or reboot).
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
Download SKILL.mdSave it as .claude/skills/jetson-customize-fan/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
jetson-customize-fan
description
Use when you need to add, remove, edit, list, or change the boot default of an nvfancontrol fan profile on a Jetson/Tegra (Orin, Thor) target. Triggers: edit fan profile, tune fan curve.
version
0.0.1
license
Apache-2.0
metadata.data-classification
public
metadata.author
Jetson Team
metadata.tags
thermal, fan, nvfancontrol, profile
metadata.domain
thermal
Modify nvfancontrol Fan Profile (BSP-side)
Purpose
Edit the per-board nvfancontrol configuration so the device boots
with the desired fan curve / control mode / governor / default
profile. BSP-side only — all writes land in the overlay tracker,
the upstream bsp_image copy is read-only.
This skill handles BSP-side edits to the per-board nvfancontrol configuration file: adding profiles, removing profiles, editing the temp → PWM / RPM curves, changing the boot default profile / control mode / governor, and listing defined profiles. Applies on Jetson / Tegra platforms (T234 Orin, T264 Thor).
Profile curve tuples are 4-column: TEMP HYST PWM RPM. Sort points by ascending TEMP; the daemon interpolates between them.
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.
HYST is hysteresis (°C) at that point — the controller waits HYST degrees of cooling before stepping the curve down.
FAN_DEFAULT_PROFILE must reference an existing FAN_PROFILE block in the same <FAN N>. nvfancontrol fails to start if the default names a missing profile.
FAN_DEFAULT_GOVERNOR = cont (continuous interpolation) and other family-specific values; copy verbatim from existing per-board files when introducing one.
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.
<FAN N> is one block per fan index (typical: <FAN 1>). Block boundaries <...> and {...} are strict; preserve indentation matching neighboring lines.
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.
Route to /jetson-set-target or /jetson-init-target.
Profile lacks bsp_image: block
Route to /jetson-init-image.
<bsp_image.root_path>/Linux_for_Tegra/ missing
Route to /jetson-init-image.
<source.root_path>/Linux_for_Tegra/ missing or not a git repo
Route to /jetson-init-source.
Resolve paths:
<bsp_image.root_path> from bsp_image.root_path: if present, else <workspace>/Image.
<source.root_path> from source.root_path: if present, else <workspace>/Source.
<bsp_image.root_path> is read-only for this skill; every write lands
under <source.root_path> (the overlay tracker). This is the workflow
invariant in
../../context/bsp-customization-workflow.md#workflow-invariants —
hand-editing upstream silently destroys the diff trail and makes
/jetson-promote-image a noop.
Subsequent sections refer to the per-board file to mean the overlay copy
under <source.root_path>. Operations 1–4 all read, edit, and save against
that overlay copy. The <bsp_image.root_path> copy is read once during the
"Resolving <active-sku>" detection step and once during the
Overlay edit recipe's
pristine-import step, then never touched again.
Resolving <active-sku> — which file to edit
Filename conventions vary per product family:
nvfancontrol_<module.id>_<module.sku>.conf — most Orin parts (e.g. nvfancontrol_p3767_0000.conf, nvfancontrol_p3701_0008.conf).
nvfancontrol_<module.id>_<module.sku>_<carrier.id>_<carrier.sku>.conf — Thor variants where the carrier disambiguates (e.g. nvfancontrol_p3834_0008_p4071_0000.conf).
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 <bsp_image.root_path>:
List <bsp_image.root_path>/Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/.
Filter to filenames that contain <module.id>_<module.sku> from the active profile.
If multiple candidates remain, refine with <carrier.id>_<carrier.sku> and (when relevant) the carrier revision tag.
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 / carrier.
Verify the chosen file actually exists under <bsp_image.root_path>/Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/.
Don't blindly compose a filename — the naming convention varies by product family.
Propagation set — confs to keep in sync
The 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 / baseboard SKU is booted:
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.
Every carrier-derived nvfancontrol conf — each nvfancontrol_*.conf produced by jetson-derive-carrier for a custom carrier on top of the same module SKU.
"Apply the same edit" ≠ blanket file copy. Port the changed FAN_PROFILE / 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.
Overlay edit recipe (apply before any Operation)
Follow the canonical
Off-skill edits recipe
in the workflow doc — pristine import + customization commit pair, both
gated by the preview gate. Apply once per run, covering every per-board
file the run touches (the active conf plus every sibling in the
Propagation set).
Concrete substitutions for this skill:
<rel>/<file> is rootfs/etc/nvpower/nvfancontrol/<conf>.
Suggested pristine-import message:
import pristine: <comma-separated rel paths of imported confs>,
body Source: <bsp_image.root_path>/Linux_for_Tegra/ (BSP <bsp_image.version>).
Pick the operation that matches the user's intent and follow the
matching subsection. All write-side operations (1–4) must first
apply the Overlay edit recipe.
Operation 1 — Add a new fan profile.
Operation 2 — Remove a fan profile.
Operation 3 — Edit an existing fan profile (curve, hysteresis).
In the per-board file, inside the <FAN N> block, add a new FAN_PROFILE <name> { ... } between existing profiles. Daemon parse order doesn't matter, but grouping with siblings keeps the file scannable.
Pick <name> lowercase, no whitespace (e.g. quiet, cool, aggressive).
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.
In the per-board file, delete the entire FAN_PROFILE <name> { ... } block including all curve rows and the closing }.
If the deleted <name> matches the trailing FAN_DEFAULT_PROFILE, point FAN_DEFAULT_PROFILE at a remaining profile — otherwise the daemon fails to start.
Search for hard-coded references in the rootfs before declaring the change safe:bash
In the per-board file, modify the curve rows of the target FAN_PROFILE <name>. Keep the 4-column TEMP HYST PWM RPM shape.
Maintain ascending TEMP ordering; insert or remove rows as needed.
Adjust HYST to tune anti-oscillation: too low → fan thrashes near a curve point; too high → fan lags reality.
Validate per Operation 1's rules.
Edits 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.
FAN_DEFAULT_PROFILE must reference an existing FAN_PROFILE in the same <FAN N> block. FAN_DEFAULT_CONTROL and FAN_DEFAULT_GOVERNOR must reference values the binary supports — copy from existing per-board files when changing.
Operation 5 — List defined fan profiles
This is a read-only operation; no overlay-tracker setup is needed. Run
against whichever copy you want to inspect (<bsp_image.root_path>/...
for the pristine state, <source.root_path>/... for the post-edit state):
The first prints every profile name in the file; the second prints the boot defaults (control / profile / governor).
Limitations
BSP-side scope only — this skill never touches a running target's
/etc/nvpower/nvfancontrol/ directly. Live tuning requires
reboot via Deploy, or the side-channel scp + systemctl restart
flow described in ## Deploy.
Edits land in the overlay copy under <source.root_path> only;
the <bsp_image.root_path> copy is read-only and is rewritten by
/jetson-promote-image. Hand-editing bsp_image is silently lost
on the next /jetson-init-image re-extract.
Curve tuples must reflect characterised thermal-acoustic data for
the platform — this skill does not interpolate or copy curves
across chip families.
Propagation across sibling carriers (same module SKU) is partial
by design: only the changed FAN_PROFILE / control lines are
ported, never a blanket file overwrite, since sibling confs may
hold carrier-specific THERMAL_GROUP / RPM ceilings.
Curve point limits are family-specific; copy verbatim from existing
confs when introducing new THERMAL_GROUP coefficients or
FAN_DEFAULT_GOVERNOR values.
Troubleshooting
Error
Cause
Solution
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 <name> in the same <FAN N>.
Fan thrashes near a curve point
HYST too low
Raise HYST on the affected row (typical 2–5 °C).
Fan lags reality
HYST too high
Lower HYST on the affected row.
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/RPM; pin the over-temp row only above GROUP_MAX_TEMP.
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.
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.
Change vanished after /jetson-init-image re-extract
Edit landed in <bsp_image.root_path> instead of <source.root_path> overlay
Re-apply via the Overlay edit recipe so the change is committed in the overlay tracker.
Sibling carrier boots with wrong tach ceiling after propagation
Port only the changed lines per Propagation set; restore the carrier's original THERMAL_GROUP.
Deploy
The customization commit in the overlay tracker does not reach the device
on its own. The Deploy chain:
/jetson-promote-image — copies every tracked file in the overlay
into <bsp_image.root_path>/Linux_for_Tegra/. Diff-aware (skip
byte-identical); uses sudo cp -p for rootfs/* destinations.
/jetson-flash-image — flashes the updated bsp_image to the
device.
(Alternate, no flash) Copy <source.root_path>/Linux_for_Tegra/rootfs/etc/nvpower/nvfancontrol/<conf>
directly to the running target's /etc/nvpower/nvfancontrol/<conf>,
then sudo systemctl restart nvfancontrol.service (or reboot).
Editing <source.root_path>/... without committing — or editing
<bsp_image.root_path>/... directly — does nothing for /jetson-promote-image
and is silently lost on the next /jetson-init-image re-extract.
Jetson Customize Fan next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Workflow for porting an existing Triton kernel in fla/ops/ to Gluon (triton.experimental.gluon) to gain explicit control over tensor layouts, shared memory, async data movement (cp.async / TMA), MMA…
Shows how to launch distributed Megatron-LM training on a SLURM cluster: sbatch skeleton, torch.distributed.run setup, CUDA_DEVICE_MAX_CONNECTIONS rules and failure diagnosis.
Preflight checks and diagnosis for ten known failure modes of ML training on NVIDIA DGX Spark's GB10, spanning launch errors, memory, thermals, bandwidth and precision.
Sets up and runs NVIDIA Cosmos Policy evaluations on the LIBERO and RoboCasa simulators, including headless GPU rendering and inference latency profiling.
A skill your agent uses when the user wants to deploy, run, debug, tear down, or call the REST API of the RTVI-CV 2D detection / tracking microservice.
Generates, validates, compares and explains HOLOLINK_def.svh macro files for the HSB IP, using bundled Python scripts and asking before it writes anything.
Orchestrates defect image generation for PCBA, metal surface and glass inspection with NVIDIA Cosmos AnomalyGen on OSMO, from cold-start Day 0 to real-photo Day 1 labeling.
Orchestrates video data augmentation and auto-labeling workflows on OSMO, from flow selection and preflight checks to submission, monitoring and output download.
Runs NVIDIA TAO Data Services KPI analysis on object detection results, comparing predictions to ground truth and writing per-class precision, recall and AP to a CSV.
A skill your agent uses when you need to add, remove, edit, list, or change the boot default of an nvfancontrol fan profile on a Jetson/Tegra (Orin, Thor) target. Jetson Customize Fan is an agent skill from NVIDIA/skills, published by the product's own GitHub organization. Use when you need to add, remove, edit, list, or change the boot default of an nvfancontrol fan profile on a Jetson/Tegra (Orin, Thor) target.
When should I use Jetson Customize Fan?
Jetson Customize Fan fits situations like: you need to add; change the boot default of an nvfancontrol fan profile on a Jetson/Tegra (Orin.
How do I install Jetson Customize Fan in Claude Code?
Run `npx skills add NVIDIA/skills --skill jetson-customize-fan -a claude-code`. Or copy the skill folder (skills/jetson-customize-fan in NVIDIA/skills) into .claude/skills/jetson-customize-fan in your project. Claude Code loads it when a task matches its description.
How do I install Jetson Customize Fan in Codex?
Run `npx skills add NVIDIA/skills --skill jetson-customize-fan -a codex`. Or copy the skill folder (skills/jetson-customize-fan in NVIDIA/skills) into .agents/skills/jetson-customize-fan in your project. Codex loads it when a task matches its description.
Can I use Jetson Customize Fan in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add NVIDIA/skills --skill jetson-customize-fan -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/jetson-customize-fan, .gemini/skills/jetson-customize-fan, .github/skills/jetson-customize-fan and .opencode/skills/jetson-customize-fan in your project.
What does Jetson Customize Fan need to run?
Going by SKILL.md and its folder, Jetson Customize Fan needs the command-line tools its instructions call (scp).
Does Jetson Customize Fan access the network?
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Is Jetson Customize Fan safe to install?
Our automated static check of SKILL.md found notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
What licence does Jetson Customize Fan use?
Jetson Customize Fan is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Jetson Customize Fan use?
About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
What are the alternatives to Jetson Customize Fan?
Skills that share tags, products or a category with Jetson Customize Fan: Fla Triton To Gluon (fla-org/flash-linear-attention, 5.8k stars), Megatron-LM on SLURM (NVIDIA/Megatron-LM, 18k stars), DGX Spark Memory and Thermal Ops (wshobson/agents, 40k stars) and DGX Spark Training Gotchas (wshobson/agents, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Jetson Customize Fan?
NVIDIA (a GitHub organization, an official publisher) maintains it in NVIDIA/skills, which has 3,546 GitHub stars. The repository holds 386 skills in this directory. The repository was last updated on October 9, 2026.
Source: NVIDIA/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.