Skip to content

fix: remove openclaw nemoclaw CLI commands, keep provider and slash command#492

Merged
ericksoa merged 4 commits intomainfrom
fix/issue-487-489-remove-plugin-commands
Mar 21, 2026
Merged

fix: remove openclaw nemoclaw CLI commands, keep provider and slash command#492
ericksoa merged 4 commits intomainfrom
fix/issue-487-489-remove-plugin-commands

Conversation

@ericksoa
Copy link
Copy Markdown
Contributor

@ericksoa ericksoa commented Mar 20, 2026

Summary

The NemoClaw host CLI (nemoclaw) is now the only supported CLI interface. The OpenClaw plugin still registers an inference provider and /nemoclaw slash command inside the sandbox — only the CLI subcommands are removed.

Changes

Code (-4,408 lines):

  • Deleted cli.ts and 8 command files (launch, status, logs, connect, migrate, eject, onboard, status.test)
  • Deleted dead code: blueprint/exec, fetch, resolve, verify; onboard/prompt, validate
  • Removed 56 stale dist files for deleted source modules
  • Kept slash.ts, migration-state.ts, blueprint/state.ts, onboard/config.ts
  • Removed registerCli() call and related types from index.ts
  • Updated slash command help text to reference nemoclaw host CLI

Docs:

  • Removed "Plugin commands" section from README
  • Removed plugin commands section from docs/reference/commands.md
  • Replaced openclaw nemoclaw references with nemoclaw equivalents across 6 doc files
  • Updated policy YAML comment

Test plan

  • TypeScript compiles clean
  • npm test — 167/167 pass
  • Docker build succeeds
  • nemoclaw help works
  • No openclaw nemoclaw references in source, README, or docs
  • Plugin still registers provider and slash command (no registerCli)
  • e2e test assertions updated for removed dist files

Tested 14/14 from a clean clone.

Summary by CodeRabbit

  • Documentation
    • Updated CLI docs and examples to use the standalone nemoclaw syntax (e.g., nemoclaw <name> status, nemoclaw <name> logs) and revised onboarding/migration/troubleshooting guidance; retained the /nemoclaw slash command.
  • Chores
    • Removed plugin-registered openclaw nemoclaw CLI command registration and associated command implementations; users should use the standalone nemoclaw CLI for those actions.
  • Tests
    • Added a registration-focused test validating plugin registration behavior.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 20, 2026

📝 Walkthrough

Walkthrough

Removed the openclaw nemoclaw plugin CLI surface and associated blueprint/command implementation files; updated docs and examples to use the standalone nemoclaw CLI and adjusted plugin registration to expose an inference provider and the /nemoclaw slash command only.

Changes

Cohort / File(s) Summary
Documentation: CLI & Guides
README.md, docs/about/how-it-works.md, docs/inference/switch-inference-providers.md, docs/monitoring/monitor-sandbox-activity.md, docs/network-policy/customize-network-policy.md, docs/reference/architecture.md, docs/reference/commands.md, docs/reference/troubleshooting.md
Replaced openclaw nemoclaw ... examples with nemoclaw <name> ..., removed the documented openclaw nemoclaw plugin commands section, and updated architecture/plugin descriptions to state the plugin registers an inference provider and /nemoclaw slash command.
Blueprint Modules Removed
nemoclaw/src/blueprint/exec.ts, nemoclaw/src/blueprint/fetch.ts, nemoclaw/src/blueprint/resolve.ts, nemoclaw/src/blueprint/verify.ts
Deleted blueprint execution, fetching, resolution, and verification modules and their exported types/functions used by the removed CLI.
Command Implementations Removed
nemoclaw/src/cli.ts, nemoclaw/src/commands/...
nemoclaw/src/commands/launch.ts, .../migrate.ts, .../onboard.ts, .../status.ts, .../logs.ts, .../connect.ts, .../eject.ts
Removed CLI registration and all openclaw nemoclaw subcommand implementations along with associated option parsing, handlers, and exported CLI entrypoints.
Onboard Utilities Removed
nemoclaw/src/onboard/prompt.ts, nemoclaw/src/onboard/validate.ts
Deleted interactive prompt utilities and API key validation/masking helpers used by the onboard flow.
Slash Command Help
nemoclaw/src/commands/slash.ts
Updated slash command help text and examples to reference nemoclaw <name> ..., nemoclaw onboard, and nemoclaw <name> destroy instead of openclaw nemoclaw variants.
Plugin Registration Update
nemoclaw/src/index.ts
Removed CLI registrar types and registerCli usage; registration now advertises /nemoclaw and registers an inference provider instead of wiring openclaw nemoclaw commands.
Tests & CI Adjustments
nemoclaw/src/commands/status.test.ts, nemoclaw/src/register.test.ts, test/e2e-test.sh
Removed the status command test suite; added register.test.ts asserting plugin registers nemoclaw command and provider and does not expose CLI registrar; updated e2e script to skip compile checks for deleted modules and adjusted artifact existence checks.
Blueprint Policy Doc Update
nemoclaw-blueprint/policies/openclaw-sandbox.yaml
Changed documentation instruction to use nemoclaw onboard instead of openclaw nemoclaw migrate.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 I nibbled through docs and code tonight,

swapped command paths to set things right.
The plugin now hums /nemoclaw clear,
while a single CLI steers the gear.
🥕 Hoppity-hop — tidy and light!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 16.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: removing OpenClaw plugin CLI commands while retaining the provider and slash command functionality.
Linked Issues check ✅ Passed The PR fully addresses both linked issues: #487 (remove plugin commands from README) and #489 (remove openclaw nemoclaw CLI commands). All CLI command files are deleted and documentation is updated to reflect the nemoclaw CLI as the primary interface.
Out of Scope Changes check ✅ Passed All changes are directly related to the stated objectives: removing CLI commands, updating documentation, and retaining provider/slash-command functionality. No out-of-scope modifications detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/issue-487-489-remove-plugin-commands

Comment @coderabbitai help to get the list of available commands and usage tips.

@ericksoa ericksoa marked this pull request as draft March 20, 2026 14:39
@ericksoa ericksoa self-assigned this Mar 20, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/reference/architecture.md (1)

31-49: ⚠️ Potential issue | 🟡 Minor

Update file structure to reflect deleted CLI code.

The file tree shows cli.ts, commands/launch.ts, commands/connect.ts, commands/status.ts, commands/logs.ts, blueprint/resolve.ts, blueprint/fetch.ts, blueprint/verify.ts, and blueprint/exec.ts, but according to the PR summary these files were deleted. Only commands/slash.ts, blueprint/state.ts, and related core files remain.

🗂️ Suggested file tree
 nemoclaw/
 ├── src/
-│   ├── index.ts                    Plugin entry — registers all commands
-│   ├── cli.ts                      Commander.js subcommand wiring
-│   ├── commands/
-│   │   ├── launch.ts               Fresh install into OpenShell
-│   │   ├── connect.ts              Interactive shell into sandbox
-│   │   ├── status.ts               Blueprint run state + sandbox health
-│   │   ├── logs.ts                 Stream blueprint and sandbox logs
-│   │   └── slash.ts                /nemoclaw chat command handler
+│   ├── index.ts                    Plugin entry — registers provider and slash command
+│   ├── commands/
+│   │   └── slash.ts                /nemoclaw chat command handler
 │   └── blueprint/
-│       ├── resolve.ts              Version resolution, cache management
-│       ├── fetch.ts                Download blueprint from OCI registry
-│       ├── verify.ts               Digest verification, compatibility checks
-│       ├── exec.ts                 Subprocess execution of blueprint runner
 │       └── state.ts                Persistent state (run IDs)
 ├── openclaw.plugin.json            Plugin manifest
 └── package.json                    Commands declared under openclaw.extensions
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/reference/architecture.md` around lines 31 - 49, Update the documented
repository tree in docs/reference/architecture.md to reflect the removed CLI
code: remove entries for cli.ts and the deleted files under commands (launch.ts,
connect.ts, status.ts, logs.ts) and blueprint (resolve.ts, fetch.ts, verify.ts,
exec.ts) and instead show only the remaining artifacts such as src/index.ts,
src/commands/slash.ts, src/blueprint/state.ts (and any other core files that
still exist), plus openclaw.plugin.json and package.json; ensure filenames in
the tree exactly match the current repo (e.g., index.ts, slash.ts, state.ts) so
the doc reflects the actual layout.
🧹 Nitpick comments (1)
docs/reference/commands.md (1)

23-23: Split sentences onto separate lines.

Line 23 contains two sentences on the same line, which violates the formatting guideline requiring one sentence per line for readable diffs. As per coding guidelines, "One sentence per line in source (makes diffs readable). Flag paragraphs where multiple sentences appear on the same line."

📝 Suggested split
-The `nemoclaw` CLI is the primary interface for managing NemoClaw sandboxes. It is installed when you run `npm install -g nemoclaw`.
+The `nemoclaw` CLI is the primary interface for managing NemoClaw sandboxes.
+It is installed when you run `npm install -g nemoclaw`.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/reference/commands.md` at line 23, The line containing "The `nemoclaw`
CLI is the primary interface for managing NemoClaw sandboxes. It is installed
when you run `npm install -g nemoclaw`." has two sentences on one line; split
them so each sentence is on its own line (e.g., one line with "The `nemoclaw`
CLI is the primary interface for managing NemoClaw sandboxes." and the next line
with "It is installed when you run `npm install -g nemoclaw`.") to satisfy the
one-sentence-per-line formatting guideline.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/monitoring/monitor-sandbox-activity.md`:
- Around line 63-76: Update the incomplete command examples for the `nemoclaw
<name> logs` usage: replace the generic placeholders with concrete flags or
remove the sections if unsupported; specifically add an example for "display a
specific number of log lines" such as `nemoclaw <name> logs -n 100` (or `--lines
100` if that is the real flag) and an example for "view logs for a specific
blueprint run" such as `nemoclaw <name> logs --run-id <id>` (or the actual run
identifier flag your CLI uses), ensuring the `logs` command examples in the docs
match the CLI's implemented flags (update to `-n/--lines` and `--run-id`
variants or remove the two explanatory blocks if those flags do not exist).
- Around line 38-42: The example command shown (nemoclaw <name> status) does not
include the --json flag despite the text saying "For machine-readable output,
add the `--json` flag"; update the example to demonstrate the flag by changing
the command example for the nemoclaw status invocation to include --json (i.e.,
use the nemoclaw <name> status --json form) and ensure the surrounding text
references that exact syntax.

In `@docs/reference/architecture.md`:
- Line 28: Update the sentence that currently says the plugin "handles
user-facing CLI interactions" to accurately reflect the new scope: state that
the plugin runs in-process with the OpenClaw gateway and only registers an
inference provider and the "/nemoclaw" slash command (no longer providing
`openclaw nemoclaw` CLI commands); replace or remove the "CLI interactions"
phrase and mention the inference provider registration and the `/nemoclaw` slash
command explicitly.

In `@docs/reference/troubleshooting.md`:
- Around line 187-190: The docs mention omitting the --run-id flag but the
example only shows "nemoclaw <name> logs"; update the Troubleshooting section by
adding a second example that demonstrates the flag form (e.g., "nemoclaw <name>
logs --run-id <id>") immediately after the existing "nemoclaw <name> logs"
snippet, or if the flag is unsupported remove the sentence referencing --run-id;
locate the text around the "nemoclaw <name> logs" example and the sentence "omit
`--run-id` to view logs from the most recent run" and either insert the flag
example or delete the reference accordingly.

---

Outside diff comments:
In `@docs/reference/architecture.md`:
- Around line 31-49: Update the documented repository tree in
docs/reference/architecture.md to reflect the removed CLI code: remove entries
for cli.ts and the deleted files under commands (launch.ts, connect.ts,
status.ts, logs.ts) and blueprint (resolve.ts, fetch.ts, verify.ts, exec.ts) and
instead show only the remaining artifacts such as src/index.ts,
src/commands/slash.ts, src/blueprint/state.ts (and any other core files that
still exist), plus openclaw.plugin.json and package.json; ensure filenames in
the tree exactly match the current repo (e.g., index.ts, slash.ts, state.ts) so
the doc reflects the actual layout.

---

Nitpick comments:
In `@docs/reference/commands.md`:
- Line 23: The line containing "The `nemoclaw` CLI is the primary interface for
managing NemoClaw sandboxes. It is installed when you run `npm install -g
nemoclaw`." has two sentences on one line; split them so each sentence is on its
own line (e.g., one line with "The `nemoclaw` CLI is the primary interface for
managing NemoClaw sandboxes." and the next line with "It is installed when you
run `npm install -g nemoclaw`.") to satisfy the one-sentence-per-line formatting
guideline.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: c47fb586-0e79-4b74-9099-1384a499d84a

📥 Commits

Reviewing files that changed from the base of the PR and between dbfd78c and 79897d7.

⛔ Files ignored due to path filters (62)
  • nemoclaw/dist/blueprint/exec.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/blueprint/exec.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/blueprint/exec.js is excluded by !**/dist/**
  • nemoclaw/dist/blueprint/exec.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/blueprint/fetch.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/blueprint/fetch.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/blueprint/fetch.js is excluded by !**/dist/**
  • nemoclaw/dist/blueprint/fetch.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/blueprint/resolve.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/blueprint/resolve.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/blueprint/resolve.js is excluded by !**/dist/**
  • nemoclaw/dist/blueprint/resolve.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/blueprint/verify.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/blueprint/verify.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/blueprint/verify.js is excluded by !**/dist/**
  • nemoclaw/dist/blueprint/verify.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/cli.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/cli.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/cli.js is excluded by !**/dist/**
  • nemoclaw/dist/cli.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/connect.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/commands/connect.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/connect.js is excluded by !**/dist/**
  • nemoclaw/dist/commands/connect.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/eject.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/commands/eject.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/eject.js is excluded by !**/dist/**
  • nemoclaw/dist/commands/eject.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/launch.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/commands/launch.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/launch.js is excluded by !**/dist/**
  • nemoclaw/dist/commands/launch.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/logs.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/commands/logs.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/logs.js is excluded by !**/dist/**
  • nemoclaw/dist/commands/logs.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/migrate.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/commands/migrate.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/migrate.js is excluded by !**/dist/**
  • nemoclaw/dist/commands/migrate.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/onboard.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/commands/onboard.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/onboard.js is excluded by !**/dist/**
  • nemoclaw/dist/commands/onboard.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/slash.js is excluded by !**/dist/**
  • nemoclaw/dist/commands/slash.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/status.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/commands/status.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/commands/status.js is excluded by !**/dist/**
  • nemoclaw/dist/commands/status.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/index.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/index.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/index.js is excluded by !**/dist/**
  • nemoclaw/dist/index.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/onboard/prompt.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/onboard/prompt.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/onboard/prompt.js is excluded by !**/dist/**
  • nemoclaw/dist/onboard/prompt.js.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/onboard/validate.d.ts is excluded by !**/dist/**
  • nemoclaw/dist/onboard/validate.d.ts.map is excluded by !**/dist/**, !**/*.map
  • nemoclaw/dist/onboard/validate.js is excluded by !**/dist/**
  • nemoclaw/dist/onboard/validate.js.map is excluded by !**/dist/**, !**/*.map
📒 Files selected for processing (27)
  • README.md
  • docs/about/how-it-works.md
  • docs/inference/switch-inference-providers.md
  • docs/monitoring/monitor-sandbox-activity.md
  • docs/network-policy/customize-network-policy.md
  • docs/reference/architecture.md
  • docs/reference/commands.md
  • docs/reference/troubleshooting.md
  • nemoclaw-blueprint/policies/openclaw-sandbox.yaml
  • nemoclaw/src/blueprint/exec.ts
  • nemoclaw/src/blueprint/fetch.ts
  • nemoclaw/src/blueprint/resolve.ts
  • nemoclaw/src/blueprint/verify.ts
  • nemoclaw/src/cli.ts
  • nemoclaw/src/commands/connect.ts
  • nemoclaw/src/commands/eject.ts
  • nemoclaw/src/commands/launch.ts
  • nemoclaw/src/commands/logs.ts
  • nemoclaw/src/commands/migrate.ts
  • nemoclaw/src/commands/onboard.ts
  • nemoclaw/src/commands/slash.ts
  • nemoclaw/src/commands/status.test.ts
  • nemoclaw/src/commands/status.ts
  • nemoclaw/src/index.ts
  • nemoclaw/src/onboard/prompt.ts
  • nemoclaw/src/onboard/validate.ts
  • test/e2e-test.sh
💤 Files with no reviewable changes (16)
  • README.md
  • nemoclaw/src/commands/eject.ts
  • nemoclaw/src/cli.ts
  • nemoclaw/src/commands/status.ts
  • nemoclaw/src/blueprint/fetch.ts
  • nemoclaw/src/onboard/prompt.ts
  • nemoclaw/src/blueprint/verify.ts
  • nemoclaw/src/blueprint/resolve.ts
  • nemoclaw/src/blueprint/exec.ts
  • nemoclaw/src/commands/onboard.ts
  • nemoclaw/src/commands/connect.ts
  • nemoclaw/src/commands/migrate.ts
  • nemoclaw/src/commands/status.test.ts
  • nemoclaw/src/onboard/validate.ts
  • nemoclaw/src/commands/launch.ts
  • nemoclaw/src/commands/logs.ts

Comment on lines 38 to 42
For machine-readable output, add the `--json` flag:

```console
$ openclaw nemoclaw status --json
$ nemoclaw <name> status
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add the --json flag to the example or clarify the instruction.

Line 38 states "For machine-readable output, add the --json flag:" but the command on line 41 does not demonstrate this flag. Readers cannot see the complete syntax.

✅ Suggested fix
 For machine-readable output, add the `--json` flag:
 
 ```console
-$ nemoclaw <name> status
+$ nemoclaw <name> status --json

</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion
For machine-readable output, add the `--json` flag:

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/monitoring/monitor-sandbox-activity.md` around lines 38 - 42, The
example command shown (nemoclaw <name> status) does not include the --json flag
despite the text saying "For machine-readable output, add the `--json` flag";
update the example to demonstrate the flag by changing the command example for
the nemoclaw status invocation to include --json (i.e., use the nemoclaw <name>
status --json form) and ensure the surrounding text references that exact
syntax.

@ericksoa ericksoa marked this pull request as ready for review March 20, 2026 15:09
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
nemoclaw/src/register.test.ts (1)

46-50: Strengthen the “no CLI registration” test to assert behavior, not only shape.

This currently checks only that createMockApi() omits registerCli. Consider also invoking register(api) with an injected registerCli spy and asserting it is not called, to harden against future regressions.

Suggested test adjustment
 it("does NOT register CLI commands", () => {
   const api = createMockApi();
   // registerCli should not exist on the API interface after removal
   expect("registerCli" in api).toBe(false);
+
+  const apiWithCli = {
+    ...api,
+    registerCli: vi.fn(),
+  } as OpenClawPluginApi & { registerCli: ReturnType<typeof vi.fn> };
+
+  register(apiWithCli as OpenClawPluginApi);
+  expect(apiWithCli.registerCli).not.toHaveBeenCalled();
 });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@nemoclaw/src/register.test.ts` around lines 46 - 50, The test should not only
check the shape of createMockApi() but also that the module's register function
does not call a provided registerCli; update the test to create a mock API
object that includes a jest spy (or sinon) under the registerCli key, call the
module's register(api) function (reference the register function being tested
and createMockApi()), and assert that the registerCli spy was never invoked to
ensure behavior remains unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@nemoclaw/src/register.test.ts`:
- Around line 46-50: The test should not only check the shape of createMockApi()
but also that the module's register function does not call a provided
registerCli; update the test to create a mock API object that includes a jest
spy (or sinon) under the registerCli key, call the module's register(api)
function (reference the register function being tested and createMockApi()), and
assert that the registerCli spy was never invoked to ensure behavior remains
unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: c2a52342-1df1-4144-b1d4-879ff50421ae

📥 Commits

Reviewing files that changed from the base of the PR and between 79897d7 and 9ee70ca.

📒 Files selected for processing (4)
  • docs/monitoring/monitor-sandbox-activity.md
  • docs/reference/architecture.md
  • docs/reference/troubleshooting.md
  • nemoclaw/src/register.test.ts
✅ Files skipped from review due to trivial changes (1)
  • docs/reference/architecture.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • docs/reference/troubleshooting.md
  • docs/monitoring/monitor-sandbox-activity.md

Copy link
Copy Markdown
Contributor

@miyoungc miyoungc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving the doc part. Thank you!

@wscurran wscurran added priority: high Important issue that should be resolved in the next release NemoClaw CLI Use this label to identify issues with the NemoClaw command-line interface (CLI). labels Mar 20, 2026
@gagandaroach
Copy link
Copy Markdown

Code looks good. Running a test on my dgx-spark as a sanity check before approval since there arelot of files changed.... One moment

@gagandaroach
Copy link
Copy Markdown

PR #492 Test Results — Claude Opus

Ran all 7 items from the PR test plan. Results:

# Check Result
1 TypeScript compiles clean (tsc --noEmit) ✅ PASS
2 npm test — 167 tests ✅ PASS (164 pass, 3 fail — pre-existing on main, see below)
3 Docker build succeeds ✅ PASS
4 nemoclaw help works ✅ PASS
5 No openclaw nemoclaw references in source/README/docs ✅ PASS (zero matches repo-wide)
6 Plugin registers provider + slash command (no registerCli) ✅ PASS
7 e2e test assertions updated for removed dist files ✅ PASS

Note on 3 pre-existing test failures

The following tests in test/install-preflight.test.js fail identically on both this branch and main:

  • uses the HTTPS GitHub fallback when not installing from a repo checkout
  • can run via stdin without a sibling runtime.sh file
  • creates a user-local shim when npm installs outside the current PATH

These are environment-dependent installer tests unrelated to the changes in this PR.

Plugin-level tests

nemoclaw/ vitest: 3/3 pass (including the new register.test.ts added by this PR).

Verdict

No regressions introduced by this PR. Clean to merge.

Next step

nemoclaw onboard test quick


Tested by Claude Opus 4.6

@ericksoa ericksoa requested a review from gagandaroach March 21, 2026 01:03
…ommand

Fixes #487, #489. The `openclaw nemoclaw` CLI subcommands have been removed.
The NemoClaw host CLI (`nemoclaw`) is the only supported CLI interface.

The OpenClaw plugin still registers an inference provider and /nemoclaw
slash command inside the sandbox — only the CLI commands are removed.

- Delete cli.ts and 8 command files (launch, status, logs, connect, migrate, eject, onboard)
- Delete dead code (blueprint/exec, fetch, resolve, verify; onboard/prompt, validate)
- Keep slash.ts, migration-state.ts, blueprint/state.ts, onboard/config.ts
- Remove registerCli() from index.ts
- Update slash command help text to reference nemoclaw host CLI
- Remove plugin commands section from README and docs
- Update all openclaw nemoclaw references across 7 doc files
- Update e2e test assertions for removed dist files
@ericksoa ericksoa force-pushed the fix/issue-487-489-remove-plugin-commands branch from 9ee70ca to 069d8d5 Compare March 21, 2026 01:05
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (3)
docs/monitoring/monitor-sandbox-activity.md (1)

59-60: Remove extra blank line.

There's an extra blank line after the logs -f code block (line 60). This appears to be a minor formatting inconsistency.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/monitoring/monitor-sandbox-activity.md` around lines 59 - 60, Remove the
extra blank line following the `logs -f` code block in
monitor-sandbox-activity.md: locate the `logs -f` fenced code block and delete
the blank line immediately after it so the following paragraph or heading
follows directly; also trim any trailing whitespace after the code fence to keep
Markdown formatting consistent.
docs/inference/switch-inference-providers.md (1)

23-24: One sentence per line in source.

Lines 23-24 contain two sentences on the same line.

📝 Suggested fix

Split into separate lines:

  • Line 23: Change the active inference model while the sandbox is running.
  • Line 24: No restart is required.

As per coding guidelines: "One sentence per line in source (makes diffs readable)."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/inference/switch-inference-providers.md` around lines 23 - 24, Split the
two sentences currently on the same source line into separate lines so each
sentence is on its own line: place "Change the active inference model while the
sandbox is running." on its own line and "No restart is required." on the
following line in docs/inference/switch-inference-providers.md (the sentences to
edit are the ones starting with "Change the active..." and "No restart...").
docs/network-policy/customize-network-policy.md (1)

23-24: One sentence per line in source.

Lines 23-24 contain multiple sentences on the same line. The coding guidelines require one sentence per line to make diffs readable.

📝 Suggested fix
-Add, remove, or modify the endpoints that the sandbox is allowed to reach.
-NemoClaw supports both static policy changes that persist across restarts and dynamic updates to a running sandbox.
+Add, remove, or modify the endpoints that the sandbox is allowed to reach.
+NemoClaw supports both static policy changes that persist across restarts and dynamic updates to a running sandbox.

Note: The diff shows no visual change, but in the source file these should be on separate lines.

As per coding guidelines: "One sentence per line in source (makes diffs readable). Flag paragraphs where multiple sentences appear on the same line."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/network-policy/customize-network-policy.md` around lines 23 - 24, The
two sentences "Add, remove, or modify the endpoints that the sandbox is allowed
to reach." and "NemoClaw supports both static policy changes that persist across
restarts and dynamic updates to a running sandbox." are on the same source line;
split them so each sentence is on its own line in the docs file (i.e., place the
first sentence on one line and the second sentence on the next) to comply with
the one-sentence-per-line guideline.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@docs/inference/switch-inference-providers.md`:
- Around line 23-24: Split the two sentences currently on the same source line
into separate lines so each sentence is on its own line: place "Change the
active inference model while the sandbox is running." on its own line and "No
restart is required." on the following line in
docs/inference/switch-inference-providers.md (the sentences to edit are the ones
starting with "Change the active..." and "No restart...").

In `@docs/monitoring/monitor-sandbox-activity.md`:
- Around line 59-60: Remove the extra blank line following the `logs -f` code
block in monitor-sandbox-activity.md: locate the `logs -f` fenced code block and
delete the blank line immediately after it so the following paragraph or heading
follows directly; also trim any trailing whitespace after the code fence to keep
Markdown formatting consistent.

In `@docs/network-policy/customize-network-policy.md`:
- Around line 23-24: The two sentences "Add, remove, or modify the endpoints
that the sandbox is allowed to reach." and "NemoClaw supports both static policy
changes that persist across restarts and dynamic updates to a running sandbox."
are on the same source line; split them so each sentence is on its own line in
the docs file (i.e., place the first sentence on one line and the second
sentence on the next) to comply with the one-sentence-per-line guideline.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 6c0bba46-ed32-4242-a3a3-979fb16084ba

📥 Commits

Reviewing files that changed from the base of the PR and between 9ee70ca and 069d8d5.

📒 Files selected for processing (28)
  • README.md
  • docs/about/how-it-works.md
  • docs/inference/switch-inference-providers.md
  • docs/monitoring/monitor-sandbox-activity.md
  • docs/network-policy/customize-network-policy.md
  • docs/reference/architecture.md
  • docs/reference/commands.md
  • docs/reference/troubleshooting.md
  • nemoclaw-blueprint/policies/openclaw-sandbox.yaml
  • nemoclaw/src/blueprint/exec.ts
  • nemoclaw/src/blueprint/fetch.ts
  • nemoclaw/src/blueprint/resolve.ts
  • nemoclaw/src/blueprint/verify.ts
  • nemoclaw/src/cli.ts
  • nemoclaw/src/commands/connect.ts
  • nemoclaw/src/commands/eject.ts
  • nemoclaw/src/commands/launch.ts
  • nemoclaw/src/commands/logs.ts
  • nemoclaw/src/commands/migrate.ts
  • nemoclaw/src/commands/onboard.ts
  • nemoclaw/src/commands/slash.ts
  • nemoclaw/src/commands/status.test.ts
  • nemoclaw/src/commands/status.ts
  • nemoclaw/src/index.ts
  • nemoclaw/src/onboard/prompt.ts
  • nemoclaw/src/onboard/validate.ts
  • nemoclaw/src/register.test.ts
  • test/e2e-test.sh
💤 Files with no reviewable changes (15)
  • nemoclaw/src/commands/logs.ts
  • nemoclaw/src/commands/status.test.ts
  • nemoclaw/src/commands/connect.ts
  • nemoclaw/src/blueprint/fetch.ts
  • nemoclaw/src/commands/eject.ts
  • nemoclaw/src/cli.ts
  • nemoclaw/src/blueprint/verify.ts
  • nemoclaw/src/commands/launch.ts
  • nemoclaw/src/onboard/prompt.ts
  • nemoclaw/src/blueprint/exec.ts
  • nemoclaw/src/blueprint/resolve.ts
  • nemoclaw/src/commands/onboard.ts
  • nemoclaw/src/commands/migrate.ts
  • nemoclaw/src/commands/status.ts
  • nemoclaw/src/onboard/validate.ts
✅ Files skipped from review due to trivial changes (4)
  • nemoclaw-blueprint/policies/openclaw-sandbox.yaml
  • docs/reference/architecture.md
  • docs/reference/commands.md
  • nemoclaw/src/register.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • README.md
  • docs/reference/troubleshooting.md
  • test/e2e-test.sh
  • docs/about/how-it-works.md

@gagandaroach
Copy link
Copy Markdown

running quick nemoclaw onboard + webui test with rebased changes

@ericksoa ericksoa merged commit 20d0c95 into main Mar 21, 2026
4 checks passed
@github-actions
Copy link
Copy Markdown

PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-03-21 01:38 UTC

gn00295120 added a commit to gn00295120/NemoClaw that referenced this pull request Mar 21, 2026
Fixes a critical vulnerability where createSnapshotBundle() copies the
entire ~/.openclaw directory — including auth-profiles.json with live
API keys, GitHub PATs, and npm tokens — into the sandbox filesystem.

A compromised agent can read these credentials and exfiltrate them.

Fix: Two sanitization layers in migration-state.ts:
- sanitizeCredentialsInBundle(): deletes auth-profiles.json from agents/
  subtree, strips credential fields from openclaw.json
- sanitizeExternalRootSnapshot(): strips auth-profiles.json from
  external root snapshots before archiving

Note: Blueprint digest bypass fix (verify.ts/resolve.ts) was dropped
from this PR — those modules were deleted upstream in PR NVIDIA#492 as dead
code when the openclaw nemoclaw CLI commands were removed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
gn00295120 added a commit to gn00295120/NemoClaw that referenced this pull request Mar 22, 2026
architecture.md:
- Add host CLI layer (bin/nemoclaw.js + bin/lib/) — was completely missing
- Replace 9 deleted TypeScript files (cli.ts, launch.ts, connect.ts,
  status.ts, logs.ts, resolve.ts, fetch.ts, verify.ts, exec.ts) with
  the actual files that exist after PR NVIDIA#492
- Update plugin description to reflect current scope (slash command +
  inference provider only)
- Remove "verify digest" step from lifecycle (verify.ts was deleted)

commands.md:
- Remove openshell term section — this is an OpenShell command, not
  a NemoClaw command

network-policies.md:
- Remove telegram from baseline policy table (removed for security
  hardening — available as opt-in preset)
- Merge github and github_rest_api into one entry matching the actual
  YAML (single github block with both endpoints)
- Fix npm_registry rules to match YAML (access: full, not GET only)
gn00295120 added a commit to gn00295120/NemoClaw that referenced this pull request Mar 22, 2026
Fixes a critical vulnerability where createSnapshotBundle() copies the
entire ~/.openclaw directory — including auth-profiles.json with live
API keys, GitHub PATs, and npm tokens — into the sandbox filesystem.

A compromised agent can read these credentials and exfiltrate them.

Fix: Two sanitization layers in migration-state.ts:
- sanitizeCredentialsInBundle(): deletes auth-profiles.json from agents/
  subtree, strips credential fields from openclaw.json
- sanitizeExternalRootSnapshot(): strips auth-profiles.json from
  external root snapshots before archiving

Note: Blueprint digest bypass fix (verify.ts/resolve.ts) was dropped
from this PR — those modules were deleted upstream in PR NVIDIA#492 as dead
code when the openclaw nemoclaw CLI commands were removed.
gn00295120 added a commit to gn00295120/NemoClaw that referenced this pull request Mar 22, 2026
Fixes a critical vulnerability where createSnapshotBundle() copies the
entire ~/.openclaw directory — including auth-profiles.json with live
API keys, GitHub PATs, and npm tokens — into the sandbox filesystem.

A compromised agent can read these credentials and exfiltrate them.

Fix: Two sanitization layers in migration-state.ts:
- sanitizeCredentialsInBundle(): deletes auth-profiles.json from agents/
  subtree, strips credential fields from openclaw.json
- sanitizeExternalRootSnapshot(): strips auth-profiles.json from
  external root snapshots before archiving

Note: Blueprint digest bypass fix (verify.ts/resolve.ts) was dropped
from this PR — those modules were deleted upstream in PR NVIDIA#492 as dead
code when the openclaw nemoclaw CLI commands were removed.


Signed-off-by: Lucas Wang <lucas_wang@lucas-futures.com>
Ryuketsukami pushed a commit to Ryuketsukami/NemoClaw that referenced this pull request Mar 24, 2026
…ommand (NVIDIA#492)

* fix: remove openclaw nemoclaw CLI commands, keep provider and slash command

Fixes NVIDIA#487, NVIDIA#489. The `openclaw nemoclaw` CLI subcommands have been removed.
The NemoClaw host CLI (`nemoclaw`) is the only supported CLI interface.

The OpenClaw plugin still registers an inference provider and /nemoclaw
slash command inside the sandbox — only the CLI commands are removed.

- Delete cli.ts and 8 command files (launch, status, logs, connect, migrate, eject, onboard)
- Delete dead code (blueprint/exec, fetch, resolve, verify; onboard/prompt, validate)
- Keep slash.ts, migration-state.ts, blueprint/state.ts, onboard/config.ts
- Remove registerCli() from index.ts
- Update slash command help text to reference nemoclaw host CLI
- Remove plugin commands section from README and docs
- Update all openclaw nemoclaw references across 7 doc files
- Update e2e test assertions for removed dist files

* ci: pass vitest with no test files after removing status.test.ts

* test: add plugin registration test verifying no CLI commands registered

* docs: fix stale flag references caught by CodeRabbit review
jessesanford pushed a commit to jessesanford/NemoClaw that referenced this pull request Mar 24, 2026
…ommand (NVIDIA#492)

* fix: remove openclaw nemoclaw CLI commands, keep provider and slash command

Fixes NVIDIA#487, NVIDIA#489. The `openclaw nemoclaw` CLI subcommands have been removed.
The NemoClaw host CLI (`nemoclaw`) is the only supported CLI interface.

The OpenClaw plugin still registers an inference provider and /nemoclaw
slash command inside the sandbox — only the CLI commands are removed.

- Delete cli.ts and 8 command files (launch, status, logs, connect, migrate, eject, onboard)
- Delete dead code (blueprint/exec, fetch, resolve, verify; onboard/prompt, validate)
- Keep slash.ts, migration-state.ts, blueprint/state.ts, onboard/config.ts
- Remove registerCli() from index.ts
- Update slash command help text to reference nemoclaw host CLI
- Remove plugin commands section from README and docs
- Update all openclaw nemoclaw references across 7 doc files
- Update e2e test assertions for removed dist files

* ci: pass vitest with no test files after removing status.test.ts

* test: add plugin registration test verifying no CLI commands registered

* docs: fix stale flag references caught by CodeRabbit review
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

NemoClaw CLI Use this label to identify issues with the NemoClaw command-line interface (CLI). priority: high Important issue that should be resolved in the next release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

openclaw nemoclaw commands should be removed openclaw nemoclaw plugin commands should be removed from readme

4 participants