Skip to content

[DGX Spark][CLI&UX] nemoclaw exec always returns 0 — swallows the remote command's non-zero exit codes #6458

Description

@hulynn

Description

nemoclaw {sandbox} exec -- {cmd} always exits 0 on the host regardless
of what {cmd} exits with inside the sandbox. The CLI's own --help text
explicitly documents:

"exits with the remote command's exit code"

but the host-side return value is always 0, even when the inner command
exits 42 or 1. This breaks any host-side scripting or automation that
depends on exec signalling non-zero when the remote command fails.

Platform scope: Reproduced on DGX Spark only; other platforms not tested.
Regression: Unknown — earlier versions not tested.

Environment

Device:        DGX Spark (aarch64)
OS:            Linux 6.11.0-1014-nvidia
Architecture:  aarch64
Node.js:       v22.22.3
npm:           10.9.8
Docker:        Docker Engine 28.3.3
OpenShell CLI: openshell 0.0.72
NemoClaw:      v0.0.76
OpenClaw:      2026.6.10 (aa69b12)

Steps to Reproduce

1. Onboard a fresh sandbox on DGX Spark:
     nemoclaw onboard --yes --non-interactive --fresh --agent openclaw --name exec-probe
2. Run a command that exits 42 and observe the host-side exit code:
     nemoclaw exec-probe exec -- sh -c 'exit 42'
     echo "host saw: $?"
3. Run a command that exits 1 and observe the host-side exit code:
     nemoclaw exec-probe exec -- sh -c 'exit 1'
     echo "host saw: $?"

Expected Result

  • Step 2 host prints: host saw: 42
  • Step 3 host prints: host saw: 1
  • Matches the documented behaviour ("exits with the remote command's
    exit code") from nemoclaw exec --help.

Actual Result

  • Step 2 host prints: host saw: 0 (expected 42)
  • Step 3 host prints: host saw: 0 (expected 1)

Reproduced on a fresh, healthy sandbox with baseline sanity: steps like
nemoclaw exec-probe exec -- echo hello,
nemoclaw exec-probe exec -- whoami, and
nemoclaw exec-probe exec -- sh -c 'echo $HOME' all succeed and
print their real stdout on the host. Only the exit code is being
swallowed by the exec wrapper.

Logs

`nemoclaw exec --help` (self-contradictory — docs promise propagation):

    DESCRIPTION
      Run a command non-interactively in a running sandbox

      Run a single command inside a running sandbox via the OpenShell exec
      endpoint. The command runs as the sandbox user (HOME=/sandbox) and
      exits with the remote command's exit code. Use `--` to separate exec
      options from the user command.

Host-side console evidence from a fresh sandbox `exec-probe`:

    === Step8: exec exit 42 (propagation) ===
    [step8] exit=0 elapsed=1214ms (expect 42)

    === Step9: exec exit 1 ===
    [step9] exit=0 elapsed=1167ms (expect 1)

The inner commands run to completion (elapsed ~1.2s, matching a real
shell round-trip inside the sandbox); only the return path from the
exec wrapper is broken.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

NV QABugs found by the NVIDIA QA Teamarea: cliCommand line interface, flags, terminal UX, or outputarea: sandboxOpenShell sandbox lifecycle, runtime, config, or recoveryplatform: dgx-sparkAffects DGX Spark hardware or workflows

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions