>- Build a per-target knowledge-base markdown next to the active profile by walking the BSP root and source tree. Use after init-image / init-source; not for editing profile fields.
npx skills add https://github.com/NVIDIA/skills --skill jetson-generate-kb
This skill produces a per-profile markdown reference at
target-platform/<profile-stem>.md (sibling to the profile YAML). It
bundles three things into one file so a future Claude session — or the
user — can see the shape of the active target without re-walking the
filesystem:
bsp_image.root_path, presence of canonical subtrees (rootfs/,
bootloader/, source/, …), and the nvpmodel variants matching
the active module SKU.
source.root_path (kernel-jammy-src/, hardware/nvidia/,
nvidia-oot/, etc.) and devicetree files matching the chip family.
documents.* references recorded in theprofile, with local-path existence checks and one-line descriptions.
The KB is a snapshot, dated in its header. Re-run this skill
whenever the underlying data changes — it is intentionally
re-runnable and overwrites the previous KB on each run.
jetson-init-image prepares the BSP for a freshly authoredprofile.
bsp_image.root_path.
source.root_path.bsp_image.* or documents.* in the profile YAML.rather check the KB than re-walk the tree.
Resolve the active profile per the contract in
../../context/target-platform-contract.md;
cache it in memory — the rest of the skill consumes only this
profile. Record <profile-stem> (the bare filename minus .yaml)
as the KB output filename stem.
| Field | Required for KB? | If missing |
|---|---|---|
| bsp_image.root_path | yes | Refuse. A KB with no BSP root to scan is just a YAML restatement; tell the user to run jetson-init-image or hand-edit the profile. |
| source.root_path | no | Skip the source-tree section; note "source_root not recorded" in the KB. |
| documents.* | no | Render an empty Documents table with a "no documents recorded" note. |
If bsp_image.root_path is set but the directory does not exist on disk,
refuse with a clear message — do not fabricate a layout for a path
that isn't there.
bsp_image.root_path)Run only the following cheap operations — no recursive scans, no
file content reads beyond directory listings:
ls -1 of bsp_image.root_path (one level deep). Record whichdirectories are present.
rootfs/, bootloader/, kernel/, source/, tools/,
nv_tegra/.
flash_config file exists at<bsp_image.root_path>/<flash_config>. Record its path or
(missing).
rootfs/etc/nvpmodel/ and filter to filenames matchingnvpmodel_<module.id>_<module.sku>*.conf. Record each match.
Use the lower-case module id (e.g. p3767) and the YAML-quoted
sku string (e.g. 0001).
source.root_path)Skip this step entirely if source.root_path is NA or missing.
Otherwise, run only:
ls -1 of source.root_path (one level deep).kernel-jammy-src/, hardware/nvidia/, nvidia-oot/, nvgpu/,
nvethernetrm/, nvdisplay/, hwpm/, kernel-devicetree/.
kernel-devicetree/generic-dts/dts/ exists, list filenamesmatching tegra<chip>* where <chip> is the chip-family numeric
prefix (see chip-family map below). Record up to 30 hits; if more,
record the count and a "showing first 30" note.
Derive <chip> from module.id:
| module.id | Chip family | <chip> prefix |
|---|---|---|
| p3701, p3767 | T234 — Orin | 234 |
| p3834 | T264 — Thor | 264 |
If module.id is not in this table, record the chip as
unknown (module.id=<value>) and skip the chip-prefixed devicetree
filter.
For each field in documents.* from the loaded profile:
http://, https://,or ftp://) or local path (anything else).
generation must remain offline. (A future skill can promote to deep
indexing.)
os.path.exists. Record the path; ifmissing on disk, append (missing).
The one-line description for each field comes from the marker in
../../references/platform_template.yaml
— strip the <OPTIONAL: …> wrapper and use the inner text.
If the profile has no documents: block, render the section with a
single line: _No documents recorded — run jetson-link-docs`
or hand-edit the profile to add references._`
Render the markdown using the structure below. Use today's date
(YYYY-MM-DD) in the header. Always overwrite any existing KB file at
the destination — do not prompt before overwriting; re-runs are the
intended use.
Destination: target-platform/<profile-stem>.md.
# Target knowledge base — <profile-stem>
> Generated <YYYY-MM-DD> from `<bsp_image.root_path>` (BSP version `<bsp_image.version>`).
> Re-run `jetson-generate-kb` after extracting a new BSP, applying
> patches, or editing profile fields. This file is a regenerated
> snapshot — do not hand-edit.
## Profile facts
- **Reference devkit:** `<reference_devkit.name>`
- **Module:** `<module.id>-<module.sku>` (`<chip family label>`)
- **Reference carrier:** `<carrier.id>-<carrier.sku>`
- **Custom carrier:** `<custom_carrier.name>` (`<custom_carrier.id>-<custom_carrier.sku>`) _← omit this row if Case 1_
- **Active flash conf:** `<flash_config>`
- **BSP path:** `<bsp_image.root_path>`
- **BSP version:** `<bsp_image.version>`
- **Source root:** `<source.root_path>` _← or "_not recorded_" if NA_
## BSP image layout
Top-level directories under `<bsp_image.root_path>`:
| Directory | Present | Purpose |
|---|---|---|
| `rootfs/` | ✓ / ✗ | userspace rootfs (nvpmodel, nvfan, systemd units, etc.) |
| `bootloader/` | ✓ / ✗ | firmware blobs, BCT, MB1/MB2 dts |
| `kernel/` | ✓ / ✗ | prebuilt kernel + modules |
| `source/` | ✓ / ✗ | BSP source tree (kernel, OOT drivers, DT) |
| `tools/` | ✓ / ✗ | flashing helpers, jetson-io, kernel_flash |
| `nv_tegra/` | ✓ / ✗ | nvidia firmware tarballs, kernel-supplements |
Active flash conf `<flash_config>`: present at
`<bsp_image.root_path>/<flash_config>` _or_ `(missing — verify before flashing)`.
### nvpmodel files matching the active SKU
Filtered from `rootfs/etc/nvpmodel/` by `nvpmodel_<module.id>_<module.sku>*.conf`:
- `<each match, one per line>`
The active variant at boot is selected by `nvpower.sh` from
`/proc/device-tree/compatible` plus super / safety state — see
`jetson-customize-nvpmodel` for the resolution rules.
## Source tree layout
(omit this whole section if `source.root_path` is `NA`/missing)
Top-level subtrees under `<source.root_path>`:
| Subtree | Present | Purpose |
|---|---|---|
| `kernel-jammy-src/` | ✓ / ✗ | mainline 5.x kernel sources |
| `hardware/nvidia/` | ✓ / ✗ | NVIDIA platform DTs (per chip family) |
| `nvidia-oot/` | ✓ / ✗ | NVIDIA out-of-tree kernel modules |
| `nvgpu/` | ✓ / ✗ | GPU driver |
| `nvethernetrm/` | ✓ / ✗ | ethernet driver |
| `nvdisplay/` | ✓ / ✗ | display driver |
| `hwpm/` | ✓ / ✗ | hardware performance monitor |
| `kernel-devicetree/` | ✓ / ✗ | devicetree sources |
### Devicetree files for chip family `<chip>`
(omit if `kernel-devicetree/generic-dts/dts/` is absent)
Files matching `tegra<chip>*` under `kernel-devicetree/generic-dts/dts/`:
- `<each match, one per line — cap at 30, then a "first 30 of N" note>`
## Documents
| Field | Reference |
|---|---|
| Documents root folder | `<doc_root>` _or_ _not recorded_ |
| BSP / Jetson Linux developer guide | `<bsp_developer_guide>` _or_ _not recorded_ |
| Tegra SoC Technical Reference Manual | `<soc_tech_ref_manual>` _or_ _not recorded_ |
| Jetson module data sheet | `<module_data_sheet>` _or_ _not recorded_ |
| Jetson module design guide (PDG) | `<module_design_guide>` _or_ _not recorded_ |
| Jetson module thermal design guide (TDG) | `<module_thermal_design_guide>` _or_ _not recorded_ |
| Jetson module schematic | `<module_schematic>` _or_ _not recorded_ |
| Reference carrier board specification | `<carrier_board_spec>` _or_ _not recorded_ |
| Reference carrier schematic | `<carrier_schematic>` _or_ _not recorded_ |
| Custom carrier schematic | `<custom_carrier_schematic>` _or_ _not recorded / N/A (no custom carrier)_ |
| Reference-devkit pinmux spreadsheet | `<ref_devkit_pinmux_xls>` _or_ _not recorded_ |
| Custom-carrier pinmux spreadsheet | `<custom_carrier_pinmux_xls>` _or_ _not recorded / N/A (no custom carrier)_ |
(Local paths are tagged ` (missing)` if absent on disk. URLs are
recorded verbatim and not fetched. If `doc_root` is set, also tag
` (missing)` on it if the directory itself is gone — that signals
auto-mapping in `jetson-link-docs` won't work on a re-run.)
## How to refresh this file
Re-run `jetson-generate-kb` whenever any of the following changes:
- the BSP at `<bsp_image.root_path>` is re-extracted, patched, or upgraded,
- the source tree at `<source.root_path>` changes,
- the active profile's `bsp_image.*` or `documents.*` fields are edited.
This file is overwritten on every run. Do not hand-edit it — edit the
source data (profile YAML or the BSP tree) and re-run instead.
Print a short summary:
target-platform/<profile-stem>.md.present / absent.
(missing).
If a downstream skill triggered this run, tell the user to re-issue
their original request.
authoritative — if it doesn't match today, the BSP/source/docs may
have changed underneath. Re-run on demand.
at target-platform/<profile-stem>.md. This is intentional —
re-runnability is the whole point. Tell the user not to hand-edit
the file; edit profile YAML or the BSP and regenerate.
bsp_image.root_path = NA. A profile with no BSP pathproduces a content-free KB. Do not write one — instead, point the
user at the profile YAML to fill in.
to deep indexing (HTTP HEAD, PDF parsing) is out of scope for v0.1.
with at most one targeted glob (nvpmodel + devicetree). Never walk
the entire BSP — it's huge and slow.
Show "first 30 of N" when truncating.
this skill in its summary, but the user opts in. Auto-running hides
the I/O step and surprises users whose BSP/doc paths are incomplete.
target-platform/<stem>.md next to <stem>.yaml. Don't accidentally
read .md files in the profile-listing logic of
jetson-set-target (it already filters to *.yaml, but check
before adding new file types).
isn't in the map, the devicetree filter step is skipped — the KB
will note chip: unknown rather than fabricate a <chip> prefix.
Update this skill's chip-family table when a new chip lands.
../../context/target-platform-contract.md.
bsp_image: recorded by /jetson-init-image; this is the onlyrequired on-disk tree. If source.root_path is missing, render the KB
without the source-tree section.
/jetson-init-source already resolved source: when theuser wants source-tree discovery included.
/jetson-link-docs already wrote thedocuments: block.
YAML or rewrites source files.
this skill; an unknown module SKU lands in the KB as chip: unknown
rather than a fabricated prefix.
target-platform/<stem>.md to stay nextto the profile YAML; renaming the YAML invalidates the link.
bsp_image.root_path not found — re-run /jetson-init-image sothe BSP is extracted and the path is recorded before regenerating
the KB.
source.root_pathoverride is stale; rerun /jetson-init-source or correct the
profile field.
documents: block missing from the KB — /jetson-link-docs wasnever run; the KB falls back to "no documents bound" rather than
guessing paths.
cover the active SoC; update the table and rerun.
../../context/target-platform-contract.md — read-order contract this skill follows.../../context/bsp-customization-workflow.md — origin of the canonical BSP/source subtree list.../../references/platform_template.yaml — source of the documents-field one-line descriptions.../jetson-init-target/SKILL.md — sibling skill that authors the active target identity.../jetson-init-image/SKILL.md — sibling skill that authors the BSP image metadata this skill scans.../jetson-set-target/SKILL.md — sibling skill that flips the active pointer this skill resolves.Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.
Publish Markdown articles to X (Twitter) Articles editor with proper formatting. Use when user wants to publish a Markdown file/URL to X Articles, or mentions "publish to X", "post article to Twitter", "X article", or wants help with X Premium article publishing. Handles cover image upload and converts Markdown to rich text automatically.
AI-powered PPT generation with document analysis and styled images
Self-hosted, open-source alternative to Google NotebookLM for AI-powered research and document analysis. Use when organizing research materials into notebooks, ingesting diverse content sources (PDFs, videos, audio, web pages, Office documents), generating AI-powered notes and summaries, creating multi-speaker podcasts from research, chatting with documents using context-aware AI, searching across materials with full-text and vector search, or running custom content transformations. Supports 16+ AI providers including OpenAI, Anthropic, Google, Ollama, Groq, and Mistral with complete data privacy through self-hosting.
Cell (Cell Press) figure preparation: resolution (300-1000 DPI), formats (TIFF/PDF), RGB color, Avenir/Arial fonts, uppercase panel labels, strict image manipulation policies.
Self-hosted, open-source alternative to Google NotebookLM for AI-powered research and document analysis. Use when organizing research materials into notebooks, ingesting diverse content sources (PDFs, videos, audio, web pages, Office documents), generating AI-powered notes and summaries, creating multi-speaker podcasts from research, chatting with documents using context-aware AI, searching across materials with full-text and vector search, or running custom content transformations. Supports 16+ AI providers including OpenAI, Anthropic, Google, Ollama, Groq, and Mistral with complete data privacy through self-hosting.
Use when creating, editing, formatting, exporting, or extracting LibreOffice Writer (.odt) documents via UNO, including session-based edits, structured text targets, tables, images, lists, patch workflows, and snapshots.
Publish Markdown articles to X (Twitter) Articles editor with proper formatting. Use when user wants to publish a Markdown file/URL to X Articles, or mentions "publish to X", "post article to Twitter", "X article", or wants help with X Premium article publishing. Handles cover image upload and converts Markdown to rich text automatically.
Take nvidia/jetson-generate-kb from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.