feat(installer): add DGX Station Nemotron Ultra express install#6883
Conversation
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds a pinned DGX Station Nemotron 3 Ultra managed-vLLM recipe, runtime-specific installation and storage safeguards, express-install model selection, onboarding validation, regression tests, and updated platform documentation. ChangesDGX Station managed vLLM
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related issues
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage remains at 96%, unchanged from the TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most impacted files.
Updated |
|
🌿 Preview your docs: https://nvidia-preview-pr-6883.docs.buildwithfern.com/nemoclaw |
PR Review Advisor — InformationalAdvisor assessment: Informational / high confidence Model lanes
Nemotron output stays in workflow artifacts and does not change the assessment above. E2E guidanceAdvisory only. E2E / PR Gate selects and runs jobs independently. Recommended E2E: 2 optional E2E recommendations
2 warnings · 0 suggestionsWarningsWarnings do not block.
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/lib/inference/vllm.ts`:
- Line 801: Update the runtime resolution flow around resolveVllmRuntimeProfile
so a model-specific NEMOCLAW_VLLM_MODEL override is rejected when
profile.platform is not included in model.platforms, before beforeInstall or any
Docker operations. Preserve supported-platform behavior, and add a regression
test covering a generic Linux override against the Station-only Ultra runtime.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: a2394c65-f742-44d7-a911-dd6442d454b2
📒 Files selected for processing (14)
ci/platform-matrix.jsondocs/get-started/quickstart.mdxdocs/inference/choose-inference-provider.mdxdocs/inference/set-up-vllm.mdxdocs/reference/commands.mdxdocs/reference/platform-support.mdxscripts/install.shsrc/lib/inference/vllm-models.test.tssrc/lib/inference/vllm-models.tssrc/lib/inference/vllm.test.tssrc/lib/inference/vllm.tssrc/lib/onboard/setup-nim-flow.test.tstest/inference-options-docs.test.tstest/install-express-prompt.test.ts
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
senthilr-nv
left a comment
There was a problem hiding this comment.
This is a strong implementation overall. The pinned runtime, model revision, Station guard, tool/reasoning parsers, canonical model identity, tests, and documentation all look well structured.
I found three operational gaps I think we should address before treating this as the Station express path:
Existing vLLM can override the Ultra express selection
Could we cover the case where port 8000 is already serving DeepSeek?
Today, NEMOCLAW_PROVIDER=install-vllm is converted to the existing vllm option when a server is already running. A user can therefore accept an express install that promises Nemotron Ultra, but onboarding can continue with the existing DeepSeek server after printing a note.
I think the safe behavior is:
- Reuse the server if
/v1/modelsadvertises the expected Ultra model. - Otherwise stop with a clear expected-versus-detected model message and instructions to stop the existing server or choose detailed setup.
Could we add a production-shaped test for Station express with DeepSeek already occupying port 8000?
Model-cache disk preflight
The express prompt discloses the approximately 352 GB model download, but the current storage preflight only checks capacity for the 10.67 GB Docker image. The Hugging Face cache can still run out of space partway through the model download.
Could we add a model download size to the registry and preflight the filesystem containing ~/.cache/huggingface before starting hf download? This seems especially important because Ultra is selected automatically in the non-interactive express path.
Ultra load timeout
Ultra currently inherits Station's 1800-second load timeout. In our physical GB300 testing, a warm Ultra load took approximately 21 minutes, leaving limited margin for slower first loads or runtime initialization.
Could the runtime override support loadTimeoutSec, with Ultra using at least 3600 seconds? Our manual validation helper currently allows 3600 seconds.
Non-blocking hardening and validation notes
- The official Station recipe also includes
--ulimit memlock=-1and--ulimit stack=67108864, while this runtime override adds only--shm-size 16g. If the ulimits are intentionally omitted for NemoClaw's managed runtime, it would be useful to document the reason and validate the exact command on Station. - The temporary
hf downloadcontainer runs as root while mounting the user's Hugging Face cache. During our Ultra testing this created root-owned cache paths and later prevented user-level tools from writing additional datasets. This is an existing managed-vLLM concern rather than something introduced solely here, but the 352 GB default download amplifies it. Running the download with the host UID/GID, or documenting ownership recovery, would help. - When
HF_TOKENis exported, it is also forwarded into the long-lived vLLM container and retained in Docker container metadata. Since Ultra is currently anonymously accessible and the explicit download completes before serving starts, limiting token forwarding to the temporary download container would be a useful managed-vLLM hardening follow-up.
Before changing Station's validation status, I suggest testing the exact PR-generated command on the GB300 for fresh express install, an existing DeepSeek server on port 8000, cold/warm startup, canonical /v1/models identity, direct chat and automatic tool calling, OpenClaw tool execution, interrupted-download recovery, and restart/reboot behavior.
I'm happy to run that physical end-to-end validation on the Station.
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
|
Thanks, Senthil — I addressed the three operational gaps and the related hardening items on
The existing Station express path now defaults to Ultra, with Changed-surface validation on this head is green (183 passed, 1 existing skip), along with typecheck, strict docs, and the full pre-commit stage. The local manual coverage run had 15,003 passes, 182 skips, and 17 failures confined to nine unrelated macOS/environment-sensitive test files; the pushed Linux CI matrix is now running. Once CI settles, could you run your proposed GB300 validation against exact head |
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/install.sh`:
- Around line 2701-2724: Update the Ultra case arm in
configure_station_express_model to also match the served-model ID
nvidia/nemotron-3-ultra-550b-a55b, ensuring it assigns
STATION_ULTRA_SERVED_MODEL to NEMOCLAW_MODEL like the existing Ultra
identifiers.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: fd0e73a3-ba7d-462a-a37e-645d425293ad
📒 Files selected for processing (18)
ci/platform-matrix.jsondocs/get-started/quickstart.mdxdocs/inference/set-up-vllm.mdxdocs/reference/commands.mdxdocs/reference/platform-support.mdxinstall.shscripts/install.shsrc/lib/inference/vllm-models.test.tssrc/lib/inference/vllm-models.tssrc/lib/inference/vllm-storage.test.tssrc/lib/inference/vllm-storage.tssrc/lib/inference/vllm.test.tssrc/lib/inference/vllm.tssrc/lib/onboard/setup-nim-vllm.test.tssrc/lib/onboard/setup-nim-vllm.tstest/inference-options-docs.test.tstest/install-express-prompt.test.tstest/onboard-selection-vllm.test.ts
🚧 Files skipped from review as they are similar to previous changes (6)
- docs/get-started/quickstart.mdx
- src/lib/inference/vllm-models.test.ts
- docs/reference/platform-support.mdx
- ci/platform-matrix.json
- docs/inference/set-up-vllm.mdx
- src/lib/inference/vllm-models.ts
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
scripts/install.sh (1)
2758-2791: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winClear or reject an ambient profile for non-experimental express installs.
An exported
NEMOCLAW_VLLM_PROFILE=experimental-single-usersurvives the default and--station-deepseekbranches, so downstream onboarding can select the experimental runtime without its explicit flag—or combine it with DeepSeek. Not exporting the variable does not remove an inherited export.Proposed fix
if [ "${STATION_EXPERIMENTAL_SINGLE_USER:-}" = "1" ]; then export NEMOCLAW_VLLM_PROFILE + else + unset NEMOCLAW_VLLM_PROFILE fiAs per path instructions, in-scope callers must use one authoritative replacement path rather than retaining competing runtime paths.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/install.sh` around lines 2758 - 2791, Update configure_station_express_model to clear or reject any inherited NEMOCLAW_VLLM_PROFILE before handling the default and STATION_DEEPSEEK branches, ensuring only STATION_EXPERIMENTAL_SINGLE_USER=1 can select the experimental profile. Preserve the existing experimental export behavior, and ensure non-experimental express installs cannot pass an ambient experimental profile downstream or combine it with DeepSeek.Source: Path instructions
🧹 Nitpick comments (1)
src/lib/inference/vllm-models.ts (1)
514-522: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winExtract the "profile requires model X" check into a shared helper instead of repeating the hardcoded model slug.
The literal
nemotron-3-ultra-550b-a55bis duplicated across three throw sites:resolveVllmModelProfile(Lines 517-521) and twice inpreflightVllmModelEnv(Lines 644-649, 654-659). None of these derive the value from the model that actually registers the profile (model.profiles), so the message is only correct because Ultra is currently the sole owner ofEXPERIMENTAL_SINGLE_USER_PROFILE. If a second model ever registers this (or a future) profile ID, all three sites silently produce a wrong/incomplete hint, and every future profile needs three synchronized edits.♻️ Proposed refactor: derive the required-model hint from the registry
+function modelsRegisteringProfile(profileId: VllmModelProfileId): string { + return VLLM_MODELS.filter((m) => m.profiles?.[profileId]) + .map((m) => m.envValue) + .join("' or '"); +} + export function resolveVllmModelProfile( model: VllmModelDef, platform: VllmPlatform, env: NodeJS.ProcessEnv = process.env, ): ResolvedVllmModelProfile { const profileId = selectVllmModelProfileFromEnv(env); if (!profileId) return { model, profile: null }; const profile = model.profiles?.[profileId]; if (!profile) { throw new Error( VLLM_PROFILE_ENV + "='" + profileId + - "' requires NEMOCLAW_VLLM_MODEL='nemotron-3-ultra-550b-a55b'.", + "' requires NEMOCLAW_VLLM_MODEL='" + + modelsRegisteringProfile(profileId) + + "'.", ); }Apply the same substitution at the two sites in
preflightVllmModelEnv(Lines 644-649, 654-659).Also applies to: 629-660
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/lib/inference/vllm-models.ts` around lines 514 - 522, Extract a shared helper for the “profile requires model” validation used by resolveVllmModelProfile and both checks in preflightVllmModelEnv. Have it derive the required model slug from the model registry entry that defines the profile instead of hardcoding nemotron-3-ultra-550b-a55b, and reuse it at all three throw sites so future profile registrations remain accurate.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/lib/inference/vllm-experimental-single-user.test.ts`:
- Line 143: Append the required (`#6883`) suffix to the runtime-profile describe
title at src/lib/inference/vllm-experimental-single-user.test.ts:143-143 and the
install describe title at
src/lib/inference/vllm-experimental-single-user.test.ts:222-222, leaving their
child test titles unchanged.
In `@src/lib/inference/vllm.ts`:
- Line 502: Update buildVllmServeCommand() so host-network mode explicitly
passes VLLM_PORT to vLLM via its port option, while preserving the existing
Docker port publication for non-host networking. Ensure readiness continues
targeting the configured VLLM_PORT when it differs from 8000.
---
Outside diff comments:
In `@scripts/install.sh`:
- Around line 2758-2791: Update configure_station_express_model to clear or
reject any inherited NEMOCLAW_VLLM_PROFILE before handling the default and
STATION_DEEPSEEK branches, ensuring only STATION_EXPERIMENTAL_SINGLE_USER=1 can
select the experimental profile. Preserve the existing experimental export
behavior, and ensure non-experimental express installs cannot pass an ambient
experimental profile downstream or combine it with DeepSeek.
---
Nitpick comments:
In `@src/lib/inference/vllm-models.ts`:
- Around line 514-522: Extract a shared helper for the “profile requires model”
validation used by resolveVllmModelProfile and both checks in
preflightVllmModelEnv. Have it derive the required model slug from the model
registry entry that defines the profile instead of hardcoding
nemotron-3-ultra-550b-a55b, and reuse it at all three throw sites so future
profile registrations remain accurate.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 74af9cf1-ef7c-4a32-963d-622558d5f078
📒 Files selected for processing (24)
docs/get-started/quickstart.mdxdocs/inference/choose-inference-provider.mdxdocs/inference/set-up-vllm.mdxdocs/reference/commands.mdxdocs/reference/platform-support.mdxinstall.shscripts/install.shsrc/lib/actions/sandbox/connect-vllm-preflight.tssrc/lib/actions/sandbox/rebuild-env-isolation.test.tssrc/lib/actions/sandbox/rebuild-env-isolation.tssrc/lib/inference/vllm-experimental-single-user.test.tssrc/lib/inference/vllm-models.test.tssrc/lib/inference/vllm-models.tssrc/lib/inference/vllm.test.tssrc/lib/inference/vllm.tssrc/lib/onboard/setup-nim-vllm.test.tssrc/lib/onboard/setup-nim-vllm.tssrc/lib/onboard/vllm-model-preflight.tstest/cli/dispatch-basics.test.tstest/generate-hermes-config.test.tstest/inference-options-docs.test.tstest/install-express-prompt.test.tstest/onboard-selection-vllm.test.tstest/seed-hermes-dashboard-config.test.ts
🚧 Files skipped from review as they are similar to previous changes (7)
- test/inference-options-docs.test.ts
- src/lib/onboard/setup-nim-vllm.ts
- docs/reference/platform-support.mdx
- test/onboard-selection-vllm.test.ts
- test/install-express-prompt.test.ts
- src/lib/inference/vllm.test.ts
- docs/inference/set-up-vllm.mdx
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
senthilr-nv
left a comment
There was a problem hiding this comment.
Re-reviewed exact head 15d405d0. My earlier existing-server, timeout, downloader ownership, HF-token containment, and canonical ulimit concerns are addressed. Model-cache sizing was added, with one remaining failure-path issue below.
I am not repeating the product-scope, image-publication, network-boundary, and physical-acceptance blockers already captured in the existing changes-requested review. I agree those blockers remain valid.
Blocker: automatic restart bypasses qualification.
buildVllmRunArgs() applies --restart unless-stopped to the qualified profile. A host or Docker-daemon restart can relaunch the container without rerunning GB300 selection and health checks, HBM/ECC qualification, readiness checks, or startup monitoring.
Qualified profiles should disable automatic restart or use a supervisor that reruns qualification. Please add coverage for the daemon/host-restart path.
Blocker: startup monitoring does not enforce the claimed qualification boundary.
waitForVllmReady() samples HBM/ECC every five seconds but reports the maximum observed sample as "peak HBM" and relies on that polling to enforce the boundary throughout startup. It can miss HBM excursions shorter than the polling interval and delays detection of ECC or telemetry failures.
The qualification artifact referenced by this PR records a 0.1-second fail-closed watcher. The shipped monitor should match the accepted qualification method, including monitor-liveness handling, or the contract must be narrowed and the shipped configuration requalified.
Major: the model-cache capacity probe fails open.
modelStorageAccepted() immediately permits the model download when host-cache capacity cannot be measured, including non-interactive express onboarding, without requiring NEMOCLAW_IGNORE_VLLM_DISK_SPACE=1.
Issue #6757 intentionally allowed an inconclusive probe only for the Docker image store and explicitly scoped itself to image pulls. For an approximately 352 GB model download, non-interactive setup should stop unless the explicit override is set. Interactive setup may instead require affirmative confirmation.
Major: invalid Station flags are rejected after host mutation.
ensure_docker and ensure_openshell_build_deps run before maybe_offer_express_install, where Station-only and conflicting flag combinations are validated. An invalid invocation can therefore install or enable Docker and install build dependencies before returning an error.
Please validate explicit Station flags before these host mutations and add an ordering regression test proving mutating helpers are not invoked for invalid combinations.
These implementation issues are separate from the already acknowledged product, image, security, and physical-qualification gates. Please address or clarify them in the next revision.
|
Tiny exact-head follow-up: |
cv
left a comment
There was a problem hiding this comment.
At commit 3625653, the local-image and host-network blockers are resolved: the experimental profile is removed, the runtime is an immutable pullable manifest, and the existing bridge topology is retained. The PR is still not approvable.
The product scope gate remains open: #6951 is untriaged and no accepted issue or design decision establishes this new canonical Station express/default surface, its ownership, lifecycle, compatibility, security, or validation contract. Keeping platform status Deferred does not authorize adding the supported installer path, and there is still no current physical Station acceptance record for the behavior being shipped.
The current review also confirms four implementation blockers: automatic restart can bypass qualification; five-second startup sampling does not enforce the claimed HBM/ECC boundary or monitor liveness; an inconclusive roughly 352 GB model-cache probe fails open during non-interactive setup; and invalid Station flags are rejected only after host-mutating setup helpers run. Please resolve those with the requested regressions, then provide the accepted product decision and physical acceptance evidence before re-review.
|
@cv Correction after rechecking exact head The experimental profile, runtime qualification, and HBM/ECC startup monitor have been removed. Therefore my automatic-restart qualification and five-second-monitor findings no longer apply. The model-cache fail-open finding and pre-mutation I will complete the exact-head re-review once the current CI run settles. |
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
|
Addressed the current review at exact head The two actionable implementation gaps are fixed:
The two remaining implementation bullets no longer apply to the current PR scope:
The earlier image/network concerns are also eliminated: every managed-vLLM image must now be a repository-qualified immutable registry digest, and Station uses the standard Docker bridge plus published port path. Bare local image/config IDs and mutable tags fail before Docker execution. No Product/design acceptance is being coordinated by the author directly with PM and should not remain a code blocker for this PR. DGX Station remains Deferred in the validation matrix; this PR does not claim to advance physical qualification status. Focused remediation validation is 144 passed / 1 existing skip; cumulative changed-surface validation is 342 passed / 1 existing skip, with typecheck, strict docs, ShellCheck, hooks, and growth/size guards passing. Per request, I did not spend another cycle on a redundant full local E2E run; exact-head CI is running with no failures so far. @senthilr-nv @cv please re-review exact head |
senthilr-nv
left a comment
There was a problem hiding this comment.
Re-reviewed exact head 7624d02c from the code and test perspective.
The model-cache preflight now fails closed when capacity is inconclusive, including the post-image-pull recheck. Explicit Station flag conflicts are also rejected before license, Docker, or build-dependency mutations, with regression coverage confirming those helpers are not invoked.
The earlier restart and HBM/ECC monitoring findings no longer apply after removal of the experimental profile.
No further code findings from this review. Approved pending completion of exact-head CI.
<!-- markdownlint-disable MD041 --> ## Summary Adds the canonical `docs/changelog/2026-07-15.mdx` entry with the exact `## v0.0.84` heading for the release candidate range from `v0.0.83` through `710d2b36b9eebcb6bca3c2b2f796a1bdb69c3a31`. Fills two owner-page gaps for model-aware local inference health and pre-write OpenClaw candidate validation. ## Changes - Add the complete shared Fern changelog entry for `v0.0.84`, with literal CLI names and root-absolute OpenClaw and Hermes routes. - Document that sandbox status and doctor compare the configured Ollama or vLLM model with provider inventory without issuing a completion. - Document that host-side OpenClaw `config set` validates the complete candidate before replacing live config or reaching gateway restart. - Reconcile the `v0.0.84` release label with the commit range. PR #6773 is already contained in `v0.0.83` and remains documented there; CI, test-harness, docs-infrastructure, and `.js` to `.mts` migration-only changes require no additional user guidance. ### Source summary - [#6882](#6882) -> `docs/manage-sandboxes/backup-restore.mdx`, `docs/changelog/2026-07-15.mdx`: Explain that OpenClaw runtime identity and pairing state are excluded from snapshots and ignored during restore. - [#6873](#6873) -> `docs/inference/set-up-ollama.mdx`, `docs/changelog/2026-07-15.mdx`: Record the Ollama requested-model environment fallback and interactive default. - [#6835](#6835) -> `docs/changelog/2026-07-15.mdx`: Include the sandbox name in the documented rebuild resume-recovery behavior. - [#6886](#6886) -> `docs/inference/custom-endpoint-security.mdx`, `docs/inference/set-up-openai-compatible-endpoint.mdx`, `docs/changelog/2026-07-15.mdx`: Explain the exact-host trusted-private endpoint opt-in and retained SSRF boundaries. - [#6887](#6887) -> `docs/reference/commands.mdx`, `docs/changelog/2026-07-15.mdx`: Document Telegram channel health verdicts, summary behavior, and exit status. - [#6863](#6863) -> `docs/manage-sandboxes/lifecycle.mdx`, `docs/changelog/2026-07-15.mdx`: Add the missing model-inventory behavior for local status and doctor checks. - [#6902](#6902) -> `docs/manage-sandboxes/runtime-controls.mdx`, `docs/changelog/2026-07-15.mdx`: Add the missing pre-write OpenClaw candidate-validation contract. - [#6916](#6916) -> `docs/changelog/2026-07-15.mdx`: Preserve the failed-session fresh-install recovery correction in the release entry. - [#6934](#6934) -> `docs/reference/commands.mdx`, `docs/reference/troubleshooting.mdx`, `docs/security/credential-storage.mdx`, `docs/changelog/2026-07-15.mdx`: Summarize completed-prompt checkpointing and validated credential reuse during OpenClaw resume. - [#6898](#6898) -> `docs/inference/switch-models.mdx`, `docs/inference/switch-providers.mdx`, `docs/reference/troubleshooting.mdx`, `docs/changelog/2026-07-15.mdx`: Explain Hermes dashboard convergence after in-place inference changes. - [#6711](#6711) -> `docs/manage-sandboxes/run-sandboxes.mdx`, `docs/manage-sandboxes/uninstall-nemoclaw.mdx`, `docs/reference/architecture.mdx`, `docs/reference/commands.mdx`, `docs/changelog/2026-07-15.mdx`: Summarize port-scoped host state and uninstall preservation. - [#6767](#6767) -> `docs/inference/configure-model-limits.mdx`, `docs/inference/set-up-ollama.mdx`, `docs/reference/troubleshooting.mdx`, `docs/changelog/2026-07-15.mdx`: Record the Hermes `64000`-token Ollama floor and unchanged OpenClaw floor. - [#6862](#6862) -> `docs/get-started/quickstart.mdx`, `docs/inference/verify-inference-route.mdx`, `docs/changelog/2026-07-15.mdx`: Explain retryable not-ready finalization for unhealthy inference routes. - [#6766](#6766) -> `docs/security/tcb-boundary.mdx`, `docs/changelog/2026-07-15.mdx`: Document definitive stale transition-lock recovery and fail-closed ambiguous cases. - [#6948](#6948) -> `docs/manage-sandboxes/manage-mcp-servers.mdx`, `docs/changelog/2026-07-15.mdx`: Include Hermes MCP apply-state race recovery in the release entry without changing the established user workflow. - [#6964](#6964) -> `docs/reference/troubleshooting.mdx`, `docs/changelog/2026-07-15.mdx`: Record complete agent-specific fresh-install and resume recovery commands. - [#6883](#6883) -> `docs/get-started/quickstart.mdx`, `docs/inference/set-up-vllm.mdx`, `docs/reference/platform-support.mdx`, `docs/changelog/2026-07-15.mdx`: Summarize the DGX Station Nemotron Ultra express path and pinned managed-vLLM recipe. - [#6985](#6985) -> `docs/inference/set-up-vllm.mdx`, `docs/reference/commands.mdx`, `docs/changelog/2026-07-15.mdx`: Capture the final automated and interactive storage-warning behavior. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [x] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [ ] Tests added or updated for changed behavior - [x] Existing tests cover changed behavior — `test/changelog-docs.test.ts` validates the dated-entry structure, exact version heading, and preserved history. - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [ ] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [ ] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run test/changelog-docs.test.ts` (6 passed) - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — not run for this doc-only change. - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — completed with 0 errors; Fern reported the unchanged unauthenticated redirect-check and light-theme contrast warnings. - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) — the native changelog entry uses the required parser-safe MDX SPDX comment and intentionally has no frontmatter. --- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added the v0.0.84 changelog entry covering setup, endpoint onboarding, model handling, sandbox readiness, recovery, channel status, and configuration safeguards. * Clarified that sandbox health checks validate configured models against local Ollama and vLLM provider inventories without generating completions or consuming tokens. * Documented that invalid runtime configuration changes are rejected while preserving the existing working configuration. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- markdownlint-disable MD041 --> ## Summary The copyable starter prompt now guides a non-technical user through an end-to-end NemoClaw installation one question at a time, without leaving interactive terminal menus running or exposing credentials. It retains the DGX Station Express mapping while adding complete platform readiness, provider, messaging, approval, sudo, Ollama, credential-helper, and documentation-discovery guidance. ## Changes - Point coding agents to official Markdown documentation examples for OpenClaw, Hermes, and LangChain Deep Agents Code, and suggest the NemoClaw docs MCP server when supported. - Collect the operating system, agent, readiness evidence, provider, model, sandbox, web search, messaging, policy, credential, download, administrator-access, and final-install decisions one at a time. - Reproduce Express outcomes non-interactively: use the installed release's maintained Spark model, pin the Station Nemotron Ultra recipe with its approximately 352 GB and Deferred-validation warnings, and preserve the Windows WSL path. - Offer existing vLLM, platform- and agent-eligible Ollama, managed vLLM, OpenRouter, hosted providers, Model Router, and compatible endpoints without starting duplicate local servers. - Preserve the immutable credential-helper and form pins, complete one-time URL, same-port loopback SSH forwarding, single-submission boundary, approved absolute command, account-home scope, and verified-installer requirement. - Define safe sudo behavior, first-build messaging configuration, policy and integration ordering, separate download/notice/final approvals, and outcome verification. - Add regression coverage for credential URL handling, sudo behavior, Ollama eligibility, Express model behavior, approval timing, provider mappings, documentation links, and Deep Agents selection. - [#6875](#6875) -> `docs/resources/starter-prompt.md`: Reflect DGX Station GB300 firmware detection in the starter decision flow. - [#6883](#6883) -> `docs/resources/starter-prompt.md`: Preserve the merged Station Nemotron Ultra Express selectors and explicit non-interactive equivalent. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [x] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior — starter-prompt contracts cover credential, sudo, Ollama, provider, Express, approval, documentation-link, and agent-selection behavior. - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — implementation-backed review found no remaining must-fix findings; helper pins, focused tests, and docs validation pass. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run test/starter-prompt-docs.test.ts test/changelog-docs.test.ts` passed 18 tests in 2 files. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — not run for this documentation-only change. - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — passed with zero errors and two existing Fern warnings. - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) --- Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> Signed-off-by: San Dang <sdang@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Reworked the starter onboarding prompt into a stricter step-by-step flow with one-question-at-a-time sequencing, including standardized goal/agent selection and streamlined docs entry points. * Expanded “Express Install” paths (Windows WSL and DGX Spark/Station) and updated platform readiness checks, runtime/provider selection, and local model guidance. * Significantly tightened security for credentials and SSH tunnels with immutable trust-boundary rules, preview/edit/confirm behavior, and stricter policy/approval/checklists. * **Tests** * Updated and expanded starter-prompt documentation tests for redacted key placeholders and stronger security/eligibility/onboarding wording assertions. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Carlos Villela <cvillela@nvidia.com> --------- Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> Signed-off-by: San Dang <sdang@nvidia.com> Signed-off-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: San Dang <sdang@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Summary
DGX Station now uses the existing express-install and onboarding FSM to offer a one-confirmation managed-vLLM install. The express default is the canonical pinned NVIDIA Nemotron 3 Ultra 550B recipe;
--station-deepseekselects the existing DeepSeek V4 Flash recipe for demos.This PR does not add a parallel launcher, a local-machine image dependency, or a new network mode. The previously proposed
experimental-single-userprofile has been removed because its qualified Docker config ID was not published as a registry manifest.Supersedes #6881 with a clean history after #6875 merged; repository policy disables force-pushing the original PR branch.
Changes
--station-deepseekas the explicit DeepSeek V4 Flash override.--ipc=host, explicit-p 8000:8000, no--network hostoverride.nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4183968f87ae4cedce3039313cac1fd43d112c578nvidia/nemotron-3-ultra-550b-a55b262144vllm/vllm-openai@sha256:0fec7ec5f3e6bc168e54899935fb0557da908a4832a1dbc88e2debcf2f889416nemotron_v3, andqwen3_coderrepository@sha256:<manifest>reference. Bare Docker image/config IDs and mutable tags fail before callbacks, prompts, pulls, or container launch.--pull=neverafterward so Docker cannot substitute another image.Distribution and Network Boundary
All four shipped managed-vLLM refs were resolved directly from their registries without pulling layers. Each returned HTTP 200 and a
Docker-Content-Digestequal to the requested digest:vllm/vllm-openai@sha256:0fec7ec5f3e6bc168e54899935fb0557da908a4832a1dbc88e2debcf2f889416— multi-arch index containing Linux ARM64 and AMD64.nvcr.io/nvidia/vllm@sha256:9204569b17ee4c0eff75194b8e6e458479c8aee18953b5ab9cf359fcdac659e2— Linux ARM64.nvcr.io/nvidia/vllm@sha256:447995cbb57e6c7cf792cab95e9852e5f62b5fb6d2f39e030fa4eda9a54eadb4— Linux ARM64.nvcr.io/nvidia/vllm@sha256:7be6c2f676c36059a494fe17254e69ae5c677535ba6191044e5fc8e42a91c773— Linux AMD64.The Station Ultra runtime follows the same network boundary as standard managed vLLM.
0.0.0.0is inside the container network namespace and Docker publishes only port 8000. Because Docker's default publication can bind on all host interfaces, the existing default-deny firewall guidance still applies; this PR introduces no additional host-network exception.Runtime Selection
-p 8000:8000--station-deepseek-p 8000:8000-p 8000:8000There is no installer-selectable experimental/local-only profile in this PR. A future qualified single-user recipe can be proposed only after its exact runtime is published as a pullable immutable manifest and integrated through this same registry/FSM path.
Type of Change
Quality Gates
Verification
Exact local head:
7624d02c7da6d96bb49058bd49474941740e9bd1.npm run typecheckpassed.npm run docs:strictpassed with zero errors and two existing Fern warnings.npm run check:installer-hash,bash -n install.sh scripts/install.sh, andshellcheck install.sh scripts/install.shpassed.--station-deepseekbehavior are unchanged by the cleanup.Signed-off-by: Aaron Erickson aerickson@nvidia.com