[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
- 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
Assessment
This issue has not been assessed yet.