Skip to content

fix(inference): sync anthropic runtime routes#4847

Merged
cv merged 6 commits into
mainfrom
fix/inference-set-anthropic-managed-route
Jun 5, 2026
Merged

fix(inference): sync anthropic runtime routes#4847
cv merged 6 commits into
mainfrom
fix/inference-set-anthropic-managed-route

Conversation

@ericksoa

@ericksoa ericksoa commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Resolve the managed inference API family during nemoclaw inference set / nemohermes inference set before patching in-sandbox config.
  • Set Hermes model.api_mode for Anthropic Messages and OpenAI Responses routes, and clear stale api_mode when switching back to OpenAI-style chat completions.
  • Preserve the Bedrock Runtime adapter exception: same-provider compatible-Anthropic routes that were resolved as OpenAI-compatible stay on /v1/chat/completions.
  • Add hermetic Anthropic Messages switch coverage for both Hermes and OpenClaw: the E2E scripts can register a compatible Anthropic mock provider, verify /v1/messages through inference.local, then exercise the agent path after the switch.

Why

#4809 reported a 403 connection not allowed by policy while the agent was calling https://inference.local, so the right fix is not to open direct sandbox egress to the upstream inference host. #4402 fixed fresh Hermes onboarding by allowing managed /v1/messages and baking api_mode: anthropic_messages. This PR covers the remaining runtime-switch path so both Hermes and OpenClaw keep using OpenShell-managed inference correctly after inference set.

References

Validation

  • npx vitest run src/lib/actions/inference-set.test.ts
  • npx vitest run src/lib/actions/inference-set.test.ts src/lib/inference/config.test.ts test/generate-hermes-config.test.ts test/generate-openclaw-config.test.ts (initial combined run hit two existing 5s per-test timeouts in test/generate-openclaw-config.test.ts; rerun below passed with a larger timeout)
  • npx vitest run test/generate-openclaw-config.test.ts --testTimeout 20000
  • npx vitest run test/validate-e2e-coverage.test.ts
  • shellcheck test/e2e/test-hermes-inference-switch.sh test/e2e/test-openclaw-inference-switch.sh test/e2e/lib/anthropic-switch-provider.sh test/e2e/lib/inference-switch-retry.sh
  • bash -n test/e2e/test-hermes-inference-switch.sh test/e2e/test-openclaw-inference-switch.sh test/e2e/lib/anthropic-switch-provider.sh test/e2e/lib/inference-switch-retry.sh
  • npx biome check src/lib/actions/inference-set.ts src/lib/actions/inference-set.test.ts
  • npm run build:cli
  • npm run validate:configs
  • git diff --check
  • PR checks green on head e21952d57e8ef23caa266d6862e7367ec3bd3814, including commit-lint and DCO.
  • Targeted E2E run 27014755537 passed both new agent-path proofs:
    • hermes-anthropic-inference-switch-e2e / run
    • openclaw-anthropic-inference-switch-e2e / run

Summary by CodeRabbit

Release Notes

  • New Features

    • Added support for switching between OpenAI and Anthropic inference API modes in sandbox configurations.
  • Tests

    • Introduced nightly E2E test jobs for validating Anthropic inference switching across agents.
    • Expanded test coverage for inference API configuration validation and provider switching scenarios.
    • Added mock Anthropic provider support for local E2E testing.
  • Chores

    • Updated CI/CD workflow to include new inference-switch E2E test jobs and orchestration.

Final confidence pass

  • Required scenario E2E passed on head 5c09efefe6e30e2fe3708dfa3b864d3cd3ece95a: ubuntu-repo-cloud-openclaw-double-provider-switch, ubuntu-repo-cloud-openclaw-double-same-provider — run 27023280926.
  • Required switch E2Es passed on head 5c09efefe6e30e2fe3708dfa3b864d3cd3ece95a: hermes-inference-switch-e2e, openclaw-inference-switch-e2e — run 27023413644.
  • Required Anthropic switch E2Es and optional hermes-e2e passed on head 5c09efefe6e30e2fe3708dfa3b864d3cd3ece95a: run 27041002798.
  • Optional E2Es passed on head 5c09efefe6e30e2fe3708dfa3b864d3cd3ece95a: bedrock-runtime-compatible-anthropic-e2e, inference-routing-e2e — run 27023295295.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa ericksoa added platform: macos Affects macOS, including Apple Silicon integration: openclaw OpenClaw integration behavior platform: ubuntu Affects Ubuntu Linux environments NV QA Bugs found by the NVIDIA QA Team provider: anthropic Anthropic or Claude provider behavior UAT Issues flagged for User Acceptance Testing. integration: hermes Hermes integration behavior v0.0.60 Release target area: e2e End-to-end tests, nightly failures, or validation infrastructure area: inference Inference routing, serving, model selection, or outputs bug-fix PR fixes a bug or regression labels Jun 5, 2026
@ericksoa ericksoa self-assigned this Jun 5, 2026
@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: hermes-inference-switch-e2e, openclaw-inference-switch-e2e, hermes-anthropic-inference-switch-e2e, openclaw-anthropic-inference-switch-e2e
Optional E2E: inference-routing-e2e, bedrock-runtime-compatible-anthropic-e2e, hermes-e2e

Dispatch hint: hermes-inference-switch-e2e,openclaw-inference-switch-e2e,hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e

Auto-dispatched E2E: hermes-inference-switch-e2e, openclaw-inference-switch-e2e via nightly-e2e.yaml at 5c09efefe6e30e2fe3708dfa3b864d3cd3ece95anightly run

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • hermes-inference-switch-e2e (medium): Covers the existing Hermes inference set path to ensure default OpenAI-compatible switching, config.yaml patching, hashes, registry/session updates, and live requests still work.
  • openclaw-inference-switch-e2e (medium): Covers the existing OpenClaw inference set path to ensure openclaw.json patching, hashes, registry/session updates, and live requests still work.
  • hermes-anthropic-inference-switch-e2e (medium): Directly validates the new Hermes compatible Anthropic Messages switch path, including model.api_mode, inference.local /v1/messages traffic, and the new mock Anthropic provider helper.
  • openclaw-anthropic-inference-switch-e2e (medium): Directly validates the new OpenClaw compatible Anthropic Messages switch path, including provider namespace selection, inference.local /v1/messages traffic, and the new mock Anthropic provider helper.

Optional E2E

  • inference-routing-e2e (low): Useful adjacent coverage for inference.local credential isolation and route error classification, though the PR primarily changes inference set/switch behavior.
  • bedrock-runtime-compatible-anthropic-e2e (medium): Good confidence check for the compatible Anthropic endpoint family and Bedrock Runtime adapter behavior, especially because the PR preserves OpenAI-compatible routing for same-provider Bedrock-style switches.
  • hermes-e2e (medium): Basic Hermes install/onboard/live inference smoke can catch broad regressions in Hermes config handling, but the dedicated switch jobs are more targeted.

New E2E recommendations

  • None.

Dispatch hint

  • Workflow: .github/workflows/nightly-e2e.yaml
  • jobs input: hermes-inference-switch-e2e,openclaw-inference-switch-e2e,hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

E2E Scenario Advisor Recommendation

Required scenario E2E: ubuntu-repo-cloud-openclaw-double-provider-switch, ubuntu-repo-cloud-openclaw-double-same-provider
Optional scenario E2E: None

Dispatch required scenario E2E:

  • gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw-double-provider-switch
  • gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw-double-same-provider

Workflow run

Full scenario advisor summary

E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: medium

Required scenario E2E

  • ubuntu-repo-cloud-openclaw-double-provider-switch: The PR changes inference route API resolution and nemoclaw inference set behavior. This routed scenario is the dispatchable scenario coverage for OpenClaw provider-switch lifecycle behavior.
    • Dispatch: gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw-double-provider-switch
  • ubuntu-repo-cloud-openclaw-double-same-provider: The PR changes same-provider route API preservation logic used by nemoclaw inference set; this scenario is the smallest routed scenario that exercises the same-provider switch lifecycle.
    • Dispatch: gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw-double-same-provider

Optional scenario E2E

  • None.

Relevant changed files

  • src/lib/actions/inference-route-api.ts
  • src/lib/actions/inference-set.ts

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor

Findings: 1 needs attention, 7 worth checking, 0 nice ideas
Since last review: 4 prior items resolved, 3 still apply, 2 new items found

Review findings

🛠️ Needs attention

  • Large inference-switch changes still grow existing hotspots (src/lib/actions/inference-set.test.ts:1): The PR extracted route-family resolution into `inference-route-api.ts`, which resolves much of the prior monolith concern, but the changed hotspot files still grow materially. `inference-set.test.ts` grows by 294 lines and `inference-set.ts` still grows by 23 lines in a central path that coordinates OpenShell route state, registry updates, onboard session state, and in-sandbox config/hash synchronization.
    • Recommendation: Move repeated compatible-Anthropic fixtures/helpers out of `inference-set.test.ts`, keep route-mode behavior in the extracted module, and offset the remaining `inference-set.ts` growth where possible before merge.
    • Evidence: Deterministic drift scan reports `src/lib/actions/inference-set.test.ts` 606 -> 900 lines (+294) and `src/lib/actions/inference-set.ts` 448 -> 471 lines (+23).

🔎 Worth checking

  • Source-of-truth review needed: src/lib/actions/inference-route-api.ts compatible-Anthropic route-family resolution: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: `resolveRuntimeInferenceApi` checks session/config sources and defaults `compatible-anthropic-endpoint` to `anthropic-messages`; `readOpenClawRouteApi` documents primary-ref-before-provider-block behavior.
  • Source-of-truth review needed: src/lib/actions/inference-route-api.ts tolerant route readers: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: `readProviderApi`, `readOpenClawPrimaryProviderKey`, `readHermesRouteApi`, `sessionRouteApi`, and `hermesApiMode` silently return `null` for missing or unsupported state.
  • New Anthropic switch jobs expand the target-ref secret boundary (.github/workflows/nightly-e2e.yaml:1019): The new Anthropic switch jobs no longer pass `GITHUB_TOKEN`, which resolves the prior token-specific finding, but they do pass `NVIDIA_API_KEY` into a reusable workflow that checks out and runs `target_ref` code. The jobs use a mock compatible-Anthropic provider, so the remaining need for a real NVIDIA key is the install/onboard setup, not the new mocked switch route itself.
    • Recommendation: Avoid `nvidia_api_key: true` for these mock-route jobs if the setup can be made hermetic, or document why the initial install/onboard still requires a real NVIDIA key and keep the jobs out of PR-triggered untrusted contexts.
    • Evidence: `hermes-anthropic-inference-switch-e2e` sets `nvidia_api_key: true` at line 1019, and `openclaw-anthropic-inference-switch-e2e` sets `nvidia_api_key: true` at line 1343. `.github/workflows/e2e-script.yaml` checks out `inputs.ref` and runs the target-ref script.
  • Mock Anthropic provider binds all interfaces (test/e2e/lib/anthropic-switch-provider.sh:131): The E2E mock server binds `0.0.0.0` so the sandbox can reach it through `host.openshell.internal`. That is likely intentional for this topology, and the mock does not expose real credentials, but it unnecessarily exposes an unauthenticated test HTTP server beyond loopback on self-hosted/shared runners.
    • Recommendation: Bind to the minimum host interface needed for sandbox reachability, or document why `0.0.0.0` is required and ensure the runner firewall/network isolation is the intended control.
    • Evidence: `ThreadingHTTPServer(("0.0.0.0", port), Handler).serve_forever()` starts the mock provider, while the workflow supplies `NEMOCLAW_SWITCH_MOCK_ANTHROPIC=1` for the new jobs.
  • Route-family fallback still needs an explicit source-of-truth removal condition (src/lib/actions/inference-route-api.ts:61): The extracted resolver now handles the stale-provider-block bug by preferring OpenClaw `agents.defaults.model.primary`, and it writes `preferredInferenceApi` back to matching sessions. However, compatible-Anthropic route family is still inferred from session, then config, then defaulted to Anthropic Messages. The code explains the OpenClaw config boundary, but it does not state when provider-block/default fallbacks can be removed or why route family cannot be made authoritative in registry/provider metadata in this PR.
    • Recommendation: Document the invalid legacy states and removal condition near `resolveRuntimeInferenceApi`, and consider persisting route family in registry/provider metadata so future switches do not need provider-block/default inference for active route family.
    • Evidence: `readOpenClawRouteApi` falls back from primary ref to provider blocks; `resolveRuntimeInferenceApi` defaults `compatible-anthropic-endpoint` to `anthropic-messages` when session/config do not resolve a route.
  • Related [macOS][Policy&Network] Hermes Agent with Anthropic-compatible provider gets HTTP 403 "connection not allowed by policy" — managed_inference policy missing /v1/messages path #4230 fresh-onboard reproduction is only partially covered (test/e2e/test-hermes-inference-switch.sh:328): Issue [macOS][Policy&Network] Hermes Agent with Anthropic-compatible provider gets HTTP 403 "connection not allowed by policy" — managed_inference policy missing /v1/messages path #4230 describes fresh Hermes onboarding with an Anthropic-compatible provider followed by in-sandbox Hermes chat failing with HTTP 403. This PR adds runtime `inference set` route synchronization and switch E2Es after a sandbox already exists, including `/v1/messages` checks through `inference.local`. It does not add or identify fresh onboarding coverage for the literal reproduction steps.
  • Credential fallback fix lacks a negative test (test/e2e/lib/anthropic-switch-provider.sh:174): The prior NVIDIA-key reuse risk appears fixed: non-mock compatible-Anthropic switches now require `COMPATIBLE_ANTHROPIC_API_KEY` and no longer copy `NVIDIA_API_KEY` into the compatible provider credential. A targeted negative test would lock this security boundary down.
    • Recommendation: Add a behavior test that non-mock compatible-Anthropic provider registration fails for an arbitrary `NEMOCLAW_SWITCH_ENDPOINT_URL` when `COMPATIBLE_ANTHROPIC_API_KEY` is absent, and assert that `NVIDIA_API_KEY` is not used as a fallback.
    • Evidence: `ensure_compatible_anthropic_switch_provider` fails when `COMPATIBLE_ANTHROPIC_API_KEY` is empty, but the diff does not add a negative test for that non-mock path.

🌱 Nice ideas

  • None.
Consider writing more tests for
  • **Runtime validation** — Fresh Hermes onboarding with compatible-Anthropic provider writes `model.api_mode: anthropic_messages` and Hermes agent traffic reaches `https://inference.local/v1/messages\`.. This PR changes sandbox runtime route synchronization, OpenShell provider registration, workflow-dispatched E2E jobs, route-family source precedence, config hashes, and live `inference.local` Anthropic Messages paths. Unit tests are strong for the pure resolver, but stale runtime state and workflow/secret boundaries need behavior-specific validation.
  • **Runtime validation** — Same-provider compatible-Anthropic Hermes switch with no matching session and no `model.api_mode` preserves the old OpenAI-compatible Bedrock adapter route when that is the configured route.. This PR changes sandbox runtime route synchronization, OpenShell provider registration, workflow-dispatched E2E jobs, route-family source precedence, config hashes, and live `inference.local` Anthropic Messages paths. Unit tests are strong for the pure resolver, but stale runtime state and workflow/secret boundaries need behavior-specific validation.
  • **Runtime validation** — Non-mock compatible-Anthropic provider registration fails without `COMPATIBLE_ANTHROPIC_API_KEY` for arbitrary `NEMOCLAW_SWITCH_ENDPOINT_URL` and does not copy `NVIDIA_API_KEY`.. This PR changes sandbox runtime route synchronization, OpenShell provider registration, workflow-dispatched E2E jobs, route-family source precedence, config hashes, and live `inference.local` Anthropic Messages paths. Unit tests are strong for the pure resolver, but stale runtime state and workflow/secret boundaries need behavior-specific validation.
  • **Runtime validation** — New Anthropic switch workflow jobs run without `GITHUB_TOKEN` and either avoid `NVIDIA_API_KEY` for mock-only routing or document the install/onboard requirement.. This PR changes sandbox runtime route synchronization, OpenShell provider registration, workflow-dispatched E2E jobs, route-family source precedence, config hashes, and live `inference.local` Anthropic Messages paths. Unit tests are strong for the pure resolver, but stale runtime state and workflow/secret boundaries need behavior-specific validation.
  • **Runtime validation** — Compatible-Anthropic OpenClaw runtime switch with both stale `anthropic` and active `inference` provider blocks and no matching session keeps routing from `agents.defaults.model.primary=inference/...`.. This PR changes sandbox runtime route synchronization, OpenShell provider registration, workflow-dispatched E2E jobs, route-family source precedence, config hashes, and live `inference.local` Anthropic Messages paths. Unit tests are strong for the pure resolver, but stale runtime state and workflow/secret boundaries need behavior-specific validation.
  • **Credential fallback fix lacks a negative test** — Add a behavior test that non-mock compatible-Anthropic provider registration fails for an arbitrary `NEMOCLAW_SWITCH_ENDPOINT_URL` when `COMPATIBLE_ANTHROPIC_API_KEY` is absent, and assert that `NVIDIA_API_KEY` is not used as a fallback.
  • **Acceptance clause:** [macOS][Policy&Network] Hermes Agent with Anthropic-compatible provider gets HTTP 403 "connection not allowed by policy" — managed_inference policy missing /v1/messages path #4230 title: "[macOS][Policy&Network] Hermes Agent with Anthropic-compatible provider gets HTTP 403 \"connection not allowed by policy\" — managed_inference policy missing /v1/messages path" — add test evidence or identify existing coverage. Current checkout has `POST /v1/messages` in `agents/hermes/policy-additions.yaml`; this PR adds runtime-switch validation through `https://inference.local/v1/messages\`, but the policy change itself is not in this diff.
  • **Acceptance clause:** [macOS][Policy&Network] Hermes Agent with Anthropic-compatible provider gets HTTP 403 "connection not allowed by policy" — managed_inference policy missing /v1/messages path #4230 Description: "When onboarding NemoHermes with an Anthropic-compatible provider (e.g. `aws/anthropic/bedrock-claude-opus-4-6` via NVIDIA Inference API), the inference smoke test during onboard passes (runs outside sandbox), but chatting inside the sandbox fails with HTTP 403 \"connection not allowed by policy\"." — add test evidence or identify existing coverage. The PR validates runtime switching after install/onboard. It does not add the fresh Hermes onboarding selection flow from the issue description.
Since last review details

Current findings:

  • Source-of-truth review needed: src/lib/actions/inference-route-api.ts compatible-Anthropic route-family resolution: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: `resolveRuntimeInferenceApi` checks session/config sources and defaults `compatible-anthropic-endpoint` to `anthropic-messages`; `readOpenClawRouteApi` documents primary-ref-before-provider-block behavior.
  • Source-of-truth review needed: src/lib/actions/inference-route-api.ts tolerant route readers: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: `readProviderApi`, `readOpenClawPrimaryProviderKey`, `readHermesRouteApi`, `sessionRouteApi`, and `hermesApiMode` silently return `null` for missing or unsupported state.
  • Large inference-switch changes still grow existing hotspots (src/lib/actions/inference-set.test.ts:1): The PR extracted route-family resolution into `inference-route-api.ts`, which resolves much of the prior monolith concern, but the changed hotspot files still grow materially. `inference-set.test.ts` grows by 294 lines and `inference-set.ts` still grows by 23 lines in a central path that coordinates OpenShell route state, registry updates, onboard session state, and in-sandbox config/hash synchronization.
    • Recommendation: Move repeated compatible-Anthropic fixtures/helpers out of `inference-set.test.ts`, keep route-mode behavior in the extracted module, and offset the remaining `inference-set.ts` growth where possible before merge.
    • Evidence: Deterministic drift scan reports `src/lib/actions/inference-set.test.ts` 606 -> 900 lines (+294) and `src/lib/actions/inference-set.ts` 448 -> 471 lines (+23).
  • New Anthropic switch jobs expand the target-ref secret boundary (.github/workflows/nightly-e2e.yaml:1019): The new Anthropic switch jobs no longer pass `GITHUB_TOKEN`, which resolves the prior token-specific finding, but they do pass `NVIDIA_API_KEY` into a reusable workflow that checks out and runs `target_ref` code. The jobs use a mock compatible-Anthropic provider, so the remaining need for a real NVIDIA key is the install/onboard setup, not the new mocked switch route itself.
    • Recommendation: Avoid `nvidia_api_key: true` for these mock-route jobs if the setup can be made hermetic, or document why the initial install/onboard still requires a real NVIDIA key and keep the jobs out of PR-triggered untrusted contexts.
    • Evidence: `hermes-anthropic-inference-switch-e2e` sets `nvidia_api_key: true` at line 1019, and `openclaw-anthropic-inference-switch-e2e` sets `nvidia_api_key: true` at line 1343. `.github/workflows/e2e-script.yaml` checks out `inputs.ref` and runs the target-ref script.
  • Mock Anthropic provider binds all interfaces (test/e2e/lib/anthropic-switch-provider.sh:131): The E2E mock server binds `0.0.0.0` so the sandbox can reach it through `host.openshell.internal`. That is likely intentional for this topology, and the mock does not expose real credentials, but it unnecessarily exposes an unauthenticated test HTTP server beyond loopback on self-hosted/shared runners.
    • Recommendation: Bind to the minimum host interface needed for sandbox reachability, or document why `0.0.0.0` is required and ensure the runner firewall/network isolation is the intended control.
    • Evidence: `ThreadingHTTPServer(("0.0.0.0", port), Handler).serve_forever()` starts the mock provider, while the workflow supplies `NEMOCLAW_SWITCH_MOCK_ANTHROPIC=1` for the new jobs.
  • Route-family fallback still needs an explicit source-of-truth removal condition (src/lib/actions/inference-route-api.ts:61): The extracted resolver now handles the stale-provider-block bug by preferring OpenClaw `agents.defaults.model.primary`, and it writes `preferredInferenceApi` back to matching sessions. However, compatible-Anthropic route family is still inferred from session, then config, then defaulted to Anthropic Messages. The code explains the OpenClaw config boundary, but it does not state when provider-block/default fallbacks can be removed or why route family cannot be made authoritative in registry/provider metadata in this PR.
    • Recommendation: Document the invalid legacy states and removal condition near `resolveRuntimeInferenceApi`, and consider persisting route family in registry/provider metadata so future switches do not need provider-block/default inference for active route family.
    • Evidence: `readOpenClawRouteApi` falls back from primary ref to provider blocks; `resolveRuntimeInferenceApi` defaults `compatible-anthropic-endpoint` to `anthropic-messages` when session/config do not resolve a route.
  • Related [macOS][Policy&Network] Hermes Agent with Anthropic-compatible provider gets HTTP 403 "connection not allowed by policy" — managed_inference policy missing /v1/messages path #4230 fresh-onboard reproduction is only partially covered (test/e2e/test-hermes-inference-switch.sh:328): Issue [macOS][Policy&Network] Hermes Agent with Anthropic-compatible provider gets HTTP 403 "connection not allowed by policy" — managed_inference policy missing /v1/messages path #4230 describes fresh Hermes onboarding with an Anthropic-compatible provider followed by in-sandbox Hermes chat failing with HTTP 403. This PR adds runtime `inference set` route synchronization and switch E2Es after a sandbox already exists, including `/v1/messages` checks through `inference.local`. It does not add or identify fresh onboarding coverage for the literal reproduction steps.
  • Credential fallback fix lacks a negative test (test/e2e/lib/anthropic-switch-provider.sh:174): The prior NVIDIA-key reuse risk appears fixed: non-mock compatible-Anthropic switches now require `COMPATIBLE_ANTHROPIC_API_KEY` and no longer copy `NVIDIA_API_KEY` into the compatible provider credential. A targeted negative test would lock this security boundary down.
    • Recommendation: Add a behavior test that non-mock compatible-Anthropic provider registration fails for an arbitrary `NEMOCLAW_SWITCH_ENDPOINT_URL` when `COMPATIBLE_ANTHROPIC_API_KEY` is absent, and assert that `NVIDIA_API_KEY` is not used as a fallback.
    • Evidence: `ensure_compatible_anthropic_switch_provider` fails when `COMPATIBLE_ANTHROPIC_API_KEY` is empty, but the diff does not add a negative test for that non-mock path.

Workflow run details

This is an automated advisory review. A human maintainer must make the final merge decision.

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 27011133903
Target ref: 906a53022b69a2e88dd3361e760c14fcad2c9efa
Workflow ref: fix/inference-set-anthropic-managed-route
Requested jobs: hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e
Summary: 0 passed, 2 failed, 0 skipped

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

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

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 27011476971
Target ref: 7f76cbe53
Workflow ref: fix/inference-set-anthropic-managed-route
Requested jobs: hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e
Summary: 0 passed, 2 failed, 0 skipped

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

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

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 27011207086
Target ref: 906a53022b69a2e88dd3361e760c14fcad2c9efa
Workflow ref: main
Requested jobs: hermes-inference-switch-e2e,openclaw-inference-switch-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
hermes-inference-switch-e2e ✅ success
openclaw-inference-switch-e2e ⚠️ cancelled

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 27011569263
Target ref: 7f76cbe532a6cfcdfce6dbd0f6d114ef305185d0
Workflow ref: fix/inference-set-anthropic-managed-route
Requested jobs: hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e
Summary: 0 passed, 2 failed, 0 skipped

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

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

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 27011853362
Target ref: fbc08debe8b373842f875ea54d9b31d4147b0d9f
Workflow ref: fix/inference-set-anthropic-managed-route
Requested jobs: hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
hermes-anthropic-inference-switch-e2e ⚠️ cancelled
openclaw-anthropic-inference-switch-e2e ⚠️ cancelled

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 27011599401
Target ref: 7f76cbe532a6cfcdfce6dbd0f6d114ef305185d0
Workflow ref: main
Requested jobs: hermes-inference-switch-e2e,openclaw-inference-switch-e2e
Summary: 2 passed, 0 failed, 0 skipped

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

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 27011860480
Target ref: fbc08debee88e90147f40447547bfc41401b4138
Workflow ref: fix/inference-set-anthropic-managed-route
Requested jobs: hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e
Summary: 0 passed, 2 failed, 0 skipped

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

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

@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Adds runtime inference API types and resolver, maps resolved API to Hermes/OpenClaw sandbox patches and session metadata, extends unit tests, adds E2E Anthropic mock/provider helpers and script changes, updates transient retry detection, and wires two nightly CI jobs for Anthropic inference-switch coverage.

Changes

Anthropic Inference API Switching Feature

Layer / File(s) Summary
Inference API domain and resolver
src/lib/actions/inference-route-api.ts
Defines InferenceApi union, normalizeInferenceApi, OpenClaw/Hermes readers, and resolveRuntimeInferenceApi selection precedence.
Config patching & runInferenceSet wiring
src/lib/actions/inference-set.ts
Adds preferredInferenceApi flow: import resolver, extend patchHermesInferenceConfig param, compute preference in runInferenceSet, and persist route.inferenceApi into session.
Unit test coverage
src/lib/actions/inference-route-api.test.ts, src/lib/actions/inference-set.test.ts
Adds tests for normalization, resolver precedence, hermesApiMode mapping, and expands inference-set tests for Anthropic Messages routing, stale api_mode cleanup, same-provider preservation, and session preferredInferenceApi assertions.
E2E Anthropic mock provider library
test/e2e/lib/anthropic-switch-provider.sh
New Bash helper: Anthropic JSON parsing, mock server (health, /v1/models, /v1/messages with SSE), lifecycle start/stop, and provider registration/update helper.
Hermes E2E multi-API test
test/e2e/test-hermes-inference-switch.sh
Parameterizes SWITCH_INFERENCE_API, validates API-specific config/api_mode, selects endpoint/payload per API, conditionally parses Anthropic responses, sources provider helper, and gates on compatibility.
OpenClaw E2E multi-API test
test/e2e/test-openclaw-inference-switch.sh
Parameterizes SWITCH_INFERENCE_API, derives expected OpenClaw config per API, sends API-specific requests, conditionally parses Anthropic responses, captures stderr diagnostics, and gates on compatibility.
Transient failure detection
test/e2e/lib/inference-switch-retry.sh
Expands transient-error regex used by retry logic to include an additional 'temporar…' variant.
Nightly CI job integration
.github/workflows/nightly-e2e.yaml
Adds hermes-anthropic-inference-switch-e2e and openclaw-anthropic-inference-switch-e2e jobs, updates workflow_dispatch allowlist, and wires them into notify/report/scorecard needs.

Sequence Diagram(s)

sequenceDiagram
  participant runInferenceSet
  participant resolveRuntimeInferenceApi
  participant patchHermesInferenceConfig
  participant patchOpenClawInferenceConfig
  participant updateMatchingOnboardSession
  runInferenceSet->>resolveRuntimeInferenceApi: compute preferredInferenceApi(agentName, entry, session, provider)
  resolveRuntimeInferenceApi-->>runInferenceSet: InferenceApi | null
  alt agent is Hermes
    runInferenceSet->>patchHermesInferenceConfig: apply preferredInferenceApi
  else agent is OpenClaw
    runInferenceSet->>patchOpenClawInferenceConfig: apply preferredInferenceApi
  end
  runInferenceSet->>updateMatchingOnboardSession: persist patched.route.inferenceApi
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#4402: Related Hermes mapping of inference API to anthropic_messages and managed-inference policy for /v1/messages.
  • NVIDIA/NemoClaw#4718: Overlaps on Hermes E2E config validation changes for inference switching.

Suggested labels

Platform: Ubuntu, E2E

Suggested reviewers

  • cv

Poem

🐰 I hopped through configs, routes, and tests,
Mocked a tiny Anthropic server in nests,
Hermes and OpenClaw learned which API to plea,
Sessions remember where responses should be,
Nightly jobs now dance and report with glee.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 4.17% 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 'fix(inference): sync anthropic runtime routes' clearly and concisely describes the main objective: synchronizing Anthropic runtime routes during inference operations to ensure runtime routes align with the provider API type.
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 fix/inference-set-anthropic-managed-route

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

@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The head commit changed during the review from 906a530 to fbc08de.

✨ 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 fix/inference-set-anthropic-managed-route

Warning

Tools execution failed with the following error:

Failed to run tools: Stream initialization permanently failed: 14 UNAVAILABLE: read ECONNRESET


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: 2

🤖 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 @.github/workflows/nightly-e2e.yaml:
- Around line 1332-1344: The openclaw-anthropic-inference-switch-e2e job's
env_json is missing the NEMOCLAW_AGENT key; update the env_json value for the
openclaw-anthropic-inference-switch-e2e job to include
"NEMOCLAW_AGENT":"openclaw" (mirroring how the hermes job sets "hermes"), making
sure to insert the new key/value into the existing JSON string in the env_json
field and preserve proper commas/quoting so the resulting string remains valid
JSON.

In `@test/e2e/lib/anthropic-switch-provider.sh`:
- Around line 135-145: The script currently runs "openshell provider update -g
nemoclaw compatible-anthropic-endpoint ..." or "openshell provider create -g
nemoclaw --name compatible-anthropic-endpoint ..." but doesn't check their exit
status before reporting success; update the block so that immediately after each
openshell provider update and openshell provider create command you check their
exit code (e.g., via "$?" or using a conditional) and on non-zero print a clear
error to stderr and exit with a non-zero status (or return non-zero) so failures
in openshell provider update/create are propagated instead of being masked by
the later success message.
🪄 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: 73ed0c81-401e-46b2-b20e-5518c3565aa0

📥 Commits

Reviewing files that changed from the base of the PR and between 5dac380 and fbc08de.

📒 Files selected for processing (7)
  • .github/workflows/nightly-e2e.yaml
  • src/lib/actions/inference-set.test.ts
  • src/lib/actions/inference-set.ts
  • test/e2e/lib/anthropic-switch-provider.sh
  • test/e2e/lib/inference-switch-retry.sh
  • test/e2e/test-hermes-inference-switch.sh
  • test/e2e/test-openclaw-inference-switch.sh

Comment thread .github/workflows/nightly-e2e.yaml
Comment thread test/e2e/lib/anthropic-switch-provider.sh
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 27013038114
Target ref: 05518c9121726d3e831e716c5c8f7c2fb1eacb67
Workflow ref: fix/inference-set-anthropic-managed-route
Requested jobs: hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
hermes-anthropic-inference-switch-e2e ⚠️ cancelled
openclaw-anthropic-inference-switch-e2e ⚠️ cancelled

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 27013044040
Target ref: 05518c912221549632f1ba634e0da136b24b393f
Workflow ref: fix/inference-set-anthropic-managed-route
Requested jobs: hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e
Summary: 1 passed, 1 failed, 0 skipped

Job Result
hermes-anthropic-inference-switch-e2e ✅ success
openclaw-anthropic-inference-switch-e2e ❌ failure

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

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 27013103549
Target ref: 05518c912221549632f1ba634e0da136b24b393f
Workflow ref: main
Requested jobs: hermes-inference-switch-e2e,openclaw-inference-switch-e2e
Summary: 2 passed, 0 failed, 0 skipped

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

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 27014726579
Target ref: e21952d57e8ef23caa266d6862e7367ec3bd3814
Workflow ref: main
Requested jobs: hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
hermes-anthropic-inference-switch-e2e ❓ not reported
openclaw-anthropic-inference-switch-e2e ❓ not reported

Missing requested jobs: hermes-anthropic-inference-switch-e2e, openclaw-anthropic-inference-switch-e2e. The reporting workflow needs to include these jobs.

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 27014755537
Target ref: e21952d57e8ef23caa266d6862e7367ec3bd3814
Workflow ref: fix/inference-set-anthropic-managed-route
Requested jobs: hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e
Summary: 2 passed, 0 failed, 0 skipped

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

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 27014838796
Target ref: e21952d57e8ef23caa266d6862e7367ec3bd3814
Workflow ref: main
Requested jobs: hermes-inference-switch-e2e,openclaw-inference-switch-e2e
Summary: 2 passed, 0 failed, 0 skipped

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

@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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
test/e2e/lib/anthropic-switch-provider.sh (1)

170-172: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Error message references wrong variable name.

The error message mentions NEMOCLAW_SWITCH_ENDPOINT_URL but the code checks SWITCH_ENDPOINT_URL. This mismatch could confuse developers debugging test failures.

Suggested fix
   if [ -z "${SWITCH_ENDPOINT_URL:-}" ]; then
-    fail "NEMOCLAW_SWITCH_ENDPOINT_URL is required for compatible Anthropic inference switches"
+    fail "SWITCH_ENDPOINT_URL is required for compatible Anthropic inference switches"
     return 1
   fi
🤖 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/lib/anthropic-switch-provider.sh` around lines 170 - 172, The error
message refers to the wrong environment variable name; update the fail call that
currently mentions NEMOCLAW_SWITCH_ENDPOINT_URL to reference SWITCH_ENDPOINT_URL
(or make both check and message use the canonical env var you intend) so the
message matches the condition checking the SWITCH_ENDPOINT_URL variable in the
script.
🤖 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.

Outside diff comments:
In `@test/e2e/lib/anthropic-switch-provider.sh`:
- Around line 170-172: The error message refers to the wrong environment
variable name; update the fail call that currently mentions
NEMOCLAW_SWITCH_ENDPOINT_URL to reference SWITCH_ENDPOINT_URL (or make both
check and message use the canonical env var you intend) so the message matches
the condition checking the SWITCH_ENDPOINT_URL variable in the script.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 735dcc8e-33a1-462d-b54d-a12f8e4cafc0

📥 Commits

Reviewing files that changed from the base of the PR and between e21952d and 5c09efe.

📒 Files selected for processing (5)
  • .github/workflows/nightly-e2e.yaml
  • src/lib/actions/inference-route-api.test.ts
  • src/lib/actions/inference-route-api.ts
  • src/lib/actions/inference-set.ts
  • test/e2e/lib/anthropic-switch-provider.sh
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/nightly-e2e.yaml

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 27023295295
Target ref: 5c09efefe6e30e2fe3708dfa3b864d3cd3ece95a
Workflow ref: fix/inference-set-anthropic-managed-route
Requested jobs: bedrock-runtime-compatible-anthropic-e2e,inference-routing-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ✅ success
inference-routing-e2e ✅ success

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 27023413644
Target ref: 5c09efefe6e30e2fe3708dfa3b864d3cd3ece95a
Workflow ref: main
Requested jobs: hermes-inference-switch-e2e,openclaw-inference-switch-e2e
Summary: 2 passed, 0 failed, 0 skipped

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

@cv cv merged commit b88f65a into main Jun 5, 2026
102 checks passed
@cv cv deleted the fix/inference-set-anthropic-managed-route branch June 5, 2026 16:00
@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 27041002798
Target ref: 5c09efefe6e30e2fe3708dfa3b864d3cd3ece95a
Workflow ref: main
Requested jobs: hermes-anthropic-inference-switch-e2e,openclaw-anthropic-inference-switch-e2e,hermes-e2e
Summary: 3 passed, 0 failed, 0 skipped

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

miyoungc added a commit that referenced this pull request Jun 6, 2026
## Summary
- Adds the `v0.0.60` section to `docs/about/release-notes.mdx` using the
dev announcement from discussion #4877.
- Fills the source-doc gaps found during release-prep review across
inference, policy tiers, command behavior, security boundaries, Hermes
dashboard/tooling, runtime context, and troubleshooting.
- Refreshes generated agent skills under `.agents/skills/` from the
current Fern docs output and upgrades Fern from `5.44.3` to `5.45.0`.

## Source summary
- #4037 -> `docs/reference/architecture.mdx`,
`docs/about/how-it-works.mdx`, `docs/about/release-notes.mdx`: Documents
system-only runtime context that stays out of visible chat.
- #4875 -> `docs/reference/architecture.mdx`,
`docs/about/how-it-works.mdx`, `docs/about/release-notes.mdx`: Documents
try-first sandbox network/filesystem guidance and clearer failure
classification.
- #4788 -> `docs/security/best-practices.mdx`,
`docs/about/release-notes.mdx`: Documents shared OpenClaw
device-approval policy for startup and connect.
- #4768 -> `docs/reference/network-policies.mdx`,
`docs/network-policy/integration-policy-examples.mdx`,
`docs/get-started/quickstart.mdx`,
`docs/get-started/quickstart-hermes.mdx`, `docs/reference/commands.mdx`:
Documents `weather`, `public-reference`, and Hermes managed-tool gateway
preset behavior.
- #3788 and #4864 -> `docs/reference/network-policies.mdx`,
`docs/reference/commands.mdx`: Documents non-interactive policy-tier
fail-fast behavior and interactive prompt fallback.
- #4756 and #4866 -> `docs/reference/commands.mdx`: Documents env-aware
default sandbox resolution for `list`, `status`, and `tunnel` commands.
- #4320 -> `docs/reference/commands.mdx`: Documents `$$nemoclaw tunnel
status` behavior.
- #4328 -> `docs/reference/commands.mdx`: Documents line-scoped policy
preset descriptions in `policy-list`.
- #4580 and #4748 -> `docs/reference/architecture.mdx`: Documents
package-managed OpenShell gateway service and Docker-driver
gateway-marker behavior.
- #4598 -> `docs/manage-sandboxes/lifecycle.mdx`: Documents concurrent
gateway/dashboard cleanup isolation by sandbox name and port.
- #4777 -> `docs/reference/troubleshooting.mdx`: Documents Docker GPU
patch rollback behavior.
- #4610 -> `docs/reference/troubleshooting.mdx`,
`docs/reference/commands.mdx`: Keeps mutable OpenClaw config permission
guidance aligned and removes skipped experimental wording.
- #4868 -> `docs/reference/commands.mdx`: Keeps `.dockerignore` handling
for custom `onboard --from <Dockerfile>` contexts in generated skills.
- #4870 -> `docs/reference/commands.mdx`,
`docs/manage-sandboxes/runtime-controls.mdx`: Documents
`NEMOCLAW_MINIMAL_BOOTSTRAP` and generated skill coverage.
- #4641 -> `docs/inference/inference-options.mdx`,
`docs/reference/troubleshooting.mdx`: Documents local NVIDIA NIM
platform-digest pulls and served-model id adoption.
- #4810 and #4867 -> `docs/inference/inference-options.mdx`: Documents
stable NGC managed-vLLM image lineage and DGX Station DeepSeek V4 Flash
coverage.
- #4852 -> `docs/inference/use-local-inference.mdx`,
`docs/reference/troubleshooting.mdx`: Documents Ollama model fit
filtering, 16K context floor, cold-load retry, and failed-model
exclusion.
- #4847 -> `docs/inference/switch-inference-providers.mdx`: Documents
API-family sync, Hermes `api_mode`, and Bedrock Runtime exception.
- #4800 -> `docs/inference/tool-calling-reliability.mdx`: Documents
Nemotron managed-inference native tool-search fallback.
- #4333 -> `docs/inference/switch-inference-providers.mdx`: Documents
interactive multimodal input prompting.
- #4086 -> `docs/reference/troubleshooting.mdx`: Keeps proxy bypass
normalization in generated troubleshooting coverage.
- #4811 and #4855 -> `docs/get-started/quickstart-hermes.mdx`: Documents
prebuilt Hermes dashboard assets and TUI recovery without runtime
rebuilds.
- #4854 -> `docs/inference/switch-inference-providers.mdx`,
`docs/reference/commands.mdx`: Documents Hermes proxy API-key
placeholder preservation during inference switches.
- #4248 -> `docs/manage-sandboxes/messaging-channels.mdx`,
`.agents/skills/`: Keeps messaging enrollment behavior aligned with
manifest-hook implementation.
- #4771 -> `docs/security/best-practices.mdx`,
`docs/security/credential-storage.mdx`: Documents Hermes
placeholder-only secret boundary for sandbox-visible runtime files.
- #4787 -> `docs/security/best-practices.mdx`,
`docs/about/release-notes.mdx`: Documents expanded memory scanner
examples for OpenAI project keys and Slack app-level tokens.
- #4848 -> `docs/reference/commands.mdx`: Documents OpenClaw skill
install mirroring into the agent home directory.
- #4790 -> `docs/about/release-notes.mdx`: Uses the prior release-prep
structure and generated `.agents/skills/` refresh as the template for
this release.

## Verification
- `python3 scripts/docs-to-skills.py docs/ .agents/skills/ --prefix
nemoclaw-user --doc-platform fern-mdx`
- `python3 scripts/docs-to-skills.py docs/ .agents/skills/ skills/
--prefix nemoclaw-user --doc-platform fern-mdx --dry-run`
- `npm run docs`
- `git diff --check`
- skip-term scan across `docs/`, `.agents/skills/`, and `skills/`
- `npm run build:cli`
- `npm run typecheck:cli`
- Commit and pre-push hook suites, including markdownlint, gitleaks,
env-var docs gate, docs-to-skills verification, and skills YAML tests

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

## Summary by CodeRabbit

## Release Notes

* **New Features**
* DeepSeek-V4-Flash now available as default inference model for DGX
Station.
* Hermes dashboard improved with dedicated port and OAuth-authenticated
tool gateway selection.
* Added weather and public-reference policy presets for expanded agent
capabilities.
* Enhanced Ollama model selection with GPU memory filtering and
automatic retry for timeouts.

* **Bug Fixes**
  * Improved policy tier validation to prevent invalid configurations.
* Better sandbox cleanup scoping by port to prevent conflicts across
deployments.
  * Added GPU patch failure recovery with automatic rollback.

* **Documentation**
* Expanded troubleshooting guides for inference, security, and sandbox
lifecycle.
  * Added .dockerignore best practices for custom deployments.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: e2e End-to-end tests, nightly failures, or validation infrastructure area: inference Inference routing, serving, model selection, or outputs bug-fix PR fixes a bug or regression integration: hermes Hermes integration behavior integration: openclaw OpenClaw integration behavior NV QA Bugs found by the NVIDIA QA Team platform: macos Affects macOS, including Apple Silicon platform: ubuntu Affects Ubuntu Linux environments provider: anthropic Anthropic or Claude provider behavior UAT Issues flagged for User Acceptance Testing. v0.0.60 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants