Skip to content

Commit 139f2b3

Browse files
zyang-devericksoa
andauthored
fix(onboard): clarify post-install next steps and add dashboard-url command (#3937)
<!-- markdownlint-disable MD041 --> ## Summary Clarifies the post-install/onboarding completion output so users can see the next useful actions without needing to reason through raw commands. Adds a `dashboard-url` command for printing the authenticated OpenClaw dashboard URL while preserving token redaction in normal displayed output. ## Changes - Reworked onboarding completion output into task-oriented sections for browser access, terminal/TUI access, and later management. - Added `nemoclaw <sandbox> dashboard-url [--quiet]` to print an authenticated dashboard URL on demand. - Preserved token redaction in normal onboarding output while allowing explicit URL retrieval through the new command. - Resolved dashboard URLs through the existing dashboard access logic so WSL and remote access paths use the right host. - Updated installer completion messaging to point users at the structured next steps. - Updated command docs and tests for the new dashboard URL behavior. ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Verification <!-- Check each item you ran and confirmed. Leave unchecked items you skipped. Doc-only changes do not require npm test unless you ran it. --> - [x] `npx prek run --all-files` passes - [x] `npm test` passes - [x] Tests added or updated for new or changed behavior - [x] No secrets, API keys, or credentials committed - [x] Docs updated for user-facing behavior changes - [ ] `make docs` builds without warnings (doc changes only) - [ ] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) --- <!-- DCO sign-off required by CI. Run: git config user.name && git config user.email --> Signed-off-by: zyang-dev <267119621+zyang-dev@users.noreply.github.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added a dashboard-url command to print an authenticated dashboard URL, with a quiet mode for URL-only output and a security warning to treat the URL as sensitive. * **Documentation** * Updated quickstart and get-started examples to use new structured "ready" blocks showing Access, Terminal, and Manage later guidance. * Added reference docs and usage guidance for dashboard authentication and the new command. * **Improvements** * Streamlined installer/onboarding messaging and simplified Manage later instructions. <!-- review_stack_entry_start --> [![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/NVIDIA/NemoClaw/pull/3937?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: zyang-dev <267119621+zyang-dev@users.noreply.github.com> Co-authored-by: Aaron Erickson <aerickson@nvidia.com>
1 parent 7207fe1 commit 139f2b3

18 files changed

Lines changed: 627 additions & 166 deletions

.agents/skills/nemoclaw-user-get-started/SKILL.md

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -280,17 +280,31 @@ The example below shows the result if you picked an OpenAI-compatible endpoint d
280280

281281
```text
282282
──────────────────────────────────────────────────
283-
Sandbox my-gpt-claw (Landlock + seccomp + netns)
284-
Model openai/openai/gpt-5.5 (Other OpenAI-compatible endpoint)
285-
──────────────────────────────────────────────────
286-
Run: nemoclaw my-gpt-claw connect
287-
Status: nemoclaw my-gpt-claw status
288-
Logs: nemoclaw my-gpt-claw logs --follow
289-
──────────────────────────────────────────────────
283+
NemoClaw is ready
284+
285+
Sandbox: my-gpt-claw
286+
Model: openai/openai/gpt-5.5 (Other OpenAI-compatible endpoint)
287+
288+
Start chatting
290289
291-
To change settings later:
292-
Model: nemoclaw inference get
293-
nemoclaw inference set --model <model> --provider <provider> --sandbox my-gpt-claw
290+
Browser:
291+
http://127.0.0.1:18789/
292+
293+
Terminal:
294+
nemoclaw my-gpt-claw connect
295+
then run: openclaw tui
296+
297+
Authenticated dashboard URL, if needed:
298+
nemoclaw my-gpt-claw dashboard-url --quiet
299+
300+
Manage later
301+
302+
Status: nemoclaw my-gpt-claw status
303+
Logs: nemoclaw my-gpt-claw logs --follow
304+
Model: nemoclaw inference set --model <model> --provider <provider> --sandbox my-gpt-claw
305+
Policies: nemoclaw my-gpt-claw policy-add
306+
Credentials: nemoclaw credentials reset <KEY> && nemoclaw onboard
307+
──────────────────────────────────────────────────
294308
295309
[INFO] === Installation complete ===
296310
```
@@ -307,34 +321,25 @@ The onboard wizard starts a background port forward to the sandbox dashboard, th
307321
The default host port is `18789`.
308322
If that port is already taken, NemoClaw uses the next free dashboard port, such as `18790`, and prints that port in the final URL.
309323
If the chosen port becomes occupied after the sandbox build starts, onboarding rolls back the newly-created sandbox and asks you to retry instead of printing an unreachable dashboard URL.
310-
The gateway token is redacted from displayed output; retrieve it explicitly when the browser asks for authentication.
324+
The install transcript does not print the gateway token.
325+
If the browser requires authentication, use the `dashboard-url --quiet` command to print a complete URL explicitly.
311326

312327
```text
313-
──────────────────────────────────────────────────
314-
OpenClaw UI (auth token redacted from displayed URLs)
315-
Port 18790 must be forwarded before opening these URLs.
316-
Dashboard: http://127.0.0.1:18790/
317-
Token: nemoclaw my-gpt-claw gateway-token --quiet
318-
append #token=<token> locally if the browser asks for auth.
319-
──────────────────────────────────────────────────
328+
nemoclaw my-gpt-claw dashboard-url --quiet
320329
```
321330

322331
Open the dashboard URL in your browser.
323-
If the browser asks for authentication, run the printed `gateway-token --quiet` command and append `#token=<token>` locally.
324-
Treat the token like a password.
332+
If the browser asks for authentication, run `nemoclaw my-gpt-claw dashboard-url --quiet` and open the returned URL.
333+
Treat the authenticated URL like a password.
325334

326335
### Chat with the Agent from the Terminal
327336

328337
Connect to the sandbox and use the OpenClaw CLI.
329338

330339
```bash
331340
nemoclaw my-assistant connect
332-
```
333-
334-
In the sandbox shell, send a single message and print the response.
335-
336-
```bash
337-
openclaw agent --agent main --local -m "hello" --session-id test
341+
# inside the sandbox:
342+
openclaw tui
338343
```
339344

340345
## References

.agents/skills/nemoclaw-user-get-started/references/quickstart-hermes.md

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,27 @@ Hermes exposes an OpenAI-compatible API on port `8642`, not a browser dashboard.
7979

8080
```text
8181
──────────────────────────────────────────────────
82-
Sandbox my-hermes (Landlock + seccomp + netns)
83-
Model nvidia/nemotron-3-super-120b-a12b (NVIDIA Endpoints)
84-
──────────────────────────────────────────────────
85-
Run: nemohermes my-hermes connect
86-
Status: nemohermes my-hermes status
87-
Logs: nemohermes my-hermes logs --follow
82+
NemoHermes is ready
83+
84+
Sandbox: my-hermes
85+
Model: nvidia/nemotron-3-super-120b-a12b (NVIDIA Endpoints)
86+
87+
Access
88+
89+
Hermes Agent OpenAI-compatible API
90+
Port 8642 must be forwarded before connecting.
91+
http://127.0.0.1:8642/v1
92+
93+
Terminal:
94+
nemohermes my-hermes connect
95+
96+
Manage later
8897
89-
Hermes Agent OpenAI-compatible API
90-
Port 8642 must be forwarded before connecting.
91-
http://127.0.0.1:8642/v1
98+
Status: nemohermes my-hermes status
99+
Logs: nemohermes my-hermes logs --follow
100+
Model: nemohermes inference set --model <model> --provider <provider> --sandbox my-hermes
101+
Policies: nemohermes my-hermes policy-add
102+
Credentials: nemohermes credentials reset <KEY> && nemohermes onboard
92103
──────────────────────────────────────────────────
93104
```
94105

.agents/skills/nemoclaw-user-reference/references/commands.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,10 +425,33 @@ If one log source is unavailable, NemoClaw prints a warning and keeps reading th
425425
$ nemoclaw my-assistant logs [--follow] [--tail <lines>|-n <lines>] [--since <duration>]
426426
```
427427

428+
### `nemoclaw <name> dashboard-url`
429+
430+
Print the authenticated OpenClaw dashboard URL for a running sandbox.
431+
Use this when you are on a remote machine, using an SSH or reverse tunnel, or need a complete URL for a browser session.
432+
433+
```console
434+
$ nemoclaw my-assistant dashboard-url
435+
$ nemoclaw my-assistant dashboard-url --quiet
436+
```
437+
438+
The default output includes a label and a warning.
439+
Pass `--quiet` or `-q` to print only the URL to stdout so scripts can capture it:
440+
441+
```console
442+
$ URL=$(nemoclaw my-assistant dashboard-url --quiet)
443+
```
444+
445+
**Warning:**
446+
447+
Treat the authenticated dashboard URL like a password.
448+
Do not log it, share it, or commit it to version control.
449+
428450
### `nemoclaw <name> gateway-token`
429451

430452
Print the OpenClaw gateway auth token for a running sandbox to stdout.
431-
The token is required by `openclaw tui` and the OpenClaw dashboard URL, but onboarding only prints it once.
453+
The token is required by `openclaw tui` and the OpenClaw dashboard URL.
454+
Use `dashboard-url` for browser access; use `gateway-token` only when automation needs the raw token.
432455
Pipe it into automation or capture it into an environment variable:
433456

434457
```console

docs/get-started/quickstart-hermes.mdx

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,27 @@ Hermes exposes an OpenAI-compatible API on port `8642`, not a browser dashboard.
8888

8989
```text
9090
──────────────────────────────────────────────────
91-
Sandbox my-hermes (Landlock + seccomp + netns)
92-
Model nvidia/nemotron-3-super-120b-a12b (NVIDIA Endpoints)
93-
──────────────────────────────────────────────────
94-
Run: nemohermes my-hermes connect
95-
Status: nemohermes my-hermes status
96-
Logs: nemohermes my-hermes logs --follow
91+
NemoHermes is ready
92+
93+
Sandbox: my-hermes
94+
Model: nvidia/nemotron-3-super-120b-a12b (NVIDIA Endpoints)
95+
96+
Access
97+
98+
Hermes Agent OpenAI-compatible API
99+
Port 8642 must be forwarded before connecting.
100+
http://127.0.0.1:8642/v1
101+
102+
Terminal:
103+
nemohermes my-hermes connect
104+
105+
Manage later
97106
98-
Hermes Agent OpenAI-compatible API
99-
Port 8642 must be forwarded before connecting.
100-
http://127.0.0.1:8642/v1
107+
Status: nemohermes my-hermes status
108+
Logs: nemohermes my-hermes logs --follow
109+
Model: nemohermes inference set --model <model> --provider <provider> --sandbox my-hermes
110+
Policies: nemohermes my-hermes policy-add
111+
Credentials: nemohermes credentials reset <KEY> && nemohermes onboard
101112
──────────────────────────────────────────────────
102113
```
103114

docs/get-started/quickstart.mdx

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -294,17 +294,31 @@ The example below shows the result if you picked an OpenAI-compatible endpoint d
294294

295295
```text
296296
──────────────────────────────────────────────────
297-
Sandbox my-gpt-claw (Landlock + seccomp + netns)
298-
Model openai/openai/gpt-5.5 (Other OpenAI-compatible endpoint)
299-
──────────────────────────────────────────────────
300-
Run: nemoclaw my-gpt-claw connect
301-
Status: nemoclaw my-gpt-claw status
302-
Logs: nemoclaw my-gpt-claw logs --follow
303-
──────────────────────────────────────────────────
297+
NemoClaw is ready
298+
299+
Sandbox: my-gpt-claw
300+
Model: openai/openai/gpt-5.5 (Other OpenAI-compatible endpoint)
301+
302+
Start chatting
304303
305-
To change settings later:
306-
Model: nemoclaw inference get
307-
nemoclaw inference set --model <model> --provider <provider> --sandbox my-gpt-claw
304+
Browser:
305+
http://127.0.0.1:18789/
306+
307+
Terminal:
308+
nemoclaw my-gpt-claw connect
309+
then run: openclaw tui
310+
311+
Authenticated dashboard URL, if needed:
312+
nemoclaw my-gpt-claw dashboard-url --quiet
313+
314+
Manage later
315+
316+
Status: nemoclaw my-gpt-claw status
317+
Logs: nemoclaw my-gpt-claw logs --follow
318+
Model: nemoclaw inference set --model <model> --provider <provider> --sandbox my-gpt-claw
319+
Policies: nemoclaw my-gpt-claw policy-add
320+
Credentials: nemoclaw credentials reset <KEY> && nemoclaw onboard
321+
──────────────────────────────────────────────────
308322
309323
[INFO] === Installation complete ===
310324
```
@@ -321,34 +335,25 @@ The onboard wizard starts a background port forward to the sandbox dashboard, th
321335
The default host port is `18789`.
322336
If that port is already taken, NemoClaw uses the next free dashboard port, such as `18790`, and prints that port in the final URL.
323337
If the chosen port becomes occupied after the sandbox build starts, onboarding rolls back the newly-created sandbox and asks you to retry instead of printing an unreachable dashboard URL.
324-
The gateway token is redacted from displayed output; retrieve it explicitly when the browser asks for authentication.
338+
The install transcript does not print the gateway token.
339+
If the browser requires authentication, use the `dashboard-url --quiet` command to print a complete URL explicitly.
325340

326341
```text
327-
──────────────────────────────────────────────────
328-
OpenClaw UI (auth token redacted from displayed URLs)
329-
Port 18790 must be forwarded before opening these URLs.
330-
Dashboard: http://127.0.0.1:18790/
331-
Token: nemoclaw my-gpt-claw gateway-token --quiet
332-
append #token=<token> locally if the browser asks for auth.
333-
──────────────────────────────────────────────────
342+
nemoclaw my-gpt-claw dashboard-url --quiet
334343
```
335344

336345
Open the dashboard URL in your browser.
337-
If the browser asks for authentication, run the printed `gateway-token --quiet` command and append `#token=<token>` locally.
338-
Treat the token like a password.
346+
If the browser asks for authentication, run `nemoclaw my-gpt-claw dashboard-url --quiet` and open the returned URL.
347+
Treat the authenticated URL like a password.
339348

340349
### Chat with the Agent from the Terminal
341350

342351
Connect to the sandbox and use the OpenClaw CLI.
343352

344353
```bash
345354
nemoclaw my-assistant connect
346-
```
347-
348-
In the sandbox shell, send a single message and print the response.
349-
350-
```bash
351-
openclaw agent --agent main --local -m "hello" --session-id test
355+
# inside the sandbox:
356+
openclaw tui
352357
```
353358

354359
## Next Steps

docs/reference/commands.mdx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,10 +432,33 @@ If one log source is unavailable, NemoClaw prints a warning and keeps reading th
432432
$ nemoclaw my-assistant logs [--follow] [--tail <lines>|-n <lines>] [--since <duration>]
433433
```
434434

435+
### `nemoclaw <name> dashboard-url`
436+
437+
Print the authenticated OpenClaw dashboard URL for a running sandbox.
438+
Use this when you are on a remote machine, using an SSH or reverse tunnel, or need a complete URL for a browser session.
439+
440+
```console
441+
$ nemoclaw my-assistant dashboard-url
442+
$ nemoclaw my-assistant dashboard-url --quiet
443+
```
444+
445+
The default output includes a label and a warning.
446+
Pass `--quiet` or `-q` to print only the URL to stdout so scripts can capture it:
447+
448+
```console
449+
$ URL=$(nemoclaw my-assistant dashboard-url --quiet)
450+
```
451+
452+
<Warning>
453+
Treat the authenticated dashboard URL like a password.
454+
Do not log it, share it, or commit it to version control.
455+
</Warning>
456+
435457
### `nemoclaw <name> gateway-token`
436458

437459
Print the OpenClaw gateway auth token for a running sandbox to stdout.
438-
The token is required by `openclaw tui` and the OpenClaw dashboard URL, but onboarding only prints it once.
460+
The token is required by `openclaw tui` and the OpenClaw dashboard URL.
461+
Use `dashboard-url` for browser access; use `gateway-token` only when automation needs the raw token.
439462
Pipe it into automation or capture it into an environment variable:
440463

441464
```console

scripts/install.sh

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -466,41 +466,22 @@ print_done() {
466466
printf " ${C_GREEN}${C_BOLD}%s${C_RESET} ${C_DIM}(%ss)${C_RESET}\n" "$_CLI_DISPLAY" "$elapsed"
467467
printf "\n"
468468
if [[ "$ONBOARD_RAN" == true ]]; then
469-
local sandbox_name agent_name
470-
sandbox_name="$(resolve_default_sandbox_name)"
469+
local agent_name
471470
agent_name="$(resolve_onboarded_agent)"
472471
if [[ "$_needs_cli_refresh" == true ]]; then
473472
printf " ${C_YELLOW}%s installed, but this shell needs PATH refresh before '%s' will run.${C_RESET}\n" "$_CLI_DISPLAY" "$_CLI_BIN"
474473
printf " ${C_DIM}Onboarding completed; refresh PATH before using the CLI from this terminal.${C_RESET}\n"
474+
printf "\n"
475+
printf " ${C_GREEN}For this terminal:${C_RESET}\n"
476+
print_cli_path_refresh_actions
475477
else
476478
if [[ "$agent_name" == "openclaw" || -z "$agent_name" ]]; then
477479
printf " ${C_GREEN}Your OpenClaw Sandbox is live.${C_RESET}\n"
478480
else
479481
printf " ${C_GREEN}Your %s Sandbox is live.${C_RESET}\n" "$(agent_display_name "$agent_name")"
480482
fi
481-
printf " ${C_DIM}Sandbox in, break things, and tell us what you find.${C_RESET}\n"
482-
fi
483-
printf "\n"
484-
printf " ${C_GREEN}Next:${C_RESET}\n"
485-
if [[ "$_needs_cli_refresh" == true ]]; then
486-
print_cli_path_refresh_actions
487-
else
488-
printf " %s$%s source %s\n" "$C_GREEN" "$C_RESET" "$(detect_shell_profile)"
483+
printf " ${C_DIM}Use the Start chatting section above for browser and terminal options.${C_RESET}\n"
489484
fi
490-
printf " %s$%s %s %s connect\n" "$C_GREEN" "$C_RESET" "$_CLI_BIN" "$sandbox_name"
491-
local agent_cmd
492-
case "$agent_name" in
493-
hermes)
494-
agent_cmd="hermes"
495-
;;
496-
"" | openclaw)
497-
agent_cmd="openclaw tui"
498-
;;
499-
*)
500-
agent_cmd="$agent_name"
501-
;;
502-
esac
503-
printf " %ssandbox@%s$%s %s\n" "$C_GREEN" "$sandbox_name" "$C_RESET" "$agent_cmd"
504485
elif [[ "$NEMOCLAW_READY_NOW" == true ]]; then
505486
if [[ "$_needs_cli_refresh" == true ]]; then
506487
printf " ${C_YELLOW}%s CLI is installed, but this shell needs PATH refresh before '%s' will run.${C_RESET}\n" "$_CLI_DISPLAY" "$_CLI_BIN"

0 commit comments

Comments
 (0)