diff --git a/docs/security/best-practices.mdx b/docs/security/best-practices.mdx index 69aa5ad0b9..3615755499 100644 --- a/docs/security/best-practices.mdx +++ b/docs/security/best-practices.mdx @@ -26,11 +26,12 @@ NemoClaw enforces security at five layers. NemoClaw locks some controls when it creates the sandbox and requires a restart to change them. You can hot-reload others while the sandbox runs. -The following diagram shows the default posture immediately after onboarding, before you approve any endpoints or apply any presets. +The following diagram shows the five protection layers. +It does not show onboarding tier presets, optional web search, or endpoints that you approve later. ```mermaid flowchart TB - subgraph HOST["Your Machine: default posture after onboarding"] + subgraph HOST["Your Machine: five protection layers"] direction TB YOU["👤 Operator"] @@ -347,11 +348,15 @@ The following profiles describe how to configure NemoClaw for different use case These are not separate policy files. They provide guidance on which controls to keep tight or relax. -### Locked-Down (Default) +### Locked-Down Use for always-on assistants with minimal external access. -- Keep all defaults and do not add presets. +- Select the Restricted tier during onboarding. + Onboarding defaults to the Balanced tier, which selects the `npm`, `pypi`, `huggingface`, and `brew` presets. +- Choose no web search when prompted. + Enabling web search adds the selected `brave` or `tavily` preset even with the Restricted tier. +- Keep the remaining defaults and do not add other presets. - Use operator approval for any endpoint the agent requests. - Use NVIDIA Endpoints or local Ollama for inference. - Monitor the TUI for unexpected network requests. diff --git a/test/e2e/support/repro-5088-best-practices-layers.test.ts b/test/e2e/support/repro-5088-best-practices-layers.test.ts index 39eac01ac8..b5a2646d29 100644 --- a/test/e2e/support/repro-5088-best-practices-layers.test.ts +++ b/test/e2e/support/repro-5088-best-practices-layers.test.ts @@ -42,4 +42,31 @@ describe("best-practices.mdx security-layer consistency (#5088)", () => { ); expect(glance).toContain("Gateway Authentication"); }); + + it("does not present a preset-free diagram as the post-onboarding default", () => { + const glance = text.slice( + text.indexOf("## Protection Layers at a Glance"), + text.indexOf("## Network Controls"), + ); + + expect(glance).toContain("does not show onboarding tier presets"); + expect(glance).not.toMatch( + /default posture(?: immediately)? after onboarding|(?:the )?default after onboarding|(?:the )?post-onboarding default/i, + ); + }); + + it("routes Locked-Down through Restricted with web search disabled", () => { + const profile = text.slice(text.indexOf("### Locked-Down"), text.indexOf("### Development")); + + expect(text).toMatch(/^### Locked-Down$/m); + expect(text).not.toMatch(/^### Locked-Down \(Default\)$/m); + expect(profile).toContain("Select the Restricted tier during onboarding."); + expect(profile).toContain( + "Onboarding defaults to the Balanced tier, which selects the `npm`, `pypi`, `huggingface`, and `brew` presets.", + ); + expect(profile).toContain("Choose no web search when prompted."); + expect(profile).toContain( + "Enabling web search adds the selected `brave` or `tavily` preset even with the Restricted tier.", + ); + }); });