Hsb Setup
NVIDIAOfficialCreated by Holoscan TeamDistributed by NVIDIA
- Skill
- Workflow
- Cloud and DevOps
- Apache-2.0
- Medium risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The hsb-setup skill provides a structured, multi-phase workflow to deploy the Holoscan Sensor Bridge (HSB) demo on supported NVIDIA devkits. It handles the entire lifecycle from initial environment validation and platform auto-detection to repository cloning, host configuration, containerized build, and final connectivity verification. The skill emphasizes safety through mandatory token-budget preflight checks, interactive phase-based execution, and automated recovery procedures for common setup issues.
What it does
- Performs mandatory token-budget preflight checks before any remote operations.
- Auto-detects the host devkit platform and reconciles it with user-provided settings.
- Clones the HSB repository and prepares the host environment based on platform-specific requirements.
- Builds and launches the demo container tailored to the specific hardware configuration.
- Verifies network connectivity to the sensor bridge and checks FPGA firmware versions.
- Generates a detailed report of the setup process and any encountered issues.
When to use it
- When you need to perform a fresh installation of the Holoscan Sensor Bridge demo.
- When you need to verify or troubleshoot the connectivity between a devkit and the HSB hardware.
- When you need to ensure the host environment is correctly configured for containerized HSB applications.
- When you are setting up a new development environment on an IGX Orin, AGX Orin, AGX Thor, or DGX Spark.
Advantages
- Reduces manual configuration errors through automated platform-specific setup.
- Ensures safe execution with mandatory token-budget and preflight checks.
- Provides clear, phase-based progress tracking and interactive confirmation gates.
- Includes built-in recovery playbooks for common setup and connectivity failures.
Usage examples
- “/hsb-setup AGX Thor”
- Initiates the setup workflow for an AGX Thor devkit, walking through the phase plan and performing necessary host configurations.
- “/hsb-setup IGX Orin dGPU --verbose”
- Starts the setup for an IGX Orin with a discrete GPU in verbose mode, displaying full command output for each phase.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/nvidia/hsb-setup/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip hsb-setup.zip -d .agents/skills
Documentation by Holoscan Team
Holoscan Sensor Bridge demo bring-up
Use this skill when the user wants to bring up the Holoscan Sensor Bridge demo environment end to end.
This workflow has side effects. Never run it automatically. Only run it when the user explicitly invokes it.
Before you start — required gates (do these first, in order)
Gate 1 — Read environment variables. Before doing anything else, check these variables and print their resolved values to the user:
SSH_TARGET Remote devkit login (e.g. [email protected]). Ask the user if not set.
REMOTE_ROOT Remote working directory (e.g. /home/nvidia). Ask the user if not set.
REMOTE_SUDO sudo / sudo -n / "" — default to "sudo" if not set.
REMOTE_SSH_OPTS Additional SSH options (optional).
HSB_PLATFORM Platform hint — may be empty; will detect from hardware.
HSB_REPO Custom repo URL — defaults to https://github.com/nvidia-holoscan/holoscan-sensor-bridge.gitSSH_TARGET and REMOTE_ROOT are required. Stop and ask the user for them if either is missing.
Gate 2 — Present the phase plan. Before taking any action, show the user this exact plan and wait for acknowledgement:
HSB Setup — Phase Plan
Phase 0: Token-budget preflight
Phase 1: Confirm platform, set up SSH, clone repo, study user guide
Phase 2: Host prerequisite checks and network setup
Phase 3: Native CLI build (AGX Thor only — skipped for other platforms)
Phase 4: Build demo container, run it, ping 192.168.0.2, verify FPGA version
Phase 5: Issues report (with option to save)
Phase 6: Stop apps, exit container, hand control back to userGate 3 — Token-budget preflight (Phase 0). Run this before any SSH connection or devkit change. See ## Token-budget preflight section for the full procedure. Do not proceed to Phase 1 until the budget check passes.
Instructions
Invoke this skill by typing /hsb-setup [PLATFORM] [OPTIONS]. The skill walks through each phase interactively, prompting for confirmation before making changes.
What this skill must do
Run the mandatory token-budget preflight before any remote command or devkit configuration change. Estimate the tokens needed to complete all setup phases, check the user's remaining subscription-plan usage with the best available Claude Code/account usage mechanism, display the estimate and result to the user, and stop if the available budget is insufficient or cannot be verified.
prompt the user to confirm that the devkit is connected to the holoscan sensor bridge and everything is powered up and there is an active network connection to the outside world and that the devkit was installed with the proper OS version. if all profile parameters are known look into the repo user guide and draw a diagram of the devkit to sensor for the user to confirm that this is the setup they have.
Once the user confirms the setup is ready, build the ssh connection to the devkit if the user is running the claude skill from an external computer. you can skip this step if claude installed directly on the devkit.
Verify the host devkit platform by running
cat /sys/class/dmi/id/product_nameon the devkit and comparing the result to theHSB_PLATFORMenvironment variable using the product-name-to-platform mapping (see "Host platform auto-detection" section). If the command returns a recognized non-empty platform name that differs fromHSB_PLATFORM, or ifHSB_PLATFORMis empty, updateHSB_PLATFORMto match the detected platform and alert the user about the change. If the command returns empty or fails andHSB_PLATFORMis already set, keep the existing value.Clone or refresh the GitHub repository from the latest
mainbranch. By default this is the publicnvidia-holoscan/holoscan-sensor-bridgerepo, but the user can override it with a custom repo URL via theHSB_REPOenvironment variable or the--repo <URL>command-line flag. if the repo is an ssh repo, alert the user if no ssh key is set and provide instructions how to set up the ssh key.Ask the user which devkit/platform they want to use if it is not already clear.
under the cloned repo root dir, study and understand the user guide at docs/user_guide to learn how to set up host environment for each devkit and OS, demo container, running applications inside and outside the container (where applicable) and flashing the FPGA.
Map that platform to the correct host setup and container build mode and make sure host set up is configured properly per user guide instructions, fix and add any missing configuration or prompt the user with instruction how to fix.
Build the demo container.
Run the demo container.
Verify connectivity to the board at
192.168.0.2. if the connection to the board fails, prompt the user for a possiblity of a different ip address.Verify the FPGA version reading register 0x80. if the FPGA version on the sensor does not match the hsb host software that is on the devkit, suggest the user to use the hsb-flash-skill to flash the board to the proper FPGA version.
Report progress in phases, explain failures clearly, and attempt safe fixes before giving up.
For every issue encountered, create a report that specifies what was the issue and how you overcame it.
Allow the user an option to export the final report to an md file.
once you are done setup, stop any running apps and exit the container giving up control on the devkit to the user at repo home directory on terminal window.
Supported platforms and build mapping
Use the following mapping unless the repository or current docs in the working tree clearly say otherwise:
IGX Orin with dGPU OS/configuration → build with
sh docker/build.sh --dgpuIGX Orin iGPU → build with
sh docker/build.sh --igpuAGX Orin → build with
sh docker/build.sh --igpuAGX Thor → build with
sh docker/build.sh --igpuDGX Spark → build with
sh docker/build.sh --igpu
If the user says only “IGX Orin”, explicitly ask whether it is iGPU or dGPU OS/configuration.
Host platform auto-detection
During Phase 1 (after SSH is established or when running locally), verify the actual devkit hardware by reading the DMI product name and comparing it to the HSB_PLATFORM environment variable.
Product-name-to-platform mapping
The following table maps known /sys/class/dmi/id/product_name values to supported HSB_PLATFORM values. Match using case-insensitive substring search — the product name may contain additional text (e.g., "Developer Kit", revision numbers).
product_name contains (case-insensitive) | Mapped HSB_PLATFORM | Notes |
|---|---|---|
IGX Orin | IGX Orin | Still need to ask iGPU vs dGPU if not already known |
AGX Orin | AGX Orin | |
AGX Thor | AGX Thor | |
DGX Spark | DGX Spark |
If the product name does not match any known pattern, treat it as unrecognized and fall through to the manual platform question in step 5.
Detection and reconciliation logic
Run the following on the devkit (inside the Phase 1 SSH heredoc or locally):
DETECTED_PRODUCT=""
if [ -f /sys/class/dmi/id/product_name ]; then
DETECTED_PRODUCT=$(cat /sys/class/dmi/id/product_name 2>/dev/null | tr -d '\n')
fi
DETECTED_PLATFORM=""
if echo "$DETECTED_PRODUCT" | grep -qi "IGX Orin"; then
DETECTED_PLATFORM="IGX Orin"
elif echo "$DETECTED_PRODUCT" | grep -qi "AGX Orin"; then
DETECTED_PLATFORM="AGX Orin"
elif echo "$DETECTED_PRODUCT" | grep -qi "AGX Thor"; then
DETECTED_PLATFORM="AGX Thor"
elif echo "$DETECTED_PRODUCT" | grep -qi "DGX Spark"; then
DETECTED_PLATFORM="DGX Spark"
fi
echo "DETECTED_PRODUCT=$DETECTED_PRODUCT"
echo "DETECTED_PLATFORM=$DETECTED_PLATFORM"
echo "HSB_PLATFORM=${HSB_PLATFORM:-}"After collecting the output, apply the following reconciliation rules:
DETECTED_PLATFORMis non-empty andHSB_PLATFORMis empty → setHSB_PLATFORMtoDETECTED_PLATFORM. Alert the user:Platform auto-detected from hardware: <DETECTED_PLATFORM> (product_name: <DETECTED_PRODUCT>). HSB_PLATFORM was not set — updating to "<DETECTED_PLATFORM>".DETECTED_PLATFORMis non-empty and differs fromHSB_PLATFORM→ overrideHSB_PLATFORMwithDETECTED_PLATFORM. Alert the user:WARNING: Hardware reports "<DETECTED_PLATFORM>" (product_name: <DETECTED_PRODUCT>), but HSB_PLATFORM was set to "<HSB_PLATFORM>". Updating HSB_PLATFORM to match the detected hardware: "<DETECTED_PLATFORM>".DETECTED_PLATFORMis non-empty and matchesHSB_PLATFORM→ no change needed. Confirm:Platform verified: <HSB_PLATFORM> matches hardware (product_name: <DETECTED_PRODUCT>).DETECTED_PLATFORMis empty (file missing, unreadable, or unrecognized product name) andHSB_PLATFORMis set → keep the existingHSB_PLATFORM. Warn:Could not auto-detect platform from hardware (product_name: "<DETECTED_PRODUCT>"). Keeping existing HSB_PLATFORM: "<HSB_PLATFORM>".Both
DETECTED_PLATFORMandHSB_PLATFORMare empty → fall through to the manual platform question in step 5.
After reconciliation, persist the updated HSB_PLATFORM in the remote session state file so subsequent phases use the correct value.
Linux/Windows-friendly wrapper variables
When this skill is used from Linux/Windows with a local Claude Code session that shells out to SSH, prefer these environment variables when present:
SSH_TARGETfor the remote login target such asnvidia@agx-thor-hostREMOTE_ROOTfor the remote working directory where the repo should liveREMOTE_SUDOfor privileged commands. Acceptsudo,sudo -n, or empty stringREMOTE_SSH_OPTSfor additional SSH optionsHSB_PLATFORMas an optional platform hintHSB_REPOfor a custom GitHub repository URL to clone (e.g.https://github.com/myorg/my-hsb-fork.git). If not set, defaults tohttps://github.com/nvidia-holoscan/holoscan-sensor-bridge.git
If these are set, notify the user of these settings and use them without re-asking unless the user explicitly overrides them.
Before Phase 1, print the resolved remote execution settings you will use, with secrets redacted if needed.
Mandatory interaction pattern
Present the phase plan from Gate 2 above before making any changes. Skip Phase 3 for non-Thor platforms.
Then execute one phase at a time.
After each non-final phase (Phases 0–5):
Show a phase summary. The detail level depends on
--verbosemode (see "Verbosity mode" section):Verbose: full output + detailed status block (phase name, what ran, result, next action).
Concise (default): bullet-point summary with issues highlighted.
Prompt the user with
Proceed to Phase <N+1>? [Y/n]while specifing what is phase N+1 and wait for confirmation before continuing (see "Phase gate" section).
If something fails, do not just dump raw logs. Summarize:
the exact command that failed
the likely root cause
what safe repair you will try next
whether the repair succeeded
Token-budget preflight
Phase 0 - token-budget preflight
This phase is mandatory and must run before any SSH connection, repo clone, package/configuration check, container build, reboot, or devkit setting change.
Estimate the full-run token budget for the entire setup workflow, not just the next phase. The values below are conservative heuristics, not measured historical usage. Treat them as initial safety budgets and refine them from actual
/hsb-setuprun logs once measured token usage is available:Reserve at least 280,000 tokens for a complete setup run on IGX Orin, AGX Orin, or DGX Spark.
Reserve at least 340,000 tokens for AGX Thor because native build and SIPL/FuSa checks add more phases and troubleshooting.
Add 60,000 tokens when
--verbose, custom repo handling, SSH key remediation, reboot recovery, or extra troubleshooting is expected.Use the larger estimate if the platform is not yet known.
Check remaining usage using the best available Claude Code/account usage source for the current subscription plan. Prefer machine-readable or product-provided usage data when available. If no reliable usage source is available, ask the user to provide their current remaining usage/quota from the Claude Code account or plan UI.
When asking the user because usage cannot be self-verified, present the options in this exact order so the safe stop choices appear first:
I can't verify — stop: The user cannot determine remaining usage. Stop before Phase 1.
I have < {estimate} available — stop: The user checked their plan/account UI and confirms less than the estimated budget remains. Stop before Phase 1.
I have ≥ {estimate} available — proceed: The user checked their plan/account UI and confirms at least the estimated budget remains. Proceed to Phase 1.
Type something: Treat as a question or free-form instruction, answer it, then re-prompt with the same ordered options.
Do not put the proceed option first. The user must intentionally move past the stop choices before selecting proceed.
Display the result to the user before continuing:
Token-budget preflight - Estimated tokens required for complete /hsb-setup run: <estimate> - Estimate basis: conservative heuristic; refine from actual run logs when available - Safety margin included: <margin> - Remaining plan usage available: <available or "unverified"> - Result: PASS / FAILStop on insufficient or unverifiable budget:
If remaining usage is lower than the estimate, stop before Phase 1 and explain that the skill is refusing to start because it may run out of tokens while modifying devkit settings.
If remaining usage cannot be verified, stop before Phase 1 and ask the user to start a fresh session, upgrade/refresh usage, or provide verifiable remaining usage.
--ymust not bypass this preflight.
Platform questions to ask when missing
Ask only the minimum required questions:
Which platform are you using?
IGX Orin iGPU
IGX Orin dGPU
AGX Orin
AGX Thor
DGX Spark
Is the HSB board already physically connected and powered on?
Are you okay with commands that require
sudofor network and Docker setup?
If the user already provided any of these, do not ask again.
Available Scripts
| Script | Purpose | Arguments |
|---|---|---|
scripts/hsb_phase_runner.sh | Structured shell execution with timestamped logs per phase | <phase_name> <command> |
Use run_script(scripts/hsb_phase_runner.sh, <phase_name>, <command>) to run phase steps with automatic logging.
Phase details
See references/phase-details.md for full step-by-step phase instructions, output style, verbosity behavior, auto-approve mode, phase gate rules, and the persistent SSH session model.
Recovery playbook
Try these fixes in order when applicable:
Re-run the failing command once if the failure looks transient.
Fix missing prerequisites (
git-lfs, Docker access,xhost, network route).Refresh repo state and LFS content.
Re-run only the failed phase, not the whole workflow.
If still blocked, stop with a concise diagnosis and a copy-paste command list for the user.
Supporting files in this skill
See docs/platform-mapping.md for the authoritative build and host-setup summary used by this skill.
See docs/failure-playbook.md for common remediation logic.
Use scripts/hsb_phase_runner.sh as a helper when you want structured shell execution and timestamped logs.
Built-in help (--help)
If $ARGUMENTS contains --help or -h, do not run the workflow. Instead, print the following help text verbatim and stop:
Holoscan Sensor Bridge — Demo Bring-Up Skill
USAGE
/hsb-setup [PLATFORM] [OPTIONS]
PLATFORM (optional — will prompt if omitted)
AGX Orin NVIDIA Jetson AGX Orin (iGPU, build with --igpu)
AGX Thor NVIDIA Jetson AGX Thor (iGPU, build with --igpu)
IGX Orin iGPU NVIDIA IGX Orin in iGPU configuration (build with --igpu)
IGX Orin dGPU NVIDIA IGX Orin with discrete GPU (build with --dgpu)
DGX Spark NVIDIA DGX Spark (iGPU, build with --igpu)
OPTIONS
--help, -h Show this help message and exit
--verbose Show full raw command output for every phase
(default is concise bullet-point summaries)
--y Auto-approve all phase gates (skip user confirmation
between phases). Not recommended — a confirmation
warning is shown before proceeding. All output is
saved to a timestamped log file.
--repo <URL> Clone a custom GitHub repo instead of the default
nvidia-holoscan/holoscan-sensor-bridge.
Can also be set via the HSB_REPO env var.
Priority: --repo flag > HSB_REPO env var > default repo
ENVIRONMENT VARIABLES (set before invoking the skill)
SSH_TARGET Remote login target (e.g. [email protected])
REMOTE_ROOT Remote working directory for repo clone and builds
REMOTE_SUDO Privilege escalation: 'sudo', 'sudo -n', or ''
REMOTE_SSH_OPTS Additional SSH options (e.g. -o ServerAliveInterval=30)
HSB_PLATFORM Platform hint (same values as PLATFORM above)
HSB_REPO Custom GitHub repo URL (overridden by --repo flag)
WORKFLOW PHASES
Phase 0 Token-budget preflight; verify enough plan usage for a full run
Phase 1 Confirm platform, clone repo, and study user guide
Phase 2 Host prerequisite checks and network setup
Phase 3 Native build of CLI tools (AGX Thor only, skipped otherwise)
Phase 4 Build, run demo container, and verify connectivity
Phase 5 Produce issues report, optionally export to file
Phase 6 Stop apps, exit container, hand off to user
The skill prompts for confirmation between each phase.
EXAMPLES
/hsb-setup AGX Thor
/hsb-setup AGX Thor --verbose
/hsb-setup AGX Thor --y
/hsb-setup IGX Orin dGPU --repo https://github.com/myorg/my-fork.git
/hsb-setup --helpAfter printing the help text, do not proceed with any phases or ask any questions.
See the EXAMPLES section in Built-in help (--help) for invocation examples.
When $ARGUMENTS contains a platform, use it instead of asking again. Strip --verbose, --y, --repo <URL>, and --help from the arguments before parsing the platform name.
Files
- ATTRIBUTION.mdAdded by AutoGineer892 B
- BENCHMARK.md3.9 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md19.2 KiB
- docs/failure-playbook.md10.8 KiB
- docs/platform-mapping.md2.6 KiB
- evals/evals.json1017 B
- linux/bashrc_hsb.shScript3.0 KiB
- linux/set-hsb-env.shScript1.9 KiB
- references/phase-details.md55.6 KiB
- scripts/hsb_phase_runner.shScript847 B
- skill-card.md4.1 KiB
- skill.oms.sig6.8 KiB
- windows/Microsoft.PowerShell_profile.ps1Script2.6 KiB
- windows/README-WINDOWS.md1.8 KiB
- windows/run-hsb.cmdScript345 B
- windows/set-hsb-env.ps1Script1.6 KiB
docs/failure-playbook.md
Holoscan Sensor Bridge failure playbook
Use this file to explain failures in a user-friendly, action-oriented way.
1. Git clone or refresh fails
Symptoms
DNS resolution errors
GitHub TLS/network timeout
local repo has modified files blocking checkout
Response pattern
Show the failing command
Say whether it is a network problem, auth problem, or local repo-state problem
Prefer safe remedies:
retry once for transient network failures
git stashonly if the user agreesotherwise clone into a new directory
2. Git LFS content missing
Symptoms
missing binary/data assets during build
placeholder pointer files instead of real content
Remedy
git lfs install
git lfs pullThen retry only the failed build step.
3. Docker access denied
Symptoms
permission deniedon Docker socketcannot connect to Docker daemon
Remedy
sudo usermod -aG docker $USERThen explain that a reboot or fresh login session is required before group membership takes effect.
4. Demo container build fails during image pull
Likely causes
not logged in to
nvcr.iointermittent network failure
proxy/DNS issue
Remedy
ask the user to authenticate with Docker if required
retry once after login
if still failing, capture the exact image and layer pull error
5. Container starts but GUI/visualizer fails
Symptoms
segmentation fault from visualizer
display access denied
blank white window
Remedy
ensure the command is launched from a GUI session
check
DISPLAYrun:
xhost +local:dockerif needed, retry with
xhost +
6. Ping to 192.168.0.2 fails
Likely causes
board not powered
incorrect cable/port
wrong host interface configured
missing static IP or route
NetworkManager connection not active
Checks
ip addr
ip route
nmcli con show
ping -c 4 192.168.0.2Explain the result in plain English.
7. Ping works but board is still not usable
Likely causes
firmware incompatibility
enumeration not happening
data plane not flowing
Next checks
Inside the demo container:
hololink enumerateExplain that ping success only confirms basic IP connectivity, not full HSB readiness.
8. xhost fails over SSH with "unable to open display"
Symptoms
xhost: unable to open display ":0"when running via SSH
Likely cause
The SSH session does not have DISPLAY set, or the X server is not on :0. On many systems (especially AGX Thor with GNOME), the display may be :1 or another number.
Remedy
Check existing X sockets:
ls /tmp/.X11-unix/Check active sessions:
w(look for a tty login with a desktop session)Set
DISPLAYto the correct value (e.g.,:1ifX1exists)Set
XAUTHORITY=/home/$USER/.XauthorityRetry
xhost +local:docker
export DISPLAY=:1
export XAUTHORITY=/home/$USER/.Xauthority
xhost +local:docker9. demo.sh fails with "the input device is not a TTY"
Symptoms
Running
sh docker/demo.shover SSH produces:the input device is not a TTYUsing
ssh -talso fails when stdin is not a real terminal (e.g., from Claude Code on Windows)
Likely cause
demo.sh hardcodes docker run -it. The -t flag requires a TTY, which is not available in non-interactive SSH sessions.
Remedy
Invoke docker run directly without the -it flag, replicating all other arguments from demo.sh (volumes, environment variables, network, GPU access, working directory). See the Phase 4 section of the skill for the full command template.
When running from a local GUI session on the host (not over SSH), sh docker/demo.sh works as-is.
10. Native hololink-enumerate fails with "Address already in use"
Symptoms
hololink-enumerate(native binary) crashes with:bind failed with errno=98: "Address already in use"Typically on AGX Thor when running the native enumerate after or alongside a Docker container
Likely cause
The native hololink-enumerate and the containerized hololink enumerate (Python) both bind the same UDP broadcast port for device discovery. Since the demo container uses --net host, they share the host network namespace and conflict.
Remedy
Force-stop all running hololink containers:
docker ps --format '{{.Names}}' | xargs -r -I{} sh -c 'docker stop -t 2 {} 2>/dev/null; docker rm -f {} 2>/dev/null'Verify no process is still holding the port:
sudo ss -ulnp | grep holoIf a process remains, kill it by PID:
sudo kill <pid>Retry the native enumerate:
cd <repo-root>/build
timeout 5 ./tools/enumerate/hololink-enumeratePrevention
Always force-stop the demo container before running native CLI tools, and vice versa. Use docker stop -t 2 followed by docker rm -f rather than just docker rm -f, to give the process a brief grace period before SIGKILL.
10a. Orphaned container keeps running after timeout kills docker run
Symptoms
timeout N docker run --name X ...exits after N seconds, butdocker psstill shows containerXrunningSubsequent containers or native binaries fail with port conflicts
SSH command completes but the remote container is still consuming resources
Root cause
timeout sends SIGTERM/SIGKILL to the local docker run client process, not to the container running in the Docker daemon. The container continues running detached.
Remedy
Never use timeout as the sole mechanism to stop a container. Instead:
Run the container in detached mode (
docker run -d --name ...)Use
docker logs -fto stream outputUse a background watchdog to stop the container after the desired duration:
CONTAINER_NAME="hsb_task_$$"
docker run -d --name "$CONTAINER_NAME" --rm [flags] image:tag command
# Watchdog kills the container after N seconds
( sleep N; docker stop -t 2 "$CONTAINER_NAME" 2>/dev/null ) &
WATCHDOG_PID=$!
# Stream logs until the container stops
docker logs -f "$CONTAINER_NAME" 2>&1 || true
# Clean up watchdog process
kill $WATCHDOG_PID 2>/dev/null
wait $WATCHDOG_PID 2>/dev/null
# Belt and suspenders — ensure container is gone
docker rm -f "$CONTAINER_NAME" 2>/dev/null || truePrevention
All container runs in the skill must follow the "Container lifecycle management" section in SKILL.md. Every docker run must have a matching cleanup path.
11. Native build fails on AGX Thor — missing dependencies
Symptoms
cmakeerrors about missing packages (fmt,yaml-cpp,OpenSSL,curlpp,ibverbs)nvcc not foundduring build
Likely cause
CUDA is installed but not on PATH, or build libraries were not installed.
Remedy
Add CUDA to PATH:
export PATH=/usr/local/cuda-13.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-13.0/lib64:$LD_LIBRARY_PATHInstall missing libraries (from the AGX Thor setup docs):
sudo apt-get update
sudo apt install -y cmake libfmt-dev libssl-dev libcurlpp-dev libyaml-cpp-dev libibverbs-dev python3-devRe-run cmake and make.
12. hololink enumerate does not accept --count flag
Symptoms
hololink enumerate --count 3fails with:error: unrecognized arguments: --count 3
Likely cause
The hololink enumerate CLI does not support a --count or iteration-limit flag. It runs indefinitely, printing one enumeration response per second.
Remedy
Run hololink enumerate without --count. Collect at least 3 consistent responses from the output, then stop the container (e.g., docker stop demo or Ctrl-C). Parse the output for mac_id, hsb_ip_version, fpga_crc, ip_address, serial_number, and interface fields.
13. SSH connection lost after nvpmodel reboot
Symptoms
echo "YES" | sudo nvpmodel -m 0triggers an immediate rebootSSH session terminates with
Connection to <host> closed by remote hostSubsequent SSH attempts fail with
Connection refusedorConnection timed outfor 1–3 minutes
Likely cause
Setting MAXN power mode on AGX Orin requires a reboot. The nvpmodel command reboots the device immediately after receiving YES confirmation, dropping the SSH connection.
Remedy
This is expected behavior, not an error. Wait for the device to reboot and poll SSH connectivity:
for i in $(seq 1 20); do
sleep 15
if ssh -o ConnectTimeout=10 -o BatchMode=yes $REMOTE_SSH_OPTS $SSH_TARGET "echo ok" 2>/dev/null; then
echo "Reconnected after ~$((i * 15)) seconds"
break
fi
doneAfter reconnecting, verify the power mode change took effect:
sudo nvpmodel -qShould show NV Power Mode: MAXN and mode 0.
Prevention
Always structure Phase 3 so that the MAXN/reboot step comes after all other persistent configurations (sysctl, nmcli) have been applied, minimizing the amount of work that needs to be done post-reboot.
14. SSH key-based authentication fails from Windows host
Symptoms
ssh -o BatchMode=yes $SSH_TARGET "echo ok"fails withPermission denied (publickey)orPermission denied (publickey,password)Skill cannot proceed to any remote phases
Likely causes (check in order)
No SSH key pair exists on the Windows host —
~/.ssh/has noid_ed25519orid_rsafilesSSH agent is not running —
ssh-add -lreturnsCould not open a connection to your authentication agentKey exists but is not loaded —
ssh-add -lreturnsThe agent has no identitiesPublic key not deployed on remote host — key is loaded locally but the remote
~/.ssh/authorized_keysdoes not contain it
Remedy
Follow these steps sequentially, stopping as soon as SSH succeeds:
1. Check for existing keys:
ls ~/.ssh/id_ed25519.pub 2>/dev/null || ls ~/.ssh/id_rsa.pub 2>/dev/nullIf no key exists, generate one:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" -C "$USERNAME@$(hostname)"2. Start SSH agent and load the key:
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_ed25519 2>/dev/null || ssh-add ~/.ssh/id_rsa 2>/dev/null3. Retry SSH. If it still fails, deploy the public key:
# This will prompt the user for the remote password once
cat ~/.ssh/id_ed25519.pub | ssh -o StrictHostKeyChecking=accept-new $REMOTE_SSH_OPTS $SSH_TARGET "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"4. Final verification:
ssh -o ConnectTimeout=10 -o BatchMode=yes $REMOTE_SSH_OPTS $SSH_TARGET "echo ok"If deployment still fails
Verify the password was correct
Check remote
~/.sshownership:ls -la ~ ~/.ssh(should be owned by the target user, not root)Check remote SSH config:
grep PubkeyAuthentication /etc/ssh/sshd_config(must beyesor absent/commented)Check remote authorized_keys is not world-writable:
stat -c %a ~/.ssh/authorized_keys(should be600)
Requirements and compatibility
Written for: Claude Code
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Declares allowed tools, Claude Code frontmatter
Security
What our scanner noticed· Medium risk
- Phrasing that asks for actions without confirmation
- Large base64-encoded blobs
- References to credential files
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Holoscan Team
- Publisher
- NVIDIA (Official)
- Distributed by
- NVIDIA
- Source
- NVIDIA/skills · skills/hsb-setup · commit fce3cca
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE-APACHE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Holoscan Team or NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download hsb-setup.zip