Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
a323269
docs: add deepagents doc variant
miyoungc Jul 6, 2026
929f60d
Merge branch 'main' of github.com:NVIDIA/NemoClaw into deepcode-doc-v…
miyoungc Jul 6, 2026
e8b2cb8
docs: drop dcode quickstart from openclaw variant
miyoungc Jul 6, 2026
ae47a35
docs: update starter prompt
miyoungc Jul 6, 2026
cf71450
docs: resolve blocking findings
miyoungc Jul 7, 2026
bbfc78b
docs: resolve additional change requests
miyoungc Jul 7, 2026
abf3067
docs: fix links
miyoungc Jul 7, 2026
841ec17
Merge branch 'main' into deepcode-doc-variant
miyoungc Jul 7, 2026
0e54e93
Merge branch 'main' of github.com:NVIDIA/NemoClaw into deepcode-doc-v…
miyoungc Jul 7, 2026
c2ae516
docs: resolve remaining issues and build issue
miyoungc Jul 7, 2026
535b82e
Merge branch 'main' into deepcode-doc-variant
miyoungc Jul 7, 2026
8fc71c3
docs(ci): update link checker tests
miyoungc Jul 7, 2026
8e6c041
docs: remaining small gaps
miyoungc Jul 7, 2026
8f05f84
docs(ci): fix route test
miyoungc Jul 7, 2026
e1a6700
fix: resolve more comments
miyoungc Jul 7, 2026
f762f77
Merge branch 'main' of github.com:NVIDIA/NemoClaw into deepcode-doc-v…
miyoungc Jul 7, 2026
1cf5d08
docs: last comment and agent support status updates
miyoungc Jul 7, 2026
8242650
Merge branch 'main' of github.com:NVIDIA/NemoClaw into deepcode-doc-v…
miyoungc Jul 7, 2026
817ca67
fix: fix commend doc test
miyoungc Jul 7, 2026
97b966d
Merge branch 'main' of github.com:NVIDIA/NemoClaw into deepcode-doc-v…
miyoungc Jul 7, 2026
5e4800d
Merge branch 'main' of github.com:NVIDIA/NemoClaw into deepcode-doc-v…
miyoungc Jul 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .agents/skills/nemoclaw-user-guide/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Do not answer from stale copied docs or generated skill references when the live
3. If MCP is not available, fetch the AI documentation index first: `https://docs.nvidia.com/nemoclaw/llms.txt`.
4. Fetch the specific `.md` page listed in the index or returned by docs search for the user's task.
5. If you only find an HTML documentation URL, replace the `.html` suffix with `.md`, or append `.md` to the route when the URL has no suffix.
6. Prefer the user's selected agent variant, either OpenClaw or Hermes, and do not mix variant-specific instructions unless you explain why.
6. Prefer the user's selected agent variant, OpenClaw, Hermes, or Deep Agents, and do not mix variant-specific instructions unless you explain why.

## Configure the MCP Server

Expand All @@ -39,10 +39,13 @@ Use these pages first for common onboarding flows:
- Hermes home: `https://docs.nvidia.com/nemoclaw/latest/user-guide/hermes/home.md`.
- Hermes prerequisites: `https://docs.nvidia.com/nemoclaw/latest/user-guide/hermes/get-started/prerequisites.md`.
- Hermes quickstart: `https://docs.nvidia.com/nemoclaw/latest/user-guide/hermes/get-started/quickstart.md`.
- Deep Agents home: `https://docs.nvidia.com/nemoclaw/latest/user-guide/deepagents/home.md`.
- Deep Agents prerequisites: `https://docs.nvidia.com/nemoclaw/latest/user-guide/deepagents/get-started/prerequisites.md`.
- Deep Agents quickstart: `https://docs.nvidia.com/nemoclaw/latest/user-guide/deepagents/get-started/quickstart.md`.

## How to Help the User

- Ask which agent variant they want to use before giving setup instructions: OpenClaw or Hermes.
- Ask which agent variant they want to use before giving setup instructions: OpenClaw, Hermes, or Deep Agents.
- Ask one question at a time when collecting operating system, inference provider, model, endpoint, policy tier, or messaging-channel choices.
- Run commands for non-technical users when your environment allows it, after explaining what the command does and getting permission.
- Summarize important command output instead of asking the user to paste terminal output into chat.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ For Hermes, set `NEMOCLAW_AGENT=hermes` before running the installer, or use the
|-------|-------|
| OpenClaw (default) | [Quickstart with OpenClaw](https://docs.nvidia.com/nemoclaw/latest/get-started/quickstart.html) |
| Hermes | [Quickstart with Hermes](https://docs.nvidia.com/nemoclaw/latest/get-started/quickstart-hermes.html) |
| LangChain Deep Agents Code | [Quickstart with LangChain Deep Agents Code](https://docs.nvidia.com/nemoclaw/latest/get-started/quickstart-langchain-deepagents-code.html) |
| LangChain Deep Agents Code | [Quickstart with LangChain Deep Agents Code](https://docs.nvidia.com/nemoclaw/latest/user-guide/deepagents/get-started/quickstart.html) |

## Documentation

Expand Down
10 changes: 5 additions & 5 deletions ci/platform-matrix.json
Original file line number Diff line number Diff line change
Expand Up @@ -150,19 +150,19 @@
"name": "OpenClaw",
"status": "tested",
"default": true,
"notes": "Default agent runtime. Onboard with `$$nemoclaw onboard` (no `--agent` flag required)."
"notes": "Default agent runtime. Onboard with `nemoclaw onboard` (no `--agent` flag required)."
},
{
"name": "Hermes",
"status": "caveated",
"status": "tested",
"default": false,
"notes": "First-class agent with dedicated CLI (`$$nemohermes`), Dockerfile, manifest, docs, and Hermes E2E coverage in `.github/workflows/e2e.yaml` (`hermes-e2e`, `hermes-*`, and Hermes rebuild/switch jobs). Onboard with `$$nemohermes onboard` or pass `--agent hermes` to `$$nemoclaw onboard`. Unlocks the Hermes Provider inference route. Known structural gaps: model-provider compatibility registry is empty (backfilled after failures, see `nemoclaw-blueprint/model-specific-setup/hermes/README.md`); no Hermes-specific unit tests in `nemoclaw/src/`; macOS and WSL CI suites do not differentiate agents. Suitable for evaluation and the documented onboarding paths; production parity with OpenClaw is not yet asserted."
"notes": "First-class agent with dedicated CLI (`nemohermes`), Dockerfile, manifest, docs, and Hermes E2E coverage in `.github/workflows/e2e.yaml` (`hermes-e2e`, `hermes-*`, and Hermes rebuild/switch jobs). Onboard with `nemohermes onboard` or `nemoclaw onboard --agent hermes`. Unlocks the Hermes Provider inference route. Known structural gaps: model-provider compatibility registry is empty (backfilled after failures, see `nemoclaw-blueprint/model-specific-setup/hermes/README.md`); no Hermes-specific unit tests in `nemoclaw/src/`; macOS and WSL CI suites do not differentiate agents. Suitable for evaluation and the documented onboarding paths; production parity with OpenClaw is not yet asserted."
},
{
"name": "LangChain Deep Agents Code",
"status": "experimental",
"status": "tested",
"default": false,
"notes": "Terminal-oriented coding harness (no in-sandbox gateway, no dashboard) built on the Deep Agents SDK; manifest at `agents/langchain-deepagents-code/manifest.yaml` with binary `dcode`. Onboard with `$$nemo-deepagents onboard` or `$$nemoclaw onboard --agent langchain-deepagents-code`, and follow [the quickstart](../get-started/quickstart-langchain-deepagents-code). NemoClaw runs it as a managed harness: unmanaged sandbox/MCP/shell overrides are rejected and credential-bearing proxy URLs are dropped from persisted shell env. Inference routes through OpenShell's `inference.local` endpoint via Deep Agents Code's OpenAI-compatible provider. Live runtime acceptance, broader launch material, and terminal-agent diagnostics are tracked at open issue #4861."
"notes": "Terminal-oriented coding harness (no in-sandbox gateway, no dashboard) built on the Deep Agents SDK; manifest at `agents/langchain-deepagents-code/manifest.yaml` with binary `dcode`. Onboard with `nemo-deepagents onboard` or `nemoclaw onboard --agent langchain-deepagents-code`, and follow [the quickstart](/user-guide/deepagents/get-started/quickstart). NemoClaw runs it as a managed harness: unmanaged sandbox/MCP/shell overrides are rejected and credential-bearing proxy URLs are dropped from persisted shell env. Inference routes through OpenShell's `inference.local` endpoint via Deep Agents Code's OpenAI-compatible provider. Live runtime acceptance, broader launch material, and terminal-agent diagnostics are tracked at open issue #4861."
}
],

Expand Down
4 changes: 2 additions & 2 deletions docs/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Treat `docs/` as the source of truth for published content and AI-agent Markdown

## Role

- Write clear, accurate, task-oriented documentation for developers who run NemoClaw with OpenClaw, Hermes, and OpenShell sandboxes.
- Write clear, accurate, task-oriented documentation for developers who run NemoClaw with OpenClaw, Hermes, LangChain Deep Agents Code, and OpenShell sandboxes.
- Preserve the reader's workflow: explain what to do, when to do it, and how to verify it.
- Prefer small, focused edits that match the structure of the current page.
- Verify behavior against source code, tests, scripts, or existing docs before documenting it.
Expand All @@ -33,7 +33,7 @@ Treat `docs/` as the source of truth for published content and AI-agent Markdown

## NemoClaw Doc Patterns

- Use `$$nemoclaw` for host CLI command examples on shared OpenClaw and Hermes pages.
- Use `$$nemoclaw` for host CLI command examples on shared OpenClaw, Hermes, and Deep Agents pages.
- Use literal command names on pages that have only one agent variant.
- Use `<AgentOnly>` blocks only when content differs by behavior, setup flow, state layout, or agent-specific wording.
- Use route-style links without `.mdx` extensions for links between docs pages.
Expand Down
22 changes: 18 additions & 4 deletions docs/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,27 @@ The watcher rejects blank or malformed overrides before it starts Fern.
Fern `.mdx` pages are the canonical docs source.
Fern publishes Markdown routes for AI agents from the same source pages.

## Publishing Docs

GitHub Actions publishes Fern docs from the same source files that `npm run docs` validates locally.

Docs PRs get Fern previews when they change `docs/`, `fern/`, or docs build inputs.
The preview workflow publishes to the staging Fern instance with a `pr-<number>` preview ID and posts the preview URL on the PR when `FERN_TOKEN` is available.

After a docs PR merges, pushes to `main` publish the affected docs to the staging Fern instance.
The staging publish job regenerates agent variants, validates Fern docs, publishes staging, and deletes the merged PR preview when it can map the merge commit back to a PR.

Public docs publish automatically when a `v*.*.*` release tag is pushed.
The public publish job runs in the `docs-public` environment, verifies that the tag commit is reachable from `origin/main`, regenerates agent variants, validates Fern docs, and publishes to the public Fern instance.
If the tag does not point to a commit on `main`, the job stops before installing dependencies or running Fern.

## Agent Variant Generation

Some Fern pages appear in both the OpenClaw and Hermes guide variants.
The `scripts/sync-agent-variant-docs.ts` script reads `docs/index.yml` and renders variant-specific copies for every page that appears in both guide variants before Fern validates or publishes the site.
Some Fern pages appear in the OpenClaw, Hermes, and Deep Agents guide variants.
The `scripts/sync-agent-variant-docs.ts` script reads `docs/index.yml` and renders variant-specific copies for every page that appears in multiple guide variants before Fern validates or publishes the site.
The source pages stay in their normal `docs/` locations, and generated pages are written under `docs/_build/agent-variants/`, which is ignored by Git.
Navigation in `docs/index.yml` points Fern at generated pages for shared entries so Fern still renders normal fenced code blocks with copy buttons and syntax highlighting.
OpenClaw-only or Hermes-only pages stay as source pages in navigation.
OpenClaw-only, Hermes-only, or Deep Agents-only pages stay as source pages in navigation.

When shared page content is the same except for the host CLI binary, write one source page and use `$$nemoclaw` as a build-time placeholder.
Do not duplicate fenced code blocks or inline command examples only to switch between `nemoclaw` and `nemohermes`.
Expand Down Expand Up @@ -203,7 +217,7 @@ Remove them during review.
```

- Use `$$nemoclaw` as a build-time placeholder for NemoClaw host CLI command examples in shared variant pages.
The docs build resolves it to `nemoclaw` for OpenClaw pages and `nemohermes` for Hermes pages before Fern renders code blocks.
The docs build resolves it to `nemoclaw` for OpenClaw pages, `nemohermes` for Hermes pages, and `nemo-deepagents` for Deep Agents pages before Fern renders code blocks.
This preserves Fern's native fenced-code UI while keeping one source sample.
- Do not write duplicate `<AgentOnly>` fenced code blocks when the only difference is `nemoclaw` versus `nemohermes`.
Use `<AgentOnly>` blocks only when the surrounding content differs between the OpenClaw and Hermes variants.
Expand Down
28 changes: 20 additions & 8 deletions docs/_components/AgentGuide.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
*/

/**
* Resolves OpenClaw vs Hermes user-guide variant from injected route data.
* Resolves OpenClaw, Hermes, or Deep Agents user-guide variant from injected route data.
* Prefer passing `variant` or `pathname` from the page or route that renders the
* component so SSR output does not depend on browser-only globals. The window
* fallback preserves the current client-side behavior for unwrapped pages.
*/
declare const React: unknown;

export type GuideVariant = "openclaw" | "hermes";
export type GuideVariant = "openclaw" | "hermes" | "deepagents";
export type GuideVariantSource =
| GuideVariant
| string
Expand All @@ -30,6 +30,7 @@ type GuideContextProps = {
};

const GUIDE_PATH = "/user-guide/";
const DEEPAGENTS_PATH = `${GUIDE_PATH}deepagents`;
const HERMES_PATH = `${GUIDE_PATH}hermes`;
const OPENCLAW_PATH = `${GUIDE_PATH}openclaw`;

Expand All @@ -51,11 +52,17 @@ export function guidePath(suffix: string, source?: GuideVariantSource): string {
}

export function AgentCli(props: GuideContextProps = {}) {
return <code>{getGuideVariant(props) === "hermes" ? "nemohermes" : "nemoclaw"}</code>;
const variant = getGuideVariant(props);
if (variant === "hermes") return <code>nemohermes</code>;
if (variant === "deepagents") return <code>nemo-deepagents</code>;
return <code>nemoclaw</code>;
}

export function AgentProductName(props: GuideContextProps = {}) {
return <>{getGuideVariant(props) === "hermes" ? "NemoHermes" : "NemoClaw"}</>;
const variant = getGuideVariant(props);
if (variant === "hermes") return <>NemoHermes</>;
if (variant === "deepagents") return <>NemoDeepAgents</>;
return <>NemoClaw</>;
}

export function AgentOnly({
Expand All @@ -64,12 +71,14 @@ export function AgentOnly({
pathname,
children,
}: {
variant: GuideVariant;
variant: GuideVariant | string;
activeVariant?: GuideVariant | null;
pathname?: string | null;
children: unknown;
}) {
if (getGuideVariant({ activeVariant, pathname }) !== variant) {
const active = getGuideVariant({ activeVariant, pathname });
const variants = variant.split(",").map((item) => item.trim());
if (!variants.includes(active)) {
return null;
}
return <>{children}</>;
Expand Down Expand Up @@ -97,7 +106,7 @@ export function GuideLink({

function resolveGuideVariant(source?: GuideVariantSource): GuideVariant | null {
if (!source) return null;
if (source === "openclaw" || source === "hermes") return source;
if (source === "openclaw" || source === "hermes" || source === "deepagents") return source;
if (typeof source === "string") return resolveGuideVariantFromPathname(source);
return (
source.activeVariant ??
Expand All @@ -107,13 +116,16 @@ function resolveGuideVariant(source?: GuideVariantSource): GuideVariant | null {
}

function resolveGuidePathname(source?: GuideVariantSource): string | null {
if (!source || source === "openclaw" || source === "hermes") return null;
if (!source || source === "openclaw" || source === "hermes" || source === "deepagents") {
return null;
}
if (typeof source === "string") return source;
return source.pathname ?? null;
}

function resolveGuideVariantFromPathname(pathname: string | null): GuideVariant | null {
if (!pathname) return null;
if (pathname.includes(DEEPAGENTS_PATH)) return "deepagents";
if (pathname.includes(HERMES_PATH)) return "hermes";
if (pathname.includes(OPENCLAW_PATH)) return "openclaw";
return null;
Expand Down
16 changes: 12 additions & 4 deletions docs/_components/StarterPrompt.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,11 @@ Before giving install instructions, ask me which supported agent I want to use:

- OpenClaw, the default NemoClaw agent.
- Hermes.
- LangChain Deep Agents Code.

Ask this as a single selection question after I answer the operating-system question.

After I choose, use the matching documentation variant. Do not mix OpenClaw-specific and Hermes-specific instructions unless you explain why.
After I choose, use the matching documentation variant. Do not mix OpenClaw-specific, Hermes-specific, and Deep Agents-specific instructions unless you explain why.

Use these Markdown documentation pages as the first sources:

Expand All @@ -68,18 +69,23 @@ Use these Markdown documentation pages as the first sources:
- Hermes home: https://docs.nvidia.com/nemoclaw/latest/user-guide/hermes/home.md
- Hermes prerequisites: https://docs.nvidia.com/nemoclaw/latest/user-guide/hermes/get-started/prerequisites.md
- Hermes quickstart: https://docs.nvidia.com/nemoclaw/latest/user-guide/hermes/get-started/quickstart.md
- Deep Agents home: https://docs.nvidia.com/nemoclaw/latest/user-guide/deepagents/home.md
- Deep Agents prerequisites: https://docs.nvidia.com/nemoclaw/latest/user-guide/deepagents/get-started/prerequisites.md
- Deep Agents quickstart: https://docs.nvidia.com/nemoclaw/latest/user-guide/deepagents/get-started/quickstart.md

## Avoid Getting Stuck on Interactive NemoClaw Prompts

Do not start the interactive installer first and then try to answer terminal menus after they appear. Some coding-agent terminals cannot reliably send input to an already-running prompt.

Instead, collect the required choices from me first, one clickable selection at a time, then run NemoClaw in non-interactive mode whenever possible.

- After I choose OpenClaw or Hermes, ask me which inference provider I want as one selection question.
- If I choose a provider that requires a model, endpoint URL, credential, model download, sandbox name, web search, messaging channel, or policy tier choice, ask those follow-up questions one at a time before running the installer.
- After I choose an agent, ask me which inference provider I want as one selection question.
- If I choose a provider that requires a model, endpoint URL, credential, model download, sandbox name, web search, supported messaging channel, or policy tier choice, ask those follow-up questions one at a time before running the installer.
- For Local Ollama, ask for the model before running the installer. Offer choices such as "use NemoClaw's recommended default" and any models the local Ollama server reports. If I approve downloading a model, set \`NEMOCLAW_YES=1\`.
- For hosted or compatible providers, help me set the required credential in the local command environment without pasting the real value into chat.
- Never echo a command that contains a real secret. Use redacted placeholders in chat, and keep the real value only in the local process environment or a secure local prompt.
- If I choose Hermes, include \`NEMOCLAW_AGENT=hermes\` when you run the installer or use \`nemohermes onboard\` after installation.
- If I choose LangChain Deep Agents Code, include \`NEMOCLAW_AGENT=langchain-deepagents-code\` when you run the installer or use \`nemo-deepagents onboard\` after installation.

## Handle Tokens Securely and Visually

Expand Down Expand Up @@ -108,6 +114,7 @@ Use this provider mapping for non-interactive setup:
| Model Router | \`routed\` | \`NVIDIA_INFERENCE_API_KEY\` |

When you have the approved values, run the installer with the environment variables on the \`bash\` side of the pipe, not before \`curl\`.
Do not offer the Hermes Provider option for OpenClaw or Deep Agents.

For example, for an approved Local Ollama setup:

Expand All @@ -125,8 +132,9 @@ If non-interactive mode cannot cover a later prompt, stop before running the int

## Configure Messaging Channels after Non-Interactive Onboarding

Non-interactive onboarding can skip the interactive messaging-channel picker. After the sandbox is created, ask whether I want to set up messaging as a separate one-question selection.
Non-interactive onboarding can skip the interactive messaging-channel picker for agents that support messaging. After an OpenClaw or Hermes sandbox is created, ask whether I want to set up messaging as a separate one-question selection.

- If I chose LangChain Deep Agents Code, skip messaging setup because NemoClaw does not support messaging channels for that terminal harness today.
- First ask: "Do you want to set up a messaging channel now?" with choices: No, Telegram, Discord, Slack, WhatsApp, WeChat (experimental).
- Configure one channel at a time. If I want another channel, ask again after the current channel finishes.
- Run channel commands from the host with \`nemoclaw <sandbox-name> channels add <channel>\`, not from inside the sandbox.
Expand Down
Loading
Loading