NVIDIA / NVIDIA/NemoClaw

[DGX Spark][CLI&UX] Software Development Agent, Deck Reviewer and Calendar Negotiator tabs: documented tar-over-exec project push cannot work — nemoclaw exec does not forward stdin

Open
#8,781 2 comments 0 reactions 1 assignee Assigned to @senthilr-nv View on GitHub
area: docs area: sandbox platform: dgx-spark platform: gb10
Dominant language
TypeScript
Stars
22.5k
Forks
3.1k
Avg merge
1d 1h
Merged PRs (30d)
715

Description

### Summary

Three application tabs — **Software Development Agent**, **Deck Reviewer** and **Calendar Negotiator** — of the DGX Spark "Set Up Example NemoClaw Agents" playbook tell the reader to copy their working directory into the sandbox by streaming a tar over `nemoclaw exec`, describing it as *"The reliable, dependency-free way — it needs nothing installed on the host and works on every sandbox"*.

The command cannot work: **`nemoclaw exec` does not forward stdin into the sandbox at all**, so the receiving `tar` reads an empty stream and fails. This is the *first* command of each workflow, so a first-time reader is blocked before anything else.

### Environment

| | |
|---|---|
| Host | DGX Spark (GB10, 128 GB), Ubuntu 24.04.4 LTS, aarch64 |
| NemoClaw | v0.0.103 |
| OpenShell | 0.0.85 |
| Docker | 28.3.3 |
| Node.js | v22.23.1 |
| Model | nvidia/Qwen3.6-35B-A3B-NVFP4 (managed local vLLM) |

### Steps to reproduce

1. Complete the "Run NemoClaw with a Local LLM" playbook so a sandbox exists (example name `my-assistant`).
2. Run the documented push exactly as written:
```bash
tar czf - -C ~/nemoclaw-projects/my-app . \
| nemoclaw my-assistant exec -- bash -lc 'mkdir -p /sandbox/project && tar xzf - -C /sandbox/project'
```
3. Inspect the target: `nemoclaw my-assistant exec -- ls /sandbox/project`
4. Repeat with the Deck Reviewer tab's identical idiom into `/sandbox/redteam`.
5. Repeat with the Calendar Negotiator tab's Step 1 idiom into `/sandbox/calendar`:
```bash
tar czf - -C ~/nemoclaw-calendar . \
| nemoclaw exec -- bash -lc 'mkdir -p /sandbox/calendar && tar xzf - -C /sandbox/calendar'
```

### Expected

The project tree lands in the sandbox and the verification commands later in the same step list the files.

### Actual

Deterministic failure, nothing copied:

```
gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
```

The Deck Reviewer tab's version of the same idiom fails identically. So does the Calendar Negotiator tab's, leaving `/sandbox/calendar` created but empty.

### Root cause — isolated

`nemoclaw exec` does not forward stdin. Three checks:

```bash
# (a) nothing comes back
echo HELLO_STDIN | nemoclaw my-assistant exec -- bash -lc 'cat'

# (b) 385 bytes on the host, 0 bytes inside the sandbox
tar czf - -C ~/nemoclaw-projects/my-app . | wc -c
# -> 385
tar czf - -C ~/nemoclaw-projects/my-app . | nemoclaw my-assistant exec --no-tty -- bash -lc 'wc -c'
# -> 0

# (c) --no-tty makes no difference
```

The **opposite** direction works fine — the tabs' documented pull-back command succeeds and delivered the agent's report back to the host:

```bash
nemoclaw my-assistant exec -- bash -lc 'cd /sandbox/project && tar czf - .' | tar xzf - -C ~/nemoclaw-projects/my-app
```

### Suggested fix

- **Preferred:** make `nemoclaw exec` forward stdin so the documented idiom works.
- **Or:** change all three tabs to use the CLI command that already works — `nemoclaw upload ` — verified to copy the whole tree (`Upload complete`). All three application workflows were then completed using it.
- Scoping note: `nemoclaw share mount` is **not** an alternative — it mounts the sandbox filesystem onto the host (opposite direction) and needs `sshfs` on the host, as the Calendar Negotiator tab's own NOTE correctly states. The working host→sandbox path is `upload`.
- Also correct the Deck Reviewer tab's claim that *"the tar push/pull covers the whole workflow"* while the push half cannot work.

### Repro rate

100% — repeated on all three tabs, with and without `--no-tty`.

---

## Retest on v0.0.111 (2026-08-20) — still reproduces, and there is a one-flag fix

Retested on a DGX Spark with NemoClaw v0.0.111 / OpenShell 0.0.101. The documented
tar-over-exec push still fails identically in the tabs exercised this round
(Software Development Agent Step 1 and Deck Reviewer Step 1):

```text
gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
```

**Precise remedy: add `--stdin`.** The behaviour is documented in the CLI's own help —
`--[no-]stdin Pass caller stdin through to the sandbox command; defaults to terminal
stdin only` — so a piped (non-terminal) stdin is dropped by design unless the flag is
passed.

Verified on v0.0.111:

```bash
tar czf - -C ~/nemoclaw-projects/my-app . \
| nemoclaw "$SANDBOX_NAME" exec --stdin -- bash -lc 'mkdir -p /sandbox/project && tar xzf - -C /sandbox/project'
# exit 0; the full project tree lands in the sandbox
```

This is a better doc fix than the `nemoclaw {sandbox} upload` workaround recorded
earlier: it keeps the tabs' dependency-free tar idiom and changes one flag in three
places.

The pull direction needs no change — `nemoclaw "$SANDBOX_NAME" exec -- bash -lc 'cd /sandbox/project && tar czf - .' | tar xzf - -C ~/nemoclaw-projects/my-app`
works as documented (verified end to end: the agent's edits and `develop-and-review.md`
came back to the host correctly).

One caveat found while testing the pull: if an interactive `nemoclaw {sandbox} connect`
session is open at the same time, every `nemoclaw {sandbox} exec` call blocks until it
is killed, which makes the pull look broken. That is a separate CLI defect tracked on
its own and does not affect the push fix above.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.