Notes to Self

Alex Sokolsky's Notes on Computers and Programming

Installing and using NVIDIA NemoClaw

NemoClaw

Prerequisites

Install node for the user NOT globally.

Install docker and make sure docker ps does not require sudo.

Install OpenShell:

curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh

which gives:

alex@exi > curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh
openshell: resolving latest version...
openshell: downloading openshell v0.0.11 (x86_64-unknown-linux-musl)...
openshell: verifying checksum...
openshell: extracting...
openshell: installed openshell 0.0.11 to /home/alex/.local/bin/openshell

Verify OpenShell install:

> openshell --version
openshell 0.0.10

Installation

curl -fsSL https://www.nvidia.com/nemoclaw.sh | bash

which gives:

alex@exi > curl -fsSL https://www.nvidia.com/nemoclaw.sh | bash
[INFO]  === NemoClaw Installer ===
[INFO]  Node.js found: v24.14.0
[INFO]  Runtime OK: Node.js v24.14.0, npm 11.9.0
[INFO]  Installing NemoClaw from GitHub…
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead

changed 642 packages in 19s

122 packages are looking for funding
  run `npm fund` for details
[INFO]  Verified: nemoclaw is available at /home/alex/.n/bin/nemoclaw
[INFO]  Running nemoclaw onboard…
[INFO]  Installer stdin is piped; attaching onboarding to /dev/tty…

  NemoClaw Onboarding
  ===================

  [1/7] Preflight checks
  ──────────────────────────────────────────────────
  ✓ Docker is running
  ✓ Container runtime: docker
  ✓ openshell CLI: openshell 0.0.11
  ✓ Port 8080 available (OpenShell gateway)
  ✓ Port 18789 available (NemoClaw dashboard)
  ✓ NVIDIA GPU detected: 1 GPU(s), 8192 MB VRAM

  [2/7] Starting OpenShell gateway
  ──────────────────────────────────────────────────
✓ Checking Docker
✓ Downloading gateway
✓ Initializing environment
✓ Starting gateway
✓ Gateway ready

  Name: nemoclaw
  Endpoint: https://127.0.0.1:8080

✓ Active gateway set to 'nemoclaw'
  ✓ Gateway is healthy

  [3/7] Creating sandbox
  ──────────────────────────────────────────────────
  Sandbox name (lowercase, numbers, hyphens) [my-assistant]:
  Creating sandbox 'my-assistant' (this takes a few minutes on first run)...
Building image openshell/sandbox-from:1773962852 from /tmp/nemoclaw-build-D3ohEu/Dockerfile
  Context: /tmp/nemoclaw-build-D3ohEu
  Gateway: nemoclaw

  Building image openshell/sandbox-from:1773962852 from /tmp/nemoclaw-build-D3ohEu/Dockerfile
  Step 1/22 : FROM node:22-slim
   ---> 4f77a690f2f8
  Step 2/22 : ENV DEBIAN_FRONTEND=noninteractive
   ---> Running in fd178bb77e23
   ---> Removed intermediate container fd178bb77e23
   ---> f73beb704fca
  Step 3/22 : RUN apt-get update && apt-get install -y --no-install-recommends  python3 python3-pip python3-venv curl git ca-certificates iproute2 && rm -rf /var/lib/apt/lists/*
   ---> Running in a5e02fee41ab

  Fetched 9348 kB in 1s (8782 kB/s)
Reading package lists...
  Reading package lists...
  Building dependency tree...

Reading state information...
  The following additional packages will be installed:
  git-man libbpf1 libbrotli1 libbsd0 libcap2-bin libcurl3-gnutls libcurl4
  libelf1 liberror-perl libexpat1 libgdbm-compat4 libgdbm6 libgssapi-krb5-2
  libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libldap-2.5-0 libmnl0
  libncursesw6 libnghttp2-14 libnsl2 libperl5.36 libpsl5 libpython3-stdlib
    libpython3.11-minimal libpython3.11-stdlib libreadline8 librtmp1 libsasl2-2
  libsasl2-modules-db libsqlite3-0 libssh2-1 libssl3 libtirpc-common libtirpc3
    libxtables12 media-types openssl perl perl-modules-5.36 python3-distutils
  python3-lib2to3 python3-minimal python3-pip-whl python3-pkg-resources
  python3-setuptools python3-setuptools-whl python3-wheel python3.11
  python3.11-minimal python3.11-venv readline-common
  Suggested packages:
  gettext-base git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui
  gitk gitweb git-cvs git-mediawiki git-svn iproute2-doc gdbm-l10n krb5-doc
  krb5-user sensible-utils perl-doc libterm-readline-gnu-perl
  | libterm-readline-perl-perl make libtap-harness-archive-perl python3-doc
  python3-tk python-setuptools-doc python3.11-doc binutils binfmt-support
  readline-doc
Recommended packages:
  patch less ssh-client libatm1 libpam-cap krb5-locales libldap-common libgpm2
  publicsuffix libsasl2-modules netbase build-essential python3-dev
  The following NEW packages will be installed:
    ca-certificates curl git git-man iproute2 libbpf1 libbrotli1 libbsd0
  libcap2-bin libcurl3-gnutls libcurl4 libelf1 liberror-perl libexpat1
    libgdbm-compat4 libgdbm6 libgssapi-krb5-2 libk5crypto3 libkeyutils1
    libkrb5-3 libkrb5support0 libldap-2.5-0 libmnl0 libncursesw6 libnghttp2-14
    libnsl2 libperl5.36 libpsl5 libpython3-stdlib libpython3.11-minimal
    libpython3.11-stdlib libreadline8 librtmp1 libsasl2-2 libsasl2-modules-db
    libsqlite3-0 libssh2-1 libssl3 libtirpc-common libtirpc3 libxtables12
    media-types openssl perl perl-modules-5.36 python3 python3-distutils
  python3-lib2to3 python3-minimal python3-pip python3-pip-whl
    python3-pkg-resources python3-setuptools python3-setuptools-whl python3-venv
    python3-wheel python3.11 python3.11-minimal python3.11-venv readline-common
  0 upgraded, 60 newly installed, 0 to remove and 0 not upgraded.
Need to get 36.5 MB of archives.
After this operation, 158 MB of additional disk space will be used.

  debconf: delaying package configuration, since apt-utils is not installed

  Fetched 36.5 MB in 1s (38.2 MB/s)
  Selecting previously unselected package perl-modules-5.36.
(Reading database ... 6096 files and directories currently installed.)
  Setting up python3.11-minimal (3.11.2-6+deb12u6) ...
  Selecting previously unselected package python3-minimal.
(Reading database ... 8428 files and directories currently installed.)
(Reading database ... 8936 files and directories currently installed.)
Running hooks in /etc/ca-certificates/update.d...
  done.
   ---> Removed intermediate container a5e02fee41ab
   ---> 7ac11f6797c6
  Step 4/22 : RUN groupadd -r sandbox && useradd -r -g sandbox -d /sandbox -s /bin/bash sandbox     && mkdir -p /sandbox/.openclaw /sandbox/.nemoclaw     && chown -R sandbox:sandbox /sandbox
   ---> Running in 6e7ec133e478
   ---> Removed intermediate container 6e7ec133e478
   ---> 0ac3eedd7ce4
  Step 5/22 : RUN npm install -g openclaw@2026.3.11
   ---> Running in 547f755b162f
  npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead


added 656 packages in 19s

122 packages are looking for funding
  run `npm fund` for details
  npm notice
npm notice New major version of npm available! 10.9.4 -> 11.12.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.12.0
npm notice To update run: npm install -g npm@11.12.0
npm notice

   ---> Removed intermediate container 547f755b162f
   ---> 34c5c4cbc78a
  Step 6/22 : RUN pip3 install --break-system-packages pyyaml
   ---> Running in 9ca9b3995302
  Collecting pyyaml
    Downloading pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (806 kB)
       ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 806.6/806.6 kB 7.1 MB/s eta 0:00:00
  Installing collected packages: pyyaml
  Successfully installed pyyaml-6.0.3
  WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

   ---> Removed intermediate container 9ca9b3995302
   ---> 82de9545c55e
  Step 7/22 : COPY nemoclaw/dist/ /opt/nemoclaw/dist/
   ---> 307ac94448dd
  Step 8/22 : COPY nemoclaw/openclaw.plugin.json /opt/nemoclaw/
   ---> 2adc7d7560e5
  Step 9/22 : COPY nemoclaw/package.json /opt/nemoclaw/
   ---> 71ed2490b51e
  Step 10/22 : COPY nemoclaw-blueprint/ /opt/nemoclaw-blueprint/
   ---> 62987fb056e2
  Step 11/22 : WORKDIR /opt/nemoclaw
   ---> Running in 865591a7cd36
   ---> Removed intermediate container 865591a7cd36
   ---> 0228447746b2
  Step 12/22 : RUN npm install --omit=dev
   ---> Running in 1e464f54f003

added 9 packages, and audited 10 packages in 6s

1 package is looking for funding
  run `npm fund` for details

found 0 vulnerabilities
   ---> Removed intermediate container 1e464f54f003
   ---> a2baa6b1d28d
  Step 13/22 : RUN mkdir -p /sandbox/.nemoclaw/blueprints/0.1.0     && cp -r /opt/nemoclaw-blueprint/* /sandbox/.nemoclaw/blueprints/0.1.0/
   ---> Running in 234569aaa272
   ---> Removed intermediate container 234569aaa272
   ---> 03f2b2df423a
  Step 14/22 : COPY scripts/nemoclaw-start.sh /usr/local/bin/nemoclaw-start
   ---> 6e077b9f744d
  Step 15/22 : RUN chmod +x /usr/local/bin/nemoclaw-start
   ---> Running in b5820c13624d
   ---> Removed intermediate container b5820c13624d
   ---> fbf5be3c3ffc
  Step 16/22 : WORKDIR /sandbox
   ---> Running in d0a3f35606b1
   ---> Removed intermediate container d0a3f35606b1
   ---> 249df551eb0a
  Step 17/22 : USER sandbox
   ---> Running in b20081ac9f5d
   ---> Removed intermediate container b20081ac9f5d
   ---> 167e959c9dd7
  Step 18/22 : RUN mkdir -p /sandbox/.openclaw/agents/main/agent     && chmod 700 /sandbox/.openclaw
   ---> Running in ec36fe742036
   ---> Removed intermediate container ec36fe742036
   ---> b008c6820108
  Step 19/22 : RUN python3 -c "import json, os; config = {     'agents': {'defaults': {'model': {'primary': 'nvidia/nemotron-3-super-120b-a12b'}}},     'models': {'mode': 'merge', 'providers': {'nvidia': {         'baseUrl': 'https://inference.local/v1',         'apiKey': 'openshell-managed',         'api': 'openai-completions',         'models': [{'id': 'nemotron-3-super-120b-a12b', 'name': 'NVIDIA Nemotron 3 Super 120B', 'reasoning': False, 'input': ['text'], 'cost': {'input': 0, 'output': 0, 'cacheRead': 0, 'cacheWrite': 0}, 'contextWindow': 131072, 'maxTokens': 4096}]     }}} }; path = os.path.expanduser('~/.openclaw/openclaw.json'); json.dump(config, open(path, 'w'), indent=2); os.chmod(path, 0o600)"
   ---> Running in 1270a46e2272
   ---> Removed intermediate container 1270a46e2272
   ---> ac2e4fea2243
  Step 20/22 : RUN openclaw doctor --fix > /dev/null 2>&1 || true     && openclaw plugins install /opt/nemoclaw > /dev/null 2>&1 || true
   ---> Running in e513a0eb9d9c
   ---> Removed intermediate container e513a0eb9d9c
   ---> a3f6edc63bfd
  Step 21/22 : ENTRYPOINT ["/bin/bash"]
   ---> Running in 56ff51d62def
   ---> Removed intermediate container 56ff51d62def
   ---> 010746f585a3
  Step 22/22 : CMD []
   ---> Running in 36d60a2c2cde
   ---> Removed intermediate container 36d60a2c2cde
   ---> 046fef9c9913
  Successfully built 046fef9c9913
  Successfully tagged openshell/sandbox-from:1773962852
  Built image openshell/sandbox-from:1773962852
  Pushing image openshell/sandbox-from:1773962852 into gateway "nemoclaw"
  [progress] Exported 1173 MiB
  [progress] Uploaded to gateway
  Image openshell/sandbox-from:1773962852 is available in the gateway.

✓ Image openshell/sandbox-from:1773962852 is available in the gateway.

Created sandbox: my-assistant
Setting up NemoClaw...
[gateway] openclaw gateway launched (pid 83)
[gateway] auto-pair watcher launched (pid 84)
[gateway] Local UI: http://127.0.0.1:18789/
[gateway] Remote UI: http://127.0.0.1:18789/
  Waiting for sandbox to become ready...
✓ Forwarding port 18789 to sandbox my-assistant in the background
  Access at: http://127.0.0.1:18789/
  Stop with: openshell forward stop 18789 my-assistant
  ✓ Sandbox 'my-assistant' created

  [4/7] Configuring inference (NIM)
  ──────────────────────────────────────────────────

  Inference options:
    1) NVIDIA Cloud API (build.nvidia.com) (recommended)
    2) Local Ollama (localhost:11434)

  Choose [1]: 2
  Starting Ollama...
  ✓ Using Ollama on localhost:11434

  Ollama models:
    1) nemotron-3-nano:30b

  Choose model [1]:

  [5/7] Setting up inference provider
  ──────────────────────────────────────────────────
✓ Created provider ollama-local
Gateway inference configured:

  Route: inference.local
  Provider: ollama-local
  Model: nemotron-3-nano:30b
  Version: 1
  Priming Ollama model: nemotron-3-nano:30b
  Selected Ollama model 'nemotron-3-nano:30b' failed the local probe: model 'nemotron-3-nano:30b' not found