Skip to content
Merged
Show file tree
Hide file tree
Changes from 56 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
16 changes: 8 additions & 8 deletions docs/get-started/quickstart-langchain-deepagents-code.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -286,9 +286,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 @@ -308,7 +308,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 Expand Up @@ -404,14 +404,14 @@ On an existing sandbox, skip mode leaves the current live policy unchanged.
Inspect the effective policy first.

```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 Expand Up @@ -659,7 +659,7 @@ This does not change the recorded observability choice.
A later rebuild restores the matching preset on Balanced and Open tiers, while Restricted continues to suppress it.

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

To disable instrumentation persistently, use the transactional rebuild negative flag.
Expand Down Expand Up @@ -687,7 +687,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 existing sandbox was originally 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 existing sandbox was originally started without the opt-in. |
| Collector logs `401` | Replace an invalid or expired LangSmith API key, then recreate the collector container. |
| Collector logs `403` | Confirm 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
2 changes: 1 addition & 1 deletion docs/get-started/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,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
Loading
Loading