Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
45fdef7
feat(gpu): prefer native OpenShell with compatibility fallback
ericksoa Jul 6, 2026
f2f5e6f
fix(gpu): harden native fallback orchestration
ericksoa Jul 6, 2026
4a7f219
fix(gpu): narrow and modularize fallback orchestration
ericksoa Jul 6, 2026
3f11600
test(gpu): keep recreate DNS fixtures linear
ericksoa Jul 6, 2026
10e615b
refactor(gpu): split fallback review boundaries
ericksoa Jul 6, 2026
4829c80
docs(gpu): clarify DNS fallback boundary
ericksoa Jul 6, 2026
8d6edaa
test(gpu): make fallback boundaries explicit
ericksoa Jul 6, 2026
435a451
test(gpu): exercise default diagnostics capture
ericksoa Jul 6, 2026
e9dd4ae
refactor(gpu): tighten fallback review boundaries
ericksoa Jul 6, 2026
a5ef521
fix(gpu): wait for stable fallback readiness
ericksoa Jul 6, 2026
d01abe1
Merge remote-tracking branch 'origin/main' into feat/gpu-native-fallb…
ericksoa Jul 6, 2026
24c1835
refactor(gpu): isolate fallback trust boundaries
ericksoa Jul 6, 2026
5eed49d
refactor(gpu): make review contracts explicit
ericksoa Jul 6, 2026
881a781
Merge remote-tracking branch 'origin/main' into feat/gpu-native-fallb…
ericksoa Jul 6, 2026
2bb45f6
test(gpu): clarify fallback safety contracts
ericksoa Jul 6, 2026
f214cbf
Merge remote-tracking branch 'origin/main' into feat/gpu-native-fallb…
ericksoa Jul 6, 2026
4d3ca8e
fix(gpu): redact cleanup refusal diagnostics
ericksoa Jul 6, 2026
1fe1181
Merge remote-tracking branch 'origin/main' into feat/gpu-native-fallb…
ericksoa Jul 7, 2026
e599ade
Merge remote-tracking branch 'origin/main' into feat/gpu-native-fallb…
ericksoa Jul 7, 2026
176201d
fix(gpu): harden native fallback trust boundary
ericksoa Jul 7, 2026
abc26da
Merge remote-tracking branch 'origin/main' into feat/gpu-native-fallb…
ericksoa Jul 7, 2026
ebc37dc
test(gpu): satisfy source-shape guard
ericksoa Jul 7, 2026
6c6b8e1
test(gpu): isolate fallback runtime fixture
ericksoa Jul 8, 2026
8793c25
Merge remote-tracking branch 'origin/main' into feat/gpu-native-fallb…
ericksoa Jul 8, 2026
1e443c3
test(gpu): cover rebuild route selection
ericksoa Jul 8, 2026
d58a99a
Merge remote-tracking branch 'origin/main' into feat/gpu-native-fallb…
ericksoa Jul 8, 2026
1434cb4
ci(e2e): trap GPU fixture Docker restore
ericksoa Jul 8, 2026
3e82fd2
Merge remote-tracking branch 'origin/main' into feat/gpu-native-fallb…
ericksoa Jul 8, 2026
cf3eac4
merge(main): refresh GPU fallback branch
cv Jul 10, 2026
fd65f6f
test(e2e): map Hermes GPU mock parity
cv Jul 10, 2026
83ceaba
test(onboard): cover fallback rebuild preflight
cv Jul 10, 2026
16a283c
docs(gpu): clarify fallback controls
cv Jul 10, 2026
200d211
docs(gpu): clarify rebuild route resolution
cv Jul 10, 2026
461ac0a
merge(main): refresh PR branch
cv Jul 11, 2026
ce6c748
Merge branch 'main' into feat/gpu-native-fallback-6110
cv Jul 11, 2026
7674c5b
merge(main): refresh PR branch
cv Jul 11, 2026
da57b58
Merge branch 'main' into feat/gpu-native-fallback-6110
cv Jul 11, 2026
5efbbcc
Merge branch 'main' into feat/gpu-native-fallback-6110
cv Jul 11, 2026
0bb94fe
Merge branch 'main' into feat/gpu-native-fallback-6110
cv Jul 11, 2026
2521525
Merge remote-tracking branch 'origin/main' into codex/pr-6333-green
ericksoa Jul 12, 2026
6891a65
fix(gpu): harden fallback review boundaries
ericksoa Jul 12, 2026
cf10c5c
test(gpu): keep route cases linear
ericksoa Jul 12, 2026
fa88477
fix(e2e): trust privileged GPU fixture
ericksoa Jul 12, 2026
cb31b8b
refactor(e2e): compact Hermes GPU boundary checks
ericksoa Jul 12, 2026
6252c55
fix(e2e): harden GPU fallback trust boundaries
ericksoa Jul 12, 2026
c75949f
refactor(e2e): compact GPU boundary coverage
ericksoa Jul 12, 2026
b38165c
test(e2e): keep GPU trust checks focused
ericksoa Jul 12, 2026
675f3ea
fix(onboard): defer compatibility network mutation
ericksoa Jul 12, 2026
26d8a22
Merge remote-tracking branch 'origin/main' into codex/pr-6333-green
ericksoa Jul 12, 2026
de7b367
test(onboard): consolidate GPU fallback coverage
ericksoa Jul 12, 2026
324516e
test(onboard): keep diagnostics cases branchless
ericksoa Jul 12, 2026
0abe4c9
test(onboard): trim GPU review context
ericksoa Jul 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1706,19 +1706,24 @@ jobs:
if: ${{ contains(format(',{0},', inputs.jobs), ',hermes-gpu-startup,') || contains(format(',{0},', inputs.targets), ',hermes-gpu-startup,') }}
runs-on: linux-amd64-gpu-rtxpro6000-latest-1
timeout-minutes: 75
strategy:
fail-fast: false
matrix:
scenario: [native, fallback]
env:
E2E_JOB: "1"
E2E_DEFAULT_ENABLED: "0"
E2E_TARGET_ID: "hermes-gpu-startup"
E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts/live/hermes-gpu-startup
E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts/live/hermes-gpu-startup/${{ matrix.scenario }}
E2E_HERMES_GPU_STARTUP_SCENARIO: ${{ matrix.scenario }}
NEMOCLAW_CLI_BIN: ${{ github.workspace }}/bin/nemoclaw.js
NEMOCLAW_RUN_LIVE_E2E: "1"
NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE: "1"
NEMOCLAW_AGENT: hermes
NEMOCLAW_NON_INTERACTIVE: "1"
NEMOCLAW_RECREATE_SANDBOX: "1"
NEMOCLAW_SANDBOX_GPU: "1"
NEMOCLAW_SANDBOX_NAME: e2e-hermes-gpu-startup
NEMOCLAW_SANDBOX_NAME: e2e-hermes-gpu-startup-${{ matrix.scenario }}
NEMOCLAW_ONBOARD_VALIDATION_TIMEOUT_SECONDS: "60"
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
Expand All @@ -1740,6 +1745,9 @@ jobs:
- name: Upload Hermes GPU startup artifacts
if: always()
uses: NVIDIA/NemoClaw/.github/actions/upload-e2e-artifacts@7768e15eb90d3ee2d33432f481dfe8747e4f6d57
with:
name: e2e-hermes-gpu-startup-${{ matrix.scenario }}
path: e2e-artifacts/live/hermes-gpu-startup/${{ matrix.scenario }}/

- name: Clean up Docker auth
if: always()
Expand Down
19 changes: 11 additions & 8 deletions docs/reference/commands-nemohermes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -451,12 +451,14 @@ Use `--no-gpu` to opt out when you want host-side inference providers only and d
Use `--gpu` to require GPU passthrough and fail fast if an NVIDIA GPU is not detected.
Use `--sandbox-gpu` or `--no-sandbox-gpu` to control only direct NVIDIA GPU access inside the sandbox.
Use `--sandbox-gpu --sandbox-gpu-device <device>` to pass a specific OpenShell GPU device selector to `openshell sandbox create`; device selectors require explicit sandbox GPU enablement.
On ordinary native Linux Docker-driver hosts with usable CDI, NemoClaw uses OpenShell native GPU injection by default.
On Docker Desktop WSL and Jetson/Tegra, NemoClaw creates the sandbox first and then recreates the OpenShell-managed Docker container with NVIDIA GPU access by default.
When you force this compatibility path on ordinary native Linux, NemoClaw uses an available NVIDIA CDI spec before falling back to Docker `--gpus all` or the NVIDIA runtime.
On ordinary native Linux Docker-driver hosts, NemoClaw automatically tries native OpenShell GPU injection first and keeps the Docker container-swap path as a one-time compatibility fallback.
If native sandbox creation, readiness, or GPU verification reports a hard failure, onboarding saves redacted diagnostics and removes the incomplete sandbox before it retries through the compatibility path.
NemoClaw retries only after it verifies that no OpenShell-labeled container remains; if cleanup cannot be proven safe, onboarding stops and prints cleanup guidance instead.
On Docker Desktop WSL and Jetson/Tegra, automatic GPU onboarding uses the compatibility path directly.
On ordinary native Linux, the compatibility path uses an available NVIDIA CDI spec before falling back to Docker `--gpus all` or the NVIDIA runtime.
On Docker Desktop WSL, the compatibility path skips CDI and tries Docker `--gpus all` before the NVIDIA runtime.
On Jetson/Tegra hosts, the compatibility path uses the NVIDIA runtime and adds the host group IDs that own `/dev/nvmap` and `/dev/nvhost-*` so the sandbox user can initialize CUDA.
If the patch fails, onboarding keeps diagnostics and prints a manual cleanup command rather than deleting the failed sandbox automatically.
If the compatibility attempt fails, onboarding keeps its diagnostics and the failed sandbox in place and prints a manual cleanup command.

Prerequisites:

Expand All @@ -469,9 +471,10 @@ When GPU passthrough is enabled and a gateway already exists without it, onboard
If no other registered sandbox depends on that gateway, or if `--recreate-sandbox` is recreating the only registered sandbox with the same name, onboarding cleans up the stale gateway and continues.
If other sandboxes depend on the gateway or Docker state is unclear, onboarding exits without cleanup and prints targeted destroy or gateway-removal guidance.
To add GPU to an existing sandbox, rerun with `--recreate-sandbox`.
Leave `NEMOCLAW_DOCKER_GPU_PATCH` unset or set it to `auto` to use the platform default.
Set `NEMOCLAW_DOCKER_GPU_PATCH=1` to force the legacy Docker container-swap path on ordinary native Linux.
Set `NEMOCLAW_DOCKER_GPU_PATCH=0` to select native OpenShell GPU injection on ordinary native Linux or Jetson/Tegra.
Leave `NEMOCLAW_DOCKER_GPU_PATCH` unset or set it to `auto` for automatic GPU onboarding.
On ordinary native Linux, automatic mode tries native OpenShell GPU injection first and retries once through the compatibility path when safe.
Set `NEMOCLAW_DOCKER_GPU_PATCH=0` to use native OpenShell GPU injection without the compatibility fallback on ordinary native Linux or Jetson/Tegra.
Set `NEMOCLAW_DOCKER_GPU_PATCH=1`, or another legacy nonzero value, to use only the compatibility path on ordinary native Linux.
Use `NEMOCLAW_DOCKER_GPU_PATCH=0` on Jetson/Tegra only for troubleshooting because it bypasses Tegra device-group propagation and CUDA may not initialize.
Docker Desktop WSL ignores `NEMOCLAW_DOCKER_GPU_PATCH=0` because GPU passthrough on that runtime requires the compatibility patch.
Use `--no-sandbox-gpu`, `--no-gpu`, or `NEMOCLAW_SANDBOX_GPU=0` when you want to disable sandbox GPU passthrough on Docker Desktop WSL.
Expand Down Expand Up @@ -2283,7 +2286,7 @@ Set them before running `nemohermes onboard`.
| `NEMOCLAW_SANDBOX_GPU_DEVICE` | OpenShell GPU device selector | Selects the GPU device passed with `openshell sandbox create --gpu-device`. Requires explicit sandbox GPU enablement with `NEMOCLAW_SANDBOX_GPU=1` (or `--sandbox-gpu` for CLI-driven onboarding); otherwise onboarding rejects the selector instead of treating it as an implicit opt-in. |
| `NEMOCLAW_SANDBOX_BASE_IMAGE_REFRESH` | `1`, `true`, `yes`, or `on` to enable | Bypasses recorded sandbox base-image resolution metadata during onboarding, recreation, and rebuild. NemoClaw reruns candidate resolution but can still use a compatible image from Docker's local image store. This setting does not discard onboarding session state. |
| `NEMOCLAW_SANDBOX_BASE_LOCAL_BUILD` | unset or `auto` (default); `1`, `true`, `yes`, or `on` to enable; `0`, `false`, `no`, or `off` to disable | Controls whether base-image resolution may build a compatible image locally. The default allows builds during normal CLI runs and disables them when `NODE_ENV=test` or `VITEST=true`. When source inputs require a fresh build, disabling local builds makes resolution fail instead of using an unproven image. |
| `NEMOCLAW_DOCKER_GPU_PATCH` | unset, `auto`, `1`, or `0` | Selects Linux Docker-driver GPU routing. Unset or `auto` uses native OpenShell GPU injection on ordinary native Linux and the compatibility patch on Docker Desktop WSL and Jetson/Tegra. `1` forces the compatibility patch. `0` selects native injection on ordinary native Linux and Jetson/Tegra, but Docker Desktop WSL ignores it. On Jetson/Tegra, use `0` only for troubleshooting because it bypasses the device-group propagation needed for CUDA. |
| `NEMOCLAW_DOCKER_GPU_PATCH` | unset, `auto`, `0`, or a nonzero compatibility value | Controls internal Linux Docker-driver GPU routing without changing whether GPU passthrough is enabled. Unset or `auto` tries native OpenShell injection first with one safe compatibility fallback on ordinary native Linux, and uses the compatibility path directly on Docker Desktop WSL and Jetson/Tegra. `0` selects native-only injection on ordinary native Linux and Jetson/Tegra, but Docker Desktop WSL ignores it. `1` and other legacy nonzero values select compatibility-only routing. On Jetson/Tegra, use `0` only for troubleshooting because it bypasses the device-group propagation needed for CUDA. |
| `NEMOCLAW_OPENSHELL_GATEWAY_CONTAINER_PATCH` | `1` to enable; disabled by default | This setting explicitly opts into the Linux gateway compatibility container for an older host ABI or a diagnostic run; use it only on a trusted local host because it uses host networking and mounts the Docker socket read-only even though the socket still exposes the privileged Docker API; prefer OpenShell 0.0.72's directly supported glibc 2.28+ path; see the [OpenShell 0.0.72 compatibility review](../security/openshell-0.0.72-compatibility-review#source-of-truth-boundaries) for details. |
| `NEMOCLAW_OPENSHELL_GATEWAY_BIN` | path | Advanced override for the `openshell-gateway` binary used by the Linux Docker-driver standalone fallback. Defaults to the binary next to `openshell`, then common install paths. |
| `NEMOCLAW_OPENSHELL_SANDBOX_BIN` | path | Advanced override for the `openshell-sandbox` binary used by the Linux Docker-driver standalone fallback. Defaults to the binary next to `openshell`, then common install paths. |
Expand Down
19 changes: 11 additions & 8 deletions docs/reference/commands.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -555,12 +555,14 @@ Use `--no-gpu` to opt out when you want host-side inference providers only and d
Use `--gpu` to require GPU passthrough and fail fast if an NVIDIA GPU is not detected.
Use `--sandbox-gpu` or `--no-sandbox-gpu` to control only direct NVIDIA GPU access inside the sandbox.
Use `--sandbox-gpu --sandbox-gpu-device <device>` to pass a specific OpenShell GPU device selector to `openshell sandbox create`; device selectors require explicit sandbox GPU enablement.
On ordinary native Linux Docker-driver hosts with usable CDI, NemoClaw uses OpenShell native GPU injection by default.
On Docker Desktop WSL and Jetson/Tegra, NemoClaw creates the sandbox first and then recreates the OpenShell-managed Docker container with NVIDIA GPU access by default.
When you force this compatibility path on ordinary native Linux, NemoClaw uses an available NVIDIA CDI spec before falling back to Docker `--gpus all` or the NVIDIA runtime.
On ordinary native Linux Docker-driver hosts, NemoClaw automatically tries native OpenShell GPU injection first and keeps the Docker container-swap path as a one-time compatibility fallback.
If native sandbox creation, readiness, or GPU verification reports a hard failure, onboarding saves redacted diagnostics and removes the incomplete sandbox before it retries through the compatibility path.
NemoClaw retries only after it verifies that no OpenShell-labeled container remains; if cleanup cannot be proven safe, onboarding stops and prints cleanup guidance instead.
On Docker Desktop WSL and Jetson/Tegra, automatic GPU onboarding uses the compatibility path directly.
On ordinary native Linux, the compatibility path uses an available NVIDIA CDI spec before falling back to Docker `--gpus all` or the NVIDIA runtime.
On Docker Desktop WSL, the compatibility path skips CDI and tries Docker `--gpus all` before the NVIDIA runtime.
On Jetson/Tegra hosts, the compatibility path uses the NVIDIA runtime and adds the host group IDs that own `/dev/nvmap` and `/dev/nvhost-*` so the sandbox user can initialize CUDA.
If the patch fails, onboarding keeps diagnostics and prints a manual cleanup command rather than deleting the failed sandbox automatically.
If the compatibility attempt fails, onboarding keeps its diagnostics and the failed sandbox in place and prints a manual cleanup command.

Prerequisites:

Expand All @@ -573,9 +575,10 @@ When GPU passthrough is enabled and a gateway already exists without it, onboard
If no other registered sandbox depends on that gateway, or if `--recreate-sandbox` is recreating the only registered sandbox with the same name, onboarding cleans up the stale gateway and continues.
If other sandboxes depend on the gateway or Docker state is unclear, onboarding exits without cleanup and prints targeted destroy or gateway-removal guidance.
To add GPU to an existing sandbox, rerun with `--recreate-sandbox`.
Leave `NEMOCLAW_DOCKER_GPU_PATCH` unset or set it to `auto` to use the platform default.
Set `NEMOCLAW_DOCKER_GPU_PATCH=1` to force the legacy Docker container-swap path on ordinary native Linux.
Set `NEMOCLAW_DOCKER_GPU_PATCH=0` to select native OpenShell GPU injection on ordinary native Linux or Jetson/Tegra.
Leave `NEMOCLAW_DOCKER_GPU_PATCH` unset or set it to `auto` for automatic GPU onboarding.
On ordinary native Linux, automatic mode tries native OpenShell GPU injection first and retries once through the compatibility path when safe.
Set `NEMOCLAW_DOCKER_GPU_PATCH=0` to use native OpenShell GPU injection without the compatibility fallback on ordinary native Linux or Jetson/Tegra.
Set `NEMOCLAW_DOCKER_GPU_PATCH=1`, or another legacy nonzero value, to use only the compatibility path on ordinary native Linux.
Use `NEMOCLAW_DOCKER_GPU_PATCH=0` on Jetson/Tegra only for troubleshooting because it bypasses Tegra device-group propagation and CUDA may not initialize.
Docker Desktop WSL ignores `NEMOCLAW_DOCKER_GPU_PATCH=0` because GPU passthrough on that runtime requires the compatibility patch.
Use `--no-sandbox-gpu`, `--no-gpu`, or `NEMOCLAW_SANDBOX_GPU=0` when you want to disable sandbox GPU passthrough on Docker Desktop WSL.
Expand Down Expand Up @@ -2808,7 +2811,7 @@ Set them before running `$$nemoclaw onboard`.
| `NEMOCLAW_SANDBOX_GPU_DEVICE` | OpenShell GPU device selector | Selects the GPU device passed with `openshell sandbox create --gpu-device`. Requires explicit sandbox GPU enablement with `NEMOCLAW_SANDBOX_GPU=1` (or `--sandbox-gpu` for CLI-driven onboarding); otherwise onboarding rejects the selector instead of treating it as an implicit opt-in. |
| `NEMOCLAW_SANDBOX_BASE_IMAGE_REFRESH` | `1`, `true`, `yes`, or `on` to enable | Bypasses recorded sandbox base-image resolution metadata during onboarding, recreation, and rebuild. NemoClaw reruns candidate resolution but can still use a compatible image from Docker's local image store. This setting does not discard onboarding session state. |
| `NEMOCLAW_SANDBOX_BASE_LOCAL_BUILD` | unset or `auto` (default); `1`, `true`, `yes`, or `on` to enable; `0`, `false`, `no`, or `off` to disable | Controls whether base-image resolution may build a compatible image locally. The default allows builds during normal CLI runs and disables them when `NODE_ENV=test` or `VITEST=true`. When source inputs require a fresh build, disabling local builds makes resolution fail instead of using an unproven image. |
| `NEMOCLAW_DOCKER_GPU_PATCH` | unset, `auto`, `1`, or `0` | Selects Linux Docker-driver GPU routing. Unset or `auto` uses native OpenShell GPU injection on ordinary native Linux and the compatibility patch on Docker Desktop WSL and Jetson/Tegra. `1` forces the compatibility patch. `0` selects native injection on ordinary native Linux and Jetson/Tegra, but Docker Desktop WSL ignores it. On Jetson/Tegra, use `0` only for troubleshooting because it bypasses the device-group propagation needed for CUDA. |
| `NEMOCLAW_DOCKER_GPU_PATCH` | unset, `auto`, `0`, or a nonzero compatibility value | Controls internal Linux Docker-driver GPU routing without changing whether GPU passthrough is enabled. Unset or `auto` tries native OpenShell injection first with one safe compatibility fallback on ordinary native Linux, and uses the compatibility path directly on Docker Desktop WSL and Jetson/Tegra. `0` selects native-only injection on ordinary native Linux and Jetson/Tegra, but Docker Desktop WSL ignores it. `1` and other legacy nonzero values select compatibility-only routing. On Jetson/Tegra, use `0` only for troubleshooting because it bypasses the device-group propagation needed for CUDA. |
| `NEMOCLAW_OPENSHELL_GATEWAY_CONTAINER_PATCH` | `1` to enable; disabled by default | This setting explicitly opts into the Linux gateway compatibility container for an older host ABI or a diagnostic run; use it only on a trusted local host because it uses host networking and mounts the Docker socket read-only even though the socket still exposes the privileged Docker API; prefer OpenShell 0.0.72's directly supported glibc 2.28+ path; see the [OpenShell 0.0.72 compatibility review](../security/openshell-0.0.72-compatibility-review#source-of-truth-boundaries) for details. |
| `NEMOCLAW_OPENSHELL_GATEWAY_BIN` | path | Advanced override for the `openshell-gateway` binary used by the Linux Docker-driver standalone fallback. Defaults to the binary next to `openshell`, then common install paths. |
| `NEMOCLAW_OPENSHELL_SANDBOX_BIN` | path | Advanced override for the `openshell-sandbox` binary used by the Linux Docker-driver standalone fallback. Defaults to the binary next to `openshell`, then common install paths. |
Expand Down
15 changes: 9 additions & 6 deletions docs/reference/troubleshooting.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -1822,12 +1822,15 @@ docker run --rm --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benc

If GPU passthrough is not required on this host, rerun onboarding with `--no-gpu` instead.

### Docker GPU patch failed during sandbox create
### Automatic GPU fallback or compatibility patch failed

On ordinary native Linux Docker-driver hosts with usable CDI, NemoClaw uses OpenShell native GPU injection by default.
On Docker Desktop WSL and Jetson/Tegra, NemoClaw uses the compatibility patch by default, which creates the sandbox first and then recreates the OpenShell-managed Docker container with NVIDIA GPU flags.
Set `NEMOCLAW_DOCKER_GPU_PATCH=1` to force this compatibility path on ordinary native Linux for diagnostics or older host compatibility.
If that compatibility patch fails, onboarding leaves the failed sandbox and diagnostic bundle in place so you can inspect the OpenShell and Docker state.
On ordinary native Linux Docker-driver hosts, automatic GPU onboarding first uses native OpenShell GPU injection.
If native sandbox creation, readiness, or GPU verification reports a hard failure, NemoClaw captures redacted diagnostics, deletes the incomplete sandbox, verifies that no OpenShell-labeled Docker container remains, and retries exactly once through the compatibility path.
If deletion or container cleanup cannot be proven safe, onboarding stops before the retry and prints manual cleanup guidance.
Image build, upload, TLS, provider, policy, dashboard, and inference failures stay on their existing error paths and do not trigger the GPU compatibility fallback.
On Docker Desktop WSL and Jetson/Tegra, automatic GPU onboarding uses the compatibility path directly, which creates the sandbox first and then recreates the OpenShell-managed Docker container with NVIDIA GPU flags.
Set `NEMOCLAW_DOCKER_GPU_PATCH=1`, or another legacy nonzero value, to use only the compatibility path on ordinary native Linux for diagnostics or older host compatibility.
If the compatibility attempt fails, onboarding leaves the failed sandbox and diagnostic bundle in place so you can inspect the OpenShell and Docker state.

<Note>
Starting with NemoClaw v0.0.43, the standard installer handles the `/proc/<pid>/task/<tid>/comm` permission case during this patch path.
Expand All @@ -1842,7 +1845,7 @@ openshell sandbox delete <sandbox-name>

Fix the NVIDIA Container Toolkit or CDI configuration reported in the diagnostics, clean up the failed sandbox, then rerun onboarding.
If you do not need GPU access inside the sandbox, rerun with `--no-sandbox-gpu`.
Set `NEMOCLAW_DOCKER_GPU_PATCH=0` to select native OpenShell GPU injection on ordinary native Linux or Jetson/Tegra.
Set `NEMOCLAW_DOCKER_GPU_PATCH=0` to use native OpenShell GPU injection without the compatibility fallback on ordinary native Linux or Jetson/Tegra.
Use this override on Jetson/Tegra only for troubleshooting because it bypasses the compatibility path's `/dev/nvmap` and `/dev/nvhost-*` group propagation, so CUDA may not initialize.
On Docker Desktop WSL, the patch is required for GPU passthrough.
`NEMOCLAW_DOCKER_GPU_PATCH=0` is ignored on that runtime, and onboarding logs a warning when it is set there.
Expand Down
Loading
Loading