jetson-promote-image
Use to promote overlay files and built artifacts into the staged BSP image. Do NOT use to flash or build. Triggers: promote bsp image.
Install / Use
npx skills add NVIDIA/skills --skill jetson-promote-imageInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
OperationsSupported Platforms
Our assessment of jetson-promote-image
jetson-promote-image scores 92/100 on our quality scale, 135th of 487 Operations skills we index (top 28%).
Its SKILL.md is 20 KB long, well organised into 19 sections with 1 code example: a thorough specification that gives an agent plenty to work with.
With 3,421 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 5 days ago, so jetson-promote-image is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
jetson-promote-image compared with similar skills
All 4 of these similar skills score higher than jetson-promote-image; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| jetson-promote-image (this skill)by NVIDIA | 92 | 3.4k | 5d ago | SKILL.md |
| LocalAIby mudler | 100 | 49.3k | today | MCP Server |
| algorithmic-artby anthropics | 100 | 177.9k | 6d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 6d ago | SKILL.md |
| designby nextlevelbuilder | 100 | 130.2k | 7d ago | SKILL.md |
Frequently asked questions
- How do I install jetson-promote-image?
- Run
npx skills add NVIDIA/skills --skill jetson-promote-image. The install tabs above show the steps for each supported agent. - Which AI agents does jetson-promote-image work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is jetson-promote-image safe to use?
- It is Apache-2.0-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is jetson-promote-image still maintained?
- The repository was last updated 5 days ago, so jetson-promote-image is actively maintained.
Skill content
View source on GitHubname: jetson-promote-image description: >- Use to promote overlay files and built artifacts into the staged BSP image. Do NOT use to flash or build. Triggers: promote bsp image. version: 0.0.1 license: "Apache-2.0" metadata: data-classification: public author: "Jetson Team" team: pts tags: - bsp - promote - deploy domain: meta
Promote BSP Image
Purpose
Stage every Customize-* and Build output into bsp_image so it is
ready for /jetson-flash-image. This is the promote leg of
Deploy — it copies files, never flashes and never builds.
Prerequisites
- Active target-platform profile with both
source:andbsp_image:resolved (run/jetson-init-sourceand/jetson-init-imagefirst). <source.root_path>/Linux_for_Tegra/initialized as a git repo (overlay tracker) with a clean working tree.<bsp_image.root_path>/Linux_for_Tegra/extracted from a BSP tarball +apply_binaries.shalready run.git,yq,cmp, andsudo(forrootfs/*destinations) on the host.<source.root_path>/.build-manifest.yaml+.build-state.yamlfrom/jetson-build-source(required when kernel-side repos have customize-* commits).
Overview
This is the promote leg of Deploy — see
../../context/bsp-customization-workflow.md
for the pipeline view. The two channels this skill walks are:
| Channel | Source | Carrier | Owner |
|---|---|---|---|
| Overlay tracker | <source.root_path>/Linux_for_Tegra/ (git repo at HEAD) | Customize-* outputs that don't require a build (e.g. nvfancontrol.conf, nvpmodel.conf, BPMP DTB hand-edits) | Customize customize-* skills commit here |
| Build manifest | <source.root_path>/.build-manifest.yaml | Rebuilt kernel Image, in-tree .ko, OOT .ko, NVIDIA DTBs | Build jetson-build-source writes here |
The skill computes the union of files to copy and writes each into
<bsp_image.root_path>/Linux_for_Tegra/ with diff-aware
skip-if-identical logic. When the copy pass touches the kernel
Image or anything under rootfs/lib/modules/, it also rebuilds
the initramfs via NVIDIA's tools/l4t_update_initrd.sh so the
freshly promoted kernel + modules ship in the initrd the
bootloader actually loads. After it returns, bsp_image carries
every Customize and Build output. The skill does not flash and
does not modify the workspace.
When to invoke
- First leg of the typical Deploy chain
jetson-promote-image → jetson-flash-image → jetson-validate-image. - Standalone, when the user wants
bsp_imageupdated but isn't ready to flash yet (e.g. to inspect resolved files, run an out-of-band build that reads bsp_image, or hand bsp_image to a separate flashing host).
Procedure
Resolve active target + paths
Resolve the active profile per the contract in
../../context/target-platform-contract.md.
Refuse and route in these cases:
| Condition | Refuse with |
|---|---|
| No active profile, or active: NA | Route to /jetson-set-target or /jetson-init-target. |
| Profile lacks bsp_image: | 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:
<workspace>= parent of the active profile'starget-platform/directory (discovered at load time).<bsp_image.root_path>frombsp_image.root_path:if present, else<workspace>/Image.<source.root_path>fromsource.root_path:if present, else<workspace>/Source.
Bind shell variables for the rest of the procedure:
LFT_SRC="<source.root_path>/Linux_for_Tegra" # overlay tracker
LFT_DST="<bsp_image.root_path>/Linux_for_Tegra"
MANIFEST="<source.root_path>/.build-manifest.yaml" # build outputs
Validate the two channels
The skill needs at least one channel populated. Refuse if the
overlay tracker has uncommitted changes (status --porcelain
non-empty), if $MANIFEST exists but doesn't parse as YAML, or
if both channels are empty. Records OVERLAY_HAS_COMMITS /
OVERLAY_HEAD and MANIFEST_PRESENT for downstream steps.
See references/copy-pass-snippets.md
for the shell snippet and refuse messages.
Verify build-source freshness
Refuse if .build-state.yaml shows any kernel-side repo in
Source/bsp_sources/ dirty since the last /jetson-build-source
— otherwise the copy pass would silently ship stale artifacts.
Detection rules + shell snippet in
references/build-source-freshness-gate.md.
Records BUILD_FRESH=1.
Pre-promote collision check (overlay only)
When the overlay tracks a remote, refuse if upstream has commits
not yet pulled. Skip gracefully when no remote is configured
(the default git init empty tracker from jetson-init-source).
Manifest channel has no git remote concept — this check is
overlay-only. Records COLLISION_CHECK for the Summary.
See references/copy-pass-snippets.md
for the shell snippet.
Enumerate sources (both channels)
Channel A — overlay: git ls-files against $LFT_SRC is
the source of truth (transparent to symlink mounts when
source.repos.Linux_for_Tegra was overridden, excludes
untracked / .gitignored files). Each entry maps
src = $LFT_SRC/<rel> → dst = $LFT_DST/<rel>.
Channel B — manifest: parse artifacts[].{src,dst} from
$MANIFEST. Refuse if any src is missing on disk (build was
interrupted, or manifest stale — re-run /jetson-build-source).
The manifest schema is written by
jetson-build-source v0.2.0.
See references/copy-pass-snippets.md
for both shell snippets and the manifest YAML schema.
Diff-aware copy into bsp_image
Iterate the union of overlay files and manifest entries. For
each dst: if byte-identical, skip; otherwise cp -p (with
sudo for rootfs/* destinations, where the sample rootfs
was extracted as root). Tag INITRD_DIRTY=1 on any
rootfs/lib/modules/* or kernel/Image write — the
"Refresh initramfs" step gates on this flag. Counts /
FIRST / LAST are recorded for the Summary.
Fail-fast: if any cp fails, surface the failed path and stop.
bsp_image may be left partially updated — re-running after
fixing the cause resumes via the diff-aware skip. Channel
order is overlay first, then manifest: on a dst collision
the manifest wins (freshly built artifact beats the older
overlay copy).
See references/copy-pass-snippets.md
for the copy_one() function and the two driving loops.
Mirror kernel Image into rootfs (when kernel changed)
The kernel Image lives in two paths inside bsp_image:
<LFT_DST>/kernel/Image (read by the flash tool) and
<LFT_DST>/rootfs/boot/Image (the rootfs-side copy, visible as
/boot/Image from inside the rootfs chroot the refresh tool
will run in). The build manifest only carries the kernel/Image
dst, so this step mirrors kernel/Image → rootfs/boot/Image
(diff-aware, no-op when already in sync) so the chrooted refresh
tool resolves the kernel against the freshly promoted binary,
not the stale rootfs copy. The mirror also sets INITRD_DIRTY=1
so a kernel-only promote (no rootfs/lib/modules/* writes) still
triggers the refresh.
See references/kernel-image-and-initramfs.md
for the shell snippet, the failure mode this prevents, and the
INITRD_DIRTY corner case.
Refresh initramfs (when kernel or modules changed)
Run tools/l4t_update_initrd.sh from <LFT_DST>/ whenever
INITRD_DIRTY=1 (set by the diff-aware copy or the mirror step
above). The tool chroots into rootfs/, runs NVIDIA's
nv-update-initrd, and writes both
<LFT_DST>/bootloader/l4t_initrd.img (used by the flash tool)
and <LFT_DST>/rootfs/boot/initrd (/boot/initrd on the DUT).
Idempotent; ~30 s. Skip when INITRD_DIRTY=0 (overlay-only
edits). DUT-side workarounds (update-initramfs -u + manual
cp) are out of scope — fix the gap here so flash ships a
coherent image.
See references/kernel-image-and-initramfs.md
for the shell snippet, refuse paths, the "module shadowing" and
"vermagic skew" failure modes the rebuild closes, and why
bootloader/initrd (a different file) is left alone.
Summary
Report:
- Overlay scope:
overlay HEAD ($OVERLAY_HEAD)or "(empty)". - Manifest scope:
mode=<...>, bsp_version=<...>, rebuilt_at=<...>, N artifactsor "(absent)". - Collision check:
$COLLISION_CHECK. - Counts:
- overlay:
$COPIED_OVERLAY copied, $IDENTICAL_OVERLAY identical - manifest:
$COPIED_MANIFEST copied, $IDENTICAL_MANIFEST identical
- overlay:
- Kernel Image mirror:
$KIMG_MIRROREDand initramfs:$INITRD_STATUS(copied …/rebuiltwhen triggered bykernel/Imageorrootfs/lib/modules/*writes;skipped …otherwise). - First / last paths copied (omit if both
COPIEDtotals are 0). - Resolved
<source.root_path>,<bsp_image.root_path>. - Next step:
/jetson-flash-image(or/jetson-validate-imageif the user only wanted bsp_image refreshed for inspection / static validation).
Limitations
- Two channels, one destination.
bsp_image/Linux_for_Tegra/is written by both passes. Overlay carries customize-* outputs (overlay-only edits like nvfancontrol.conf); manifest carries rebuilt binaries (kernel/OOT/DT). The two are intentionally disjoint by construction: build outputs don't go into the overlay, and customize-* edits to non-build files don't enter the manifest. - Build manifest is the trace-to-dirty contract. Anything in
the manifest came from a dirty source repo (per
jetson-build-source's "Write the build manifest" step trace policy). Promoting the manifest is therefore safe: every entry is a customization-bearing artifact, not toolchain-divergence noise. The skill does not re-derive the trace — it trusts the manifest. - Manifest entries can outlive their build outputs. If the
user wipes
Source/.build/orbsp_sources/'s build artifacts betweenjetson-build-sourceandjetson-promote-image, the manifest will reference missing files. The "Enumerate sources (both channels)" step refuses in that case and points the user at/jetson-build-sourceto rebuild. - Manifest absence is fine when only overlay edits happened.
A purely overlay-side customization (e.g.
customize-fan) produces no build outputs and writes no manifest — the "Enumerate sources (both channels)" step is a no-op, the "Diff-aware copy into bsp_image" step promotes only overlay files. The skill prints "manifest: (absent)" in the summary and continues. - Diff-aware, idempotent. Re-running with no overlay commits or manifest changes since the last promote is a no-op (all files identical). Use this to confirm bsp_image is in sync without side effects.
- Symlink-mount transparency. When
source.repos.Linux_for_Tegrawas overridden injetson-init-source, the canonical mount is a symlink into<source.root_path>/.repos/Linux_for_Tegra/<subdir>.git -C,cp -p, andcmp -sall follow it transparently — no special handling needed at this layer. Manifestsrcpaths are absolute, so symlinks underbsp_sources/don't matter for the manifest channel. sudois scoped torootfs/destinations. Files underrootfs/were extracted withsudo tar xpjfbyjetson-init-image,
Truncated for display — read the full file on GitHub.
Related Skills
LocalAI
49.3kLocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
design
130.2kComprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini, Atlas Cloud, or MuAPI AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations (Chart.js), banner design (22 styles, social/ads/web/print), icon design (15 styles, SVG…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
