Skip to content

feat(inference): support Hermes runtime model switches#3354

Merged
ericksoa merged 8 commits into
mainfrom
ericksoa/hermes-inference-set
May 11, 2026
Merged

feat(inference): support Hermes runtime model switches#3354
ericksoa merged 8 commits into
mainfrom
ericksoa/hermes-inference-set

Conversation

@ericksoa

@ericksoa ericksoa commented May 11, 2026

Copy link
Copy Markdown
Contributor

Summary

  • extend nemoclaw inference set to dispatch by sandbox agent and support Hermes sandboxes
  • for Hermes, update the OpenShell route, patch /sandbox/.hermes/config.yaml model fields, and recompute Hermes hash files without restarting the gateway
  • update nemohermes help/docs so hermes-provider and the no-rebuild model switch path are documented
  • add nightly E2E coverage for inference switching on both OpenClaw and Hermes sandboxes

Validation

  • npm run build:cli
  • npm run typecheck:cli
  • npm run checks
  • shellcheck test/e2e/test-openclaw-inference-switch.sh test/e2e/test-hermes-inference-switch.sh
  • bash -n test/e2e/test-openclaw-inference-switch.sh test/e2e/test-hermes-inference-switch.sh && git diff --check
  • npx vitest run test/validate-e2e-coverage.test.ts --testTimeout 60000
  • npx vitest run src/lib/actions/inference-set.test.ts test/config-set.test.ts test/validate-e2e-coverage.test.ts --testTimeout 60000
  • npx vitest run test/cli.test.ts -t "nemohermes inference set" --testTimeout 60000
  • npx vitest run src/lib/actions/inference-set.test.ts test/config-set.test.ts test/hermes-provider-foundation.test.ts test/generate-hermes-config.test.ts test/no-direct-credential-env.test.ts test/check-env-var-docs.test.ts src/lib/inference/model-prompts.test.ts --testTimeout 60000

Notes

  • The new nightly jobs are wired into selective dispatch, aggregate reporting, and CodeRabbit E2E recommendations.
  • I did not manually dispatch the live nightly E2E jobs from this branch.

Summary by CodeRabbit

  • New Features

    • Switch inference provider/model for Hermes sandboxes via nemohermes inference set; nemohermes auto-selects a single Hermes sandbox when unambiguous.
    • nemoClaw inference set now synchronizes and patches the running agent config for OpenClaw or Hermes without restarting the gateway.
    • Improved strict sandbox config-hash recompute for Hermes to ensure integrity and compatibility.
  • Documentation

    • Updated onboarding, CLI help, and reference docs to describe Hermes provider/model routing, nemohermes alias behavior, and sandbox patching.
  • Tests / CI

    • Added unit and CLI help tests, new E2E scripts, and nightly CI jobs for OpenClaw and Hermes inference switching.

@coderabbitai

coderabbitai Bot commented May 11, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 9258b02c-9f6d-41f9-bc6a-807c7457be2c

📥 Commits

Reviewing files that changed from the base of the PR and between 17f4d80 and d2e624d.

📒 Files selected for processing (3)
  • ci/platform-matrix.json
  • test/e2e/test-hermes-inference-switch.sh
  • test/e2e/test-openclaw-inference-switch.sh
✅ Files skipped from review due to trivial changes (1)
  • ci/platform-matrix.json
🚧 Files skipped from review as they are similar to previous changes (2)
  • test/e2e/test-openclaw-inference-switch.sh
  • test/e2e/test-hermes-inference-switch.sh

📝 Walkthrough

Walkthrough

This PR extends nemoclaw inference set to support Hermes sandboxes: adds agent-aware sandbox selection, a Hermes-specific config patcher, privileged host exec helpers, Hermes strict+compat config-hash recompute, and updates CLI text, onboarding hints, docs, unit tests, e2e scripts, and CI jobs.

Changes

Hermes Inference Set Implementation

Layer / File(s) Summary
User-Facing Documentation
docs/*
Quickstart, inference-options, provider-switching, CLI selection guide, and command reference updated to document Hermes Provider routing, nemohermes alias behavior, and non-restart config patching.
Command Metadata & Onboard Hint
src/commands/inference/set.ts, src/lib/commands/inference/set.ts, src/lib/onboard.ts
CLI descriptions and --sandbox help updated to reference syncing OpenClaw or Hermes config; onboarding hint now recommends nemoclaw inference set --sandbox <name> / nemohermes.
Dependency Interface Extension
src/lib/actions/inference-set.ts
InferenceSetDeps gains sandbox listing (listSandboxes()) and getRequestedAgent() for sandbox discovery and agent routing.
Provider Support and Wiring
src/lib/actions/inference-set.ts
Added hermes-provider to supported providers and wired default deps for sandbox listing and requested agent.
Agent-Aware Sandbox Selection
src/lib/actions/inference-set.ts
resolveTargetSandbox now returns agentName with special handling for hermes (filters sandboxes by agent and requires a single unambiguous match).
Hermes Config Patching
src/lib/actions/inference-set.ts
New patchHermesInferenceConfig() sets model.default, model.base_url, and model.provider: "custom" in Hermes YAML route blocks and returns {changed, route}.
Service Orchestration
src/lib/actions/inference-set.ts
runInferenceSet validates agent (openclaw
Privileged Exec Helpers & write flow
src/lib/sandbox-config.ts
Add docker-driver-aware privileged exec helpers and refactor writeSandboxConfig to use privileged exec for host-side writes and chown operations.
Config Hash Script Generation
src/lib/sandbox-config.ts, test/config-set.test.ts
buildRecomputeSandboxConfigHashScript() generates agent-specific recompute scripts: Hermes hashes config and .env into a strict root-owned file under /etc/nemoclaw, sets permissions, then derives a compatibility hash at /sandbox/.hermes/.config-hash; recomputeSandboxConfigHash executes the script via privileged exec.
Tests
src/lib/actions/inference-set.test.ts, test/cli.test.ts, test/config-set.test.ts
Unit and CLI tests extended to cover Hermes patching, nemohermes alias resolution (single/ambiguous), unsupported-agent rejection, recompute-script assertions, and nemohermes help output.
End-to-End Tests & CI
test/e2e/*, .github/workflows/nightly-e2e.yaml, .coderabbit.yaml, ci/platform-matrix.json
New Hermes and OpenClaw inference-switch E2E scripts added with phased install/onboard, switch assertions, live request checks, and cleanup; nightly E2E workflow jobs, review guidance, and platform matrix updated.

🎯 4 (Complex) | ⏱️ ~45 minutes

🐰 A rabbit hopped through the agent paths today,
Hermes and OpenClaw both now have their way,
No restarts needed, just config anew,
One alias to rule them—nemohermes, it's true!
The burrow grows smarter, the sandbox more spry.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.85% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(inference): support Hermes runtime model switches' clearly and specifically describes the main change: adding support for runtime model switching in Hermes sandboxes.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ericksoa/hermes-inference-set

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
docs/inference/inference-options.md (1)

72-72: ⚡ Quick win

Split the two-sentence table description into one sentence per source line.

Line 72 contains two sentences in the same Markdown source line inside the table cell, which breaks the docs formatting rule.

As per coding guidelines, "One sentence per line in source (makes diffs readable). Flag paragraphs where multiple sentences appear on the same line."

🤖 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 `@docs/inference/inference-options.md` at line 72, The table cell for "Hermes
Provider" contains two sentences on a single Markdown source line; edit the cell
in the inference-options.md table so each sentence is on its own source line
(i.e., break the cell content after "NemoClaw." so "Available only when
onboarding Hermes Agent." and the curated models sentence are on separate lines)
to satisfy the one-sentence-per-line docs rule.
🤖 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/sandbox-config.ts`:
- Around line 429-442: In buildRecomputeSandboxConfigHashScript, avoid
truncating HERMES_STRICT_HASH_FILE directly; instead compute checksums into a
temp file (e.g., HERMES_STRICT_HASH_FILE.tmp in the same dir), verify sha256sum
writes to that temp, set ownership and permissions on the temp, then atomically
mv the temp to HERMES_STRICT_HASH_FILE and only then cp or mv to the
compatibilityHash (also using a temp for the compatibility file if desired) so
that creation, chown, chmod and final replacement are all atomic and cannot
leave a partial/empty strict or compatibility hash; update the sequence that
currently uses `> ${HERMES_STRICT_HASH_FILE}` to use temp files and mv
operations while keeping the existing mkdir, chown and chmod steps.

---

Nitpick comments:
In `@docs/inference/inference-options.md`:
- Line 72: The table cell for "Hermes Provider" contains two sentences on a
single Markdown source line; edit the cell in the inference-options.md table so
each sentence is on its own source line (i.e., break the cell content after
"NemoClaw." so "Available only when onboarding Hermes Agent." and the curated
models sentence are on separate lines) to satisfy the one-sentence-per-line docs
rule.
🪄 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: 34e480bd-45af-434b-94d8-f859f4603e84

📥 Commits

Reviewing files that changed from the base of the PR and between ee06654 and d11a077.

📒 Files selected for processing (13)
  • docs/get-started/quickstart-hermes.md
  • docs/inference/inference-options.md
  • docs/inference/switch-inference-providers.md
  • docs/reference/cli-selection-guide.md
  • docs/reference/commands.md
  • src/commands/inference/set.ts
  • src/lib/actions/inference-set.test.ts
  • src/lib/actions/inference-set.ts
  • src/lib/commands/inference/set.ts
  • src/lib/onboard.ts
  • src/lib/sandbox-config.ts
  • test/cli.test.ts
  • test/config-set.test.ts

Comment thread src/lib/sandbox-config.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
test/e2e/test-openclaw-inference-switch.sh (1)

17-17: 💤 Low value

Missing -e flag in set may be intentional but warrants a note.

The script uses set -uo pipefail without -e (errexit). This appears intentional since the script relies on manual exit 1 calls after fail() for critical failures. However, any unhandled command failures between checks will not abort the script.

If the design is to continue collecting all pass/fail results before exiting, the current approach is correct. Otherwise, consider adding -e to fail fast on unexpected errors.

🤖 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 `@test/e2e/test-openclaw-inference-switch.sh` at line 17, The script's shell
flags use "set -uo pipefail" without "-e", which can allow unexpected command
failures to continue; either add "-e" (change to "set -euo pipefail") to enable
fail-fast behavior, or explicitly document the intentional omission by adding a
comment near the top explaining that fail() and manual exit handling are used to
collect all results; reference the existing "set -uo pipefail" line and the
fail() invocation so the reviewer can choose the correct fix.
test/e2e/test-hermes-inference-switch.sh (1)

171-209: 💤 Low value

Regex-based YAML parsing is acceptable but fragile.

The Python code uses regex to parse config.yaml rather than a YAML library. This works for the controlled test scenario but could break if the YAML structure changes (e.g., nested maps, multiline values, or different key ordering).

For E2E tests where PyYAML availability is uncertain, this tradeoff is reasonable. Consider adding a brief comment noting this limitation.

🤖 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 `@test/e2e/test-hermes-inference-switch.sh` around lines 171 - 209, The inline
Python probe in test/e2e/test-hermes-inference-switch.sh uses regex-based YAML
parsing (see the Python block that builds the model dict and the regex matches)
which is fragile for nested/multiline YAML; add a brief comment immediately
above that Python heredoc explaining that this is a deliberate lightweight
approach for the controlled E2E test (PyYAML may not be available), call out its
limitations (won't handle nested maps or multiline values), and note that if the
config parsing needs to be robust in future the code should switch to a proper
YAML parser like PyYAML.
🤖 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.

Nitpick comments:
In `@test/e2e/test-hermes-inference-switch.sh`:
- Around line 171-209: The inline Python probe in
test/e2e/test-hermes-inference-switch.sh uses regex-based YAML parsing (see the
Python block that builds the model dict and the regex matches) which is fragile
for nested/multiline YAML; add a brief comment immediately above that Python
heredoc explaining that this is a deliberate lightweight approach for the
controlled E2E test (PyYAML may not be available), call out its limitations
(won't handle nested maps or multiline values), and note that if the config
parsing needs to be robust in future the code should switch to a proper YAML
parser like PyYAML.

In `@test/e2e/test-openclaw-inference-switch.sh`:
- Line 17: The script's shell flags use "set -uo pipefail" without "-e", which
can allow unexpected command failures to continue; either add "-e" (change to
"set -euo pipefail") to enable fail-fast behavior, or explicitly document the
intentional omission by adding a comment near the top explaining that fail() and
manual exit handling are used to collect all results; reference the existing
"set -uo pipefail" line and the fail() invocation so the reviewer can choose the
correct fix.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: e79de72b-7649-4413-a970-33a34b9548b7

📥 Commits

Reviewing files that changed from the base of the PR and between d11a077 and 7c5e737.

📒 Files selected for processing (4)
  • .coderabbit.yaml
  • .github/workflows/nightly-e2e.yaml
  • test/e2e/test-hermes-inference-switch.sh
  • test/e2e/test-openclaw-inference-switch.sh

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 25685065343
Branch: ericksoa/hermes-inference-set
Requested jobs: all (no filter)
Summary: 31 passed, 2 failed, 2 skipped

Job Result
cloud-e2e ✅ success
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
credential-migration-e2e ✅ success
credential-sanitization-e2e ✅ success
deployment-services-e2e ✅ success
device-auth-health-e2e ✅ success
diagnostics-e2e ✅ success
docs-validation-e2e ✅ success
double-onboard-e2e ⚠️ cancelled
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-inference-switch-e2e ❌ failure
hermes-slack-e2e ✅ success
inference-routing-e2e ✅ success
issue-2478-crash-loop-recovery-e2e ✅ success
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
network-policy-e2e ✅ success
onboard-repair-e2e ⚠️ cancelled
onboard-resume-e2e ✅ success
openclaw-inference-switch-e2e ❌ failure
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-hermes-stale-base-e2e ✅ success
rebuild-openclaw-e2e ✅ success
runtime-overrides-e2e ✅ success
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ✅ success
shields-config-e2e ✅ success
skill-agent-e2e ✅ success
snapshot-commands-e2e ✅ success
telegram-injection-e2e ✅ success
token-rotation-e2e ⚠️ cancelled
upgrade-stale-sandbox-e2e ✅ success

Failed jobs: hermes-inference-switch-e2e, openclaw-inference-switch-e2e. Check run artifacts for logs.

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 25686307945
Branch: ericksoa/hermes-inference-set
Requested jobs: openclaw-inference-switch-e2e,hermes-inference-switch-e2e
Summary: 0 passed, 2 failed, 0 skipped

Job Result
hermes-inference-switch-e2e ❌ failure
openclaw-inference-switch-e2e ❌ failure

Failed jobs: hermes-inference-switch-e2e, openclaw-inference-switch-e2e. Check run artifacts for logs.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 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 `@test/e2e/test-hermes-inference-switch.sh`:
- Around line 495-505: The registry removal check should be skipped when the
sandbox is intentionally kept (NEMOCLAW_E2E_KEEP_SANDBOX=1); modify the
post-destroy verification so that if the environment variable
NEMOCLAW_E2E_KEEP_SANDBOX is set to "1" the script does not check registry_file
(the "${HOME}/.nemoclaw/sandboxes.json" lookup for "${SANDBOX_NAME}") and does
not call fail/pass for removal—wrap the registry_file existence and grep check
(and the subsequent fail "Sandbox ${SANDBOX_NAME} still in registry after
destroy" / pass "Sandbox ${SANDBOX_NAME} removed") in an if that only runs when
NEMOCLAW_E2E_KEEP_SANDBOX != "1".
- Around line 133-141: The current guard "if session:" allows empty dicts/lists
from deserializing onboard-session.json to pass; change the checks to explicitly
validate that session is a non-empty mapping (e.g., ensure session is a dict and
has keys) before skipping and add an explicit error when it's empty or not a
dict. In other words, replace or augment the "if session:" guard with a check
like "if not isinstance(session, dict) or not session: errors.append('session is
empty or invalid')" and then perform the existing field assertions against
session.get('sandboxName'), session.get('agent'), session.get('provider'), and
session.get('model') (using the variables name, provider, model) so an empty
onboard-session.json fails the test.

In `@test/e2e/test-openclaw-inference-switch.sh`:
- Around line 428-438: The registry existence check assumes the sandbox was
destroyed; skip this check when NEMOCLAW_E2E_KEEP_SANDBOX is set by guarding the
registry_file lookup and the fail/pass logic with the same condition used for
destroy (NEMOCLAW_E2E_KEEP_SANDBOX), i.e., if NEMOCLAW_E2E_KEEP_SANDBOX==1 then
report or skip verification for SANDBOX_NAME instead of running grep on
registry_file; update the block that references registry_file, SANDBOX_NAME,
fail and pass so it only verifies removal when the sandbox was actually
destroyed.
🪄 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: b335ab9c-36ca-49f8-8c27-9e6bb20d9a5b

📥 Commits

Reviewing files that changed from the base of the PR and between 7c5e737 and 0c1bc15.

📒 Files selected for processing (7)
  • .coderabbit.yaml
  • .github/workflows/nightly-e2e.yaml
  • docs/reference/commands.md
  • src/lib/onboard.ts
  • test/cli.test.ts
  • test/e2e/test-hermes-inference-switch.sh
  • test/e2e/test-openclaw-inference-switch.sh
✅ Files skipped from review due to trivial changes (3)
  • src/lib/onboard.ts
  • docs/reference/commands.md
  • .coderabbit.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/nightly-e2e.yaml

Comment thread test/e2e/test-hermes-inference-switch.sh Outdated
Comment thread test/e2e/test-hermes-inference-switch.sh
Comment thread test/e2e/test-openclaw-inference-switch.sh
@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 25686994377
Branch: ericksoa/hermes-inference-set
Requested jobs: openclaw-inference-switch-e2e,hermes-inference-switch-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
hermes-inference-switch-e2e ✅ success
openclaw-inference-switch-e2e ✅ success

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 25687562452
Branch: ericksoa/hermes-inference-set
Requested jobs: openclaw-inference-switch-e2e,hermes-inference-switch-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
hermes-inference-switch-e2e ✅ success
openclaw-inference-switch-e2e ✅ success

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 25688652356
Branch: ericksoa/hermes-inference-set
Requested jobs: openclaw-inference-switch-e2e,hermes-inference-switch-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
hermes-inference-switch-e2e ✅ success
openclaw-inference-switch-e2e ✅ success

@ericksoa ericksoa self-assigned this May 11, 2026
@ericksoa ericksoa merged commit 8cf3a9b into main May 11, 2026
24 checks passed
@ericksoa ericksoa deleted the ericksoa/hermes-inference-set branch May 11, 2026 18:58
@miyoungc miyoungc mentioned this pull request May 12, 2026
12 tasks
miyoungc added a commit that referenced this pull request May 12, 2026
## Summary
Refreshes the release-prep docs for v0.0.39 based on changes merged
since the Friday 4pm doc refresh. Updates the source docs, bumps the
docs version metadata, and regenerates the NemoClaw user skills from the
refreshed docs.

## Changes
- #3314 -> `docs/get-started/prerequisites.md`,
`docs/get-started/quickstart.md`, `docs/reference/troubleshooting.md`:
Documents installer Docker setup, Docker group activation, and retry
guidance.
- #3317 -> `docs/get-started/quickstart.md`,
`docs/reference/commands.md`: Documents the DGX Spark and DGX Station
express install prompt and `NEMOCLAW_NO_EXPRESS`.
- #3328 and #3329 -> `docs/security/best-practices.md`,
`docs/deployment/sandbox-hardening.md`: Updates sandbox capability
hardening docs for the stricter bounding-set and `setpriv` step-down
behavior.
- #3330, #3335, and #3346 -> `docs/inference/use-local-inference.md`:
Documents Windows-host Ollama relaunch behavior, NIM key passthrough,
early health-fail diagnostics, and mixed-GPU preflight detail.
- #2406, #2883, #3001, #3244, #3267, #3318, #3320, and #3354 ->
`docs/about/release-notes.md`: Adds the v0.0.39 release-prep section
while keeping the v0.0.38 release notes intact.
- Advances the release-prep docs metadata from v0.0.38 to v0.0.39.
- Regenerates `.agents/skills/nemoclaw-user-*` from the updated source
docs.

## 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)

## Verification
- [x] `npx prek run --all-files` passes
- [ ] `npm test` passes
- [ ] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [x] Docs updated for user-facing behavior changes
- [x] `make docs` builds without warnings (doc changes only)
- [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>

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes v0.0.39

* **New Features**
  * Host alias management commands for easier configuration
  * Sandbox GPU control options during onboarding
  * Update command with check and confirmation modes

* **Documentation**
* Enhanced Linux installer guidance with Docker and group membership
handling
  * Expanded troubleshooting for permission and connectivity issues
  * Improved capability-dropping security documentation
  * Updated inference model switching commands
  * Brev environment-specific troubleshooting

* **Improvements**
  * DGX Spark/Station express install flow
  * Windows Ollama relay and health-check enhancements
  * NVIDIA NIM preflight GPU reporting

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/NVIDIA/NemoClaw/pull/3375)

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@wscurran wscurran added the feature PR adds or expands user-visible functionality label Jun 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature PR adds or expands user-visible functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants