Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
cd63f68
fix(inference): secure Windows-host Ollama routing
prekshivyas Sep 2, 2026
5343469
docs: repin platform prompt assets
prekshivyas Sep 2, 2026
f168bbf
Merge branch 'main' into fix/windows-ollama-dns-rebinding
prekshivyas Sep 3, 2026
86740c2
fix(inference): revalidate Windows Ollama routes
prekshivyas Sep 3, 2026
eb10471
Merge remote-tracking branch 'origin/main' into fix/windows-ollama-dn…
prekshivyas Sep 3, 2026
ac0e6c3
test(onboard): make zstd boundary fixture hermetic
prekshivyas Sep 3, 2026
e1985e4
test(onboard): mock runner before loading boundary modules
prekshivyas Sep 3, 2026
8065f21
test(onboard): exercise user-local Ollama fixture
prekshivyas Sep 3, 2026
591887a
test(onboard): stub Ollama readiness in boundary child
prekshivyas Sep 3, 2026
71b0234
Merge origin/main into fix/windows-ollama-dns-rebinding
prekshivyas Sep 3, 2026
a77fc12
fix(inference): revalidate Ollama cleanup route
prekshivyas Sep 3, 2026
9e075b3
fix(inference): verify Windows loopback repair
prekshivyas Sep 3, 2026
2a2f99a
test(onboard): prove protected route independence
prekshivyas Sep 3, 2026
3141572
Merge origin/main into fix/windows-ollama-dns-rebinding
prekshivyas Sep 3, 2026
be43ca1
Merge origin/main into fix/windows-ollama-dns-rebinding
prekshivyas Sep 3, 2026
1998109
Merge origin/main into fix/windows-ollama-dns-rebinding
prekshivyas Sep 3, 2026
c2698e8
fix(inference): clarify Windows Ollama repair failures
prekshivyas Sep 3, 2026
691b107
fix(inference): reject remote Windows Ollama routes
prekshivyas Sep 3, 2026
2c9e524
fix(inference): revalidate Windows Ollama consumers
prekshivyas Sep 3, 2026
fc28139
fix(inference): let accepted Ollama route own port
prekshivyas Sep 3, 2026
ce37b3b
refactor(inference): drop stale Windows route handoff
prekshivyas Sep 3, 2026
e519dac
Merge origin/main into fix/windows-ollama-dns-rebinding
prekshivyas Sep 3, 2026
9d19065
test(onboard): align Windows handler calls
prekshivyas Sep 3, 2026
f6c2da9
test(inference): cover Windows listener rejection
prekshivyas Sep 3, 2026
8de680d
Merge origin/main into fix/windows-ollama-dns-rebinding
prekshivyas Sep 3, 2026
0a9b5fc
test(inference): pin Windows cleanup context
prekshivyas Sep 3, 2026
6d73400
fix(inference): recheck Windows Docker authority
prekshivyas Sep 3, 2026
6e70f06
docs: repin Windows Ollama prompt assets
prekshivyas Sep 3, 2026
abcadf7
fix(onboard): contain stale Windows resume route
prekshivyas Sep 3, 2026
aea7032
docs(inference): state Windows Docker authority
prekshivyas Sep 3, 2026
b54f3a8
test(inference): complete Ollama proxy mock
prekshivyas Sep 3, 2026
b4d4663
test(inference): complete route repair mocks
prekshivyas Sep 3, 2026
6bf9878
test(inference): accept sanitized Docker env
prekshivyas Sep 3, 2026
ea9d14a
test(inference): clear inherited Docker host
prekshivyas Sep 3, 2026
2fb8f21
Merge origin/main into fix/windows-ollama-dns-rebinding
prekshivyas Sep 3, 2026
3fdf25d
Merge origin/main into fix/windows-ollama-dns-rebinding
prekshivyas Sep 3, 2026
252fc43
Merge origin/main into fix/windows-ollama-dns-rebinding
prekshivyas Sep 3, 2026
7b7c604
fix(onboard): refresh Windows Ollama route state
prekshivyas Sep 4, 2026
73fc105
chore: merge main into Windows Ollama fix
prekshivyas Sep 4, 2026
8972d3f
fix(onboard): bound Windows route probes
prekshivyas Sep 4, 2026
e902b74
fix(onboard): resume protected Windows Ollama
prekshivyas Sep 4, 2026
6ce40c2
fix(inference): bound Windows Ollama probes
prekshivyas Sep 4, 2026
cf9af5f
chore: merge main into Windows Ollama fix
prekshivyas Sep 4, 2026
799ecf2
test(inference): type route probe capture
prekshivyas Sep 4, 2026
ac561a4
fix(inference): recheck Windows route authority
prekshivyas Sep 4, 2026
8e8122b
chore: merge main into Windows Ollama fix
prekshivyas Sep 4, 2026
795daa6
fix(inference): revalidate Windows Ollama requests
prekshivyas Sep 5, 2026
0243346
test(inference): cover protected Windows Ollama requests
prekshivyas Sep 5, 2026
928c2d0
fix(inference): address Windows Ollama review findings
prekshivyas Sep 5, 2026
5b9a069
docs(inference): describe IPv6 Ollama loopback support
prekshivyas Sep 5, 2026
49ee915
merge: sync with main
prekshivyas Sep 5, 2026
44d42e7
test(onboard): assert Windows route revalidation
prekshivyas Sep 5, 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
2 changes: 1 addition & 1 deletion ci/test-file-size-budget.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@
"test/installer-integration/install-preflight.test.ts": 3025,
"test/agents/openclaw/runtime/nemoclaw-start.test.ts": 4383,
"test/onboarding/onboard-messaging.test.ts": 1971,
"test/onboarding/onboard-selection.test.ts": 4176
"test/onboarding/onboard-selection.test.ts": 4137
}
}
20 changes: 10 additions & 10 deletions docs/get-started/windows-preparation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ If the installer offers Express on WSL, a qualifying N1x WSL host uses managed l
The installer uses local Docker Desktop, Arm64, the Windows N1x product identity, and at least 48,000 MiB of GPU memory as preliminary selection conditions.
Onboarding also requires the default local Docker context, at least 48,000 MiB of Docker memory, driver version `580.65.06` or later, Docker storage and runtime readiness, NVIDIA GPU integration, and a successful Docker Desktop GPU passthrough proof.
If any required readiness check fails, onboarding stops managed llama.cpp selection.
Other WSL hosts retain the Windows-host and WSL-local Ollama rules in this section.
Other WSL hosts use WSL-local Ollama for Express installation.

If you plan to select Ollama as your inference provider during onboarding, use one Ollama instance.
It can run inside WSL or on Windows through Docker Desktop.
Expand All @@ -173,20 +173,20 @@ curl -fsSL https://ollama.com/install.sh | sh
If you installed Ollama but it is not already running in WSL, onboarding starts it for you.
You can also start it yourself beforehand with `ollama serve`.

You can also use Ollama for Windows.
During onboarding, NemoClaw can use an already-running Windows-host daemon, start or restart an installed daemon, or install Ollama on the Windows host.
For WSL hosts that do not qualify for managed llama.cpp, accepting Express selects a local Ollama path automatically based on the container runtime.
The installer selects Windows-host Ollama only when it detects local Docker Desktop WSL integration, and it selects WSL-local Ollama otherwise.
The Windows-host Ollama path requires Docker Desktop WSL integration; the express prompt appears on WSL regardless of the container runtime.
You can also use Ollama for Windows through the manual onboarding menu.
NemoClaw reuses a Windows-host daemon only when it is bound to `127.0.0.1:11434`, Docker Desktop can reach it, and it returns `403` for an untrusted HTTP `Host` value.
The Windows install and restart actions enforce the same loopback binding and validation check.
For WSL hosts that do not qualify for managed llama.cpp, accepting Express selects WSL-local Ollama.
The Windows-host Ollama path remains an explicit manual option and requires Docker Desktop WSL integration.
When the installer must read the Docker configuration file to determine the effective Docker context and Node.js is unavailable, it defers provider selection until after it installs Node.js.
It then reads the configuration and applies the same runtime check.
It then reads the configuration to finish the managed N1x eligibility check.
The express selection does not waive system readiness.
With native Docker Engine inside WSL, a remote or unknown Docker target, or failed Docker detection, Express selects WSL-local Ollama.
An installed Windows-host Ollama that Docker Desktop cannot reach leaves the WSL-local install available in the onboarding menu and through a requested `install-ollama` provider.
Qualified WSL routes reach the applicable host route directly and do not use the Ollama auth proxy.
An installed Windows-host Ollama that fails the loopback, reachability, or HTTP `Host` validation check leaves the WSL-local install available in the onboarding menu and through a requested `install-ollama` provider.
Qualified Windows-host routes reach the protected host route directly and do not use the Ollama auth proxy.
You can still decline the express prompt (or set `NEMOCLAW_NO_EXPRESS=1`) to choose a provider manually; the onboarding menu labels the Windows-host actions as requiring Docker Desktop integration.
When Ollama runs on the Windows host, NemoClaw checks it from Docker Desktop through `host.docker.internal` and pulls missing models through the Ollama HTTP API.
A direct request from WSL can fail because Docker Desktop defines this hostname in its container network context.
Do not set Windows `OLLAMA_HOST` to `0.0.0.0:11434`; the wildcard listener is unauthenticated and disables the loopback-only HTTP `Host` validation that NemoClaw requires.
Do not run both the Windows and WSL Ollama instances on port `11434` at the same time.
Use one instance, or move one of them to a different port before running `$$nemoclaw onboard`.
If a Windows on Arm N1x system does not qualify for managed llama.cpp and uses Ollama, let NemoClaw choose the starter model automatically.
Expand Down
2 changes: 1 addition & 1 deletion docs/inference/set-up-llama-cpp.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ For Windows WSL N1x, also confirm these requirements:
- Provide at least 48,000 MiB of GPU memory.
- Pass Docker storage, runtime, NVIDIA GPU integration, and Docker Desktop GPU passthrough readiness.

If the preliminary Express checks do not match, Windows Express retains Windows-host or WSL-local Ollama.
If the preliminary Express checks do not match, Windows Express selects WSL-local Ollama.
If a later readiness check fails, onboarding stops managed llama.cpp selection before installation.
Managed N1x WSL selection rejects any other Docker selector.

Expand Down
21 changes: 12 additions & 9 deletions docs/inference/set-up-ollama.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,8 @@ When neither side can be read, the failure asks you to check that Ollama is inst
Fresh installs skip this second probe because the bundled installers provide a daemon at or above the minimum.

The version gate does not apply to Windows-host Ollama reached from Docker Desktop through `host.docker.internal`.
With WSL mirrored networking, the same daemon can answer on `127.0.0.1`; NemoClaw treats it as Windows-host Ollama only when Windows installation and Docker reachability checks match and Linux procfs shows no WSL-local listener on the Ollama port.
NemoClaw reuses that route only when Windows reports a loopback-only listener and a Docker-side request with an untrusted HTTP `Host` value receives `403`.
With WSL mirrored networking, the same daemon can answer on `127.0.0.1`; NemoClaw also requires Windows installation and Docker reachability checks to match and Linux procfs to show no WSL-local listener on the Ollama port.
Ambiguous evidence or a separate WSL-local listener stays on the Linux install and upgrade path.
The Windows-host menu entries perform their own actions on the Windows side.

Expand Down Expand Up @@ -201,30 +202,32 @@ A missing or malformed runtime value also produces the daemon restart guidance.

When NemoClaw runs in WSL, the provider menu can offer these Windows-host actions:

- Use Ollama when the Windows daemon is reachable.
- Restart Ollama when it is installed but bound only to Windows loopback.
- Start Ollama when it is installed but not running.
- Install Ollama when it is not installed on Windows.
- Use Ollama when the Windows daemon is loopback-only, reachable from Docker Desktop, and rejects an untrusted HTTP `Host` value.
- Restart an installed daemon with a loopback-only binding and verify the same checks.
- Install a loopback-only daemon when Ollama is not installed on Windows.

The install and restart paths set `OLLAMA_HOST=0.0.0.0:11434` on Windows so Docker Desktop containers can reach the daemon through `host.docker.internal`.
The install and restart paths set `OLLAMA_HOST=127.0.0.1:11434` on Windows.
NemoClaw relaunches Ollama from the detected Windows tray application or verified `ollama.exe` path and checks the endpoint from Docker Desktop's network context.
It first requires a valid `/api/tags` response and then requires `403` from the same endpoint with an untrusted `Host` header.
A direct request from WSL can fail because Docker Desktop defines this hostname for its containers.
It pulls missing models through the Ollama HTTP API without requiring an Ollama CLI inside WSL.

<Warning>
Windows-host Ollama does not require authentication on port `11434`.
Keep the Windows network profile private, block inbound access to port `11434` on public interfaces, and allow only the local WSL/Docker network path that needs `host.docker.internal`.
Do not expose this port to your LAN or the internet.
Keep it on `127.0.0.1` so Ollama's HTTP `Host` validation remains active.
Do not set `OLLAMA_HOST=0.0.0.0:11434` or expose this port to your LAN or the internet.
NemoClaw rejects a reachable Windows daemon when it accepts the untrusted `Host` probe.
</Warning>

If the endpoint is not reachable, NemoClaw also checks the Windows `ollama.exe` process through PowerShell interop.
When the daemon does not become reachable, onboarding prints PowerShell commands for inspecting the Windows process and port state.
Choose the WSL-local Ollama install when Docker Desktop cannot reach the protected Windows loopback route.
Run only one Ollama instance on port `11434` at a time.

Windows-host Ollama requires Docker Desktop WSL integration.
When NemoClaw detects native Docker Engine inside WSL, it labels the Windows-host actions as requiring Docker Desktop integration; selecting one prints remediation guidance and returns to the menu, or exits when onboarding runs non-interactively.

Qualified WSL Ollama paths use Docker Desktop integration and do not use the authenticated reverse proxy described below.
Qualified Windows-host Ollama paths use Docker Desktop integration and do not use the authenticated reverse proxy described below.
Native Docker Engine inside WSL is unqualified; enable Docker Desktop WSL integration before onboarding.

## Understand the Authenticated Proxy
Expand Down
10 changes: 8 additions & 2 deletions docs/reference/troubleshooting.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2805,15 +2805,21 @@ docker info

### Windows-host Ollama is installed but not shown during onboarding

When NemoClaw runs inside WSL, it checks both the Windows-host Ollama HTTP endpoint and the Windows `ollama.exe` process. If Ollama is installed but the daemon is not reachable through `host.docker.internal:11434`, the wizard should still offer a start or restart action.
When NemoClaw runs inside WSL, it checks the Windows-host Ollama HTTP endpoint, the Windows `ollama.exe` process, the listener address, and HTTP `Host` validation.
It reuses the Windows route only when the listener is loopback-only, Docker Desktop can reach it, and an untrusted `Host` value receives `403`.
If Ollama is installed but does not pass those checks, the wizard should still offer a restart action and the WSL-local install.

If the Windows-host option does not appear, confirm that PowerShell interop is enabled in WSL and that Windows can locate Ollama:

```bash
powershell.exe -NoProfile -Command "Get-Process ollama -ErrorAction SilentlyContinue"
```

If the process is missing, start Ollama from Windows and rerun onboarding. If the process exists but the endpoint is unreachable, use the restart action when the wizard offers it, or restart Ollama from Windows with `OLLAMA_HOST=0.0.0.0:11434`.
If the process is missing, start Ollama from Windows and rerun onboarding.
If the process exists but the endpoint is unprotected or unreachable, use the restart action when the wizard offers it.
The action sets `OLLAMA_HOST=127.0.0.1:11434` and verifies that an untrusted `Host` value is rejected.
If Docker Desktop cannot reach that protected route, choose WSL-local Ollama.
Do not set `OLLAMA_HOST=0.0.0.0:11434`.

### Ollama inference fails or hangs in WSL

Expand Down
7 changes: 4 additions & 3 deletions docs/resources/prompt-assets/windows-wsl.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ The installer checks only the preliminary Express-selection conditions.
Before managed llama.cpp starts, onboarding also requires the default local Docker context, at least 48,000 MiB of Docker memory, driver version `580.65.06` or later, Docker storage and runtime readiness, NVIDIA GPU integration, and a successful Docker Desktop GPU passthrough proof.
Before selecting managed llama.cpp, unset `DOCKER_HOST` and select Docker's `default` context.
Managed N1x WSL selection rejects other Docker selectors.
For other Windows WSL hosts, Express uses Windows-host Ollama only when local Docker Desktop is confirmed. Native Docker Engine, remote or unknown Docker targets, and failed Docker detection use WSL-local Ollama with its memory-aware default model.
For other Windows WSL hosts, Express uses WSL-local Ollama with its memory-aware default model.
Include the third-party-software notice, then ask: "Run Express install with these settings?"
Choices:

Expand All @@ -27,14 +27,15 @@ If Express is selected:
Onboarding must then confirm Docker Desktop GPU passthrough before managed llama.cpp starts.
If any required readiness check fails, stop and explain that managed llama.cpp is unavailable on this host.
- For managed llama.cpp, explain that Hugging Face authentication is optional and anonymous downloads can return HTTP 429. If needed, `HF_TOKEN` supplies a Hugging Face read token only to the temporary downloader. The token remains in the installer environment; remove `HF_TOKEN` after installation when no process needs it.
- Otherwise, when local Docker Desktop is confirmed, set `NEMOCLAW_PROVIDER=install-windows-ollama` and leave `NEMOCLAW_MODEL` unset so the installed release chooses its memory-aware Ollama model.
- For native Docker Engine, remote or unknown Docker targets, and failed Docker detection, set `NEMOCLAW_PROVIDER=install-ollama` and leave `NEMOCLAW_MODEL` unset. This installs WSL-local Ollama; the sandbox authentication proxy is used when containers cannot reach host loopback directly.
- Otherwise, set `NEMOCLAW_PROVIDER=install-ollama` and leave `NEMOCLAW_MODEL` unset.
This installs WSL-local Ollama; the sandbox authentication proxy is used when containers cannot reach host loopback directly.
- Set `NEMOCLAW_AGENT` to the agent already selected in the starter prompt.
- Set `NEMOCLAW_NON_INTERACTIVE=1`, `NEMOCLAW_NON_INTERACTIVE_SUDO_MODE=prompt`, `NEMOCLAW_YES=1`, and `NEMOCLAW_POLICY_MODE=suggested`.
- Set `NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE=1` when Express is accepted.
- Leave `NEMOCLAW_SANDBOX_NAME`, `NEMOCLAW_POLICY_TIER`, web-search settings, and messaging settings unset so the installer applies the remaining Express defaults.
- Treat the Express confirmation as approval for the disclosed notice, downloads, and installation, and skip the later final-permission prompt.
- Do not ask again for the agent or ask separate questions for model, sandbox name, web search, messaging, policy, download approval, or final installation approval.
- Do not start a second Ollama service on the same port.
- Do not set Windows `OLLAMA_HOST` to `0.0.0.0:11434`.

If Express is declined, continue with the normal provider selection and offer every provider supported by the selected agent on Windows WSL.
6 changes: 3 additions & 3 deletions docs/resources/starter-prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,9 @@ Set `NEMOCLAW_AGENT=langchain-deepagents-code` for Deep Agents, or use `nemo-dee

After the readiness check, load exactly one matching instruction asset before provider selection:

- Confirmed DGX Spark: [DGX Spark Express instructions](https://raw.githubusercontent.com/NVIDIA/NemoClaw/f0d71bec51f0d5e66eae6e211cd816ff9e35c023/docs/resources/prompt-assets/dgx-spark.md).
- Confirmed DGX Station: [DGX Station installation instructions](https://raw.githubusercontent.com/NVIDIA/NemoClaw/f0d71bec51f0d5e66eae6e211cd816ff9e35c023/docs/resources/prompt-assets/dgx-station.md).
- Officially detected Windows WSL: [Windows WSL Express instructions](https://raw.githubusercontent.com/NVIDIA/NemoClaw/f0d71bec51f0d5e66eae6e211cd816ff9e35c023/docs/resources/prompt-assets/windows-wsl.md).
- Confirmed DGX Spark: [DGX Spark Express instructions](https://raw.githubusercontent.com/NVIDIA/NemoClaw/cd63f6871344fa2fe0b8f6ca0fd1dc4ca33d6d4d/docs/resources/prompt-assets/dgx-spark.md).
- Confirmed DGX Station: [DGX Station installation instructions](https://raw.githubusercontent.com/NVIDIA/NemoClaw/cd63f6871344fa2fe0b8f6ca0fd1dc4ca33d6d4d/docs/resources/prompt-assets/dgx-station.md).
- Officially detected Windows WSL: [Windows WSL Express instructions](https://raw.githubusercontent.com/NVIDIA/NemoClaw/cd63f6871344fa2fe0b8f6ca0fd1dc4ca33d6d4d/docs/resources/prompt-assets/windows-wsl.md).

Read the matching raw Markdown file completely and follow it before continuing.
Do not load a platform asset for any other computer.
Expand Down
Loading
Loading