Skip to content

fix(sessions): route sessions passthrough at the sandbox's own agent binary - #6249

Merged
ericksoa merged 5 commits into
mainfrom
fix/hermes-sessions-passthrough-6247
Jul 7, 2026
Merged

fix(sessions): route sessions passthrough at the sandbox's own agent binary#6249
ericksoa merged 5 commits into
mainfrom
fix/hermes-sessions-passthrough-6247

Conversation

@yanyunl1991

@yanyunl1991 yanyunl1991 commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Summary

nemohermes <sandbox> sessions failed with openclaw: command not found because the host-side passthrough always selected the openclaw binary, while Hermes sandboxes install hermes instead.
This change selects the in-sandbox binary from the sandbox's recorded agent, maps bare Hermes sessions to hermes sessions list, preserves OpenClaw behavior, and documents both command surfaces.

Related Issue

Closes #6247.

Changes

  • Resolve the sandbox agent from the host-owned registry before constructing the sessions command.
  • Route bare Hermes sessions to hermes sessions list and explicit sessions list flags to the same argv path.
  • Keep OpenClaw's existing openclaw sessions routing and warm-up-session filtering unchanged.
  • Stream Hermes output through execSandbox without applying OpenClaw-specific filtering.
  • Update CLI help, public command display, and generated command references for OpenClaw and Hermes.
  • Add regression coverage for Hermes, OpenClaw, missing-agent, unknown-agent, and help-text behavior.
  • Merge current main (bd38b389af7aa68a767a88058bf849cc83d8486d) without rewriting contributor history.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • 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: Maintainer approval; the current-main refresh at ab547b61b525a5189ee5243f60a01304c151bd97 was re-audited against execSandbox and its protected runtime-env wrapper. The host-owned registry selects only the fixed hermes or openclaw binary, forwarded flags remain discrete argv elements, and the wrapper preserves them through exec -- "$@" after removing OPENCLAW_GATEWAY_TOKEN from the child environment.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Verification

  • PR description includes the DCO sign-off declaration and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run check:diff passed when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — npx vitest run src/lib/actions/sandbox/sessions (109/109); npx vitest run src/lib/actions/sandbox/sessions/passthrough.test.ts src/lib/actions/sandbox/runtime-env.test.ts src/lib/actions/sandbox/exec.multiline-guard.test.ts (46/46); npm run typecheck:cli (passed)
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result:
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

npm run docs passed with zero errors and the two pre-existing Fern warnings.
npm run check:diff passed at ab547b61b525a5189ee5243f60a01304c151bd97, including commitlint, CLI typecheck, gitleaks, formatting, lint, repository checks, and the test-file budget.

Reproduction and root cause

Reporter's environment:

  • OS: Debian GNU/Linux 13 (trixie).
  • Architecture: x86_64.
  • Docker: 26.1.5+dfsg1.
  • NemoClaw: v0.0.71.
  • Sandbox agent: Hermes.

The reported command failed before Hermes ran:

$ nemohermes hermes sessions
/bin/bash: line 1: openclaw: command not found

The reporter's trace showed the incorrect argv:

execve("/home/code/.local/bin/openshell",
  ["/home/code/.local/bin/openshell", "sandbox", "exec",
   "--name", "hermes", "--", "openclaw", "sessions"], ...)

Every non-help sessions entry point funnels through runSessionsPassthrough, which previously constructed ["openclaw", "sessions"] unconditionally.
Hermes images instead pin /usr/local/bin/hermes in agents/hermes/manifest.yaml and do not install an openclaw shim.

The corrected routing produces these commands:

nemohermes hermes sessions
  -> hermes sessions list

nemohermes hermes sessions list --limit 5
  -> hermes sessions list --limit 5

The current main runtime-env wrapper does not flatten or shell-interpolate these values: it appends the original command as positional argv and executes it with exec -- "$@".
The exact passthrough tests cover both Hermes commands, while the current-main runtime-env and real execSandbox boundary tests cover argv preservation through that wrapper, so no duplicate test-only production seam was added during the refresh.

AI Disclosure

  • AI-assisted — tools: Claude Code and Codex.

Signed-off-by: Yanyun Liao yanyunl@nvidia.com

Summary by CodeRabbit

  • New Features
    • Sandbox session passthrough is now agent-aware: Hermes runs hermes sessions list (and defaults to list), while OpenClaw uses its in-sandbox binary.
  • Bug Fixes
    • Warm-up session filtering/capture is now applied only for OpenClaw sandboxes; non-OpenClaw agents skip it.
    • Missing or unknown sandbox agent values now reliably fall back to OpenClaw routing.
  • Documentation
    • Updated CLI help and command reference/docs for Hermes vs OpenClaw, including sessions and sessions list semantics.
  • Tests
    • Added routing and help-text coverage using a resettable sandbox registry mock.

…binary

`nemoclaw <name> sessions [list]` and its `nemohermes hermes sessions`
alias hardcoded `openclaw sessions` as the in-sandbox command. Hermes
sandboxes ship the `hermes` binary at `/usr/local/bin/hermes` and do
not carry `openclaw`, so `openshell sandbox exec --name <hermes> --
openclaw sessions` fails with `openclaw: command not found` before the
Hermes agent's sessions surface can respond.

Look up the sandbox's agent via `registry.getSandbox(name)` and pick
`hermes` when the agent is `hermes`, keeping `openclaw` as the default.
The OpenClaw-specific warm-up filter (a NemoClaw onboard artifact) is
now gated on the OpenClaw binary path; Hermes sandboxes go straight
through `execSandbox` so their native output is preserved verbatim.

Fixes #6247

Signed-off-by: Yanyun Liao <yanyunl@nvidia.com>
@github-code-quality

github-code-quality Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the fix/hermes-sessions-... branch is 96%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main fix/hermes-sessions-... ab547b6 +/-
nemoclaw/src/se...cret-scanner.ts 100%
nemoclaw/src/commands/slash.ts 100%
nemoclaw/src/li...bprocess-env.ts 100%
nemoclaw/src/bl...eprint/state.ts 98%
nemoclaw/src/onboard/config.ts 98%
nemoclaw/src/bl...int/snapshot.ts 97%
nemoclaw/src/bl...print/runner.ts 95%
nemoclaw/src/co...ration-state.ts 94%
nemoclaw/src/bl...ate-networks.ts 94%
nemoclaw/src/index.ts 94%

TypeScript / code-coverage/cli

The overall coverage in the fix/hermes-sessions-... branch is 73%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main fix/hermes-sessions-... ab547b6 +/-
src/lib/shields...nsition-lock.ts 85%
src/lib/onboard/preflight.ts 83%
src/lib/actions...all/run-plan.ts 81%
src/lib/state/o...oard-session.ts 81%
src/lib/actions...licy-channel.ts 79%
src/lib/state/sandbox.ts 75%
src/lib/onboard...er-gpu-patch.ts 69%
src/lib/shields/index.ts 68%
src/lib/policy/index.ts 66%
src/lib/onboard.ts 28%

Updated July 07, 2026 03:04 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

runSessionsPassthrough now reads the sandbox agent to choose hermes or openclaw, applies warm-up filtering only for OpenClaw, and updates command help, reference docs, and tests to match the new routing behavior.

Changes

Sessions passthrough agent routing

Layer / File(s) Summary
Agent-aware command routing
src/lib/actions/sandbox/sessions/passthrough.ts
Reads the sandbox agent from the registry, selects the in-sandbox sessions binary accordingly, and limits warm-up filtering to OpenClaw.
Help text and reference updates
src/commands/sandbox/sessions.ts, src/commands/sandbox/sessions/list.ts, src/lib/cli/public-display-sessions.ts, docs/reference/commands.mdx, docs/reference/commands-nemohermes.mdx
Rewords command metadata and reference docs to describe generic sessions passthrough behavior, Hermes output handling, and OpenClaw-specific warm-up filtering.
Registry mock and routing tests
src/lib/actions/sandbox/sessions/passthrough.test.ts
Adds registry-backed sandbox mocking, resets the mock per test, and verifies help text plus Hermes, OpenClaw, and fallback routing paths.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested labels: chore

Suggested reviewers: ericksoa, cjagwani, jyaunches

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: sessions passthrough now routes through the sandbox's agent binary.
✨ 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/hermes-sessions-passthrough-6247

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

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor (Nemotron Ultra) — Changes requested

Merge posture: Do not merge yet
Primary next action: Fix PRA-2: argv injection tests missing for Hermes passthrough path; then add or justify PRA-T1.
Open items: 3 required · 4 warnings · 2 suggestions · 8 test follow-ups
Since last review: 1 prior item resolved · 4 still apply · 2 new items found

Action checklist

  • PRA-2 Fix: argv injection tests missing for Hermes passthrough path in src/lib/actions/sandbox/sessions/passthrough.test.ts:1
  • PRA-3 Fix: Trust boundary comment incomplete - missing regression test and removal condition in src/lib/actions/sandbox/sessions/passthrough.ts:137
  • PRA-4 Fix: Test file growth exceeds 20-line monolith threshold in src/lib/actions/sandbox/sessions/passthrough.test.ts:1
  • PRA-1 Resolve or justify: Source-of-truth review needed: src/lib/actions/sandbox/sessions/passthrough.ts:137-142 (trust boundary comment for registry.getSandbox() agent routing)
  • PRA-5 Resolve or justify: Safe-default agent logic could be more explicit and extensible in src/lib/actions/sandbox/sessions/passthrough.ts:145
  • PRA-6 Resolve or justify: PR description references issue nemohermes hermes sessions - openclaw command not found #6247 but file header doesn't in src/lib/actions/sandbox/sessions/passthrough.ts:13
  • PRA-7 Resolve or justify: Overlapping PR fix(openclaw): recover cli pairing for agent turns #6196 modifies same files - potential merge conflict in Multiple files:1
  • PRA-T1 Add or justify test follow-up: Runtime validation
  • PRA-T2 Add or justify test follow-up: Runtime validation
  • PRA-T3 Add or justify test follow-up: Runtime validation
  • PRA-T4 Add or justify test follow-up: Runtime validation
  • PRA-T5 Add or justify test follow-up: Runtime validation
  • PRA-T6 Add or justify test follow-up: Test file growth exceeds 20-line monolith threshold
  • PRA-T7 Add or justify test follow-up: Extract Hermes routing tests to dedicated test file
  • PRA-T8 Add or justify test follow-up: src/lib/actions/sandbox/sessions/passthrough.ts:137-142 (trust boundary comment for registry.getSandbox() agent routing)
  • PRA-8 In-scope improvement: Simplify agent routing with explicit known-agents Set in src/lib/actions/sandbox/sessions/passthrough.ts:145
  • PRA-9 In-scope improvement: Extract Hermes routing tests to dedicated test file in src/lib/actions/sandbox/sessions/passthrough.test.ts:1

Findings index

ID Severity Category Location Required action
PRA-1 Resolve/justify architecture Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
PRA-2 Required security src/lib/actions/sandbox/sessions/passthrough.test.ts:1 Add two unit tests in passthrough.test.ts: (1) 'hermes passthrough rejects multiline argv in extraArgs' — pass extraArgs containing \n, verify exit code 2 from multiline guard; (2) 'hermes passthrough passes shell metacharacters as literal argv' — pass extraArgs containing ;, `, $(), verify they reach execSandbox unchanged.
PRA-3 Required architecture src/lib/actions/sandbox/sessions/passthrough.ts:137 Extend the trust boundary comment or add an adjacent architecture note documenting all five source-of-truth elements, particularly the regression test and removal condition.
PRA-4 Required tests src/lib/actions/sandbox/sessions/passthrough.test.ts:1 Extract Hermes routing tests to src/lib/actions/sandbox/sessions/passthrough.hermes.test.ts (preferred for maintainability) or add a comment at the top of the Hermes describe block explaining the growth is justified new coverage for #6247 and monitor for further growth.
PRA-5 Resolve/justify correctness src/lib/actions/sandbox/sessions/passthrough.ts:145 Use an explicit known-agents set: `const knownAgents = new Set(["hermes"]); const inSandboxBinary = knownAgents.has(sandboxAgent) ? sandboxAgent : "openclaw";` Add comment: "Unknown agent values (including null/undefined) default to openclaw for safe warm-up filtering." This makes the fallback explicit and future agent additions require only updating the set.
PRA-6 Resolve/justify docs src/lib/actions/sandbox/sessions/passthrough.ts:13 Add a brief inline comment near the agent routing logic (or a header comment) referencing #6247. The trust boundary comment at line 137 partially covers this but a header reference would be more discoverable.
PRA-7 Resolve/justify workflow Multiple files:1 Coordinate with #6196 author to resolve conflicts before either merges. Review #6196 changes to ensure session routing logic changes are compatible.
PRA-8 Improvement architecture src/lib/actions/sandbox/sessions/passthrough.ts:145 Apply simplification in current PR: `const knownAgents = new Set(["hermes"]); const inSandboxBinary = knownAgents.has(sandboxAgent) ? sandboxAgent : "openclaw";` with comment about safe default for unknown/null/undefined.
PRA-9 Improvement tests src/lib/actions/sandbox/sessions/passthrough.test.ts:1 Create src/lib/actions/sandbox/sessions/passthrough.hermes.test.ts and move tests: 'routes the bare command to hermes sessions list and skips warm-up filtering', 'uses openclaw binary for openclaw-agent sandboxes', 'routes hermes sessions list with forwarded flags via execSandbox', 'defaults to the openclaw binary + filter path when the registry has no entry', 'defaults to the openclaw binary for an unknown agent value', plus the two help text tests if they are Hermes-specific. Add a comment in passthrough.test.ts linking to the extracted file.

🚨 Required before merge

Address these before merging unless a maintainer explicitly overrides the advisor with rationale.

PRA-2 Required — argv injection tests missing for Hermes passthrough path

  • Location: src/lib/actions/sandbox/sessions/passthrough.test.ts:1
  • Category: security
  • Problem: The Hermes sessions passthrough routes user-controlled extraArgs to execSandbox (passthrough.ts:140). The multiline guard in exec.ts (findMultilineExecArg) rejects \r/\n but allows ;, `, $() as literal argv — correct since OpenShell passes argv directly without shell interpolation. However, no tests in passthrough.test.ts verify this guard covers the Hermes sessions passthrough code path.
  • Impact: If argv injection were possible via multiline arguments, a malicious user could inject newlines into extraArgs to execute arbitrary commands inside the Hermes sandbox. The multiline guard exists but is untested for this new code path.
  • Required action: Add two unit tests in passthrough.test.ts: (1) 'hermes passthrough rejects multiline argv in extraArgs' — pass extraArgs containing \n, verify exit code 2 from multiline guard; (2) 'hermes passthrough passes shell metacharacters as literal argv' — pass extraArgs containing ;, `, $(), verify they reach execSandbox unchanged.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Check exec.ts:309 for findMultilineExecArg call in execSandbox. Check passthrough.ts:140 calls execSandbox for Hermes path. Run existing exec.multiline-guard.test.ts to confirm guard behavior.
  • Missing regression test: Test 'hermes passthrough rejects multiline argv in extraArgs' and 'hermes passthrough passes shell metacharacters as literal argv' with extraArgs containing '\n', ';', '`', '$()'.
  • Done when: The required change is committed and verification passes: Check exec.ts:309 for findMultilineExecArg call in execSandbox. Check passthrough.ts:140 calls execSandbox for Hermes path. Run existing exec.multiline-guard.test.ts to confirm guard behavior.
  • Evidence: passthrough.ts:140 calls execSandbox with command array including extraArgs; exec.ts:309 has findMultilineExecArg guard; OpenShell sandbox exec validates argv per its contract. No tests in passthrough.test.ts exercise this for Hermes path.

PRA-3 Required — Trust boundary comment incomplete - missing regression test and removal condition

  • Location: src/lib/actions/sandbox/sessions/passthrough.ts:137
  • Category: architecture
  • Problem: The trust boundary comment at passthrough.ts:137-142 documents why registry.getSandbox() is trusted (user-owned config, CLI-only writers, sandbox cannot mutate). This is a localized workaround for the invalid state where a compromised sandbox could claim agent=hermes to bypass warm-up filtering. The comment covers elements (1) invalid state (implied), (2) source boundary (~/.nemoclaw/sandboxes.json), (3) source-fix constraint (sandbox processes have no host FS access). However, it does NOT document: (4) regression test = integration test where compromised sandbox attempts to write its own registry entry with agent=hermes and verify it fails, (5) removal condition = when registry moves to tamper-proof store or agent field becomes immutable or warm-up filtering eliminated upstream.
  • Impact: A localized workaround can preserve or hide an invalid state when the source boundary is unclear. Without explicit documentation of the regression test and removal condition, future changes may inadvertently weaken the trust model.
  • Required action: Extend the trust boundary comment or add an adjacent architecture note documenting all five source-of-truth elements, particularly the regression test and removal condition.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Inspect the trust boundary comment at passthrough.ts:137-142 and verify it addresses all five elements or links to an architecture note that does.
  • Missing regression test: Integration test: create sandbox with agent=hermes, verify sessions passthrough routes to hermes binary, confirm warm-up filtering skipped, verify compromised sandbox cannot modify its own agent field to bypass filtering.
  • Done when: The required change is committed and verification passes: Inspect the trust boundary comment at passthrough.ts:137-142 and verify it addresses all five elements or links to an architecture note that does.
  • Evidence: Comment at passthrough.ts:137-142 covers elements 1-3 but not 4-5. Prior review PRA-1 and PRA-4 flagged this.

PRA-4 Required — Test file growth exceeds 20-line monolith threshold

  • Location: src/lib/actions/sandbox/sessions/passthrough.test.ts:1
  • Category: tests
  • Problem: passthrough.test.ts grew by 101 lines (from 369 to 470 lines) with the addition of 6 new Hermes routing tests and 2 help text tests.
  • Impact: Monolith growth makes the test file harder to maintain, navigate, and review. The 20-line threshold triggers a required action per NemoClaw policy.
  • Required action: Extract Hermes routing tests to src/lib/actions/sandbox/sessions/passthrough.hermes.test.ts (preferred for maintainability) or add a comment at the top of the Hermes describe block explaining the growth is justified new coverage for nemohermes hermes sessions - openclaw command not found #6247 and monitor for further growth.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Check line count of passthrough.test.ts and whether Hermes tests are in a separate file or the growth is documented.
  • Missing regression test: N/A — test organization
  • Done when: The required change is committed and verification passes: Check line count of passthrough.test.ts and whether Hermes tests are in a separate file or the growth is documented.
  • Evidence: Drift context shows baseLines: 369, headLines: 470, delta: 101, severity: blocker. 6 new tests added for nemohermes hermes sessions - openclaw command not found #6247.
Review findings by urgency: 3 required fixes, 4 items to resolve/justify, 2 in-scope improvements

⚠️ Resolve or justify before merge

Investigate these in the current review; either fix them, explain why they are not applicable, or document the accepted risk.

PRA-1 Resolve/justify — Source-of-truth review needed: src/lib/actions/sandbox/sessions/passthrough.ts:137-142 (trust boundary comment for registry.getSandbox() agent routing)

  • Location: not file-specific
  • Category: architecture
  • Problem: The advisor marked localized patch analysis as needs_followup.
  • Impact: A localized workaround can preserve or hide an invalid state when the source boundary is unclear.
  • Recommended action: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Missing regression test: MISSING — Integration test where compromised sandbox attempts to write its own registry entry with agent=hermes and verify it fails (sandbox cannot access host FS to modify ~/.nemoclaw/sandboxes.json)
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Evidence: Comment at passthrough.ts:137-142 covers elements 1-3 but not 4-5. Prior review PRA-1 and PRA-4 flagged this.

PRA-5 Resolve/justify — Safe-default agent logic could be more explicit and extensible

  • Location: src/lib/actions/sandbox/sessions/passthrough.ts:145
  • Category: correctness
  • Problem: The agent routing logic uses a ternary: `const inSandboxBinary = sandboxAgent === "hermes" ? "hermes" : "openclaw";`. This works but is not explicit about the set of known agents or the safe-default rationale.
  • Impact: Future agent additions require modifying the ternary logic rather than updating a single known-agents set. The fallback to openclaw for unknown/null/undefined values is implicit.
  • Recommended action: Use an explicit known-agents set: `const knownAgents = new Set(["hermes"]); const inSandboxBinary = knownAgents.has(sandboxAgent) ? sandboxAgent : "openclaw";` Add comment: "Unknown agent values (including null/undefined) default to openclaw for safe warm-up filtering." This makes the fallback explicit and future agent additions require only updating the set.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read passthrough.ts:145 and verify the routing logic uses a Set with a clear comment about safe default.
  • Missing regression test: N/A — code clarity improvement
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read passthrough.ts:145 and verify the routing logic uses a Set with a clear comment about safe default.
  • Evidence: Current code at passthrough.ts:145 uses ternary. Prior review PRA-6 suggested this improvement.

PRA-6 Resolve/justify — PR description references issue #6247 but file header doesn't

  • Location: src/lib/actions/sandbox/sessions/passthrough.ts:13
  • Category: docs
  • Problem: The PR description and commits reference issue nemohermes hermes sessions - openclaw command not found #6247, but the file header comment at line 13 of passthrough.ts does not link to the issue for maintainability.
  • Impact: Future maintainers may not easily trace the agent routing change back to the original bug report.
  • Recommended action: Add a brief inline comment near the agent routing logic (or a header comment) referencing nemohermes hermes sessions - openclaw command not found #6247. The trust boundary comment at line 137 partially covers this but a header reference would be more discoverable.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Check passthrough.ts header (lines 1-20) for a reference to nemohermes hermes sessions - openclaw command not found #6247.
  • Missing regression test: N/A — documentation
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Check passthrough.ts header (lines 1-20) for a reference to nemohermes hermes sessions - openclaw command not found #6247.
  • Evidence: File header at passthrough.ts:13 shows SPDX only. Prior review PRA-7 suggested this improvement.

PRA-7 Resolve/justify — Overlapping PR #6196 modifies same files - potential merge conflict

💡 In-scope improvements

These are lower-risk, not throwaway. Prefer fixing them in this PR when they are local to changed code; defer only with rationale or a linked follow-up.

PRA-8 Improvement — Simplify agent routing with explicit known-agents Set

  • Location: src/lib/actions/sandbox/sessions/passthrough.ts:145
  • Category: architecture
  • Problem: Replace ternary with Set-based lookup for clarity and extensibility.
  • Impact: Makes fallback explicit and future-proof; no behavioral change.
  • Suggested action: Apply simplification in current PR: `const knownAgents = new Set(["hermes"]); const inSandboxBinary = knownAgents.has(sandboxAgent) ? sandboxAgent : "openclaw";` with comment about safe default for unknown/null/undefined.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Read passthrough.ts:145 after change — should use Set and have explanatory comment.
  • Missing regression test: N/A — simplification
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: Current ternary at line 145. Simplification signal from validation context.

PRA-9 Improvement — Extract Hermes routing tests to dedicated test file

  • Location: src/lib/actions/sandbox/sessions/passthrough.test.ts:1
  • Category: tests
  • Problem: Move the 6 Hermes-specific tests from passthrough.test.ts to passthrough.hermes.test.ts to keep the main test file focused and avoid monolith growth.
  • Impact: Improves maintainability and test organization; no behavioral change.
  • Suggested action: Create src/lib/actions/sandbox/sessions/passthrough.hermes.test.ts and move tests: 'routes the bare command to hermes sessions list and skips warm-up filtering', 'uses openclaw binary for openclaw-agent sandboxes', 'routes hermes sessions list with forwarded flags via execSandbox', 'defaults to the openclaw binary + filter path when the registry has no entry', 'defaults to the openclaw binary for an unknown agent value', plus the two help text tests if they are Hermes-specific. Add a comment in passthrough.test.ts linking to the extracted file.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Check that passthrough.test.ts line count returns to near-base and passthrough.hermes.test.ts exists with the moved tests.
  • Missing regression test: N/A — test organization
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: Test file grew 101 lines. Simplification signal from validation context suggests test_over_scaffold for mock framework.
Simplification opportunities: 2 possible cuts

These are safe simplification checks only. Do not remove validation, security controls, data-loss prevention, or required tests.

  • PRA-8 shrink (src/lib/actions/sandbox/sessions/passthrough.ts:145): const inSandboxBinary = sandboxAgent === "hermes" ? "hermes" : "openclaw";
    • Replacement: const knownAgents = new Set(["hermes"]); const inSandboxBinary = knownAgents.has(sandboxAgent) ? sandboxAgent : "openclaw"; // Unknown agent values (including null/undefined) default to openclaw for safe warm-up filtering.
    • Net: 1 lines
    • Safety boundary: Must preserve: (1) hermes routes to hermes binary, (2) openclaw and null/undefined/unknown route to openclaw binary with warm-up filter.
  • PRA-9 shrink (src/lib/actions/sandbox/sessions/passthrough.test.ts:1): 6 Hermes routing tests + 2 help text tests from passthrough.test.ts (~80 lines)
    • Replacement: New file passthrough.hermes.test.ts with extracted tests; passthrough.test.ts retains OpenClaw-specific tests only.
    • Net: 0 lines
    • Safety boundary: All 8 tests must continue to pass; no test coverage lost.
Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

  • PRA-T1 Runtime validation — Integration test: create OpenClaw sandbox, run sessions list, verify warm-up filtering works and output matches expected filtered format. CLI/sandbox/infrastructure paths need behavioral runtime validation. Unit tests mock registry.getSandbox, captureOpenshell, execSandbox, and ensureLiveSandboxOrExit — these verify routing logic but not end-to-end sandbox exec behavior. Runtime validation would exercise the actual openshell sandbox exec path with both OpenClaw and Hermes sandboxes.
  • PRA-T2 Runtime validation — Integration test: create Hermes sandbox, run sessions list, verify output is native Hermes format without filtering. CLI/sandbox/infrastructure paths need behavioral runtime validation. Unit tests mock registry.getSandbox, captureOpenshell, execSandbox, and ensureLiveSandboxOrExit — these verify routing logic but not end-to-end sandbox exec behavior. Runtime validation would exercise the actual openshell sandbox exec path with both OpenClaw and Hermes sandboxes.
  • PRA-T3 Runtime validation — Integration test: pass --limit, --source flags to Hermes sandbox sessions list, verify flags forwarded correctly. CLI/sandbox/infrastructure paths need behavioral runtime validation. Unit tests mock registry.getSandbox, captureOpenshell, execSandbox, and ensureLiveSandboxOrExit — these verify routing logic but not end-to-end sandbox exec behavior. Runtime validation would exercise the actual openshell sandbox exec path with both OpenClaw and Hermes sandboxes.
  • PRA-T4 Runtime validation — Integration test: pass --json, --agent flags to OpenClaw sandbox sessions list, verify flags forwarded and filtering works. CLI/sandbox/infrastructure paths need behavioral runtime validation. Unit tests mock registry.getSandbox, captureOpenshell, execSandbox, and ensureLiveSandboxOrExit — these verify routing logic but not end-to-end sandbox exec behavior. Runtime validation would exercise the actual openshell sandbox exec path with both OpenClaw and Hermes sandboxes.
  • PRA-T5 Runtime validation — Integration test: verify compromised sandbox cannot modify its own agent field in registry (source-of-truth regression test). CLI/sandbox/infrastructure paths need behavioral runtime validation. Unit tests mock registry.getSandbox, captureOpenshell, execSandbox, and ensureLiveSandboxOrExit — these verify routing logic but not end-to-end sandbox exec behavior. Runtime validation would exercise the actual openshell sandbox exec path with both OpenClaw and Hermes sandboxes.
  • PRA-T6 Test file growth exceeds 20-line monolith threshold — Extract Hermes routing tests to src/lib/actions/sandbox/sessions/passthrough.hermes.test.ts (preferred for maintainability) or add a comment at the top of the Hermes describe block explaining the growth is justified new coverage for nemohermes hermes sessions - openclaw command not found #6247 and monitor for further growth.
  • PRA-T7 Extract Hermes routing tests to dedicated test file — Create src/lib/actions/sandbox/sessions/passthrough.hermes.test.ts and move tests: 'routes the bare command to hermes sessions list and skips warm-up filtering', 'uses openclaw binary for openclaw-agent sandboxes', 'routes hermes sessions list with forwarded flags via execSandbox', 'defaults to the openclaw binary + filter path when the registry has no entry', 'defaults to the openclaw binary for an unknown agent value', plus the two help text tests if they are Hermes-specific. Add a comment in passthrough.test.ts linking to the extracted file.
  • PRA-T8 src/lib/actions/sandbox/sessions/passthrough.ts:137-142 (trust boundary comment for registry.getSandbox() agent routing) — MISSING — Integration test where compromised sandbox attempts to write its own registry entry with agent=hermes and verify it fails (sandbox cannot access host FS to modify ~/.nemoclaw/sandboxes.json). Comment at passthrough.ts:137-142 covers elements 1-3 but not 4-5. Prior review PRA-1 and PRA-4 flagged this.
Since last review details

Current findings, using the urgency labels above:

PRA-1 Resolve/justify — Source-of-truth review needed: src/lib/actions/sandbox/sessions/passthrough.ts:137-142 (trust boundary comment for registry.getSandbox() agent routing)

  • Location: not file-specific
  • Category: architecture
  • Problem: The advisor marked localized patch analysis as needs_followup.
  • Impact: A localized workaround can preserve or hide an invalid state when the source boundary is unclear.
  • Recommended action: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Missing regression test: MISSING — Integration test where compromised sandbox attempts to write its own registry entry with agent=hermes and verify it fails (sandbox cannot access host FS to modify ~/.nemoclaw/sandboxes.json)
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Evidence: Comment at passthrough.ts:137-142 covers elements 1-3 but not 4-5. Prior review PRA-1 and PRA-4 flagged this.

PRA-2 Required — argv injection tests missing for Hermes passthrough path

  • Location: src/lib/actions/sandbox/sessions/passthrough.test.ts:1
  • Category: security
  • Problem: The Hermes sessions passthrough routes user-controlled extraArgs to execSandbox (passthrough.ts:140). The multiline guard in exec.ts (findMultilineExecArg) rejects \r/\n but allows ;, `, $() as literal argv — correct since OpenShell passes argv directly without shell interpolation. However, no tests in passthrough.test.ts verify this guard covers the Hermes sessions passthrough code path.
  • Impact: If argv injection were possible via multiline arguments, a malicious user could inject newlines into extraArgs to execute arbitrary commands inside the Hermes sandbox. The multiline guard exists but is untested for this new code path.
  • Required action: Add two unit tests in passthrough.test.ts: (1) 'hermes passthrough rejects multiline argv in extraArgs' — pass extraArgs containing \n, verify exit code 2 from multiline guard; (2) 'hermes passthrough passes shell metacharacters as literal argv' — pass extraArgs containing ;, `, $(), verify they reach execSandbox unchanged.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Check exec.ts:309 for findMultilineExecArg call in execSandbox. Check passthrough.ts:140 calls execSandbox for Hermes path. Run existing exec.multiline-guard.test.ts to confirm guard behavior.
  • Missing regression test: Test 'hermes passthrough rejects multiline argv in extraArgs' and 'hermes passthrough passes shell metacharacters as literal argv' with extraArgs containing '\n', ';', '`', '$()'.
  • Done when: The required change is committed and verification passes: Check exec.ts:309 for findMultilineExecArg call in execSandbox. Check passthrough.ts:140 calls execSandbox for Hermes path. Run existing exec.multiline-guard.test.ts to confirm guard behavior.
  • Evidence: passthrough.ts:140 calls execSandbox with command array including extraArgs; exec.ts:309 has findMultilineExecArg guard; OpenShell sandbox exec validates argv per its contract. No tests in passthrough.test.ts exercise this for Hermes path.

PRA-3 Required — Trust boundary comment incomplete - missing regression test and removal condition

  • Location: src/lib/actions/sandbox/sessions/passthrough.ts:137
  • Category: architecture
  • Problem: The trust boundary comment at passthrough.ts:137-142 documents why registry.getSandbox() is trusted (user-owned config, CLI-only writers, sandbox cannot mutate). This is a localized workaround for the invalid state where a compromised sandbox could claim agent=hermes to bypass warm-up filtering. The comment covers elements (1) invalid state (implied), (2) source boundary (~/.nemoclaw/sandboxes.json), (3) source-fix constraint (sandbox processes have no host FS access). However, it does NOT document: (4) regression test = integration test where compromised sandbox attempts to write its own registry entry with agent=hermes and verify it fails, (5) removal condition = when registry moves to tamper-proof store or agent field becomes immutable or warm-up filtering eliminated upstream.
  • Impact: A localized workaround can preserve or hide an invalid state when the source boundary is unclear. Without explicit documentation of the regression test and removal condition, future changes may inadvertently weaken the trust model.
  • Required action: Extend the trust boundary comment or add an adjacent architecture note documenting all five source-of-truth elements, particularly the regression test and removal condition.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Inspect the trust boundary comment at passthrough.ts:137-142 and verify it addresses all five elements or links to an architecture note that does.
  • Missing regression test: Integration test: create sandbox with agent=hermes, verify sessions passthrough routes to hermes binary, confirm warm-up filtering skipped, verify compromised sandbox cannot modify its own agent field to bypass filtering.
  • Done when: The required change is committed and verification passes: Inspect the trust boundary comment at passthrough.ts:137-142 and verify it addresses all five elements or links to an architecture note that does.
  • Evidence: Comment at passthrough.ts:137-142 covers elements 1-3 but not 4-5. Prior review PRA-1 and PRA-4 flagged this.

PRA-4 Required — Test file growth exceeds 20-line monolith threshold

  • Location: src/lib/actions/sandbox/sessions/passthrough.test.ts:1
  • Category: tests
  • Problem: passthrough.test.ts grew by 101 lines (from 369 to 470 lines) with the addition of 6 new Hermes routing tests and 2 help text tests.
  • Impact: Monolith growth makes the test file harder to maintain, navigate, and review. The 20-line threshold triggers a required action per NemoClaw policy.
  • Required action: Extract Hermes routing tests to src/lib/actions/sandbox/sessions/passthrough.hermes.test.ts (preferred for maintainability) or add a comment at the top of the Hermes describe block explaining the growth is justified new coverage for nemohermes hermes sessions - openclaw command not found #6247 and monitor for further growth.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Check line count of passthrough.test.ts and whether Hermes tests are in a separate file or the growth is documented.
  • Missing regression test: N/A — test organization
  • Done when: The required change is committed and verification passes: Check line count of passthrough.test.ts and whether Hermes tests are in a separate file or the growth is documented.
  • Evidence: Drift context shows baseLines: 369, headLines: 470, delta: 101, severity: blocker. 6 new tests added for nemohermes hermes sessions - openclaw command not found #6247.

PRA-5 Resolve/justify — Safe-default agent logic could be more explicit and extensible

  • Location: src/lib/actions/sandbox/sessions/passthrough.ts:145
  • Category: correctness
  • Problem: The agent routing logic uses a ternary: `const inSandboxBinary = sandboxAgent === "hermes" ? "hermes" : "openclaw";`. This works but is not explicit about the set of known agents or the safe-default rationale.
  • Impact: Future agent additions require modifying the ternary logic rather than updating a single known-agents set. The fallback to openclaw for unknown/null/undefined values is implicit.
  • Recommended action: Use an explicit known-agents set: `const knownAgents = new Set(["hermes"]); const inSandboxBinary = knownAgents.has(sandboxAgent) ? sandboxAgent : "openclaw";` Add comment: "Unknown agent values (including null/undefined) default to openclaw for safe warm-up filtering." This makes the fallback explicit and future agent additions require only updating the set.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read passthrough.ts:145 and verify the routing logic uses a Set with a clear comment about safe default.
  • Missing regression test: N/A — code clarity improvement
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read passthrough.ts:145 and verify the routing logic uses a Set with a clear comment about safe default.
  • Evidence: Current code at passthrough.ts:145 uses ternary. Prior review PRA-6 suggested this improvement.

PRA-6 Resolve/justify — PR description references issue #6247 but file header doesn't

  • Location: src/lib/actions/sandbox/sessions/passthrough.ts:13
  • Category: docs
  • Problem: The PR description and commits reference issue nemohermes hermes sessions - openclaw command not found #6247, but the file header comment at line 13 of passthrough.ts does not link to the issue for maintainability.
  • Impact: Future maintainers may not easily trace the agent routing change back to the original bug report.
  • Recommended action: Add a brief inline comment near the agent routing logic (or a header comment) referencing nemohermes hermes sessions - openclaw command not found #6247. The trust boundary comment at line 137 partially covers this but a header reference would be more discoverable.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Check passthrough.ts header (lines 1-20) for a reference to nemohermes hermes sessions - openclaw command not found #6247.
  • Missing regression test: N/A — documentation
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Check passthrough.ts header (lines 1-20) for a reference to nemohermes hermes sessions - openclaw command not found #6247.
  • Evidence: File header at passthrough.ts:13 shows SPDX only. Prior review PRA-7 suggested this improvement.

PRA-7 Resolve/justify — Overlapping PR #6196 modifies same files - potential merge conflict

PRA-8 Improvement — Simplify agent routing with explicit known-agents Set

  • Location: src/lib/actions/sandbox/sessions/passthrough.ts:145
  • Category: architecture
  • Problem: Replace ternary with Set-based lookup for clarity and extensibility.
  • Impact: Makes fallback explicit and future-proof; no behavioral change.
  • Suggested action: Apply simplification in current PR: `const knownAgents = new Set(["hermes"]); const inSandboxBinary = knownAgents.has(sandboxAgent) ? sandboxAgent : "openclaw";` with comment about safe default for unknown/null/undefined.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Read passthrough.ts:145 after change — should use Set and have explanatory comment.
  • Missing regression test: N/A — simplification
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: Current ternary at line 145. Simplification signal from validation context.

PRA-9 Improvement — Extract Hermes routing tests to dedicated test file

  • Location: src/lib/actions/sandbox/sessions/passthrough.test.ts:1
  • Category: tests
  • Problem: Move the 6 Hermes-specific tests from passthrough.test.ts to passthrough.hermes.test.ts to keep the main test file focused and avoid monolith growth.
  • Impact: Improves maintainability and test organization; no behavioral change.
  • Suggested action: Create src/lib/actions/sandbox/sessions/passthrough.hermes.test.ts and move tests: 'routes the bare command to hermes sessions list and skips warm-up filtering', 'uses openclaw binary for openclaw-agent sandboxes', 'routes hermes sessions list with forwarded flags via execSandbox', 'defaults to the openclaw binary + filter path when the registry has no entry', 'defaults to the openclaw binary for an unknown agent value', plus the two help text tests if they are Hermes-specific. Add a comment in passthrough.test.ts linking to the extracted file.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Check that passthrough.test.ts line count returns to near-base and passthrough.hermes.test.ts exists with the moved tests.
  • Missing regression test: N/A — test organization
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: Test file grew 101 lines. Simplification signal from validation context suggests test_over_scaffold for mock framework.

Workflow run details

This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision.

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: sessions-agents-cli, hermes-e2e
Optional E2E: docs-validation

Dispatch hint: sessions-agents-cli,hermes-e2e

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • sessions-agents-cli (medium): This is the existing live E2E for the host-side sessions/agents CLI contract. It exercises real Docker/OpenShell onboarding, nemoclaw <name> sessions and sessions list argv translation, OpenClaw gateway dispatch, JSON envelope handling, and should catch regressions in the OpenClaw path and warm-up filtering boundary changed by this PR.
  • hermes-e2e (medium): The PR changes Hermes sandbox session routing from openclaw sessions to hermes sessions list based on the registry agent. The existing Hermes live E2E is the closest current coverage for a real Hermes onboarded sandbox, registry agent state, installed hermes binary, and OpenShell sandbox execution preconditions.

Optional E2E

  • docs-validation (low): Useful for validating the updated command reference docs and copyable command examples, but not the primary runtime risk.

New E2E recommendations

  • Hermes sessions CLI passthrough (high): Current live coverage appears to validate OpenClaw sessions passthrough and general Hermes onboarding/runtime, but not the exact user flow changed here: nemohermes <name> sessions and nemohermes <name> sessions list --source cli --limit N routing through the host CLI to hermes sessions list without OpenClaw warm-up filtering.
    • Suggested test: Add a Hermes live sessions CLI test that onboards a Hermes sandbox, invokes nemohermes <name> sessions and nemohermes <name> sessions list --source cli --limit 5, asserts successful exit and native Hermes output, and verifies no openclaw binary invocation is required.

Dispatch hint

  • Workflow: .github/workflows/e2e.yaml
  • jobs input: sessions-agents-cli,hermes-e2e

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

E2E Target Recommendation

Required E2E targets: sessions-agents-cli
Optional E2E targets: None

Dispatch required E2E targets:

  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=sessions-agents-cli

Workflow run

Full E2E target advisor summary

E2E Target Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E targets

  • sessions-agents-cli: Changes affect the host-side sandbox sessions CLI passthrough and OpenClaw/Hermes agent routing. The wired sessions-agents-cli live job is the focused E2E coverage for NemoClaw sessions/agents command translation and live sandbox execution boundaries.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=sessions-agents-cli

Optional E2E targets

  • None.

Relevant changed files

  • src/commands/sandbox/sessions.ts
  • src/commands/sandbox/sessions/list.ts
  • src/lib/actions/sandbox/sessions/passthrough.test.ts
  • src/lib/actions/sandbox/sessions/passthrough.ts
  • src/lib/cli/public-display-sessions.ts

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: Add or justify PRA-T1 and any related test follow-ups.
Open items: 0 required · 0 warnings · 0 suggestions · 5 test follow-ups
Since last review: 0 prior items resolved · 0 still apply · 0 new items found

Action checklist

  • PRA-T1 Add or justify test follow-up: Runtime validation
  • PRA-T2 Add or justify test follow-up: Runtime validation
  • PRA-T3 Add or justify test follow-up: Runtime validation
  • PRA-T4 Add or justify test follow-up: Acceptance clause
  • PRA-T5 Add or justify test follow-up: Acceptance clause
Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

  • PRA-T1 Runtime validation — Run a live Hermes sandbox `sessions` command and verify the observed OpenShell argv reaches `-- hermes sessions list` with no `openclaw: command not found` error.. The unit tests are targeted and sufficient for the routing decisions, fallback branches, help text, and OpenClaw warm-up filtering behavior. Remaining confidence is at the real OpenShell/sandbox boundary: onboarded registry state, Hermes image PATH/binary availability, wrapped argv, and stdout/stderr streaming are mocked rather than exercised here.
  • PRA-T2 Runtime validation — Run a live Hermes sandbox `sessions list --source cli --limit 5` or `sessions list --limit 5` command and verify native Hermes output streams through the `execSandbox` path without invoking the OpenClaw warm-up capture/filter branch.. The unit tests are targeted and sufficient for the routing decisions, fallback branches, help text, and OpenClaw warm-up filtering behavior. Remaining confidence is at the real OpenShell/sandbox boundary: onboarded registry state, Hermes image PATH/binary availability, wrapped argv, and stdout/stderr streaming are mocked rather than exercised here.
  • PRA-T3 Runtime validation — Run a live OpenClaw sandbox `sessions` or `sessions list --json` command and verify it still invokes `-- openclaw sessions...` and still hides internal `nemoclaw-onboard-warmup-*` session IDs from default user-facing output.. The unit tests are targeted and sufficient for the routing decisions, fallback branches, help text, and OpenClaw warm-up filtering behavior. Remaining confidence is at the real OpenShell/sandbox boundary: onboarded registry state, Hermes image PATH/binary availability, wrapped argv, and stdout/stderr streaming are mocked rather than exercised here.
  • PRA-T4 Acceptance clause — Debug Output — "[nemoclaw-debug.tar.gz](https://github.com/user-attachments/files/29636547/nemoclaw-debug.tar.gz\)" — add test evidence or identify existing coverage. The external attachment was not inspected in this read-only review. The actionable failing argv is present in the issue body and is covered by the diff and unit tests.
  • PRA-T5 Acceptance clause — Issue comment — "Looks like duplicate [Ubuntu 24.04][CLI&UX] nemohermes <name> sessions export fails on Hermes sandbox — exits 1 with exit 127 (command not found inside sandbox) #5515" — add test evidence or identify existing coverage. This is issue-triage context. The review did not inspect [Ubuntu 24.04][CLI&UX] nemohermes <name> sessions export fails on Hermes sandbox — exits 1 with exit 127 (command not found inside sandbox) #5515, and the current diff independently addresses the concrete nemohermes hermes sessions - openclaw command not found #6247 failing argv.

Workflow run details

This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision.

…ault-agent tests

Address PR review advisor feedback on #6249:
- Update oclif command descriptions in `src/commands/sandbox/sessions.ts`
  and `src/commands/sandbox/sessions/list.ts`, and the
  `printSessionsPassthroughHelp` output, so hermes users are no longer
  told the command passes through to `openclaw sessions` or that all
  flags are OpenClaw flags. The help now names both agent binaries and
  scopes warm-up filtering + OpenClaw-only flags to OpenClaw sandboxes.
- Add a code comment at the `registry.getSandbox` call documenting the
  trust boundary: the registry is CLI-owned and sandbox processes cannot
  mutate it, so the `agent` field is a trusted configuration input;
  unknown/missing values fall through to the default `openclaw` branch.
- Add regression tests: default (null registry entry) uses openclaw
  binary + filter path; unknown agent value ('custom-future-agent')
  also falls through to openclaw + filter; help text asserts hermes is
  named and OpenClaw-only passthrough is not promised.

Refs #6247

Signed-off-by: Yanyun Liao <yanyunl@nvidia.com>
@yanyunl1991

Copy link
Copy Markdown
Contributor Author

PR advisor feedback — addressed in a301f70

Advisor #1 (Nemotron Ultra)

  • PRA-1 Required — Document registry trust boundary — Fixed. Added a code comment above registry.getSandbox(...) in passthrough.ts explaining that the registry is CLI-owned (only NemoClaw commands write it), sandbox processes cannot mutate it, and unknown / missing agent values fall through to the default openclaw branch.
  • PRA-2 Argv injection tests for hermes passthrough — Justify. The change is not new attack surface: the for (const arg of extraArgs) command.push(arg); loop was unchanged, and the argv reaches OpenShell via the same buildOpenshellExecArgs / execSandbox calls that already handle the OpenClaw path. Argv arguments are passed as literal execve array elements, not shell-interpreted, so newlines/semicolons/backticks are inert regardless of which in-sandbox binary sits behind the --. Argv-boundary validation is OpenShell's contract and is exercised by its own tests; adding sandbox-CLI mirror tests would duplicate that scope without a new failure mode to lock in.
  • PRA-3 Test file growth > 20 lines — Justify. The new lines are two regression describe-blocks (printSessionsPassthroughHelp help-text assertions + three hermes-routing / default-agent cases) that would each have caught the original nemohermes hermes sessions - openclaw command not found #6247 regression. Splitting into a passthrough.hermes.test.ts would fragment the mocks (captureMock / execMock / getSandboxMock) that all three describe-blocks share.
  • PRA-4 PR references nemohermes hermes sessions - openclaw command not found #6247 — Already present: the PR title, body ("Closes nemohermes hermes sessions - openclaw command not found #6247"), and commit message all cite the issue.
  • PRA-5 Tests for default/unknown agent — Fixed. Added two cases: (a) getSandbox returns null → falls through to openclaw binary + filter; (b) getSandbox returns {agent: "custom-future-agent"} → same default fallthrough. Both assert captureMock receives ["sandbox", "exec", "--name", "alpha", "--", "openclaw", "sessions"].

Advisor #2

  • PRA-1 Update sessions help text — Fixed. printSessionsPassthroughHelp and the oclif description strings in both src/commands/sandbox/sessions.ts and src/commands/sandbox/sessions/list.ts are now agent-neutral: they name both openclaw sessions and hermes sessions, and explicitly scope warm-up filtering + OpenClaw-only flags to OpenClaw sandboxes. Two new regression tests in passthrough.test.ts assert the generic help no longer promises OpenClaw-only passthrough and that hermes is named for both the base sessions and sessions list verbs.

Test-follow-up items (PRA-T*) — the new tests exercise the runtime routing (both agent branches, verb + flag forwarding, default and unknown-agent fallthrough) plus the help metadata. Full passthrough.test.ts suite: 22/22 passing on a301f708a; broader src/commands/sandbox/sessions* + src/lib/actions/sandbox/sessions/ + src/lib/cli/ scope: 156/156 passing.

yanyunl1991 and others added 2 commits July 3, 2026 21:41
…rict typecheck

`build-typecheck` (`tsc -p tsconfig.cli.json`) has stricter
`noImplicitAny` than the `build:cli` project graph, and flagged the
`(call) => ...` callback parameter in the new
`printSessionsPassthroughHelp` describe block as implicit `any`.
Annotate it as `unknown[]` (matching vitest's `mock.calls` element
type) so the typecheck passes.

Refs #6247

Signed-off-by: Yanyun Liao <yanyunl@nvidia.com>
Map the parent command to Hermes' required list subcommand and align help, tests, and docs.

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Target Results — ✅ All requested jobs passed

Run: 28690239014
Workflow ref: fix/hermes-sessions-passthrough-6247
Requested targets: (default — all supported)
Requested jobs: sessions-agents-cli,hermes-e2e
Summary: 2 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-e2e ✅ success
sessions-agents-cli ✅ success

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed exact head 9c7cf1d. Bare Hermes sessions now maps to the pinned CLI required sessions list command; OpenClaw behavior is preserved. Full local coverage, type, and docs checks passed, refreshed CI is green, and required live sessions-agents-cli plus hermes-e2e both passed. The secondary advisor required path correction is resolved. Its argv concern is covered by the shared real execSandbox guard suite plus exact passthrough argv tests; the registry is host-side and not sandbox-writable. PR #6196 is separately owned; this PR is conflict-free and should land first so that owner can rebase.

@github-actions

github-actions Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Target Results — ✅ All requested jobs passed

Run: 28753214222
Workflow ref: fix/hermes-sessions-passthrough-6247
Requested targets: (default — all supported)
Requested jobs: sessions-agents-cli,hermes-e2e
Summary: 2 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-e2e ✅ success
sessions-agents-cli ✅ success

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa ericksoa added bug-fix PR fixes a bug or regression area: cli Command line interface, flags, terminal UX, or output integration: hermes Hermes integration behavior labels Jul 7, 2026
@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested jobs passed

Run: 28838212101
Workflow ref: fix/hermes-sessions-passthrough-6247
Requested targets: (default — all supported)
Requested jobs: sessions-agents-cli,hermes-e2e
Summary: 2 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-e2e ✅ success
sessions-agents-cli ✅ success

@ericksoa
ericksoa merged commit 34ed8fd into main Jul 7, 2026
126 checks passed
@ericksoa
ericksoa deleted the fix/hermes-sessions-passthrough-6247 branch July 7, 2026 03:05
@wscurran wscurran added the integration: openclaw OpenClaw integration behavior label Jul 7, 2026
apurvvkumaria added a commit that referenced this pull request Jul 8, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Prepares the user-facing documentation for NemoClaw v0.0.76 and closes
the release-prep documentation gate. It adds the release highlights,
documents the arm64 Local NIM warning and expanded image cleanup
behavior, and fixes agent-specific command headings in generated guides.

## Changes

- Add the v0.0.76 release-notes section and move the shared-gateway
route containment entry out of the v0.0.74 history where it was
incorrectly placed.
- Document the advisory Linux arm64 Local NIM manifest warning in the
canonical platform matrix and local-inference guidance.
- Document that `gc` scans both gateway-built and locally prebuilt
sandbox image repositories.
- Keep OpenClaw and Hermes session headings out of the generated Deep
Agents command guide.
- Add a focused variant regression test for the agent-specific session
headings.

### Source summary

| Merged sources | Documentation coverage |
| --- | --- |
| [#6414](#6414),
[#6418](#6418),
[#6416](#6416),
[#6344](#6344) | v0.0.76 release
notes and the Deep Agents quickstart/inference routes |
| [#6340](#6340) | v0.0.76
release notes and existing Deep Agents observability guidance |
| [#6338](#6338),
[#6378](#6378),
[#6297](#6297) | v0.0.76 release
notes and existing inference/troubleshooting guidance |
| [#6362](#6362) | v0.0.76
release notes and existing lifecycle, command, and credential guidance |
| [#6330](#6330),
[#6307](#6307),
[#6008](#6008) | v0.0.76 release
notes and existing security, troubleshooting, and command guidance |
| [#6382](#6382) | v0.0.76
release notes and existing MCP/command guidance |
| [#6326](#6326),
[#5868](#5868),
[#5539](#5539) | v0.0.76 release
notes, platform matrix, inference options, and local-inference guidance
|
| [#6396](#6396),
[#6390](#6390),
[#6007](#6007) | v0.0.76 release
notes and existing messaging guidance |
| [#5388](#5388),
[#6249](#6249),
[#6303](#6303),
[#6306](#6306) | v0.0.76 release
notes and command/lifecycle guidance |

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [x] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Quality Gates

- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] 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 the DCO sign-off declaration 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 --project integration
test/generate-platform-docs.test.ts test/agent-variant-docs.test.ts
test/sync-agent-variant-docs.test.ts` (3 files, 29 tests passed)
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result:
- [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 and 2 pre-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: Apurv Kumaria <akumaria@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
* Added v0.0.76 release notes content, and removed an older conflicting
bullet from the surrounding release history.
* Expanded Local NVIDIA NIM guidance across inference/provider docs,
including an advisory for Linux arm64 DGX Spark/DGX Station hosts when a
matching `linux/arm64` image manifest is unavailable.
* Updated the command reference for correct session-section rendering
and clarified `gc` image cleanup sources.
* **Tests**
* Added coverage ensuring Deep Agents omits sessions headings while
Hermes includes them.
* **CI**
* Refreshed Local NVIDIA NIM provider notes used in the platform matrix.

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

---------

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
…binary (NVIDIA#6249)

<!-- markdownlint-disable MD041 -->
## Summary

`nemohermes <sandbox> sessions` failed with `openclaw: command not
found` because the host-side passthrough always selected the `openclaw`
binary, while Hermes sandboxes install `hermes` instead.
This change selects the in-sandbox binary from the sandbox's recorded
agent, maps bare Hermes `sessions` to `hermes sessions list`, preserves
OpenClaw behavior, and documents both command surfaces.

## Related Issue

Closes NVIDIA#6247.

## Changes

- Resolve the sandbox agent from the host-owned registry before
constructing the sessions command.
- Route bare Hermes sessions to `hermes sessions list` and explicit
`sessions list` flags to the same argv path.
- Keep OpenClaw's existing `openclaw sessions` routing and
warm-up-session filtering unchanged.
- Stream Hermes output through `execSandbox` without applying
OpenClaw-specific filtering.
- Update CLI help, public command display, and generated command
references for OpenClaw and Hermes.
- Add regression coverage for Hermes, OpenClaw, missing-agent,
unknown-agent, and help-text behavior.
- Merge current `main` (`bd38b389af7aa68a767a88058bf849cc83d8486d`)
without rewriting contributor history.

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [x] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Quality Gates

- [x] Tests added or updated for changed 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 — reviewer/approval link/justification: [Maintainer
approval](NVIDIA#6249 (review));
the current-main refresh at `ab547b61b525a5189ee5243f60a01304c151bd97`
was re-audited against `execSandbox` and its protected runtime-env
wrapper. The host-owned registry selects only the fixed `hermes` or
`openclaw` binary, forwarded flags remain discrete argv elements, and
the wrapper preserves them through `exec -- "$@"` after removing
`OPENCLAW_GATEWAY_TOKEN` from the child environment.
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification

- [x] PR description includes the DCO sign-off declaration 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
src/lib/actions/sandbox/sessions` (109/109); `npx vitest run
src/lib/actions/sandbox/sessions/passthrough.test.ts
src/lib/actions/sandbox/runtime-env.test.ts
src/lib/actions/sandbox/exec.multiline-guard.test.ts` (46/46); `npm run
typecheck:cli` (passed)
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result:
- [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)
- [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)

`npm run docs` passed with zero errors and the two pre-existing Fern
warnings.
`npm run check:diff` passed at
`ab547b61b525a5189ee5243f60a01304c151bd97`, including commitlint, CLI
typecheck, gitleaks, formatting, lint, repository checks, and the
test-file budget.

### Reproduction and root cause

Reporter's environment:

- OS: Debian GNU/Linux 13 (trixie).
- Architecture: x86_64.
- Docker: 26.1.5+dfsg1.
- NemoClaw: v0.0.71.
- Sandbox agent: Hermes.

The reported command failed before Hermes ran:

```console
$ nemohermes hermes sessions
/bin/bash: line 1: openclaw: command not found
```

The reporter's trace showed the incorrect argv:

```text
execve("/home/code/.local/bin/openshell",
  ["/home/code/.local/bin/openshell", "sandbox", "exec",
   "--name", "hermes", "--", "openclaw", "sessions"], ...)
```

Every non-help `sessions` entry point funnels through
`runSessionsPassthrough`, which previously constructed `["openclaw",
"sessions"]` unconditionally.
Hermes images instead pin `/usr/local/bin/hermes` in
`agents/hermes/manifest.yaml` and do not install an `openclaw` shim.

The corrected routing produces these commands:

```text
nemohermes hermes sessions
  -> hermes sessions list

nemohermes hermes sessions list --limit 5
  -> hermes sessions list --limit 5
```

The current `main` runtime-env wrapper does not flatten or
shell-interpolate these values: it appends the original command as
positional argv and executes it with `exec -- "$@"`.
The exact passthrough tests cover both Hermes commands, while the
current-main runtime-env and real `execSandbox` boundary tests cover
argv preservation through that wrapper, so no duplicate test-only
production seam was added during the refresh.

### AI Disclosure

- [x] AI-assisted — tools: Claude Code and Codex.

Signed-off-by: Yanyun Liao <yanyunl@nvidia.com>


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

## Summary by CodeRabbit

* **New Features**
* Sandbox session passthrough is now agent-aware: Hermes runs `hermes
sessions list` (and defaults to `list`), while OpenClaw uses its
in-sandbox binary.
* **Bug Fixes**
* Warm-up session filtering/capture is now applied only for OpenClaw
sandboxes; non-OpenClaw agents skip it.
* Missing or unknown sandbox agent values now reliably fall back to
OpenClaw routing.
* **Documentation**
* Updated CLI help and command reference/docs for Hermes vs OpenClaw,
including `sessions` and `sessions list` semantics.
* **Tests**
* Added routing and help-text coverage using a resettable sandbox
registry mock.

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

---------

Signed-off-by: Yanyun Liao <yanyunl@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Co-authored-by: Aaron Erickson <aerickson@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Prepares the user-facing documentation for NemoClaw v0.0.76 and closes
the release-prep documentation gate. It adds the release highlights,
documents the arm64 Local NIM warning and expanded image cleanup
behavior, and fixes agent-specific command headings in generated guides.

## Changes

- Add the v0.0.76 release-notes section and move the shared-gateway
route containment entry out of the v0.0.74 history where it was
incorrectly placed.
- Document the advisory Linux arm64 Local NIM manifest warning in the
canonical platform matrix and local-inference guidance.
- Document that `gc` scans both gateway-built and locally prebuilt
sandbox image repositories.
- Keep OpenClaw and Hermes session headings out of the generated Deep
Agents command guide.
- Add a focused variant regression test for the agent-specific session
headings.

### Source summary

| Merged sources | Documentation coverage |
| --- | --- |
| [NVIDIA#6414](NVIDIA#6414),
[NVIDIA#6418](NVIDIA#6418),
[NVIDIA#6416](NVIDIA#6416),
[NVIDIA#6344](NVIDIA#6344) | v0.0.76 release
notes and the Deep Agents quickstart/inference routes |
| [NVIDIA#6340](NVIDIA#6340) | v0.0.76
release notes and existing Deep Agents observability guidance |
| [NVIDIA#6338](NVIDIA#6338),
[NVIDIA#6378](NVIDIA#6378),
[NVIDIA#6297](NVIDIA#6297) | v0.0.76 release
notes and existing inference/troubleshooting guidance |
| [NVIDIA#6362](NVIDIA#6362) | v0.0.76
release notes and existing lifecycle, command, and credential guidance |
| [NVIDIA#6330](NVIDIA#6330),
[NVIDIA#6307](NVIDIA#6307),
[NVIDIA#6008](NVIDIA#6008) | v0.0.76 release
notes and existing security, troubleshooting, and command guidance |
| [NVIDIA#6382](NVIDIA#6382) | v0.0.76
release notes and existing MCP/command guidance |
| [NVIDIA#6326](NVIDIA#6326),
[NVIDIA#5868](NVIDIA#5868),
[NVIDIA#5539](NVIDIA#5539) | v0.0.76 release
notes, platform matrix, inference options, and local-inference guidance
|
| [NVIDIA#6396](NVIDIA#6396),
[NVIDIA#6390](NVIDIA#6390),
[NVIDIA#6007](NVIDIA#6007) | v0.0.76 release
notes and existing messaging guidance |
| [NVIDIA#5388](NVIDIA#5388),
[NVIDIA#6249](NVIDIA#6249),
[NVIDIA#6303](NVIDIA#6303),
[NVIDIA#6306](NVIDIA#6306) | v0.0.76 release
notes and command/lifecycle guidance |

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [x] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Quality Gates

- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] 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 the DCO sign-off declaration 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 --project integration
test/generate-platform-docs.test.ts test/agent-variant-docs.test.ts
test/sync-agent-variant-docs.test.ts` (3 files, 29 tests passed)
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result:
- [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 and 2 pre-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: Apurv Kumaria <akumaria@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
* Added v0.0.76 release notes content, and removed an older conflicting
bullet from the surrounding release history.
* Expanded Local NVIDIA NIM guidance across inference/provider docs,
including an advisory for Linux arm64 DGX Spark/DGX Station hosts when a
matching `linux/arm64` image manifest is unavailable.
* Updated the command reference for correct session-section rendering
and clarified `gc` image cleanup sources.
* **Tests**
* Added coverage ensuring Deep Agents omits sessions headings while
Hermes includes them.
* **CI**
* Refreshed Local NVIDIA NIM provider notes used in the platform matrix.

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

---------

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: cli Command line interface, flags, terminal UX, or output bug-fix PR fixes a bug or regression integration: hermes Hermes integration behavior integration: openclaw OpenClaw integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

nemohermes hermes sessions - openclaw command not found

4 participants