Skip to content

chore: add docs-to-skills pipeline#607

Merged
ericksoa merged 4 commits intomainfrom
docs-as-skills
Mar 21, 2026
Merged

chore: add docs-to-skills pipeline#607
ericksoa merged 4 commits intomainfrom
docs-as-skills

Conversation

@miyoungc
Copy link
Copy Markdown
Contributor

@miyoungc miyoungc commented Mar 21, 2026

Summary

Add a docs-to-skills pipeline that converts the docs/ pages into agent skills, so AI agents can walk users through NemoClaw tasks without reading raw documentation.

Related Issue

None — new capability.

Changes

New: scripts/docs-to-skills.py

A zero-dependency Python script that reads Markdown documentation with YAML frontmatter and generates Agent Skills artifacts.

Key capabilities:

  • Parses YAML frontmatter (content.type, title, keywords, tags) to classify pages as procedure, concept, or reference.
  • Groups pages into coherent skill units using three strategies (smart, grouped, individual).
  • Generates SKILL.md with spec-compliant frontmatter, numbered procedural steps, context sections, and a ## Related Skills section for agent-to-agent navigation.
  • Moves detailed concept and reference content into references/ for progressive disclosure (keeps each SKILL.md under 500 lines).
  • Resolves all relative doc paths to repo-root-relative paths, and converts doc-to-doc cross-references into skill-to-skill pointers.
  • Converts MyST/Sphinx directives ({include}, {mermaid}, :::{note}, etc.) to standard markdown.
  • Supports --prefix for consistent naming (e.g. --prefix nemoclaw produces nemoclaw-get-started, nemoclaw-manage-policy).
  • Supports --name-map overrides and --dry-run for previewing output.

New: .agents/skills/docs/ (7 generated skills)

Skill Source docs Lines
nemoclaw-overview about/overview, about/how-it-works, about/release-notes 133
nemoclaw-get-started get-started/quickstart 35
nemoclaw-configure-inference inference/switch-inference-providers 67
nemoclaw-manage-policy network-policy/approve-network-requests, network-policy/customize-network-policy 174
nemoclaw-monitor-sandbox monitoring/monitor-sandbox-activity 92
nemoclaw-deploy-remote deployment/deploy-to-remote-gpu, deployment/set-up-telegram-bridge 152
nemoclaw-reference reference/architecture, commands, inference-profiles, network-policies, troubleshooting 21 + 5 refs

Updated: contributing guides

  • CONTRIBUTING.md: added "Doc-to-Skills Pipeline" section with the canonical regeneration command, flags table, and generated skill structure.
  • docs/CONTRIBUTING.md: added "Doc-derived skills" section with the skill-to-source mapping table, regeneration instructions, and a summary of how the script works.

Both guides make clear that docs/ is the source of truth and .agents/skills/docs/ is autogenerated — never hand-edit the generated files.

Type of Change

  • Code change for a new feature, bug fix, or refactor.
  • Code change with doc updates.
  • Doc only. Prose changes without code sample modifications.
  • Doc only. Includes code sample changes.

Testing

  • make check passes.
  • npm test passes.
  • make docs builds without warnings. (for doc-only changes)
  • Ran python scripts/docs-to-skills.py docs/ .agents/skills/docs/ --prefix nemoclaw and verified:
    • 7 skills generated from 15 doc pages, all under 500 lines.
    • No remaining ../ relative paths in generated SKILL.md files.
    • Cross-references correctly resolve to skill-to-skill pointers.
    • --dry-run produces matching output without writing files.

Checklist

General

  • I have read and followed the contributing guide.
  • I have read and followed the style guide. (for doc-only changes)

Code Changes

  • make format applied (TypeScript and Python).
  • Tests added or updated for new or changed behavior.
  • No secrets, API keys, or credentials committed.
  • Doc pages updated for any user-facing behavior changes (new commands, changed defaults, new features, bug fixes that contradict existing docs).

Doc Changes

  • Follows the style guide. Try running the update-docs agent skill to draft changes while complying with the style guide. For example, prompt your agent with "/update-docs catch up the docs for the new changes I made in this PR."
  • New pages include SPDX license header and frontmatter, if creating a new page.
  • Cross-references and links verified.

Summary by CodeRabbit

  • Documentation

    • Added comprehensive NemoClaw documentation covering getting started, sandbox monitoring, policy management, remote deployment, and model configuration.
    • Added reference guides for architecture, CLI commands, inference profiles, and network policies.
    • Added troubleshooting guide for common issues.
  • Chores

    • Updated contributing guidelines for documentation workflow.

@miyoungc miyoungc self-assigned this Mar 21, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 21, 2026

📝 Walkthrough

Walkthrough

Adds a doc-to-skills pipeline and a large set of autogenerated NemoClaw skill documentation pages under .agents/skills/docs/, plus a new scripts/docs-to-skills.py CLI that converts docs/ Markdown (frontmatter/H2) into SKILL.md and references/ artifacts.

Changes

Cohort / File(s) Summary
Docs-to-Skills Script
scripts/docs-to-skills.py
New executable script that parses docs/ Markdown (YAML frontmatter, H2 sections), converts MyST/Sphinx constructs, groups pages (smart/grouped/individual), rewrites links, and generates skill directories with SKILL.md and references/ files; supports CLI flags and --dry-run.
Autogenerated Skills — Overview & References
.agents/skills/docs/nemoclaw-overview/SKILL.md, .agents/skills/docs/nemoclaw-overview/references/overview.md, .agents/skills/docs/nemoclaw-overview/references/how-it-works.md, .agents/skills/docs/nemoclaw-overview/references/release-notes.md
New high-level NemoClaw overview and architecture reference pages, including control-flow descriptions and release notes.
Autogenerated Skills — Get Started / Reference
.agents/skills/docs/nemoclaw-get-started/SKILL.md, .agents/skills/docs/nemoclaw-reference/SKILL.md, .agents/skills/docs/nemoclaw-reference/references/architecture.md, .../references/commands.md, .../references/inference-profiles.md, .../references/network-policies.md, .../references/troubleshooting.md
Added onboarding, CLI reference, architecture details, inference profiles, network policy documentation, and troubleshooting guidance.
Autogenerated Skills — Procedures / Ops
.agents/skills/docs/nemoclaw-configure-inference/SKILL.md, .agents/skills/docs/nemoclaw-deploy-remote/SKILL.md, .agents/skills/docs/nemoclaw-manage-policy/SKILL.md, .agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md
New procedural docs covering runtime model switching, remote deploy (Brev + Telegram bridge), policy management via TUI, and sandbox monitoring/troubleshooting steps.
Contributing / Process
CONTRIBUTING.md, docs/CONTRIBUTING.md
Documents the doc-to-skills pipeline: source must be docs/, regeneration command (python scripts/docs-to-skills.py docs/ .agents/skills/docs/ --prefix nemoclaw), supported flags, and that .agents/skills/docs/ is autogenerated except preserved ## Gotchas.

Sequence Diagram(s)

sequenceDiagram
    actor User as User/CLI
    participant Scanner as File Scanner
    participant Parser as Metadata Parser
    participant Grouper as Skill Grouper
    participant Generator as Output Generator
    participant Writer as File Writer

    User->>Scanner: Run script with docs_dir, output_dir, flags
    Scanner->>Scanner: Discover `*.md` files
    Scanner->>Parser: Send file contents
    loop per file
        Parser->>Parser: Extract frontmatter & H2 sections
        Parser->>Parser: Normalize MyST/Sphinx, rewrite links
        Parser->>Grouper: Emit normalized page metadata
    end
    Grouper->>Grouper: Apply grouping strategy
    Grouper->>Generator: Build skill groups & reference map
    loop per skill group
        Generator->>Generator: Compose `SKILL.md` and `references/`
        Generator->>Writer: Queue files to write
    end
    Writer->>User: Print inventory and stats
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested labels

documentation

Suggested reviewers

  • jacobtomlinson
  • ericksoa

Poem

🐰 I nibble through docs, tidy and bright,
I stitch pages into skills through the night.
From Markdown burrows to SKILL.md springs,
NemoClaw’s guides now hop on helpful wings. 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title is vague and uses generic terms ('chore', 'add docs-to-skills pipeline') that don't clearly convey the primary change—converting documentation to skills artifacts. Revise the title to clearly specify the main change, such as 'chore: convert documentation to Agent Skills using docs-to-skills pipeline' or 'feat: add docs-to-skills script and generate NemoClaw skills'.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed Docstring coverage is 83.33% which is sufficient. The required threshold is 80.00%.

✏️ 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 docs-as-skills

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

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 21, 2026

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

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: 7

🧹 Nitpick comments (1)
.agents/skills/docs/nemoclaw-manage-policy/SKILL.md (1)

10-14: Consolidate redundant prerequisite entries.

The prerequisites list "A running NemoClaw sandbox" twice (lines 12 and 14). Line 14 provides more specific context about static vs. dynamic changes. Consider removing line 12 or merging the information to avoid redundancy.

📝 Suggested consolidation
 ## Prerequisites
 
-- A running NemoClaw sandbox.
 - The OpenShell CLI on your `PATH`.
 - A running NemoClaw sandbox for dynamic changes, or the NemoClaw source repository for static changes.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-manage-policy/SKILL.md around lines 10 - 14, In
the "Prerequisites" section remove the redundant plain entry "A running NemoClaw
sandbox" and consolidate into the more specific line that mentions sandbox vs
source repository (keep the line that explains "A running NemoClaw sandbox for
dynamic changes, or the NemoClaw source repository for static changes" and
delete the duplicate); update the Prerequisites paragraph under the
"Prerequisites" heading to contain only the consolidated, non-redundant entries
so the list is clear and not duplicated.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md:
- Around line 69-72: Replace the hard-coded sandbox name in the Step 4 example
command so it matches the placeholder used earlier: change the command string
"nemoclaw my-assistant connect" to "nemoclaw <name> connect" (the line
containing the example command in SKILL.md near the openclaw example), keeping
the rest of the example (the openclaw agent command) unchanged.

In @.agents/skills/docs/nemoclaw-reference/references/inference-profiles.md:
- Around line 40-50: Remove the leading shell prompt character from the two
console code blocks to satisfy markdownlint MD014: replace lines containing "$
openshell inference set --provider nvidia-nim --model
nvidia/nemotron-3-super-120b-a12b" and "$ openshell inference set --provider
nvidia-nim --model <model-name>" with the same commands without the leading "$"
so the blocks show just "openshell inference set --provider nvidia-nim --model
nvidia/nemotron-3-super-120b-a12b" and "openshell inference set --provider
nvidia-nim --model <model-name>" respectively.

In `@scripts/docs-to-skills.py`:
- Around line 305-327: The link-rewriting logic should strip and preserve URL
fragments before checking suffixes and determining skill mappings: extract the
fragment from raw_path (e.g., split on '#' into path and fragment), use the path
part for the ".md"/".html" suffix check and resolving (variables: raw_path ->
path_part, fragment), then when constructing the replacement preserve the
fragment—if rel_str maps to a skill via doc_to_skill produce the intra-skill
link to the generated file or anchor (use skill_name plus the fragment or the
generated filename#fragment) instead of collapsing all to "see the `skill`
skill"; otherwise include the fragment on the repo-root-relative return value
(use link_text and rel_to_repo plus "#fragment" when present).
- Around line 223-235: The current re.sub calls that replace ```{include}```
blocks (the two regexes operating on the variable text) are discarding included
content; instead, detect the included path captured by \1, if it is a local file
resolve and read its contents and inline or convert it to a linked reference
before replacing; modify the code around the two re.sub usages (the blocks that
operate on text) to call a helper (e.g., resolve_include(path) or
inline_local_includes(text)) that checks whether the include target is a local
repo file, reads and returns its markdown (or produces a reference link) and
then substitutes that content into text rather than the placeholder sentence so
procedure SKILL.md files keep required install/launch steps.
- Around line 119-126: The block-list handling drops YAML block-style lists
because when a parent key was pre-initialized as an empty dict ({}), the '- '
branch treats it as non-list and skips attaching items; in the code around the
'- ' handling use _current_dict(result, parent_stack) and current_key to find
the target, update that logic to detect if target[current_key] exists as an
empty dict and convert it to a list before appending (i.e., if
isinstance(target[current_key], dict) and not target[current_key]: set
target[current_key] = []), otherwise preserve existing list behavior; apply the
same fix to the analogous branch handling keys created earlier so block-style
lists like keywords: / audience: become list[str] instead of {}.
- Around line 1025-1054: After building skill_names via generate_skill_name for
each group, detect duplicate generated names (sname) across groups and fail
fast: build a reverse map from sname → list of group_names (or count), and if
any sname maps to more than one group, print/log the conflicting group names and
raise/exit with a non-zero error before calling generate_skill; update the code
paths that use skill_names (the loops referencing skill_names[group_name] and
the subsequent generate_skill calls) to assume uniqueness is enforced. This
check should reference generate_skill_name, skill_names, groups, and
generate_skill so collisions are caught early and no SKILL.md or references/
directories get silently overwritten.
- Around line 671-674: The YAML frontmatter writer in scripts/docs-to-skills.py
is emitting an unquoted description which breaks YAML when the prose contains
colons; update the SKILL.md generation so the description value is safely quoted
or YAML-escaped before writing (modify the code that calls
lines.append(f"description: {description}") to wrap/escape description, e.g.,
using json.dumps(description) or a YAML-escaping helper), keep the surrounding
frontmatter writes (lines.append("---") and lines.append(f"name: {name}"))
unchanged, and then regenerate the skills as instructed.

---

Nitpick comments:
In @.agents/skills/docs/nemoclaw-manage-policy/SKILL.md:
- Around line 10-14: In the "Prerequisites" section remove the redundant plain
entry "A running NemoClaw sandbox" and consolidate into the more specific line
that mentions sandbox vs source repository (keep the line that explains "A
running NemoClaw sandbox for dynamic changes, or the NemoClaw source repository
for static changes" and delete the duplicate); update the Prerequisites
paragraph under the "Prerequisites" heading to contain only the consolidated,
non-redundant entries so the list is clear and not duplicated.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 3771d771-0c44-43e4-a172-f9d8e1e813b1

📥 Commits

Reviewing files that changed from the base of the PR and between 255e606 and 52dbea1.

📒 Files selected for processing (16)
  • .agents/skills/docs/nemoclaw-configure-inference/SKILL.md
  • .agents/skills/docs/nemoclaw-deploy-remote/SKILL.md
  • .agents/skills/docs/nemoclaw-get-started/SKILL.md
  • .agents/skills/docs/nemoclaw-manage-policy/SKILL.md
  • .agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md
  • .agents/skills/docs/nemoclaw-overview/SKILL.md
  • .agents/skills/docs/nemoclaw-overview/references/how-it-works.md
  • .agents/skills/docs/nemoclaw-overview/references/overview.md
  • .agents/skills/docs/nemoclaw-overview/references/release-notes.md
  • .agents/skills/docs/nemoclaw-reference/SKILL.md
  • .agents/skills/docs/nemoclaw-reference/references/architecture.md
  • .agents/skills/docs/nemoclaw-reference/references/commands.md
  • .agents/skills/docs/nemoclaw-reference/references/inference-profiles.md
  • .agents/skills/docs/nemoclaw-reference/references/network-policies.md
  • .agents/skills/docs/nemoclaw-reference/references/troubleshooting.md
  • scripts/docs-to-skills.py

Comment on lines +69 to +72
```console
$ nemoclaw my-assistant connect
$ openclaw agent --agent main --local -m "Test inference" --session-id debug
```
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

Keep the sandbox name placeholder consistent in Step 4.

Earlier steps use <name>, but Line 70 switches to my-assistant. A reader who copy-pastes Step 4 as written will connect to the wrong sandbox unless they notice the hard-coded example.

✏️ Minimal fix
 ```console
-$ nemoclaw my-assistant connect
+$ nemoclaw <name> connect
 $ openclaw agent --agent main --local -m "Test inference" --session-id debug
</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

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

In @.agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md around lines 69 - 72,
Replace the hard-coded sandbox name in the Step 4 example command so it matches
the placeholder used earlier: change the command string "nemoclaw my-assistant
connect" to "nemoclaw <name> connect" (the line containing the example command
in SKILL.md near the openclaw example), keeping the rest of the example (the
openclaw agent command) unchanged.

Comment on lines +40 to +50
```console
$ openshell inference set --provider nvidia-nim --model nvidia/nemotron-3-super-120b-a12b
```

## Switching Models at Runtime

After the sandbox is running, switch models with the OpenShell CLI:

```console
$ openshell inference set --provider nvidia-nim --model <model-name>
```
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

Remove the shell prompt from these console blocks.

markdownlint MD014 is firing on both examples. If you're not showing command output, drop the leading $ so this page passes lint cleanly.

✏️ Minimal fix
 ```console
-$ openshell inference set --provider nvidia-nim --model nvidia/nemotron-3-super-120b-a12b
+openshell inference set --provider nvidia-nim --model nvidia/nemotron-3-super-120b-a12b

...

-$ openshell inference set --provider nvidia-nim --model <model-name>
+openshell inference set --provider nvidia-nim --model <model-name>
</details>

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.21.0)</summary>

[warning] 41-41: Dollar signs used before commands without showing output

(MD014, commands-show-output)

---

[warning] 49-49: Dollar signs used before commands without showing output

(MD014, commands-show-output)

</details>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-reference/references/inference-profiles.md
around lines 40 - 50, Remove the leading shell prompt character from the two
console code blocks to satisfy markdownlint MD014: replace lines containing "$
openshell inference set --provider nvidia-nim --model
nvidia/nemotron-3-super-120b-a12b" and "$ openshell inference set --provider
nvidia-nim --model " with the same commands without the leading "$"
so the blocks show just "openshell inference set --provider nvidia-nim --model
nvidia/nemotron-3-super-120b-a12b" and "openshell inference set --provider
nvidia-nim --model " respectively.


</details>

<!-- fingerprinting:phantom:medusa:grasshopper -->

<!-- This is an auto-generated comment by CodeRabbit -->

Comment thread scripts/docs-to-skills.py
Comment on lines +119 to +126
if stripped.startswith("- "):
value = stripped[2:].strip().strip('"').strip("'")
if current_key and current_key in _current_dict(result, parent_stack):
target = _current_dict(result, parent_stack)
if not isinstance(target[current_key], list):
target[current_key] = []
target[current_key].append(value)
continue
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 | 🟠 Major

Block-style YAML lists are dropped here.

After Line 149 creates {} for key:, the - item branch at Line 119 no longer has a parent key to attach to. Frontmatter like keywords: / audience: written as block lists is parsed as {} instead of list[str], so that metadata silently disappears.

🩹 Minimal fix
         if stripped.startswith("- "):
             value = stripped[2:].strip().strip('"').strip("'")
-            if current_key and current_key in _current_dict(result, parent_stack):
-                target = _current_dict(result, parent_stack)
+            target = _current_dict(result, parent_stack)
+            if isinstance(target, list):
+                target.append(value)
+            elif current_key and current_key in target:
                 if not isinstance(target[current_key], list):
                     target[current_key] = []
                 target[current_key].append(value)
+            elif parent_stack:
+                list_key, parent_dict, _ = parent_stack[-1]
+                if parent_dict.get(list_key) == {}:
+                    parent_dict[list_key] = [value]
             continue

Also applies to: 148-151

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

In `@scripts/docs-to-skills.py` around lines 119 - 126, The block-list handling
drops YAML block-style lists because when a parent key was pre-initialized as an
empty dict ({}), the '- ' branch treats it as non-list and skips attaching
items; in the code around the '- ' handling use _current_dict(result,
parent_stack) and current_key to find the target, update that logic to detect if
target[current_key] exists as an empty dict and convert it to a list before
appending (i.e., if isinstance(target[current_key], dict) and not
target[current_key]: set target[current_key] = []), otherwise preserve existing
list behavior; apply the same fix to the analogous branch handling keys created
earlier so block-style lists like keywords: / audience: become list[str] instead
of {}.

Comment thread scripts/docs-to-skills.py
Comment on lines +223 to +235
# Multi-line {include} directives with :start-after: etc.
text = re.sub(
r"```\{include\}\s*([^\n]+)\n(?::[^\n]+\n)*```",
r"> *Content included from \1 — see the original doc for full text.*",
text,
)

# Single-line {include} directives
text = re.sub(
r"```\{include\}\s*([^\n]+)\n```",
r"> *Content included from \1 — see the original doc for full text.*",
text,
)
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 | 🟠 Major

Don't strip required {include} content out of procedure skills.

These substitutions replace included markdown with a placeholder sentence. In this PR, .agents/skills/docs/nemoclaw-get-started/SKILL.md loses the actual install/launch steps because the README.md include was discarded. Please inline local includes, or at least materialize them as linked reference content, before generating procedure skills.

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

In `@scripts/docs-to-skills.py` around lines 223 - 235, The current re.sub calls
that replace ```{include}``` blocks (the two regexes operating on the variable
text) are discarding included content; instead, detect the included path
captured by \1, if it is a local file resolve and read its contents and inline
or convert it to a linked reference before replacing; modify the code around the
two re.sub usages (the blocks that operate on text) to call a helper (e.g.,
resolve_include(path) or inline_local_includes(text)) that checks whether the
include target is a local repo file, reads and returns its markdown (or produces
a reference link) and then substitutes that content into text rather than the
placeholder sentence so procedure SKILL.md files keep required install/launch
steps.

Comment thread scripts/docs-to-skills.py
Comment on lines +305 to +327
# Skip external URLs and anchors
if raw_path.startswith(("http://", "https://", "#", "mailto:")):
return match.group(0)

# Skip non-doc files
if not raw_path.endswith(".md") and not raw_path.endswith(".html"):
return match.group(0)

# Resolve relative path against the source doc's directory
resolved = (source_dir / raw_path).resolve()
try:
rel_to_repo = resolved.relative_to(repo_root)
except ValueError:
return match.group(0)

# Check if target doc maps to a generated skill
rel_str = str(rel_to_repo)
if rel_str in doc_to_skill:
skill_name = doc_to_skill[rel_str]
return f"{link_text} (see the `{skill_name}` skill)"

# Fall back to repo-root-relative path
return f"[{link_text}]({rel_to_repo})"
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 | 🟠 Major

Preserve same-skill targets and #anchor fragments when rewriting doc links.

Line 310 only rewrites paths ending exactly in .md / .html, so links like foo.md#bar are skipped. And when the target doc lands in the same generated skill, Line 324 collapses it to see the <skill> skill, which is why references/architecture.md now self-references nemoclaw-reference instead of linking to the specific reference page. Parse the fragment before the suffix check and keep intra-skill links pointing at the generated file or anchor.

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

In `@scripts/docs-to-skills.py` around lines 305 - 327, The link-rewriting logic
should strip and preserve URL fragments before checking suffixes and determining
skill mappings: extract the fragment from raw_path (e.g., split on '#' into path
and fragment), use the path part for the ".md"/".html" suffix check and
resolving (variables: raw_path -> path_part, fragment), then when constructing
the replacement preserve the fragment—if rel_str maps to a skill via
doc_to_skill produce the intra-skill link to the generated file or anchor (use
skill_name plus the fragment or the generated filename#fragment) instead of
collapsing all to "see the `skill` skill"; otherwise include the fragment on the
repo-root-relative return value (use link_text and rel_to_repo plus "#fragment"
when present).

Comment thread scripts/docs-to-skills.py
Comment on lines +671 to +674
lines.append("---")
lines.append(f"name: {name}")
lines.append(f"description: {description}")
lines.append("---")
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 | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
python - <<'PY'
from pathlib import Path
import importlib.util
import subprocess
import sys

if importlib.util.find_spec("yaml") is None:
    subprocess.check_call([sys.executable, "-m", "pip", "install", "--quiet", "pyyaml"])

import yaml

for path in sorted(Path(".agents/skills/docs").rglob("SKILL.md")):
    text = path.read_text(encoding="utf-8")
    if not text.startswith("---\n"):
        continue
    try:
        _, frontmatter, _ = text.split("---", 2)
        yaml.safe_load(frontmatter)
    except Exception as exc:
        print(f"{path}: {exc}")
PY

Repository: NVIDIA/NemoClaw

Length of output: 1070


🏁 Script executed:

sed -n '665,680p' scripts/docs-to-skills.py

Repository: NVIDIA/NemoClaw

Length of output: 435


🏁 Script executed:

head -20 scripts/docs-to-skills.py | grep -n "import"

Repository: NVIDIA/NemoClaw

Length of output: 41


🏁 Script executed:

head -50 scripts/docs-to-skills.py | cat -n

Repository: NVIDIA/NemoClaw

Length of output: 2894


🏁 Script executed:

grep -n "^import\|^from" scripts/docs-to-skills.py | head -20

Repository: NVIDIA/NemoClaw

Length of output: 233


Fix unquoted YAML description frontmatter and regenerate skills.

The description field in the SKILL.md frontmatter is written as unquoted raw prose (line 673). When descriptions contain colons (e.g., "Also covers: ..."), the YAML parser fails with "mapping values are not allowed here". This affects 4 generated files:

  • .agents/skills/docs/nemoclaw-deploy-remote/SKILL.md
  • .agents/skills/docs/nemoclaw-manage-policy/SKILL.md
  • .agents/skills/docs/nemoclaw-overview/SKILL.md
  • .agents/skills/docs/nemoclaw-reference/SKILL.md
🛠️ Fix
+import json
...
     lines.append("---")
     lines.append(f"name: {name}")
-    lines.append(f"description: {description}")
+    lines.append(f"description: {json.dumps(description)}")
     lines.append("---")

Then regenerate the skills:

python scripts/docs-to-skills.py docs/ .agents/skills/docs/ --prefix nemoclaw
📝 Committable suggestion

‼️ 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.

Suggested change
lines.append("---")
lines.append(f"name: {name}")
lines.append(f"description: {description}")
lines.append("---")
lines.append("---")
lines.append(f"name: {name}")
lines.append(f"description: {json.dumps(description)}")
lines.append("---")
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/docs-to-skills.py` around lines 671 - 674, The YAML frontmatter
writer in scripts/docs-to-skills.py is emitting an unquoted description which
breaks YAML when the prose contains colons; update the SKILL.md generation so
the description value is safely quoted or YAML-escaped before writing (modify
the code that calls lines.append(f"description: {description}") to wrap/escape
description, e.g., using json.dumps(description) or a YAML-escaping helper),
keep the surrounding frontmatter writes (lines.append("---") and
lines.append(f"name: {name}")) unchanged, and then regenerate the skills as
instructed.

Comment thread scripts/docs-to-skills.py
Comment on lines +1025 to +1054
skill_names: dict[str, str] = {} # group_name → skill_name
for group_name, group_pages in sorted(groups.items()):
sname = generate_skill_name(
group_name, group_pages,
prefix=args.prefix,
name_overrides=name_overrides,
)
skill_names[group_name] = sname

doc_to_skill: dict[str, str] = {}
for group_name, group_pages in groups.items():
sname = skill_names[group_name]
for page in group_pages:
try:
rel = page.path.resolve().relative_to(repo_root)
doc_to_skill[str(rel)] = sname
except ValueError:
pass

# Generate skills
print(f"\n{'[DRY RUN] ' if args.dry_run else ''}Generating skills to {args.output_dir}/")
summaries: list[dict] = []
for group_name, group_pages in sorted(groups.items()):
name = skill_names[group_name]
summary = generate_skill(
name, group_pages, args.output_dir,
docs_dir=docs_dir_resolved,
doc_to_skill=doc_to_skill,
dry_run=args.dry_run,
)
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 | 🟠 Major

Fail fast on duplicate generated skill names.

Nothing checks that generate_skill_name() is unique across groups. That's risky here because CATEGORY_NOUNS already normalizes both about and root to overview, and --name-map can create more collisions. If two groups resolve to the same name, the later generate_skill() call writes into the same directory and silently overwrites SKILL.md and references/.

🧭 Minimal fix
     skill_names: dict[str, str] = {}  # group_name → skill_name
+    generated_by_name: dict[str, list[str]] = {}
     for group_name, group_pages in sorted(groups.items()):
         sname = generate_skill_name(
             group_name, group_pages,
             prefix=args.prefix,
             name_overrides=name_overrides,
         )
         skill_names[group_name] = sname
+        generated_by_name.setdefault(sname, []).append(group_name)
+
+    duplicates = {
+        sname: owners for sname, owners in generated_by_name.items() if len(owners) > 1
+    }
+    if duplicates:
+        for sname, owners in sorted(duplicates.items()):
+            print(
+                f"Error: generated skill name '{sname}' is shared by groups: {', '.join(owners)}",
+                file=sys.stderr,
+            )
+        sys.exit(1)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/docs-to-skills.py` around lines 1025 - 1054, After building
skill_names via generate_skill_name for each group, detect duplicate generated
names (sname) across groups and fail fast: build a reverse map from sname → list
of group_names (or count), and if any sname maps to more than one group,
print/log the conflicting group names and raise/exit with a non-zero error
before calling generate_skill; update the code paths that use skill_names (the
loops referencing skill_names[group_name] and the subsequent generate_skill
calls) to assume uniqueness is enforced. This check should reference
generate_skill_name, skill_names, groups, and generate_skill so collisions are
caught early and no SKILL.md or references/ directories get silently
overwritten.

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: 6

♻️ Duplicate comments (2)
.agents/skills/docs/nemoclaw-reference/references/inference-profiles.md (1)

41-41: ⚠️ Potential issue | 🟡 Minor

Remove the shell prompt from these console blocks.

markdownlint MD014 is firing on both examples. If you're not showing command output, drop the leading $ so this page passes lint cleanly.

✏️ Minimal fix
 ```console
-$ openshell inference set --provider nvidia-nim --model nvidia/nemotron-3-super-120b-a12b
+openshell inference set --provider nvidia-nim --model nvidia/nemotron-3-super-120b-a12b

...

-$ openshell inference set --provider nvidia-nim --model <model-name>
+openshell inference set --provider nvidia-nim --model <model-name>
</details>


Also applies to: 49-49

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-reference/references/inference-profiles.md at
line 41, The console code blocks include a leading shell prompt ($) which
triggers markdownlint MD014; remove the leading "$ " from the command lines so
the blocks contain raw commands like "openshell inference set --provider
nvidia-nim --model nvidia/nemotron-3-super-120b-a12b" (and the variant with
"") in the
.agents/skills/docs/nemoclaw-reference/references/inference-profiles.md file to
resolve the lint error.


</details>

</blockquote></details>
<details>
<summary>.agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md (1)</summary><blockquote>

`69-72`: _⚠️ Potential issue_ | _🟡 Minor_

**Keep the sandbox name placeholder consistent in Step 4.**

Earlier steps use `<name>`, but Line 70 switches to `my-assistant`. A reader who copy-pastes Step 4 as written will connect to the wrong sandbox unless they notice the hard-coded example.




<details>
<summary>✏️ Minimal fix</summary>

```diff
 ```console
-$ nemoclaw my-assistant connect
+$ nemoclaw <name> connect
 $ openclaw agent --agent main --local -m "Test inference" --session-id debug
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md around lines 69 - 72,
Step 4 in SKILL.md uses a hard-coded sandbox name in the command "nemoclaw
my-assistant connect" which is inconsistent with earlier steps that use the
placeholder ""; update that command to use the same placeholder (i.e.,
change "nemoclaw my-assistant connect" to "nemoclaw connect") so readers
can copy-paste the step and connect to the intended sandbox, leaving the
accompanying "openclaw agent --agent main --local -m "Test inference"
--session-id debug" line unchanged.


</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>🧹 Nitpick comments (4)</summary><blockquote>

<details>
<summary>CONTRIBUTING.md (1)</summary><blockquote>

`118-124`: **Add a language identifier to the fenced code block.**

The directory structure example should specify a language identifier (e.g., `text` or `tree`) to satisfy markdownlint MD040 and improve rendering consistency.



<details>
<summary>📝 Proposed fix</summary>

```diff
-```
+```text
 .agents/skills/docs/<skill-name>/
 ├── SKILL.md              # Frontmatter + procedures + related skills
 └── references/           # Detailed concept and reference content (loaded on demand)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CONTRIBUTING.md` around lines 118 - 124, The fenced code block showing the
directory tree for ".agents/skills/docs/<skill-name>/" lacks a language
identifier; update the markdown block around that tree sample to include a
language tag such as "text" or "tree" (e.g., change ``` to ```text) so the
sample snippet (the SKILL.md and references/ tree) satisfies markdownlint MD040
and renders consistently.
.agents/skills/docs/nemoclaw-manage-policy/SKILL.md (2)

10-14: Consider refining the prerequisites list for clarity.

Line 14 repeats "A running NemoClaw sandbox" from line 12. Consider consolidating these into a single, clearer prerequisite that distinguishes between dynamic changes (requires running sandbox) and static changes (requires source repository access).

✏️ Suggested refinement
 ## Prerequisites
 
-- A running NemoClaw sandbox.
 - The OpenShell CLI on your `PATH`.
-- A running NemoClaw sandbox for dynamic changes, or the NemoClaw source repository for static changes.
+ - For dynamic policy changes: A running NemoClaw sandbox.
+ - For static policy changes: Access to the NemoClaw source repository.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-manage-policy/SKILL.md around lines 10 - 14, In
the "Prerequisites" section of SKILL.md consolidate the duplicated "A running
NemoClaw sandbox" entries into one clear bullet that distinguishes workflow
types: state that for dynamic changes you need "A running NemoClaw sandbox" and
for static changes you need "Access to the NemoClaw source repository" (and keep
the existing "OpenShell CLI on your PATH" bullet); update the Prerequisites
header and bullets so they're concise and non‑redundant.

27-31: Consider clarifying the path assumption in the SSH example.

The SSH command uses a hardcoded path /home/ubuntu/nemoclaw which may not match all deployment scenarios. Consider adding a note that users should adjust the path to match their installation location, or use a more obvious placeholder like <nemoclaw-install-path>.

📝 Suggested clarification
 For a remote sandbox, pass the instance name:
 
 ```console
-$ ssh my-gpu-box 'cd /home/ubuntu/nemoclaw && . .env && openshell term'
+$ ssh my-gpu-box 'cd /path/to/nemoclaw && . .env && openshell term'

+Replace /path/to/nemoclaw with your actual NemoClaw installation directory.

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-manage-policy/SKILL.md around lines 27 - 31,
Update the SSH example in SKILL.md to avoid a hardcoded path: replace the
literal '/home/ubuntu/nemoclaw' with a clear placeholder such as
'/path/to/nemoclaw' (or '') and add a short follow-up
note telling users to substitute this with their actual NemoClaw installation
directory; keep the rest of the command (the '. .env' sourcing and 'openshell
term' invocation) unchanged so the example still demonstrates the intended
workflow.


</details>

</blockquote></details>
<details>
<summary>.agents/skills/docs/nemoclaw-reference/references/troubleshooting.md (1)</summary><blockquote>

`35-41`: **Consider varying sentence structure for better readability.**

Three consecutive sentences beginning with "If" (lines 35-36, and the implied conditional) can feel repetitive. While the current structure clearly conveys the conditional logic, consider minor rephrasing for flow.



<details>
<summary>✏️ Suggested style improvement</summary>

```diff
-If the version is below 20, install a supported release.
-If you use nvm, run:
+If the version is below 20, install a supported release. For nvm users, run:
 
 ```console
 $ nvm install 20

This maintains clarity while improving flow.

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

In @.agents/skills/docs/nemoclaw-reference/references/troubleshooting.md around
lines 35 - 41, The three consecutive lines starting with "If" (the sentence "If
the version is below 20, install a supported release." followed by the nvm
instructions block containing "nvm install 20" and "nvm use 20") feel
repetitive; reword the prose to combine or vary these sentences for better
flow—for example, merge the conditional and action into one sentence like "If
your Node.js version is below 20, install and switch to a supported release
using nvm (see nvm install 20 and nvm use 20)," and keep the existing code block
unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.agents/skills/docs/nemoclaw-configure-inference/SKILL.md:
- Line 6: The heading currently reads "Nemoclaw Configure Inference" with
incorrect casing; update the heading text in SKILL.md to "NemoClaw Configure
Inference" (capital C) to match the required product casing convention used for
NemoClaw/OpenClaw/OpenShell; locate the top-level heading line in SKILL.md and
correct the word "Nemoclaw" to "NemoClaw".

In @.agents/skills/docs/nemoclaw-deploy-remote/SKILL.md:
- Line 6: Update the heading text to use the correct product casing: change the
heading string "Nemoclaw Deploy Remote" to "NemoClaw Deploy Remote" in SKILL.md
so it matches the required casing for NemoClaw (ensure any other occurrences in
this file use the same "NemoClaw" capitalization).

In @.agents/skills/docs/nemoclaw-get-started/SKILL.md:
- Line 6: The heading currently reads "# Nemoclaw Get Started" with incorrect
casing; update the heading text to "# NemoClaw Get Started" so the product name
uses the correct CamelCase (NemoClaw) to match naming guidelines and other
references in this document.

In @.agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md:
- Line 6: Update the heading string in SKILL.md to use the correct casing
"NemoClaw" instead of "Nemoclaw"; locate the heading line that currently reads
"Nemoclaw Monitor Sandbox" and change it to "NemoClaw Monitor Sandbox" so it
matches the required naming convention used for NemoClaw/OpenClaw/OpenShell.

In @.agents/skills/docs/nemoclaw-overview/SKILL.md:
- Around line 76-81: Change the attributive phrase "open source" to the
hyphenated form "open-source" in the markdown text for NemoClaw: update "open
source reference stack" to "open-source reference stack" in the first sentence
and update both occurrences of "open source models" to "open-source models" in
the sentences mentioning NVIDIA Nemotron and the NVIDIA OpenShell runtime;
search for the phrase "NVIDIA NemoClaw" / the three sentences in the SKILL.md
snippet to locate and apply the edits.

In @.agents/skills/docs/nemoclaw-reference/references/troubleshooting.md:
- Around line 7-9: Replace the malformed admonition `> **Get Help:** :class:
tip` in the troubleshooting.md content with a proper MyST-style block like `>
**Tip:**` (or `> **Get Help:**`) followed directly by the tip text; remove the
`:class: tip` token so the admonition renders correctly (locate the string `>
**Get Help:** :class: tip` in the file and update it to `> **Tip:** If your
issue is not listed here, ...` or similar consistent wording).

---

Duplicate comments:
In @.agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md:
- Around line 69-72: Step 4 in SKILL.md uses a hard-coded sandbox name in the
command "nemoclaw my-assistant connect" which is inconsistent with earlier steps
that use the placeholder "<name>"; update that command to use the same
placeholder (i.e., change "nemoclaw my-assistant connect" to "nemoclaw <name>
connect") so readers can copy-paste the step and connect to the intended
sandbox, leaving the accompanying "openclaw agent --agent main --local -m \"Test
inference\" --session-id debug" line unchanged.

In @.agents/skills/docs/nemoclaw-reference/references/inference-profiles.md:
- Line 41: The console code blocks include a leading shell prompt ($) which
triggers markdownlint MD014; remove the leading "$ " from the command lines so
the blocks contain raw commands like "openshell inference set --provider
nvidia-nim --model nvidia/nemotron-3-super-120b-a12b" (and the variant with
"<model-name>") in the
.agents/skills/docs/nemoclaw-reference/references/inference-profiles.md file to
resolve the lint error.

---

Nitpick comments:
In @.agents/skills/docs/nemoclaw-manage-policy/SKILL.md:
- Around line 10-14: In the "Prerequisites" section of SKILL.md consolidate the
duplicated "A running NemoClaw sandbox" entries into one clear bullet that
distinguishes workflow types: state that for dynamic changes you need "A running
NemoClaw sandbox" and for static changes you need "Access to the NemoClaw source
repository" (and keep the existing "OpenShell CLI on your PATH" bullet); update
the Prerequisites header and bullets so they're concise and non‑redundant.
- Around line 27-31: Update the SSH example in SKILL.md to avoid a hardcoded
path: replace the literal '/home/ubuntu/nemoclaw' with a clear placeholder such
as '/path/to/nemoclaw' (or '<nemoclaw-install-path>') and add a short follow-up
note telling users to substitute this with their actual NemoClaw installation
directory; keep the rest of the command (the '. .env' sourcing and 'openshell
term' invocation) unchanged so the example still demonstrates the intended
workflow.

In @.agents/skills/docs/nemoclaw-reference/references/troubleshooting.md:
- Around line 35-41: The three consecutive lines starting with "If" (the
sentence "If the version is below 20, install a supported release." followed by
the nvm instructions block containing "nvm install 20" and "nvm use 20") feel
repetitive; reword the prose to combine or vary these sentences for better
flow—for example, merge the conditional and action into one sentence like "If
your Node.js version is below 20, install and switch to a supported release
using nvm (see nvm install 20 and nvm use 20)," and keep the existing code block
unchanged.

In `@CONTRIBUTING.md`:
- Around line 118-124: The fenced code block showing the directory tree for
".agents/skills/docs/<skill-name>/" lacks a language identifier; update the
markdown block around that tree sample to include a language tag such as "text"
or "tree" (e.g., change ``` to ```text) so the sample snippet (the SKILL.md and
references/ tree) satisfies markdownlint MD040 and renders consistently.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 579ed51d-6311-493d-884f-577bfdeb1dee

📥 Commits

Reviewing files that changed from the base of the PR and between 52dbea1 and 5f1eb88.

📒 Files selected for processing (18)
  • .agents/skills/docs/nemoclaw-configure-inference/SKILL.md
  • .agents/skills/docs/nemoclaw-deploy-remote/SKILL.md
  • .agents/skills/docs/nemoclaw-get-started/SKILL.md
  • .agents/skills/docs/nemoclaw-manage-policy/SKILL.md
  • .agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md
  • .agents/skills/docs/nemoclaw-overview/SKILL.md
  • .agents/skills/docs/nemoclaw-overview/references/how-it-works.md
  • .agents/skills/docs/nemoclaw-overview/references/overview.md
  • .agents/skills/docs/nemoclaw-overview/references/release-notes.md
  • .agents/skills/docs/nemoclaw-reference/SKILL.md
  • .agents/skills/docs/nemoclaw-reference/references/architecture.md
  • .agents/skills/docs/nemoclaw-reference/references/commands.md
  • .agents/skills/docs/nemoclaw-reference/references/inference-profiles.md
  • .agents/skills/docs/nemoclaw-reference/references/network-policies.md
  • .agents/skills/docs/nemoclaw-reference/references/troubleshooting.md
  • CONTRIBUTING.md
  • docs/CONTRIBUTING.md
  • scripts/docs-to-skills.py
✅ Files skipped from review due to trivial changes (7)
  • .agents/skills/docs/nemoclaw-reference/SKILL.md
  • docs/CONTRIBUTING.md
  • .agents/skills/docs/nemoclaw-reference/references/network-policies.md
  • .agents/skills/docs/nemoclaw-reference/references/architecture.md
  • .agents/skills/docs/nemoclaw-overview/references/release-notes.md
  • .agents/skills/docs/nemoclaw-overview/references/how-it-works.md
  • scripts/docs-to-skills.py

Comment thread .agents/skills/docs/nemoclaw-configure-inference/SKILL.md
description: Provision a remote GPU VM with NemoClaw using Brev deployment. Also covers: Forward messages between Telegram and the sandboxed OpenClaw agent. Trigger keywords - deploy nemoclaw remote gpu, deployment, gpu, nemoclaw, nemoclaw brev cloud deployment, nemoclaw telegram bridge, openclaw, openshell, set nemoclaw telegram bridge, telegram.
---

# Nemoclaw Deploy Remote
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

Use correct casing for NemoClaw in the heading.

The heading uses "Nemoclaw" but should be "NemoClaw" with a capital C. As per coding guidelines, "NemoClaw, OpenClaw, and OpenShell must use correct casing."

✏️ Proposed fix
-# Nemoclaw Deploy Remote
+# NemoClaw Deploy Remote
📝 Committable suggestion

‼️ 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.

Suggested change
# Nemoclaw Deploy Remote
# NemoClaw Deploy Remote
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-deploy-remote/SKILL.md at line 6, Update the
heading text to use the correct product casing: change the heading string
"Nemoclaw Deploy Remote" to "NemoClaw Deploy Remote" in SKILL.md so it matches
the required casing for NemoClaw (ensure any other occurrences in this file use
the same "NemoClaw" capitalization).

description: Install NemoClaw, launch a sandbox, and run your first agent prompt. Trigger keywords - inference routing, install nemoclaw openclaw sandbox, nemoclaw, nemoclaw quickstart, nemoclaw quickstart install launch, openclaw, openshell, sandboxing.
---

# Nemoclaw Get Started
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

Use correct casing for NemoClaw in the heading.

The heading uses "Nemoclaw" but should be "NemoClaw" with a capital C. As per coding guidelines, "NemoClaw, OpenClaw, and OpenShell must use correct casing."

✏️ Proposed fix
-# Nemoclaw Get Started
+# NemoClaw Get Started
📝 Committable suggestion

‼️ 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.

Suggested change
# Nemoclaw Get Started
# NemoClaw Get Started
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-get-started/SKILL.md at line 6, The heading
currently reads "# Nemoclaw Get Started" with incorrect casing; update the
heading text to "# NemoClaw Get Started" so the product name uses the correct
CamelCase (NemoClaw) to match naming guidelines and other references in this
document.

description: Inspect sandbox health, trace agent behavior, and diagnose problems. Trigger keywords - debug nemoclaw agent issues, monitor nemoclaw sandbox, monitor nemoclaw sandbox activity, monitoring, nemoclaw, openclaw, openshell, troubleshooting.
---

# Nemoclaw Monitor Sandbox
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

Use correct casing for NemoClaw in the heading.

The heading uses "Nemoclaw" but should be "NemoClaw" with a capital C. As per coding guidelines, "NemoClaw, OpenClaw, and OpenShell must use correct casing."

✏️ Proposed fix
-# Nemoclaw Monitor Sandbox
+# NemoClaw Monitor Sandbox
📝 Committable suggestion

‼️ 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.

Suggested change
# Nemoclaw Monitor Sandbox
# NemoClaw Monitor Sandbox
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md at line 6, Update the
heading string in SKILL.md to use the correct casing "NemoClaw" instead of
"Nemoclaw"; locate the heading line that currently reads "Nemoclaw Monitor
Sandbox" and change it to "NemoClaw Monitor Sandbox" so it matches the required
naming convention used for NemoClaw/OpenClaw/OpenShell.

Comment on lines +76 to +81
NVIDIA NemoClaw is an open source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
It incorporates policy-based privacy and security guardrails, giving users control over their agents’ behavior and data handling.
This enables self-evolving claws to run more safely in clouds, on prem, RTX PCs and DGX Spark.

NemoClaw uses open source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
By combining powerful open source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
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

Fix compound adjective hyphenation.

When "open source" is used attributively (modifying a noun), it should be hyphenated as "open-source". This applies to:

  • Line 76: "open-source reference stack"
  • Line 80: "open-source models" (both instances)
  • Line 81: "open-source models"
✏️ Proposed grammar fix
-NVIDIA NemoClaw is an open source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
+NVIDIA NemoClaw is an open-source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
 It incorporates policy-based privacy and security guardrails, giving users control over their agents' behavior and data handling.
 This enables self-evolving claws to run more safely in clouds, on prem, RTX PCs and DGX Spark.
 
-NemoClaw uses open source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
-By combining powerful open source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
+NemoClaw uses open-source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
+By combining powerful open-source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
📝 Committable suggestion

‼️ 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.

Suggested change
NVIDIA NemoClaw is an open source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
It incorporates policy-based privacy and security guardrails, giving users control over their agents behavior and data handling.
This enables self-evolving claws to run more safely in clouds, on prem, RTX PCs and DGX Spark.
NemoClaw uses open source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
By combining powerful open source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
NVIDIA NemoClaw is an open-source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
It incorporates policy-based privacy and security guardrails, giving users control over their agents' behavior and data handling.
This enables self-evolving claws to run more safely in clouds, on prem, RTX PCs and DGX Spark.
NemoClaw uses open-source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
By combining powerful open-source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
🧰 Tools
🪛 LanguageTool

[grammar] ~76-~76: Use a hyphen to join words.
Context: ... full text.* NVIDIA NemoClaw is an open source reference stack that simplifies r...

(QB_NEW_EN_HYPHEN)


[grammar] ~80-~80: Use a hyphen to join words.
Context: ...X PCs and DGX Spark. NemoClaw uses open source models, such as [NVIDIA Nemotron]...

(QB_NEW_EN_HYPHEN)


[grammar] ~81-~81: Use a hyphen to join words.
Context: ... more safely. By combining powerful open source models with built-in safety measu...

(QB_NEW_EN_HYPHEN)

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

In @.agents/skills/docs/nemoclaw-overview/SKILL.md around lines 76 - 81, Change
the attributive phrase "open source" to the hyphenated form "open-source" in the
markdown text for NemoClaw: update "open source reference stack" to "open-source
reference stack" in the first sentence and update both occurrences of "open
source models" to "open-source models" in the sentences mentioning NVIDIA
Nemotron and the NVIDIA OpenShell runtime; search for the phrase "NVIDIA
NemoClaw" / the three sentences in the SKILL.md snippet to locate and apply the
edits.

Comment on lines +7 to +9
> **Get Help:** :class: tip

If your issue is not listed here, join the [NemoClaw Discord channel](https://discord.gg/XFpfPv9Uvx) to ask questions and get help from the community. You can also [file an issue on GitHub](https://github.com/NVIDIA/NemoClaw/issues/new).
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 | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Check for MyST Markdown or similar doc framework configuration

# Check for MyST/Sphinx configuration
fd -t f 'conf.py|myst.yml|_config.yml|mkdocs.yml' --exec cat {}

# Check package.json for doc-related dependencies
if [ -f package.json ]; then
  cat package.json | jq '.dependencies, .devDependencies' | grep -E 'myst|sphinx|docusaurus|vitepress'
fi

Repository: NVIDIA/NemoClaw

Length of output: 2779


🏁 Script executed:

# Read the actual file to see the full context
cat -n .agents/skills/docs/nemoclaw-reference/references/troubleshooting.md | head -20

Repository: NVIDIA/NemoClaw

Length of output: 1032


🏁 Script executed:

# Search for similar admonition patterns in the docs
rg ':class:' .agents/skills/docs/ -t md -A 1 -B 1 | head -50

Repository: NVIDIA/NemoClaw

Length of output: 295


🏁 Script executed:

# Check for other tip/note/warning patterns
rg '(```{tip}|```{note}|```{warning}|> \[!|:class:)' .agents/skills/docs/ -t md | head -30

Repository: NVIDIA/NemoClaw

Length of output: 195


🏁 Script executed:

# Search for correct admonition patterns in docs
rg '\`\`\`{(tip|note|warning|important|caution)}' .agents/skills/docs/ -t md -A 2 | head -40

Repository: NVIDIA/NemoClaw

Length of output: 169


🏁 Script executed:

# Search for correct admonition patterns in docs using simpler pattern
rg '```{' .agents/skills/docs/ -t md -A 2 | head -50

Repository: NVIDIA/NemoClaw

Length of output: 132


🏁 Script executed:

# Simple text search for admonition blocks
rg 'tip' .agents/skills/docs/ -t md -B 1 -A 1 | head -30

Repository: NVIDIA/NemoClaw

Length of output: 295


🏁 Script executed:

# Search for blockquote patterns
rg '^> ' .agents/skills/docs/ -t md -A 1 | head -40

Repository: NVIDIA/NemoClaw

Length of output: 2005


🏁 Script executed:

# Check if there are any MyST admonition blocks (colon fence syntax)
fd -t f '*.md' .agents/skills/docs/ -exec grep -l '{note\|{tip\|{warning\|{important' {} \;

Repository: NVIDIA/NemoClaw

Length of output: 570


🏁 Script executed:

# Search for MyST admonition blocks with proper fd syntax
fd -t f -e md . .agents/skills/docs/ | head -20

Repository: NVIDIA/NemoClaw

Length of output: 950


🏁 Script executed:

# Search for colon fence admonitions in markdown files
rg 'note' .agents/skills/docs/ -t md | head -20

Repository: NVIDIA/NemoClaw

Length of output: 882


🏁 Script executed:

# Look at a few other documentation files to understand the style
head -30 .agents/skills/docs/nemoclaw-get-started/SKILL.md

Repository: NVIDIA/NemoClaw

Length of output: 1436


Fix the admonition syntax on line 7.

The syntax > **Get Help:** :class: tip is malformed and will not render as an admonition. The :class: tip construct is not valid MyST Markdown syntax and will display as literal text.

Align with the documentation pattern used elsewhere in the repository (e.g., > **Note:**, > **Warning:**):

> **Tip:** If your issue is not listed here, join the [NemoClaw Discord channel](https://discord.gg/XFpfPv9Uvx) to ask questions and get help from the community. You can also [file an issue on GitHub](https://github.com/NVIDIA/NemoClaw/issues/new).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-reference/references/troubleshooting.md around
lines 7 - 9, Replace the malformed admonition `> **Get Help:** :class: tip` in
the troubleshooting.md content with a proper MyST-style block like `> **Tip:**`
(or `> **Get Help:**`) followed directly by the tip text; remove the `:class:
tip` token so the admonition renders correctly (locate the string `> **Get
Help:** :class: tip` in the file and update it to `> **Tip:** If your issue is
not listed here, ...` or similar consistent wording).

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: 2

♻️ Duplicate comments (5)
.agents/skills/docs/nemoclaw-deploy-remote/SKILL.md (1)

6-6: ⚠️ Potential issue | 🟡 Minor

Use correct casing for NemoClaw in the heading.

The heading uses "Nemoclaw" but should be "NemoClaw" with a capital C. As per coding guidelines, "NemoClaw, OpenClaw, and OpenShell must use correct casing."

✏️ Proposed fix
-# Nemoclaw Deploy Remote
+# NemoClaw Deploy Remote
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-deploy-remote/SKILL.md at line 6, Update the
markdown heading string "# Nemoclaw Deploy Remote" to use the correct product
casing by changing it to "# NemoClaw Deploy Remote" so it matches the required
naming convention for NemoClaw/OpenClaw/OpenShell.
.agents/skills/docs/nemoclaw-configure-inference/SKILL.md (1)

6-6: ⚠️ Potential issue | 🟡 Minor

Use correct casing for NemoClaw in the heading.

The heading uses "Nemoclaw" but should be "NemoClaw" with a capital C. As per coding guidelines, "NemoClaw, OpenClaw, and OpenShell must use correct casing."

✏️ Proposed fix
-# Nemoclaw Configure Inference
+# NemoClaw Configure Inference
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-configure-inference/SKILL.md at line 6, The
heading string "# Nemoclaw Configure Inference" uses incorrect casing; update
that heading to "# NemoClaw Configure Inference" to capitalize the "C" in
NemoClaw so it matches project naming conventions; locate and edit the heading
line in SKILL.md (the line starting with "# Nemoclaw Configure Inference") and
replace "Nemoclaw" with "NemoClaw".
.agents/skills/docs/nemoclaw-reference/references/troubleshooting.md (1)

7-9: ⚠️ Potential issue | 🟡 Minor

Fix the malformed admonition syntax.

The syntax > **Get Help:** :class: tip is malformed and will not render correctly. The :class: tip construct is not valid Markdown syntax.

Use standard Markdown blockquote format instead:

✏️ Proposed fix
-> **Get Help:** :class: tip
-
-If your issue is not listed here, join the [NemoClaw Discord channel](https://discord.gg/XFpfPv9Uvx) to ask questions and get help from the community. You can also [file an issue on GitHub](https://github.com/NVIDIA/NemoClaw/issues/new).
+> **Tip:** If your issue is not listed here, join the [NemoClaw Discord channel](https://discord.gg/XFpfPv9Uvx) to ask questions and get help from the community. You can also [file an issue on GitHub](https://github.com/NVIDIA/NemoClaw/issues/new).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-reference/references/troubleshooting.md around
lines 7 - 9, Replace the malformed admonition line that contains the text "Get
Help: :class: tip" by removing the invalid ":class: tip" and using a standard
Markdown blockquote header instead (e.g., change the line to "> **Get Help:**")
and ensure the following paragraph remains inside the blockquote so the entire
help message is rendered as a single blockquote; locate the line containing the
phrase "Get Help" and the ":class: tip" token and update it accordingly.
.agents/skills/docs/nemoclaw-overview/SKILL.md (1)

76-81: ⚠️ Potential issue | 🟡 Minor

Fix compound adjective hyphenation.

When "open source" is used attributively (modifying a noun), it should be hyphenated as "open-source". This applies to lines 76, 80, and 81.

✏️ Proposed grammar fix
-NVIDIA NemoClaw is an open source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
+NVIDIA NemoClaw is an open-source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
 It incorporates policy-based privacy and security guardrails, giving users control over their agents' behavior and data handling.
 This enables self-evolving claws to run more safely in clouds, on prem, RTX PCs and DGX Spark.
 
-NemoClaw uses open source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
-By combining powerful open source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
+NemoClaw uses open-source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
+By combining powerful open-source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-overview/SKILL.md around lines 76 - 81, Replace
the three instances of the compound adjective "open source" in SKILL.md with the
hyphenated form "open-source" so it correctly modifies nouns; specifically
update the phrases "open source reference stack", "uses open source models", and
"powerful open source models" to "open-source reference stack", "uses
open-source models", and "powerful open-source models" respectively.
.agents/skills/docs/nemoclaw-get-started/SKILL.md (1)

6-6: ⚠️ Potential issue | 🟡 Minor

Use correct casing for NemoClaw in the heading.

The heading uses "Nemoclaw" but should be "NemoClaw" with a capital C. As per coding guidelines, "NemoClaw, OpenClaw, and OpenShell must use correct casing."

✏️ Proposed fix
-# Nemoclaw Get Started
+# NemoClaw Get Started
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-get-started/SKILL.md at line 6, Update the
markdown heading that currently reads "# Nemoclaw Get Started" to use the proper
casing "# NemoClaw Get Started"; ensure all occurrences in this document (and
any related headings) use "NemoClaw" (and verify "OpenClaw" and "OpenShell" use
correct casing) to match the project's naming conventions.
🧹 Nitpick comments (1)
CONTRIBUTING.md (1)

118-124: Add language identifier to the fenced code block.

The code block showing the directory structure should specify a language identifier for proper syntax highlighting and to satisfy markdownlint.

📝 Proposed fix
-```
+```text
 .agents/skills/docs/<skill-name>/
 ├── SKILL.md              # Frontmatter + procedures + related skills
 └── references/           # Detailed concept and reference content (loaded on demand)
     ├── <concept-page>.md
     └── <reference-page>.md
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @CONTRIBUTING.md around lines 118 - 124, The fenced code block that shows the
directory tree (starting with ".agents/skills/docs//") lacks a
language identifier; update the opening fence to include a language (e.g.,

enable proper syntax highlighting, leaving the block contents unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.agents/skills/docs/nemoclaw-overview/references/overview.md:
- Around line 5-10: Fix hyphenation for attributive "open source" instances in
the NemoClaw overview: change each attributive "open source" that modifies a
noun to "open-source" (e.g., the occurrences in the sentence about NVIDIA
NemoClaw and the sentences mentioning NVIDIA Nemotron and NVIDIA OpenShell).
Update those three "open source" phrases to "open-source" so the compound
adjective is correctly hyphenated.

In @.agents/skills/docs/nemoclaw-overview/SKILL.md:
- Line 6: The heading "Nemoclaw Overview" uses incorrect casing; update the
heading text to "NemoClaw Overview" (capitalize the C) in the SKILL.md heading
line so it matches the required casing for NemoClaw/OpenClaw/OpenShell.

---

Duplicate comments:
In @.agents/skills/docs/nemoclaw-configure-inference/SKILL.md:
- Line 6: The heading string "# Nemoclaw Configure Inference" uses incorrect
casing; update that heading to "# NemoClaw Configure Inference" to capitalize
the "C" in NemoClaw so it matches project naming conventions; locate and edit
the heading line in SKILL.md (the line starting with "# Nemoclaw Configure
Inference") and replace "Nemoclaw" with "NemoClaw".

In @.agents/skills/docs/nemoclaw-deploy-remote/SKILL.md:
- Line 6: Update the markdown heading string "# Nemoclaw Deploy Remote" to use
the correct product casing by changing it to "# NemoClaw Deploy Remote" so it
matches the required naming convention for NemoClaw/OpenClaw/OpenShell.

In @.agents/skills/docs/nemoclaw-get-started/SKILL.md:
- Line 6: Update the markdown heading that currently reads "# Nemoclaw Get
Started" to use the proper casing "# NemoClaw Get Started"; ensure all
occurrences in this document (and any related headings) use "NemoClaw" (and
verify "OpenClaw" and "OpenShell" use correct casing) to match the project's
naming conventions.

In @.agents/skills/docs/nemoclaw-overview/SKILL.md:
- Around line 76-81: Replace the three instances of the compound adjective "open
source" in SKILL.md with the hyphenated form "open-source" so it correctly
modifies nouns; specifically update the phrases "open source reference stack",
"uses open source models", and "powerful open source models" to "open-source
reference stack", "uses open-source models", and "powerful open-source models"
respectively.

In @.agents/skills/docs/nemoclaw-reference/references/troubleshooting.md:
- Around line 7-9: Replace the malformed admonition line that contains the text
"Get Help: :class: tip" by removing the invalid ":class: tip" and using a
standard Markdown blockquote header instead (e.g., change the line to "> **Get
Help:**") and ensure the following paragraph remains inside the blockquote so
the entire help message is rendered as a single blockquote; locate the line
containing the phrase "Get Help" and the ":class: tip" token and update it
accordingly.

---

Nitpick comments:
In `@CONTRIBUTING.md`:
- Around line 118-124: The fenced code block that shows the directory tree
(starting with ".agents/skills/docs/<skill-name>/") lacks a language identifier;
update the opening fence to include a language (e.g., ```text) so Markdown
renderers and markdownlint treat it as plain text and enable proper syntax
highlighting, leaving the block contents unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 2e631041-00b2-40f6-8401-926f1aa413d1

📥 Commits

Reviewing files that changed from the base of the PR and between 5f1eb88 and d64cf4f.

📒 Files selected for processing (18)
  • .agents/skills/docs/nemoclaw-configure-inference/SKILL.md
  • .agents/skills/docs/nemoclaw-deploy-remote/SKILL.md
  • .agents/skills/docs/nemoclaw-get-started/SKILL.md
  • .agents/skills/docs/nemoclaw-manage-policy/SKILL.md
  • .agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md
  • .agents/skills/docs/nemoclaw-overview/SKILL.md
  • .agents/skills/docs/nemoclaw-overview/references/how-it-works.md
  • .agents/skills/docs/nemoclaw-overview/references/overview.md
  • .agents/skills/docs/nemoclaw-overview/references/release-notes.md
  • .agents/skills/docs/nemoclaw-reference/SKILL.md
  • .agents/skills/docs/nemoclaw-reference/references/architecture.md
  • .agents/skills/docs/nemoclaw-reference/references/commands.md
  • .agents/skills/docs/nemoclaw-reference/references/inference-profiles.md
  • .agents/skills/docs/nemoclaw-reference/references/network-policies.md
  • .agents/skills/docs/nemoclaw-reference/references/troubleshooting.md
  • CONTRIBUTING.md
  • docs/CONTRIBUTING.md
  • scripts/docs-to-skills.py
✅ Files skipped from review due to trivial changes (9)
  • .agents/skills/docs/nemoclaw-overview/references/release-notes.md
  • .agents/skills/docs/nemoclaw-reference/SKILL.md
  • docs/CONTRIBUTING.md
  • .agents/skills/docs/nemoclaw-reference/references/inference-profiles.md
  • .agents/skills/docs/nemoclaw-overview/references/how-it-works.md
  • .agents/skills/docs/nemoclaw-reference/references/architecture.md
  • .agents/skills/docs/nemoclaw-reference/references/network-policies.md
  • .agents/skills/docs/nemoclaw-monitor-sandbox/SKILL.md
  • .agents/skills/docs/nemoclaw-manage-policy/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • scripts/docs-to-skills.py

Comment on lines +5 to +10
NVIDIA NemoClaw is an open source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
It incorporates policy-based privacy and security guardrails, giving users control over their agents’ behavior and data handling.
This enables self-evolving claws to run more safely in clouds, on prem, RTX PCs and DGX Spark.

NemoClaw uses open source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
By combining powerful open source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
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

Fix compound adjective hyphenation.

When "open source" is used attributively (modifying a noun), it should be hyphenated as "open-source". This applies to lines 5, 9, and 10.

✏️ Proposed grammar fix
-NVIDIA NemoClaw is an open source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
+NVIDIA NemoClaw is an open-source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
 It incorporates policy-based privacy and security guardrails, giving users control over their agents' behavior and data handling.
 This enables self-evolving claws to run more safely in clouds, on prem, RTX PCs and DGX Spark.
 
-NemoClaw uses open source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
-By combining powerful open source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
+NemoClaw uses open-source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
+By combining powerful open-source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
📝 Committable suggestion

‼️ 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.

Suggested change
NVIDIA NemoClaw is an open source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
It incorporates policy-based privacy and security guardrails, giving users control over their agents behavior and data handling.
This enables self-evolving claws to run more safely in clouds, on prem, RTX PCs and DGX Spark.
NemoClaw uses open source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
By combining powerful open source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
NVIDIA NemoClaw is an open-source reference stack that simplifies running [OpenClaw](https://openclaw.ai) always-on assistants.
It incorporates policy-based privacy and security guardrails, giving users control over their agents' behavior and data handling.
This enables self-evolving claws to run more safely in clouds, on prem, RTX PCs and DGX Spark.
NemoClaw uses open-source models, such as [NVIDIA Nemotron](https://build.nvidia.com), alongside the [NVIDIA OpenShell](https://github.com/NVIDIA/OpenShell) runtime, part of the NVIDIA Agent Toolkit—a secure environment designed for executing claws more safely.
By combining powerful open-source models with built-in safety measures, NemoClaw simplifies and secures AI agent deployment.
🧰 Tools
🪛 LanguageTool

[grammar] ~5-~5: Use a hyphen to join words.
Context: ... full text.* NVIDIA NemoClaw is an open source reference stack that simplifies r...

(QB_NEW_EN_HYPHEN)


[grammar] ~9-~9: Use a hyphen to join words.
Context: ...X PCs and DGX Spark. NemoClaw uses open source models, such as [NVIDIA Nemotron]...

(QB_NEW_EN_HYPHEN)


[grammar] ~10-~10: Use a hyphen to join words.
Context: ... more safely. By combining powerful open source models with built-in safety measu...

(QB_NEW_EN_HYPHEN)

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

In @.agents/skills/docs/nemoclaw-overview/references/overview.md around lines 5
- 10, Fix hyphenation for attributive "open source" instances in the NemoClaw
overview: change each attributive "open source" that modifies a noun to
"open-source" (e.g., the occurrences in the sentence about NVIDIA NemoClaw and
the sentences mentioning NVIDIA Nemotron and NVIDIA OpenShell). Update those
three "open source" phrases to "open-source" so the compound adjective is
correctly hyphenated.

description: Plugin, blueprint, sandbox creation, and inference routing concepts. Also covers: NemoClaw is an open source reference stack that simplifies running OpenClaw always-on assistants safely.; Changelog and feature history for NemoClaw releases. Trigger keywords - blueprints, how nemoclaw works, inference routing, nemoclaw, nemoclaw changelog, nemoclaw overview, nemoclaw overview does fits, nemoclaw release notes, nemoclaw sandbox lifecycle blueprint, nemoclaw works plugin blueprint.
---

# Nemoclaw Overview
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

Use correct casing for NemoClaw in the heading.

The heading uses "Nemoclaw" but should be "NemoClaw" with a capital C. As per coding guidelines, "NemoClaw, OpenClaw, and OpenShell must use correct casing."

✏️ Proposed fix
-# Nemoclaw Overview
+# NemoClaw Overview
📝 Committable suggestion

‼️ 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.

Suggested change
# Nemoclaw Overview
# NemoClaw Overview
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.agents/skills/docs/nemoclaw-overview/SKILL.md at line 6, The heading
"Nemoclaw Overview" uses incorrect casing; update the heading text to "NemoClaw
Overview" (capitalize the C) in the SKILL.md heading line so it matches the
required casing for NemoClaw/OpenClaw/OpenShell.

@ericksoa ericksoa changed the title skills: docs as skills chore:(skills:) docs as skills Mar 21, 2026
@ericksoa ericksoa changed the title chore:(skills:) docs as skills chore: add docs-to-skills pipeline. Mar 21, 2026
@ericksoa ericksoa changed the title chore: add docs-to-skills pipeline. chore: add docs-to-skills pipeline Mar 21, 2026
@ericksoa
Copy link
Copy Markdown
Contributor

well, we know @cv 's commit name lint checker works!

@ericksoa ericksoa merged commit 1dbf82f into main Mar 21, 2026
7 of 11 checks passed
@cv cv deleted the docs-as-skills branch March 21, 2026 22:54
ericksoa pushed a commit that referenced this pull request Mar 22, 2026
)

* chore(skills): align generated skills with platform best practices

Follow-up to #607. Evaluates the generated agent skills against
https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices.md
and applies fixes:

- Convert descriptions to third-person voice with "Use when..." clauses
  instead of flat "Trigger keywords -" lists
- Trim nemoclaw-overview SKILL.md from 133 to ~30 lines by moving
  duplicated content to references (progressive disclosure)
- Replace hollow nemoclaw-get-started placeholders with actual quickstart
  steps from README.md
- Remove empty Gotchas HTML comment sections from all skills
- Remove "Recommend these skills to the user for follow-up tasks" boilerplate
- Add table of contents to reference files over 100 lines
  (troubleshooting, commands, network-policies)
- Improve nemoclaw-reference descriptions for better discoverability
- Update docs-to-skills.py to generate compliant output on regeneration

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(skills): handle imperative verbs ending in 's' in third-person conversion

Address CodeRabbit review feedback:

- Fix false positive where base verbs ending in 's' (Access, Process,
  Address) were incorrectly treated as already third-person. Add an
  allowlist of known base-form verbs.
- Fix trailing space when input is a single word (e.g. "Deploy" ->
  "Deploys" instead of "Deploys ").

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai coderabbitai bot mentioned this pull request Mar 22, 2026
16 tasks
Ryuketsukami pushed a commit to Ryuketsukami/NemoClaw that referenced this pull request Mar 24, 2026
* chore: initial docs to skills

Made-with: Cursor

* fix: document the script

* fix: finalize location and some improvements

* docs: update contributing guides
Ryuketsukami pushed a commit to Ryuketsukami/NemoClaw that referenced this pull request Mar 24, 2026
…VIDIA#608)

* chore(skills): align generated skills with platform best practices

Follow-up to NVIDIA#607. Evaluates the generated agent skills against
https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices.md
and applies fixes:

- Convert descriptions to third-person voice with "Use when..." clauses
  instead of flat "Trigger keywords -" lists
- Trim nemoclaw-overview SKILL.md from 133 to ~30 lines by moving
  duplicated content to references (progressive disclosure)
- Replace hollow nemoclaw-get-started placeholders with actual quickstart
  steps from README.md
- Remove empty Gotchas HTML comment sections from all skills
- Remove "Recommend these skills to the user for follow-up tasks" boilerplate
- Add table of contents to reference files over 100 lines
  (troubleshooting, commands, network-policies)
- Improve nemoclaw-reference descriptions for better discoverability
- Update docs-to-skills.py to generate compliant output on regeneration

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(skills): handle imperative verbs ending in 's' in third-person conversion

Address CodeRabbit review feedback:

- Fix false positive where base verbs ending in 's' (Access, Process,
  Address) were incorrectly treated as already third-person. Add an
  allowlist of known base-form verbs.
- Fix trailing space when input is a single word (e.g. "Deploy" ->
  "Deploys" instead of "Deploys ").

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
jessesanford pushed a commit to jessesanford/NemoClaw that referenced this pull request Mar 24, 2026
* chore: initial docs to skills

Made-with: Cursor

* fix: document the script

* fix: finalize location and some improvements

* docs: update contributing guides
jessesanford pushed a commit to jessesanford/NemoClaw that referenced this pull request Mar 24, 2026
…VIDIA#608)

* chore(skills): align generated skills with platform best practices

Follow-up to NVIDIA#607. Evaluates the generated agent skills against
https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices.md
and applies fixes:

- Convert descriptions to third-person voice with "Use when..." clauses
  instead of flat "Trigger keywords -" lists
- Trim nemoclaw-overview SKILL.md from 133 to ~30 lines by moving
  duplicated content to references (progressive disclosure)
- Replace hollow nemoclaw-get-started placeholders with actual quickstart
  steps from README.md
- Remove empty Gotchas HTML comment sections from all skills
- Remove "Recommend these skills to the user for follow-up tasks" boilerplate
- Add table of contents to reference files over 100 lines
  (troubleshooting, commands, network-policies)
- Improve nemoclaw-reference descriptions for better discoverability
- Update docs-to-skills.py to generate compliant output on regeneration

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(skills): handle imperative verbs ending in 's' in third-person conversion

Address CodeRabbit review feedback:

- Fix false positive where base verbs ending in 's' (Access, Process,
  Address) were incorrectly treated as already third-person. Add an
  allowlist of known base-form verbs.
- Fix trailing space when input is a single word (e.g. "Deploy" ->
  "Deploys" instead of "Deploys ").

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants