Description
nemoclaw <sandbox> agent reports success and does nothing. It exits 0, prints no reply with or without --json, and the message never reaches the agent — the session records no user message with any content. There is no error, no warning, and no non-zero exit, so the caller has no signal that the turn did not happen.
The same turn works when the equivalent OpenClaw command is run inside the same sandbox against the same gateway and the same agent — so the agent, the gateway and the model are all healthy. Only the NemoClaw wrapper path is affected.
Platform scope: Reproduced on DGX Spark only; other platforms not tested.
Regression: Unknown — earlier versions not tested.
Environment
Device: DGX Spark (GB10)
OS: Ubuntu 24.04.4 LTS
Architecture: aarch64
Node.js: v22.23.1
npm: 10.9.8
Docker: 29.2.1, build a5c7197
OpenShell CLI: 0.0.85
NemoClaw: v0.0.103
OpenClaw: 2026.7.1 (2d2ddc4)
Steps to Reproduce
- Onboard a sandbox non-interactively — on DGX Spark this selects the Express default (local vLLM,
nvidia/Qwen3.6-35B-A3B-NVFP4):
nemoclaw onboard --non-interactive --name my-assistant --yes-i-accept-third-party-software
- Confirm the sandbox is healthy —
nemoclaw my-assistant status shows Inference: reachable and Inference (vllm backend): healthy.
- Find the agent id and session key:
nemoclaw my-assistant exec -- openclaw agents list # -> "- main (default)"
nemoclaw my-assistant sessions list # -> key "agent:main:main"
- Run a turn through the NemoClaw wrapper:
nemoclaw my-assistant agent --session-key agent:main:main -m "Say PONG and nothing else"
- Repeat with
--json, again by agent id, and again against a session key that has never been used:
nemoclaw my-assistant agent --session-key agent:main:main --json -m "Say PONG and nothing else"
nemoclaw my-assistant agent --agent main -m "Say PONG and nothing else"
nemoclaw my-assistant agent --session-key agent:main:qa-fresh-001 -m "Say PONG and nothing else"
- Inspect the session transcript for delivered user messages, and re-run
nemoclaw my-assistant sessions list.
- Control — run the equivalent command inside the sandbox, same gateway, same agent:
nemoclaw my-assistant exec -- openclaw agent --agent main -m "Say PONG and nothing else"
Expected Result
Steps 4 and 5 run an agent turn and surface the reply, as step 7 does. If the invocation cannot be routed, the command should fail with a non-zero exit and an error naming the reason — the CLI already does this correctly when no target is given at all:
No target session selected. Use --agent <id>, --session-key <key>, --session-id <id>, or --to <E.164>.
Actual Result
All four wrapper invocations behave identically:
- exit code 0
- no output at all beyond the CLI's own
Active gateway set to 'nemoclaw' line
--json changes nothing; no JSON is emitted
The message is never delivered. After the wrapper invocations the session transcript contains:
total rows: 21 | user msgs: 2 | user msgs with content: 0
The two user messages are empty heartbeat entries; the only assistant replies in the whole transcript are HEARTBEAT_OK. None of the prompts appears anywhere.
Targeting a never-used session key does not create a session at all — sessions list still reports Sessions listed: 1 with only the pre-existing key, and no new .jsonl file appears in the session directory.
The control in step 7 works on the same sandbox, gateway, agent and model, and returns a reply:
[gateway] NemoClaw registered
[gateway] Endpoint: Managed Inference Route (inference.local)
[gateway] Provider: Local vLLM
[gateway] Model: nvidia/Qwen3.6-35B-A3B-NVFP4
Hey — what's up?
Separate but related: passing the prompt as a positional argument instead of -m makes the wrapper hang until killed (observed at 150 s, 300 s and 850 s; exit 124 under timeout), whereas the same positional form run inside the sandbox fails fast and correctly with Too many arguments for this command. The wrapper turns a clean argument error into an indefinite hang.
Related, not a duplicate
#8466 ("openclaw agent second turn exits successfully without an assistant response") is close but distinct. There, the first turn works and writes both the user message and the assistant response to the session; only a second turn against the same session id comes back empty, and it is reported against openclaw agent run directly.
This report is about the NemoClaw wrapper and does not depend on session reuse. Targeting a brand-new session key that has never been used produces the same silent no-op: exit 0, no output, and sessions list still shows only the pre-existing session — no session file is created for the new key at all, so the turn never starts. The direct OpenClaw control turn on this same sandbox succeeds, which is the opposite of #8466's first-turn behaviour being the working case.
Logs
Wrapper invocation, full capture, nothing filtered:
$ timeout 330 nemoclaw my-assistant agent --session-key agent:main:main --json -m "Say PONG and nothing else"
✓ Active gateway set to 'nemoclaw'
[exit=0]
Wrapper invocation against a never-used session key:
$ timeout 330 nemoclaw my-assistant agent --session-key agent:main:qa-fresh-001 -m "Say PONG and nothing else"
[exit=0]
$ nemoclaw my-assistant sessions list
Sessions listed: 1
direct agent:main:main 8m ago ... <- no session created for qa-fresh-001
Session transcript check after the wrapper invocations:
total rows: 21 | user msgs: 2
user msgs with content: 0
2026-08-11T08:57:37.495Z :: HEARTBEAT_OK
2026-08-11T09:27:17.771Z :: HEARTBEAT_OK
Positional-argument hang (wrapper) versus the correct fast error (inside the sandbox):
$ timeout 150 nemoclaw my-assistant agent --session-key agent:main:qa-probe "Say PONG"
✓ Active gateway set to 'nemoclaw'
[exit=124]
$ nemoclaw my-assistant exec -- openclaw agent --local "Say PONG"
Too many arguments for this command.
Try: openclaw agent Say --help
Description
nemoclaw <sandbox> agentreports success and does nothing. It exits 0, prints no reply with or without--json, and the message never reaches the agent — the session records no user message with any content. There is no error, no warning, and no non-zero exit, so the caller has no signal that the turn did not happen.The same turn works when the equivalent OpenClaw command is run inside the same sandbox against the same gateway and the same agent — so the agent, the gateway and the model are all healthy. Only the NemoClaw wrapper path is affected.
Platform scope: Reproduced on DGX Spark only; other platforms not tested.
Regression: Unknown — earlier versions not tested.
Environment
Steps to Reproduce
nvidia/Qwen3.6-35B-A3B-NVFP4):nemoclaw my-assistant statusshowsInference: reachableandInference (vllm backend): healthy.nemoclaw my-assistant agent --session-key agent:main:main -m "Say PONG and nothing else"--json, again by agent id, and again against a session key that has never been used:nemoclaw my-assistant sessions list.Expected Result
Steps 4 and 5 run an agent turn and surface the reply, as step 7 does. If the invocation cannot be routed, the command should fail with a non-zero exit and an error naming the reason — the CLI already does this correctly when no target is given at all:
Actual Result
All four wrapper invocations behave identically:
Active gateway set to 'nemoclaw'line--jsonchanges nothing; no JSON is emittedThe message is never delivered. After the wrapper invocations the session transcript contains:
The two user messages are empty heartbeat entries; the only assistant replies in the whole transcript are
HEARTBEAT_OK. None of the prompts appears anywhere.Targeting a never-used session key does not create a session at all —
sessions liststill reportsSessions listed: 1with only the pre-existing key, and no new.jsonlfile appears in the session directory.The control in step 7 works on the same sandbox, gateway, agent and model, and returns a reply:
Separate but related: passing the prompt as a positional argument instead of
-mmakes the wrapper hang until killed (observed at 150 s, 300 s and 850 s; exit 124 undertimeout), whereas the same positional form run inside the sandbox fails fast and correctly withToo many arguments for this command.The wrapper turns a clean argument error into an indefinite hang.Related, not a duplicate
#8466 ("openclaw agent second turn exits successfully without an assistant response") is close but distinct. There, the first turn works and writes both the user message and the assistant response to the session; only a second turn against the same session id comes back empty, and it is reported against
openclaw agentrun directly.This report is about the NemoClaw wrapper and does not depend on session reuse. Targeting a brand-new session key that has never been used produces the same silent no-op: exit 0, no output, and
sessions liststill shows only the pre-existing session — no session file is created for the new key at all, so the turn never starts. The direct OpenClaw control turn on this same sandbox succeeds, which is the opposite of #8466's first-turn behaviour being the working case.Logs
Wrapper invocation, full capture, nothing filtered:
Wrapper invocation against a never-used session key:
Session transcript check after the wrapper invocations:
Positional-argument hang (wrapper) versus the correct fast error (inside the sandbox):