Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
53a986c
docs(security): stop labeling the preset-free posture as the default
udsy19 Aug 23, 2026
4c5ebc7
Merge branch 'main' into docs/locked-down-posture-not-default
apurvvkumaria Aug 24, 2026
96b6932
docs(security): clarify onboarding policy defaults
apurvvkumaria Aug 24, 2026
51e87dc
merge: update PR branch with main
apurvvkumaria Aug 24, 2026
32d85c3
Merge branch 'main' into docs/locked-down-posture-not-default
cv Aug 24, 2026
443f3fd
docs(security): remove diagram default claim
cv Aug 24, 2026
ada7b62
Merge branch 'main' into docs/locked-down-posture-not-default
cv Aug 24, 2026
2d418bb
Merge branch 'main' into docs/locked-down-posture-not-default
cv Aug 24, 2026
7a58ae3
Merge branch 'main' into docs/locked-down-posture-not-default
cv Aug 24, 2026
148ca41
Merge branch 'main' into docs/locked-down-posture-not-default
cv Aug 24, 2026
39c3fbd
test(docs): keep onboarding behavior with its owner
apurvvkumaria Aug 24, 2026
06b6a79
Merge branch 'main' into docs/locked-down-posture-not-default
cv Aug 24, 2026
384bf40
Merge branch 'main' into docs/locked-down-posture-not-default
apurvvkumaria Aug 24, 2026
fa2b660
Merge branch 'main' into docs/locked-down-posture-not-default
prekshivyas Aug 24, 2026
388506f
Merge branch 'main' into docs/locked-down-posture-not-default
prekshivyas Aug 24, 2026
f64d1aa
Merge branch 'main' into docs/locked-down-posture-not-default
prekshivyas Aug 25, 2026
f76cedb
Merge branch 'main' into docs/locked-down-posture-not-default
prekshivyas Aug 25, 2026
d9c8253
merge: refresh main for security posture documentation
apurvvkumaria Aug 25, 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
13 changes: 9 additions & 4 deletions docs/security/best-practices.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Comment thread
coderabbitai[bot] marked this conversation as resolved.

```mermaid
flowchart TB
subgraph HOST["Your Machine: default posture after onboarding"]
subgraph HOST["Your Machine: five protection layers"]
direction TB

YOU["👤 Operator"]
Expand Down Expand Up @@ -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.
Expand Down
27 changes: 27 additions & 0 deletions test/e2e/support/repro-5088-best-practices-layers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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.",
);
});
});
Loading