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.
Description
nemoclaw {sandbox} exec -- {cmd}always exits 0 on the host regardlessof what {cmd} exits with inside the sandbox. The CLI's own
--helptextexplicitly documents:
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
execsignalling 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
Steps to Reproduce
Expected Result
host saw: 42host saw: 1exit code") from
nemoclaw exec --help.Actual Result
host saw: 0(expected 42)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, andnemoclaw exec-probe exec -- sh -c 'echo $HOME'all succeed andprint their real stdout on the host. Only the exit code is being
swallowed by the exec wrapper.
Logs