docs: add per-agent documentation variants#4632
Conversation
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughRefactors docs into two guide variants (OpenClaw/Hermes), adds AgentGuide React helpers for variant routing, generates a Hermes CLI reference, updates navigation/redirects to a tabbed user-guide layout, normalizes links/code fences, and updates CI/tools/tests to validate variant-aware docs. ChangesDocs + tooling comprehensive
Estimated code review effort: Possibly related PRs:
Suggested labels: Suggested reviewers:
Poem:
✨ Finishing Touches🧪 Generate unit tests (beta)
|
|
🌿 Preview your docs: https://nvidia-preview-pr-4632.docs.buildwithfern.com/nemoclaw |
E2E Advisor RecommendationRequired E2E: None Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
E2E Scenario Advisor RecommendationRequired scenario E2E: None Full scenario advisor summaryE2E Scenario AdvisorBase: Required scenario E2E
Optional scenario E2E
Relevant changed files
|
PR Review AdvisorFindings: 1 needs attention, 2 worth checking, 0 nice ideas Review findings🛠️ Needs attention
🔎 Worth checking
🌱 Nice ideas
Since last review detailsCurrent findings:
This is an automated advisory review. A human maintainer must make the final merge decision. |
There was a problem hiding this comment.
Actionable comments posted: 11
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/about/ecosystem-hermes.mdx (1)
97-103: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick winUse the standard
Next Stepssection at the bottom.For new pages, the closing related-links section should be
## Next Steps, not## Related topics.As per coding guidelines,
A "Next Steps" section at the bottom links to related pages.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/about/ecosystem-hermes.mdx` around lines 97 - 103, Change the closing related-links section header from "## Related topics" to the standard "## Next Steps" in this page; update the header text that currently reads "## Related topics" (and leave the existing bullet links such as Overview, How It Works, Architecture, Quickstart with Hermes intact) so the page uses the required "Next Steps" section naming convention for new pages.
🧹 Nitpick comments (7)
scripts/sync-agent-variant-docs.ts (1)
110-112: 💤 Low valueConsider narrowing the type guard.
The
isNodeErrorfunction only checksinstanceof Errorbut doesn't verify thecodeproperty exists. This works because TypeScript's type predicate allows the optionalcodeproperty, but a more precise check would validate the property:function isNodeError(error: unknown): error is NodeJS.ErrnoException { - return error instanceof Error; + return error instanceof Error && 'code' in error; }This change would make the type guard more semantically accurate.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/sync-agent-variant-docs.ts` around lines 110 - 112, The isNodeError type guard currently only checks instanceof Error; update it to also verify the presence (and optionally type) of the NodeJS-specific "code" property so the predicate truly narrows to NodeJS.ErrnoException — e.g., in the isNodeError function check that error is an instance of Error and that (error as any).code !== undefined (or typeof (error as any).code === "string") before returning true, ensuring the type guard more precisely identifies NodeJS.ErrnoException.docs/about/how-it-works.mdx (1)
125-125: ⚡ Quick winKeep one sentence per source line here.
This line has two sentences. Split them so each sentence sits on its own line, which keeps doc diffs readable.
As per coding guidelines, "One sentence per line in source (makes diffs readable)."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/about/how-it-works.mdx` at line 125, The line containing "For details on the baseline rules, refer to [Network Policies](../reference/network-policies). For container-level hardening, refer to [Sandbox Hardening](../deployment/sandbox-hardening)." has two sentences on one source line; split them so each sentence is on its own source line (i.e., break after "...network-policies)." so the first line is the Network Policies sentence and the second line is the Sandbox Hardening sentence) to follow the one-sentence-per-line guideline.docs/security/best-practices.mdx (1)
153-153: ⚡ Quick winSplit this into one sentence per line.
This line has multiple sentences. Keep each sentence on its own source line to match the docs style guide.
As per coding guidelines, "One sentence per line in source (makes diffs readable)."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/security/best-practices.mdx` at line 153, Split the long documentation line into separate source lines so each sentence is on its own line: take the sentence "The system merges approved endpoints into the sandbox's policy as a new durable revision." and place it on its own line, then put "They persist across sandbox restarts within the same sandbox instance." on the next line, and finally "However, when you destroy and recreate the sandbox through onboarding, the policy resets to the baseline defined in the blueprint." on its own line so the prose in this paragraph (the sentence containing "merges approved endpoints...") follows the one-sentence-per-line style.docs/_components/AgentGuide.tsx (1)
59-68: ⚡ Quick winAvoid prefixing non-guide hrefs through
guidePath().Anything that is not
http://orhttps://currently gets rewritten, so#anchors,mailto:,tel:, and already-resolved site paths become invalid guide URLs. Guard those forms before variant rewriting.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/_components/AgentGuide.tsx` around lines 59 - 68, The GuideLink component rewrites any non-http(s) href via guidePath, breaking anchors, mailto/tel, protocol-relative and absolute paths; update the resolved logic in GuideLink to only call guidePath for true relative guide paths and leave href untouched when it starts with "http://"/"https://", "/" (absolute site path), "#" (anchor), "mailto:", "tel:", "//" (protocol-relative), or any other URL scheme (e.g. matches /^[a-zA-Z][\w+.-]*:/); reference the GuideLink function and guidePath when making this conditional change.docs/manage-sandboxes/install-plugins-hermes.mdx (3)
97-97: 💤 Low valueUse active voice.
"the same Dockerfile path that started the session" should be "the same Dockerfile path you used to start the session".
As per coding guidelines: Active voice required in documentation.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/manage-sandboxes/install-plugins-hermes.mdx` at line 97, Change the passive phrasing in the sentence "If you resume an interrupted onboarding run, use the same Dockerfile path that started the session." to active voice by replacing "that started the session" with "you used to start the session" so it reads: "If you resume an interrupted onboarding run, use the same Dockerfile path you used to start the session."
57-57: 💤 Low valueUse active voice.
"after the Dockerfile has created" should be "after the Dockerfile creates" or "after creating".
As per coding guidelines: Active voice required in documentation.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/manage-sandboxes/install-plugins-hermes.mdx` at line 57, Replace the passive phrasing in the sentence "Add your plugin after the Dockerfile has created `/sandbox/.hermes`." with active voice; update it to either "Add your plugin after the Dockerfile creates `/sandbox/.hermes`." or "Add your plugin after creating `/sandbox/.hermes`." so the documentation follows the active-voice guideline.
113-113: 💤 Low valueUse active voice.
"where Hermes plugin installation gets mixed up" should be "where developers commonly mix up Hermes plugin installation" or similar active construction.
As per coding guidelines: Active voice required in documentation.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/manage-sandboxes/install-plugins-hermes.mdx` at line 113, Replace the passive construction in the sentence "These are the most common places where Hermes plugin installation gets mixed up with other NemoClaw extension paths." with an active voice variant; for example, change it to "These are the places where developers commonly mix up Hermes plugin installation with other NemoClaw extension paths." Ensure the sentence still clearly identifies the common confusion points for Hermes vs. NemoClaw paths.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/_components/AgentGuide.tsx`:
- Around line 1-4: Replace the existing block SPDX header with the required
line-comment form at the top of the TSX file: remove the /** ... */ block and
add two single-line comments using // for the SPDX lines so the file
(AgentGuide.tsx) begins with "// SPDX-FileCopyrightText: Copyright (c) 2026
NVIDIA CORPORATION & AFFILIATES. All rights reserved." and "//
SPDX-License-Identifier: Apache-2.0".
- Around line 17-56: getGuideVariant, guideBasePath, guidePath and the
components AgentCli, AgentProductName, and AgentOnly currently read
window.location which makes SSR output non-deterministic; change the API so the
active variant (or pathname) is provided from the Fern route/page at render time
instead of reading window: update getGuideVariant to accept an optional variant
or pathname argument (or create a small React context/provider) and have
guidePath and guideBasePath accept the same injected value; update AgentCli,
AgentProductName and AgentOnly to take a prop (e.g., variant or pathname) or
read from the new context and use that value during render so SSR has a
deterministic variant and client-side can still fallback to window when no
prop/context is provided.
In `@docs/about/ecosystem-hermes.mdx`:
- Line 17: This file is missing the required H1 before the first H2; add a
top-level H1 that exactly matches the page title in the frontmatter (the
title.page value) and place it above the existing "## How the Stack Fits
Together" heading so the document begins with a single `# <Title>` heading that
mirrors the frontmatter.
- Around line 1-11: The new MDX frontmatter is missing required fields; update
the frontmatter block to include the missing keys: topics, tags, difficulty,
audience, and status alongside the existing title, description, keywords, and
content.type entries (keep descriptions consistent with description-agent if
needed); ensure topics is an array of relevant topic slugs, tags is an array of
string tags, difficulty is one of the allowed values (e.g.,
beginner/intermediate/advanced), audience lists intended reader roles, and
status uses the repository's allowed statuses (e.g., draft/published).
In `@docs/about/ecosystem.mdx`:
- Line 18: Rewrite the passive sentence "There are three pieces that are put
together in a NemoClaw for OpenClaw deployment: OpenClaw, OpenShell, and
NemoClaw, each with a distinct scope." into active voice: explicitly name the
actors and state that OpenClaw, OpenShell, and NemoClaw form the deployment and
each has a distinct scope (e.g., "OpenClaw, OpenShell, and NemoClaw form a
NemoClaw for OpenClaw deployment; each has a distinct scope."). Update the
sentence in docs/about/ecosystem.mdx where that exact string appears.
In `@docs/manage-sandboxes/backup-restore.mdx`:
- Around line 46-47: Replace the colon in the sentence starting "Treat snapshot
directories as private local data: the Hermes database..." with a period or an
em dash so the two independent clauses are correctly separated (e.g., "Treat
snapshot directories as private local data. The Hermes database..." or "Treat
snapshot directories as private local data — the Hermes database..."); update
that sentence in docs/manage-sandboxes/backup-restore.mdx accordingly.
In `@docs/manage-sandboxes/lifecycle.mdx`:
- Around line 40-42: Replace the fenced code blocks that currently use "console"
and include "$" prompt markers with language-specific shells (e.g., change the
fence language to bash or sh) and remove the leading "$" so the commands are
copy-pasteable; update every occurrence of the snippet like `console` blocks
containing "$ nemohermes list" (and the other listed blocks at the specified
locations) to use `bash` or `sh` fences and plain commands without prompt
markers to satisfy the copyable CLI code block guideline.
In `@docs/manage-sandboxes/runtime-controls.mdx`:
- Line 90: The "See also" link target in
docs/manage-sandboxes/runtime-controls.mdx points to a non-existent page
../security/openclaw-controls-hermes; update the link target to the actual page
../security/openclaw-controls (or ../security/openclaw-controls.mdx) so the
cross-reference resolves. Edit the line containing the link text "OpenClaw
Controls" and replace the href ../security/openclaw-controls-hermes with
../security/openclaw-controls to match the existing
docs/security/openclaw-controls.mdx filename.
In `@docs/reference/architecture.mdx`:
- Line 16: The line containing the sentence that starts with "NVIDIA OpenShell
is a general-purpose agent runtime." currently has three sentences on one line;
split it into three separate lines so each sentence is on its own line (one for
"NVIDIA OpenShell is a general-purpose agent runtime.", one for the sentence
about what it provides, and one for "NemoClaw is an opinionated reference stack
built on OpenShell...") to follow the one-sentence-per-line guideline and
improve diff readability.
In `@docs/reference/commands-nemohermes.mdx`:
- Around line 25-28: Replace the copyable CLI blocks that currently use
```console with dollar-prompts (e.g., lines showing "$ nemohermes onboard" and
"$ nemohermes my-sandbox connect") with shell fences (```bash or ```sh) and
remove the leading "$" prompt markers so the snippets are directly copyable;
update the source template/renderer that generates these snippets (the template
producing the commands like "nemohermes onboard" / "nemohermes my-sandbox
connect") to emit bash/sh fenced blocks without prompt markers rather than
`console` so future generated docs follow the copyable CLI guideline.
- Around line 14-34: The docs incorrectly replaced canonical "nemoclaw"
references with the Hermes alias "nemohermes" and introduced a nonexistent
"/nemohermes" slash command; revert those replacements so the text and examples
reference "nemoclaw" as the canonical CLI and explain "nemohermes" as an alias
(e.g., change lines that read "nemohermes is the primary interface" and the
examples "nemohermes onboard ≡ nemohermes onboard --agent hermes" back to
describe "nemohermes" relative to "nemoclaw"—for instance: explain "nemohermes"
is equivalent to running "nemoclaw ... --agent hermes" or setting
NEMOCLAW_AGENT=hermes), and remove the incorrect claim about an in-sandbox
"/nemohermes" slash command while keeping the Hermes-specific plugin/tool names
(nemohermes_status, nemohermes_info, nemohermes_reload_skills, on_session_start)
intact.
---
Outside diff comments:
In `@docs/about/ecosystem-hermes.mdx`:
- Around line 97-103: Change the closing related-links section header from "##
Related topics" to the standard "## Next Steps" in this page; update the header
text that currently reads "## Related topics" (and leave the existing bullet
links such as Overview, How It Works, Architecture, Quickstart with Hermes
intact) so the page uses the required "Next Steps" section naming convention for
new pages.
---
Nitpick comments:
In `@docs/_components/AgentGuide.tsx`:
- Around line 59-68: The GuideLink component rewrites any non-http(s) href via
guidePath, breaking anchors, mailto/tel, protocol-relative and absolute paths;
update the resolved logic in GuideLink to only call guidePath for true relative
guide paths and leave href untouched when it starts with "http://"/"https://",
"/" (absolute site path), "#" (anchor), "mailto:", "tel:", "//"
(protocol-relative), or any other URL scheme (e.g. matches
/^[a-zA-Z][\w+.-]*:/); reference the GuideLink function and guidePath when
making this conditional change.
In `@docs/about/how-it-works.mdx`:
- Line 125: The line containing "For details on the baseline rules, refer to
[Network Policies](../reference/network-policies). For container-level
hardening, refer to [Sandbox Hardening](../deployment/sandbox-hardening)." has
two sentences on one source line; split them so each sentence is on its own
source line (i.e., break after "...network-policies)." so the first line is the
Network Policies sentence and the second line is the Sandbox Hardening sentence)
to follow the one-sentence-per-line guideline.
In `@docs/manage-sandboxes/install-plugins-hermes.mdx`:
- Line 97: Change the passive phrasing in the sentence "If you resume an
interrupted onboarding run, use the same Dockerfile path that started the
session." to active voice by replacing "that started the session" with "you used
to start the session" so it reads: "If you resume an interrupted onboarding run,
use the same Dockerfile path you used to start the session."
- Line 57: Replace the passive phrasing in the sentence "Add your plugin after
the Dockerfile has created `/sandbox/.hermes`." with active voice; update it to
either "Add your plugin after the Dockerfile creates `/sandbox/.hermes`." or
"Add your plugin after creating `/sandbox/.hermes`." so the documentation
follows the active-voice guideline.
- Line 113: Replace the passive construction in the sentence "These are the most
common places where Hermes plugin installation gets mixed up with other NemoClaw
extension paths." with an active voice variant; for example, change it to "These
are the places where developers commonly mix up Hermes plugin installation with
other NemoClaw extension paths." Ensure the sentence still clearly identifies
the common confusion points for Hermes vs. NemoClaw paths.
In `@docs/security/best-practices.mdx`:
- Line 153: Split the long documentation line into separate source lines so each
sentence is on its own line: take the sentence "The system merges approved
endpoints into the sandbox's policy as a new durable revision." and place it on
its own line, then put "They persist across sandbox restarts within the same
sandbox instance." on the next line, and finally "However, when you destroy and
recreate the sandbox through onboarding, the policy resets to the baseline
defined in the blueprint." on its own line so the prose in this paragraph (the
sentence containing "merges approved endpoints...") follows the
one-sentence-per-line style.
In `@scripts/sync-agent-variant-docs.ts`:
- Around line 110-112: The isNodeError type guard currently only checks
instanceof Error; update it to also verify the presence (and optionally type) of
the NodeJS-specific "code" property so the predicate truly narrows to
NodeJS.ErrnoException — e.g., in the isNodeError function check that error is an
instance of Error and that (error as any).code !== undefined (or typeof (error
as any).code === "string") before returning true, ensuring the type guard more
precisely identifies NodeJS.ErrnoException.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: acf9e120-a20e-408f-b6bb-5e3d744476e8
📒 Files selected for processing (43)
.github/workflows/docs-links-pr.yamldocs/_components/AgentGuide.tsxdocs/about/ecosystem-hermes.mdxdocs/about/ecosystem.mdxdocs/about/how-it-works.mdxdocs/about/overview.mdxdocs/about/release-notes.mdxdocs/get-started/prerequisites.mdxdocs/get-started/quickstart-hermes.mdxdocs/get-started/quickstart.mdxdocs/get-started/windows-preparation.mdxdocs/index.mdxdocs/index.ymldocs/inference/inference-options.mdxdocs/inference/set-up-sub-agent.mdxdocs/inference/switch-inference-providers.mdxdocs/inference/tool-calling-reliability.mdxdocs/inference/use-local-inference.mdxdocs/manage-sandboxes/backup-restore.mdxdocs/manage-sandboxes/install-plugins-hermes.mdxdocs/manage-sandboxes/lifecycle.mdxdocs/manage-sandboxes/messaging-channels.mdxdocs/manage-sandboxes/runtime-controls.mdxdocs/manage-sandboxes/workspace-files.mdxdocs/monitoring/monitor-sandbox-activity.mdxdocs/network-policy/approve-network-requests.mdxdocs/network-policy/customize-network-policy.mdxdocs/network-policy/integration-policy-examples.mdxdocs/reference/architecture.mdxdocs/reference/cli-selection-guide.mdxdocs/reference/commands-nemohermes.mdxdocs/reference/commands.mdxdocs/reference/network-policies.mdxdocs/reference/troubleshooting.mdxdocs/security/best-practices.mdxdocs/security/credential-storage.mdxdocs/security/openclaw-controls.mdxfern/docs.ymlpackage.jsonscripts/sync-agent-variant-docs.tsscripts/watch-fern-preview.tstest/check-docs-links.test.tstest/e2e/e2e-cloud-experimental/check-docs.sh
|
@miyoungc worth noting the findings in #4632 (comment) |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
docs/manage-sandboxes/messaging-channels.mdx (2)
89-89:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winReplace colon with appropriate punctuation.
The colon here connects two clauses but does not introduce a list.
As per coding guidelines: "Colons should only introduce a list. Flag colons used as general punctuation between clauses."
Proposed fix
-For Telegram group chats, disable privacy mode before testing group replies: in `@BotFather`, run `/setprivacy`, choose the bot, then choose **Disable**. +For Telegram group chats, disable privacy mode before testing group replies. +In `@BotFather`, run `/setprivacy`, choose the bot, then choose **Disable**.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/manage-sandboxes/messaging-channels.mdx` at line 89, The sentence "For Telegram group chats, disable privacy mode before testing group replies: in `@BotFather`, run `/setprivacy`, choose the bot, then choose **Disable**." uses a colon incorrectly; replace the colon with a comma or an em dash (or a period and capitalize "In") so the punctuation correctly connects the clauses—update the sentence that begins "For Telegram group chats, disable privacy mode before testing group replies" accordingly to use the chosen punctuation and adjust the following "in `@BotFather`" capitalization if you replace the colon with a period.
39-39:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winSplit sentences onto separate lines.
The parenthetical sentence should appear on its own line per the one-sentence-per-line formatting rule.
As per coding guidelines: "One sentence per line in source (makes diffs readable). Flag paragraphs where multiple sentences appear on the same line."
Proposed fix
Line 39:
-It only starts optional host services such as the cloudflared tunnel when that binary is present. (`nemoclaw start` is kept as a deprecated alias.) +It only starts optional host services such as the cloudflared tunnel when that binary is present. +(`nemoclaw start` is kept as a deprecated alias.)Line 42:
-It only starts optional host services such as the cloudflared tunnel when that binary is present. (`nemoclaw start` is kept as a deprecated alias.) +It only starts optional host services such as the cloudflared tunnel when that binary is present.Also applies to: 42-42
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/manage-sandboxes/messaging-channels.mdx` at line 39, The sentence "It only starts optional host services such as the cloudflared tunnel when that binary is present. (`nemoclaw start` is kept as a deprecated alias.)" contains two sentences on one line; split them so each sentence is on its own line by moving the parenthetical "(`nemoclaw start` is kept as a deprecated alias.)" to a new line immediately after the first sentence, preserving punctuation and whitespace.
🧹 Nitpick comments (2)
docs/manage-sandboxes/messaging-channels.mdx (2)
145-145: ⚡ Quick winRewrite in active voice.
The passive construction "are generated and stored" should identify the actor and use active voice.
As per coding guidelines: "Active voice required. Flag passive constructions."
Proposed fix
-Session credentials are generated and stored inside durable agent state (`whatsapp` for OpenClaw, `platforms/whatsapp` for Hermes), so they survive rebuilds without re-pairing. +The agent generates and stores session credentials inside durable agent state (`whatsapp` for OpenClaw, `platforms/whatsapp` for Hermes), so they survive rebuilds without re-pairing.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/manage-sandboxes/messaging-channels.mdx` at line 145, Rewrite the sentence in active voice and name the actor that performs the action: change "Session credentials are generated and stored inside durable agent state (`whatsapp` for OpenClaw, `platforms/whatsapp` for Hermes), so they survive rebuilds without re-pairing." to an active construction that states who does the work (e.g., "The agent generates and stores session credentials in durable agent state (`whatsapp` for OpenClaw, `platforms/whatsapp` for Hermes) so they survive rebuilds without re-pairing."), ensuring you keep the same identifiers `whatsapp`, `platforms/whatsapp`, OpenClaw, and Hermes.
123-123: ⚡ Quick winRewrite in active voice.
The passive construction "is baked into" should identify the actor and use active voice.
As per coding guidelines: "Active voice required. Flag passive constructions."
Proposed fix
-The non-secret per-account metadata (`WECHAT_ACCOUNT_ID`, `WECHAT_BASE_URL`, `WECHAT_USER_ID`) is baked into the sandbox image so the in-sandbox bridge can pre-seed the per-account context tokens without re-running the QR handshake. +NemoClaw bakes the non-secret per-account metadata (`WECHAT_ACCOUNT_ID`, `WECHAT_BASE_URL`, `WECHAT_USER_ID`) into the sandbox image so the in-sandbox bridge can pre-seed the per-account context tokens without re-running the QR handshake.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/manage-sandboxes/messaging-channels.mdx` at line 123, Rewrite the passive sentence to active voice by naming the actor that performs the baking; for example: state that the sandbox image build (or the build process) bakes the non-secret per-account metadata (WECHAT_ACCOUNT_ID, WECHAT_BASE_URL, WECHAT_USER_ID) into the sandbox image so the in-sandbox bridge can pre-seed the per-account context tokens without re-running the QR handshake. Replace the passive phrase "is baked into the sandbox image" with an active construction like "the sandbox image build bakes" or "the build process bakes" and keep references to the in-sandbox bridge and context tokens unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@docs/manage-sandboxes/messaging-channels.mdx`:
- Line 89: The sentence "For Telegram group chats, disable privacy mode before
testing group replies: in `@BotFather`, run `/setprivacy`, choose the bot, then
choose **Disable**." uses a colon incorrectly; replace the colon with a comma or
an em dash (or a period and capitalize "In") so the punctuation correctly
connects the clauses—update the sentence that begins "For Telegram group chats,
disable privacy mode before testing group replies" accordingly to use the chosen
punctuation and adjust the following "in `@BotFather`" capitalization if you
replace the colon with a period.
- Line 39: The sentence "It only starts optional host services such as the
cloudflared tunnel when that binary is present. (`nemoclaw start` is kept as a
deprecated alias.)" contains two sentences on one line; split them so each
sentence is on its own line by moving the parenthetical "(`nemoclaw start` is
kept as a deprecated alias.)" to a new line immediately after the first
sentence, preserving punctuation and whitespace.
---
Nitpick comments:
In `@docs/manage-sandboxes/messaging-channels.mdx`:
- Line 145: Rewrite the sentence in active voice and name the actor that
performs the action: change "Session credentials are generated and stored inside
durable agent state (`whatsapp` for OpenClaw, `platforms/whatsapp` for Hermes),
so they survive rebuilds without re-pairing." to an active construction that
states who does the work (e.g., "The agent generates and stores session
credentials in durable agent state (`whatsapp` for OpenClaw,
`platforms/whatsapp` for Hermes) so they survive rebuilds without re-pairing."),
ensuring you keep the same identifiers `whatsapp`, `platforms/whatsapp`,
OpenClaw, and Hermes.
- Line 123: Rewrite the passive sentence to active voice by naming the actor
that performs the baking; for example: state that the sandbox image build (or
the build process) bakes the non-secret per-account metadata (WECHAT_ACCOUNT_ID,
WECHAT_BASE_URL, WECHAT_USER_ID) into the sandbox image so the in-sandbox bridge
can pre-seed the per-account context tokens without re-running the QR handshake.
Replace the passive phrase "is baked into the sandbox image" with an active
construction like "the sandbox image build bakes" or "the build process bakes"
and keep references to the in-sandbox bridge and context tokens unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: ab3f8e59-35f3-43d9-b13a-33e9eb719333
📒 Files selected for processing (25)
docs/about/release-notes.mdxdocs/deployment/deploy-to-remote-gpu.mdxdocs/deployment/install-openclaw-plugins.mdxdocs/deployment/sandbox-hardening.mdxdocs/get-started/quickstart-hermes.mdxdocs/get-started/quickstart.mdxdocs/inference/inference-options.mdxdocs/inference/set-up-sub-agent.mdxdocs/inference/switch-inference-providers.mdxdocs/inference/tool-calling-reliability.mdxdocs/inference/use-local-inference.mdxdocs/manage-sandboxes/backup-restore.mdxdocs/manage-sandboxes/lifecycle.mdxdocs/manage-sandboxes/messaging-channels.mdxdocs/monitoring/monitor-sandbox-activity.mdxdocs/network-policy/approve-network-requests.mdxdocs/network-policy/customize-network-policy.mdxdocs/network-policy/integration-policy-examples.mdxdocs/reference/cli-selection-guide.mdxdocs/reference/commands-nemohermes.mdxdocs/reference/commands.mdxdocs/reference/network-policies.mdxdocs/reference/troubleshooting.mdxdocs/resources/agent-skills.mdxdocs/security/credential-storage.mdx
✅ Files skipped from review due to trivial changes (10)
- docs/deployment/install-openclaw-plugins.mdx
- docs/resources/agent-skills.mdx
- docs/deployment/sandbox-hardening.mdx
- docs/deployment/deploy-to-remote-gpu.mdx
- docs/about/release-notes.mdx
- docs/reference/network-policies.mdx
- docs/network-policy/approve-network-requests.mdx
- docs/reference/cli-selection-guide.mdx
- docs/get-started/quickstart-hermes.mdx
- docs/reference/commands-nemohermes.mdx
🚧 Files skipped from review as they are similar to previous changes (12)
- docs/inference/set-up-sub-agent.mdx
- docs/monitoring/monitor-sandbox-activity.mdx
- docs/security/credential-storage.mdx
- docs/inference/inference-options.mdx
- docs/get-started/quickstart.mdx
- docs/inference/switch-inference-providers.mdx
- docs/manage-sandboxes/backup-restore.mdx
- docs/inference/use-local-inference.mdx
- docs/network-policy/integration-policy-examples.mdx
- docs/manage-sandboxes/lifecycle.mdx
- docs/network-policy/customize-network-policy.mdx
- docs/reference/commands.mdx
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
docs/_components/AgentGuide.tsx (1)
1-4:⚠️ Potential issue | 🟠 Major | ⚡ Quick winUse the required
//SPDX header form.This still uses a block comment, so the file is missing the required TSX SPDX header format.
As per coding guidelines,
All source files must include an SPDX license header in the format: // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. and // SPDX-License-Identifier: Apache-2.0.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/_components/AgentGuide.tsx` around lines 1 - 4, Replace the block comment at the top of AgentGuide.tsx with the required two-line SPDX header using line comments: add "// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved." on the first line and "// SPDX-License-Identifier: Apache-2.0" on the second line at the very top of the file (replacing the existing /* ... */ block).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/_components/AgentGuide.tsx`:
- Around line 91-94: The link resolver currently rewrites any href that isn't
http(s), breaking fragments and scheme links; update the conditional that
computes resolved (the block using href, guidePath, variant, activeVariant,
pathname) to return href unchanged when it's an absolute http(s) URL OR a
fragment (href.startsWith('#')) OR when href begins with a URI scheme (detect
with a regex like /^[a-zA-Z][\w+.-]*:/) so mailto:, tel:, and other schemes are
preserved; otherwise continue to call guidePath(href, { variant, activeVariant,
pathname }).
---
Duplicate comments:
In `@docs/_components/AgentGuide.tsx`:
- Around line 1-4: Replace the block comment at the top of AgentGuide.tsx with
the required two-line SPDX header using line comments: add "//
SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All
rights reserved." on the first line and "// SPDX-License-Identifier: Apache-2.0"
on the second line at the very top of the file (replacing the existing /* ... */
block).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: de3d273a-74d3-4894-9db6-6074460c4401
📒 Files selected for processing (2)
docs/_components/AgentGuide.tsxdocs/manage-sandboxes/runtime-controls.mdx
💤 Files with no reviewable changes (1)
- docs/manage-sandboxes/runtime-controls.mdx
Summary
Adds per-agent documentation variants so OpenClaw and Hermes users can navigate agent-specific guides from the same NemoClaw docs site.
This PR introduces the variant navigation, shared variant-aware docs components, Hermes-focused content, and generated NemoHermes command reference needed to publish the new docs experience.
Related Issue
None.
Changes
AgentGuideMDX helpers for agent-specific CLI names, content blocks, and links across reused pages.docs/reference/commands-nemohermes.mdxcommand reference plusscripts/sync-agent-variant-docs.tsand npm scripts to keep it synchronized.Type of Change
Verification
npx prek run --all-filespassesnpm testpassesnpm run docsbuilds without warnings (doc changes only)Additional verification:
npm run docspasses locally with 0 errors. Fern reports 1 warning but does not print it withoutfern check --warnings.Signed-off-by: Miyoung Choi miyoungc@nvidia.com
Summary by CodeRabbit
New Features
Documentation
Chores
Tests