Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
b465f11
feat(policy): support persistent baseline network policy exclusions
laitingsheng Jul 19, 2026
3bc5c32
fix(policy): preserve baseline exclusions across rebuilds
apurvvkumaria Jul 19, 2026
ca7807b
Merge remote-tracking branch 'origin/main' into feat/baseline-policy-…
laitingsheng Jul 19, 2026
eb221ce
fix(policy): make destructive resume transaction-safe and surface bas…
laitingsheng Jul 19, 2026
1c24fb7
test(policy): fix CI-only regressions from the exclusion-surface fix
laitingsheng Jul 19, 2026
92bb6f0
fix(policy): complete baseline exclusion recovery
apurvvkumaria Jul 19, 2026
f92aeae
test(policy): keep rollback hook setup linear
apurvvkumaria Jul 19, 2026
7f37653
fix(policy): stop suggesting re-exclusion for a removed baseline key
laitingsheng Jul 19, 2026
882b9c9
fix(policy): complete removed exclusion guidance
apurvvkumaria Jul 19, 2026
8df72a2
merge: refresh baseline exclusions with main
cv Jul 19, 2026
115754c
test(snapshot): cover baseline exclusion summary
cv Jul 19, 2026
b023a7f
fix(snapshot): preserve baseline exclusions in clones
apurvvkumaria Jul 19, 2026
07bce37
test(snapshot): cover baseline exclusion clone lifecycle
apurvvkumaria Jul 19, 2026
9056089
fix(rebuild): preserve registry intent across recreation
apurvvkumaria Jul 19, 2026
d4c90c0
merge: refresh baseline exclusion lifecycle
apurvvkumaria Jul 19, 2026
5702dd8
test(rebuild): model sandbox disappearance in fixtures
apurvvkumaria Jul 19, 2026
477b0c8
fix(policy): validate recorded agent baselines
apurvvkumaria Jul 19, 2026
8ecc45a
fix(state): persist baseline exclusion transitions
apurvvkumaria Jul 19, 2026
2082f59
fix(sandbox): serialize baseline-aware lifecycle mutations
apurvvkumaria Jul 19, 2026
86d69cb
fix(policy): surface pending baseline repairs
apurvvkumaria Jul 19, 2026
6c1760b
fix(policy): reconcile interrupted baseline mutations
apurvvkumaria Jul 19, 2026
3ee81e4
docs(policy): document baseline repair recovery
apurvvkumaria Jul 19, 2026
80b7999
refactor(onboard): keep entrypoint net-neutral
apurvvkumaria Jul 19, 2026
b2fbaeb
test(package): inspect packed policy archive directly
apurvvkumaria Jul 19, 2026
979b2c0
test(snapshot): keep restore lifecycle fixtures branchless
apurvvkumaria Jul 19, 2026
624d4f7
test(onboard): provide agent policy fixtures
apurvvkumaria Jul 19, 2026
2775973
ci(tests): give policy checks bounded headroom
apurvvkumaria Jul 20, 2026
f3ba4da
test(rebuild): model delete convergence in fixtures
apurvvkumaria Jul 20, 2026
5c95b1e
Merge branch 'main' into feat/baseline-policy-exclusion
cjagwani Jul 20, 2026
3342a13
Merge branch 'main' into feat/baseline-policy-exclusion
cv Jul 20, 2026
213bc35
fix(policy): protect required baseline exclusions
apurvvkumaria Jul 20, 2026
b595374
merge: sync main into baseline exclusion PR
apurvvkumaria Jul 20, 2026
dc678fb
merge: sync main into baseline exclusion PR
jyaunches Jul 20, 2026
dc83cf8
fix(policy): enforce baseline exclusion ownership
jyaunches Jul 20, 2026
d5116ce
test(policy): align versioned exclusion fixtures
jyaunches Jul 21, 2026
245a233
test(snapshot): provide strict baseline fixture
jyaunches Jul 21, 2026
5d49088
refactor(rebuild): centralize baseline repair guard
jyaunches Jul 21, 2026
42bae83
merge(main): incorporate upstream fixes
jyaunches Jul 21, 2026
b51ce74
fix(policy): reconcile cross-agent baseline restore
jyaunches Jul 21, 2026
734f66e
fix(security): patch mcporter Hono runtime
jyaunches Jul 21, 2026
b3dcae4
Merge remote-tracking branch 'origin/main' into feat/baseline-policy-…
laitingsheng Jul 22, 2026
028d968
Merge remote-tracking branch 'origin/main' into feat/baseline-policy-…
laitingsheng Jul 22, 2026
d551cbd
Merge remote-tracking branch 'origin/main' into feat/baseline-policy-…
jyaunches Jul 22, 2026
bce9868
merge(main): refresh baseline policy exclusion branch
jyaunches Jul 24, 2026
85904b5
fix(snapshot): complete restored gateway pairing handshake
jyaunches Jul 24, 2026
5c38607
fix(snapshot): restart restored clone before pairing
jyaunches Jul 24, 2026
02c23c3
merge(main): refresh baseline policy exclusion branch
jyaunches Jul 24, 2026
0b33ecc
test(snapshot): model restored clone restart
jyaunches Jul 24, 2026
62e10ee
fix(policy): disclose exclusion feature impact
jyaunches Jul 24, 2026
fe334b5
chore(snapshot): remove unrelated pairing changes
jyaunches Jul 24, 2026
8842716
docs(policy): explain exclusion impact disclosure
jyaunches Jul 24, 2026
f9b103e
fix(snapshot): restart restored clone before pairing
jyaunches Jul 24, 2026
bd3ea77
test(snapshot): model restored clone restart
jyaunches Jul 24, 2026
40b1b24
fix(snapshot): restart restored gateway via supervisor
jyaunches Jul 24, 2026
e2af313
test(snapshot): align restored gateway terminology
jyaunches Jul 24, 2026
dc034ac
merge: sync main into baseline policy exclusion
jyaunches Jul 24, 2026
69c2872
merge: refresh baseline policy exclusions with upstream/main
senthilr-nv Jul 24, 2026
44c5071
docs: use canonical policy command forms
senthilr-nv Jul 24, 2026
49e10ef
merge: refresh baseline policy exclusions with upstream/main
senthilr-nv Jul 24, 2026
5595b90
merge: refresh baseline policy exclusions with upstream/main
senthilr-nv Jul 24, 2026
679038c
merge: refresh baseline policy exclusions with upstream/main
senthilr-nv Jul 24, 2026
b9d0859
test(docs): expect canonical policy command forms
senthilr-nv Jul 24, 2026
3360ac2
merge: refresh baseline policy exclusions with upstream/main
senthilr-nv Jul 24, 2026
b826d0e
merge: refresh baseline policy exclusions with upstream/main
senthilr-nv Jul 25, 2026
e0f88ea
merge: refresh baseline policy exclusions with upstream/main
senthilr-nv Jul 25, 2026
51ae094
Merge branch 'main' into feat/baseline-policy-exclusion
senthilr-nv Jul 25, 2026
f133e7b
Merge branch 'main' into feat/baseline-policy-exclusion
senthilr-nv Jul 25, 2026
c1960b7
merge: refresh baseline policy exclusions with upstream/main
senthilr-nv Jul 25, 2026
1f6ddfc
merge: refresh baseline policy exclusions with upstream/main
senthilr-nv Jul 25, 2026
dcdbd09
Merge branch 'main' into feat/baseline-policy-exclusion
senthilr-nv Jul 25, 2026
58dc1fd
fix(snapshot): reconcile gateway registration on pairing retry
jyaunches Jul 25, 2026
719dc31
test(snapshot): keep pairing regression linear
jyaunches Jul 25, 2026
f490578
chore(ci): retrigger protected E2E gate
jyaunches Jul 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
2 changes: 1 addition & 1 deletion ci/platform-matrix.json
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@
{
"name": "Declarative network policy",
"status": "tested",
"notes": "YAML-defined egress with policy presets. Presets include `slack`, `discord`, `telegram`, `weather`, `openclaw-pricing`, `huggingface`, `npm`, `pypi`, `brew`, and others. Hot-reloadable at runtime with `$$nemoclaw <name> policy-add`."
"notes": "YAML-defined egress with policy presets. Presets include `slack`, `discord`, `telegram`, `weather`, `openclaw-pricing`, `huggingface`, `npm`, `pypi`, `brew`, and others. Hot-reloadable at runtime with `$$nemoclaw <name> policy add`."
},
{
"name": "Snapshot and restore",
Expand Down
8 changes: 4 additions & 4 deletions docs/deployment/deploy-to-headless-server.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -348,9 +348,9 @@ Scope the host, port, method, path, and executable to the smallest required set.
Save a reviewed preset as `./presets/internal-status.yaml`, preview it, then apply it without a prompt:

```bash
$$nemoclaw headless-agent policy-add --from-file ./presets/internal-status.yaml --dry-run
$$nemoclaw headless-agent policy-add --from-file ./presets/internal-status.yaml --yes
$$nemoclaw headless-agent policy-list
$$nemoclaw headless-agent policy add --from-file ./presets/internal-status.yaml --dry-run
$$nemoclaw headless-agent policy add --from-file ./presets/internal-status.yaml --yes
$$nemoclaw headless-agent policy list
```

`--yes` skips the confirmation prompt but does not skip schema, destination, or SSRF validation.
Expand Down Expand Up @@ -383,7 +383,7 @@ Use `$$nemoclaw headless-agent rebuild` when you need the current agent image wh
| Item | Same-container restart | Snapshot and restore | Rebuild or sandbox upgrade |
|---|---|---|---|
| Provider configuration | Preserved | Provider names are recorded, but raw credentials are not in the snapshot | Regenerated from registry and OpenShell provider state |
| Custom preset YAML applied with `policy-add` | Preserved in registry | Stored content is included in snapshot metadata | Replayed from stored content |
| Custom preset YAML applied with `policy add` | Preserved in registry | Stored content is included in snapshot metadata | Replayed from stored content |
| Manifest-defined user and agent state | Preserved | Preserved | Preserved when backup and restore succeed |
| Arbitrary files outside manifest state | Usually remain in the same writable layer | Not preserved | Not preserved |
| Manually installed system or global packages | Usually remain in the same writable layer | Not preserved | Not preserved |
Expand Down
6 changes: 3 additions & 3 deletions docs/get-started/quickstart-langchain-deepagents-code.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -288,9 +288,9 @@ The policy preset is a per-sandbox managed-Python opt-in, but provider registrat

```bash
# Preview the endpoints the preset opens:
nemo-deepagents <sandbox-name> policy-add tavily --dry-run
nemo-deepagents <sandbox-name> policy add tavily --dry-run
# Apply it:
nemo-deepagents <sandbox-name> policy-add tavily --yes
nemo-deepagents <sandbox-name> policy add tavily --yes
# Export the key on the host (NemoClaw reads it from the current shell):
export TAVILY_API_KEY=tvly-...
# Register the provider with the gateway:
Expand All @@ -310,7 +310,7 @@ Because OpenShell attributes the harness's calls to the sandbox `python3` interp
Remove the target sandbox's managed-Python opt-in when it is no longer needed.

```bash
nemo-deepagents <sandbox-name> policy-remove tavily --yes
nemo-deepagents <sandbox-name> policy remove tavily --yes
```

This does not unregister the gateway-wide `tavily-search` provider; its credential and Node/curl routes remain available to sandboxes that attach it.
Expand Down
2 changes: 1 addition & 1 deletion docs/get-started/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ Use these details when your first-run path needs more control.
Status: nemoclaw my-gpt-claw status
Logs: nemoclaw my-gpt-claw logs --follow
Model: nemoclaw inference set --model <model> --provider <provider> --sandbox my-gpt-claw
Policies: nemoclaw my-gpt-claw policy-add
Policies: nemoclaw my-gpt-claw policy add
Credentials: nemoclaw credentials reset <KEY> && nemoclaw onboard
──────────────────────────────────────────────────
```
Expand Down
4 changes: 2 additions & 2 deletions docs/manage-sandboxes/backup-restore.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ NemoClaw refuses to create a snapshot when it detects an active `dcode` task or
Wait for active `dcode` work to finish before running `$$nemoclaw <name> snapshot create`.
</AgentOnly>

Snapshots preserve sandbox registry metadata that affects rebuild behavior, including custom policy presets applied with `policy-add --from-file` or `policy-add --from-dir`.
When you restore a snapshot, NemoClaw replays those recorded custom presets with their stored YAML content, so you do not need the original preset files on disk.
Snapshots preserve sandbox registry metadata that affects rebuild behavior, including custom policy presets applied with `policy add --from-file` or `policy add --from-dir` and baseline network policy entries excluded with `policy exclude`.
When you restore a snapshot, NemoClaw replays those recorded custom presets with their stored YAML content, so you do not need the original preset files on disk, and rebuild continues to apply the recorded baseline exclusions.

The target sandbox's current agent manifest remains authoritative for state-file restore behavior.
NemoClaw rejects the restore when the snapshot's agent, config directory, state-file path, or state-file strategy conflicts with that manifest.
Expand Down
4 changes: 2 additions & 2 deletions docs/manage-sandboxes/runtime-controls.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ NemoClaw applies its security posture in three layers: what onboarding writes in
| Inference provider | Runtime route and config update while shields are down; rebuild only if you need to recreate the image | Run `$$nemoclaw <name> shields down`, then `$$nemoclaw inference set`, then restore shields |
| Inference model on the current provider | Runtime route and config update while shields are down | Run `$$nemoclaw <name> shields down`, then `$$nemoclaw inference set`, then restore shields |
| Sub-agent | Re-onboard required because the sub-agent and workspace are baked at onboard | `$$nemoclaw onboard --recreate-sandbox` |
| Network policy preset | Runtime on the next request; rebuild only if the preset adds bind-mounted secrets | `$$nemoclaw <name> policy-add <preset>` or `policy-remove <preset>` |
| Network policy preset | Runtime on the next request; rebuild only if the preset adds bind-mounted secrets | `$$nemoclaw <name> policy add <preset>` or `policy remove <preset>` |
| Network allowlist | Runtime on the next request | `openshell policy set` or the interactive approval prompt at the gateway |
| Channel tokens | Rebuild required because the channel configuration and credential attachment are created during onboarding or rebuild | `$$nemoclaw <name> channels add <channel>`, then accept the rebuild prompt |
| Channel enable or disable | Rebuild required because `openclaw.json` is the runtime source of truth | `$$nemoclaw <name> channels stop <channel>`, then rebuild |
Expand Down Expand Up @@ -68,7 +68,7 @@ If preflight detects an unsafe path, invalid config, invalid ownership posture,
| Inference provider | Runtime route changes apply immediately; rebuild if you need to rebake model metadata into the image | `$$nemoclaw inference set` for route changes, or `$$nemoclaw <name> rebuild` after changing build-time settings |
| Inference model on the current provider | Hot-reloadable through the Hermes config sync path | `$$nemoclaw inference set` |
| Agent runtime | Re-onboard required because the agent and state layout are baked at onboard | `$$nemoclaw onboard --recreate-sandbox` or `nemoclaw onboard --agent openclaw --recreate-sandbox` |
| Network policy preset | Runtime on the next request; rebuild only if the preset adds bind-mounted secrets | `$$nemoclaw <name> policy-add <preset>` or `policy-remove <preset>` |
| Network policy preset | Runtime on the next request; rebuild only if the preset adds bind-mounted secrets | `$$nemoclaw <name> policy add <preset>` or `policy remove <preset>` |
| Network allowlist | Runtime on the next request | `openshell policy set` or the interactive approval prompt at the gateway |
| Channel tokens | Rebuild required because the channel configuration and credential attachment are created during onboarding or rebuild | `$$nemoclaw <name> channels add <channel>`, then accept the rebuild prompt |
| Channel enable or disable | Rebuild required because `/sandbox/.hermes/.env` and Hermes config are baked at image build time | `$$nemoclaw <name> channels stop <channel>`, then rebuild |
Expand Down
2 changes: 1 addition & 1 deletion docs/manage-sandboxes/set-up-slack.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ NemoClaw validates both tokens before it saves Slack credentials or enables the
This validation calls the live Slack APIs `auth.test` and `apps.connections.open`, so the tokens must belong to a real Slack app.

If Slack rejects the tokens, NemoClaw skips the Slack channel and does not apply the `slack` network policy preset.
When Slack is skipped, the preset does not appear as applied in `$$nemoclaw <name> policy-list`.
When Slack is skipped, the preset does not appear as applied in `$$nemoclaw <name> policy list`.

To exercise channel setup with placeholder tokens in a restricted network or hermetic test environment, set `NEMOCLAW_SKIP_SLACK_AUTH_VALIDATION=1`.
Slack token format checks still apply.
Expand Down
2 changes: 1 addition & 1 deletion docs/monitoring/manage-deepagents-trace-export.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ While the collector is stopped, trace delivery fails open and Deep Agents Code c
Remove the policy preset to revoke collector reachability immediately:

```bash
nemo-deepagents "$SANDBOX_NAME" policy-remove observability-otlp-local --yes
nemo-deepagents "$SANDBOX_NAME" policy remove observability-otlp-local --yes
```

Removing the preset does not clear the recorded observability choice.
Expand Down
6 changes: 3 additions & 3 deletions docs/monitoring/set-up-deepagents-trace-export.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,14 @@ On an existing sandbox, skip mode leaves the live policy unchanged.
Inspect the effective policy:

```bash
nemo-deepagents "$SANDBOX_NAME" policy-list
nemo-deepagents "$SANDBOX_NAME" policy list
```

If `observability-otlp-local` is not active, preview and apply it:

```bash
nemo-deepagents "$SANDBOX_NAME" policy-add observability-otlp-local --dry-run
nemo-deepagents "$SANDBOX_NAME" policy-add observability-otlp-local --yes
nemo-deepagents "$SANDBOX_NAME" policy add observability-otlp-local --dry-run
nemo-deepagents "$SANDBOX_NAME" policy add observability-otlp-local --yes
```

The preset permits only `POST /v1/traces` to `host.openshell.internal:4318` from `/opt/venv/bin/python3*`.
Expand Down
2 changes: 1 addition & 1 deletion docs/monitoring/verify-deepagents-trace-export.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ For additional collector diagnostics, refer to [Troubleshooting the OpenTelemetr
| --- | --- |
| Collector exits at startup | Run the validation command again, then inspect `docker logs nemoclaw-otel-langsmith`. Confirm that the image is the Contrib `0.155.0` image and that all four `LANGSMITH_*` variables were set when the container was created. |
| Port `4318` is already allocated | Run `ss -ltnp 'sport = :4318'` and stop the conflicting listener. The managed sandbox endpoint is fixed, so changing the collector port does not work. |
| Collector is healthy but logs no trace count | Run `policy-list` and add `observability-otlp-local` if it is absent. Confirm that `docker port` shows the current `$OTLP_BIND_IP`. Run `nemo-deepagents <sandbox> rebuild --observability --yes` if the sandbox was started without the opt-in. |
| Collector is healthy but logs no trace count | Run `policy list` and add `observability-otlp-local` if it is absent. Confirm that `docker port` shows the current `$OTLP_BIND_IP`. Run `nemo-deepagents <sandbox> rebuild --observability --yes` if the sandbox was started without the opt-in. |
| Collector logs `401` | Replace an invalid or expired LangSmith API key, then recreate the collector. |
| Collector logs `403` | Confirm that the service key can write to the target workspace and that `LANGSMITH_WORKSPACE_ID` matches that workspace. Organization-scoped service keys require `X-Tenant-Id`. |
| Collector logs `404` | Confirm that `LANGSMITH_OTLP_TRACES_ENDPOINT` uses the correct US, EU, GCP-hosted APAC, AWS-hosted US, or self-hosted API base and ends in `/otel/v1/traces`. |
Expand Down
20 changes: 10 additions & 10 deletions docs/network-policy/apply-policy-presets.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ title: "Apply Policy Presets"
sidebar-title: "Apply Policy Presets"
description: "Add, reapply, list, or remove policy presets for a running NemoClaw sandbox."
description-agent: "Applies and manages policy presets for a running sandbox. Use when adding maintained integration access, previewing preset scope, reapplying an edited preset, or removing access."
keywords: ["nemoclaw policy presets", "policy-add", "policy-remove"]
keywords: ["nemoclaw policy presets", "policy add", "policy remove"]
content:
type: "how_to"
skill:
Expand All @@ -15,7 +15,7 @@ Use policy presets to add reviewed network access to one running sandbox without
NemoClaw records applied presets so rebuild and restore operations can replay them.

<Warning>
Use `$$nemoclaw <name> policy-add` to merge a preset into the running policy.
Use `$$nemoclaw <name> policy add` to merge a preset into the running policy.
The OpenShell `policy set` command replaces the live policy instead of merging it.
Follow [Replace the Live Network Policy](replace-live-network-policy) only when you need full-policy replacement.
</Warning>
Expand All @@ -29,7 +29,7 @@ Messaging channel choices are scoped to the active agent, so unsupported channel
List the presets available to the sandbox:

```bash
$$nemoclaw <name> policy-list
$$nemoclaw <name> policy list
```

For the maintained preset catalog and guided service workflows, refer to [Common Integration Policy Examples](../integration-policy-examples).
Expand All @@ -39,22 +39,22 @@ For the maintained preset catalog and guided service workflows, refer to [Common
Use `--dry-run` to review the endpoints, rules, and binaries before applying the preset:

```bash
$$nemoclaw my-assistant policy-add pypi --dry-run
$$nemoclaw my-assistant policy-add pypi --yes
$$nemoclaw my-assistant policy add pypi --dry-run
$$nemoclaw my-assistant policy add pypi --yes
```

Omit the preset name to use the interactive picker:

```bash
$$nemoclaw my-assistant policy-add
$$nemoclaw my-assistant policy add
```

Pass a preset name with `--yes` for scripted workflows.
Set `NEMOCLAW_NON_INTERACTIVE=1` instead of `--yes` to use the same non-interactive flow through an environment variable.

## Reapply an Edited Preset

Run the same `policy-add` command after you edit a maintained or recorded custom preset.
Run the same `policy add` command after you edit a maintained or recorded custom preset.
NemoClaw compares the preset with the live policy.
If the content differs, it applies the changed content.
You do not need to remove the preset first.
Expand All @@ -68,16 +68,16 @@ Existing presets and baseline entries remain in place.
List every preset recorded for the sandbox:

```bash
$$nemoclaw <name> policy-list
$$nemoclaw <name> policy list
```

Remove a preset when the sandbox no longer needs its access:

```bash
$$nemoclaw my-assistant policy-remove pypi --yes
$$nemoclaw my-assistant policy remove pypi --yes
```

`policy-remove` accepts maintained and custom preset names.
`policy remove` accepts maintained and custom preset names.

## Understand Persistence

Expand Down
2 changes: 1 addition & 1 deletion docs/network-policy/change-baseline-network-policy.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ Check that the sandbox is running with the updated policy:
$$nemoclaw <name> status
```

Use `$$nemoclaw <name> policy-list` to inspect the tracked preset state.
Use `$$nemoclaw <name> policy list` to inspect the tracked preset state.
Use `openshell policy get <name>` when you need to inspect the effective OpenShell policy.

## Related Topics
Expand Down
2 changes: 1 addition & 1 deletion docs/network-policy/configure-raw-tls-passthrough.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ The filename without `.yaml` must match `preset.name`.
Apply the catalog preset:

```bash
$$nemoclaw my-assistant policy-add cf-fronted-api
$$nemoclaw my-assistant policy add cf-fronted-api
```

Run the same command after editing the file.
Expand Down
18 changes: 9 additions & 9 deletions docs/network-policy/create-custom-policy-presets.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ title: "Create Custom Policy Presets"
sidebar-title: "Create Custom Presets"
description: "Author and apply a scoped network policy preset for an endpoint that NemoClaw does not include."
description-agent: "Creates and applies custom policy presets. Use when adding a reviewed endpoint, applying preset files, or allowing a URL-based MCP server."
keywords: ["nemoclaw custom policy preset", "policy-add from-file", "url mcp network policy"]
keywords: ["nemoclaw custom policy preset", "policy add from-file", "url mcp network policy"]
content:
type: "how_to"
skill:
Expand Down Expand Up @@ -68,8 +68,8 @@ The only exception is the `host.openshell.internal` bridge endpoint for explicit
Preview the file before you apply it:

```bash
$$nemoclaw my-assistant policy-add --from-file ./presets/my-service-api.yaml --dry-run
$$nemoclaw my-assistant policy-add --from-file ./presets/my-service-api.yaml --yes
$$nemoclaw my-assistant policy add --from-file ./presets/my-service-api.yaml --dry-run
$$nemoclaw my-assistant policy add --from-file ./presets/my-service-api.yaml --yes
```

NemoClaw records the complete YAML content with the sandbox.
Expand All @@ -80,7 +80,7 @@ You can remove the preset later without keeping the original file.
Apply preset files in lexicographic order:

```bash
$$nemoclaw my-assistant policy-add --from-dir ./presets/ --yes
$$nemoclaw my-assistant policy add --from-dir ./presets/ --yes
```

Processing stops at the first failure.
Expand All @@ -91,13 +91,13 @@ Fix the failing file and run the command again to continue.

Save a maintained local preset under `nemoclaw-blueprint/policies/presets/`.
The filename without `.yaml` must match `preset.name`.
The preset catalog reads `preset.name`, while `policy-add <name>` loads `presets/<name>.yaml`.
The preset catalog reads `preset.name`, while `policy add <name>` loads `presets/<name>.yaml`.
A mismatch can list a preset that the named command cannot load.

Apply the catalog preset by name:

```bash
$$nemoclaw my-assistant policy-add my-service-api
$$nemoclaw my-assistant policy add my-service-api
```

Run the same command after editing the file.
Expand All @@ -108,10 +108,10 @@ NemoClaw compares the preset with the live policy and applies changed content.
Remove the preset by its recorded name:

```bash
$$nemoclaw my-assistant policy-remove my-service-api --yes
$$nemoclaw my-assistant policy remove my-service-api --yes
```

Run `$$nemoclaw <name> policy-list` to see every maintained and custom preset recorded for the sandbox.
Run `$$nemoclaw <name> policy list` to see every maintained and custom preset recorded for the sandbox.

## Configure a URL-Based MCP Server

Expand Down Expand Up @@ -160,7 +160,7 @@ Save the file as `nemoclaw-blueprint/policies/presets/my-mcp.yaml`.
Apply it by name:

```bash
$$nemoclaw my-assistant policy-add my-mcp
$$nemoclaw my-assistant policy add my-mcp
```

NemoClaw previews the effective egress scope and prompts for confirmation before applying it.
Expand Down
2 changes: 1 addition & 1 deletion docs/network-policy/customize-network-policy.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ NemoClaw declares sandbox policy in YAML, and [NVIDIA OpenShell](https://github.

<Note>
If a sandbox needs an HTTP service on the host, expose the service on a host IP that the OpenShell gateway can reach.
Apply a custom preset with `$$nemoclaw <sandbox> policy-add --from-file`.
Apply a custom preset with `$$nemoclaw <sandbox> policy add --from-file`.
Do not rely on `host.docker.internal` as a general host-service path because it bypasses the OpenShell policy path and may not be reachable.
Refer to [Agent cannot reach a host-side HTTP service](../reference/troubleshooting#agent-cannot-reach-a-host-side-http-service).
</Note>
Expand Down
Loading
Loading