Skip to content
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
89f469b
feat(openshell): upgrade managed runtime to v0.0.99
apurvvkumaria Aug 7, 2026
7bac3c0
fix(openshell): support v0.0.99 activation output
apurvvkumaria Aug 7, 2026
58f4167
merge(main): refresh PR #8523
apurvvkumaria Aug 7, 2026
8d95d9b
Merge branch 'main' into codex/8497-openshell-v099-upgrade
senthilr-nv Aug 7, 2026
9eb215c
test(openshell): use valid activation sandbox names
apurvvkumaria Aug 7, 2026
1cc8e3d
Merge remote-tracking branch 'origin/codex/8497-openshell-v099-upgrad…
apurvvkumaria Aug 7, 2026
984d7c6
fix(openshell): complete v0.0.99 qualification
apurvvkumaria Aug 7, 2026
6d119d4
Merge branch 'main' into codex/8497-openshell-v099-upgrade
senthilr-nv Aug 7, 2026
1f7ed6e
Merge remote-tracking branch 'origin/codex/8497-openshell-v099-upgrad…
apurvvkumaria Aug 7, 2026
ad20441
test(openshell): use valid legacy sandbox name
apurvvkumaria Aug 7, 2026
12b4bca
fix(openshell): verify driver image content identity
apurvvkumaria Aug 7, 2026
a920fc3
merge: update OpenShell upgrade branch
apurvvkumaria Aug 7, 2026
44d6736
test(openshell): clarify gateway DNS boundary
apurvvkumaria Aug 7, 2026
0e21b0b
merge: refresh OpenShell upgrade branch
apurvvkumaria Aug 7, 2026
fc1edb5
test(openshell): complete sandbox limit migration
apurvvkumaria Aug 7, 2026
c0f9a8f
merge: refresh OpenShell qualification branch
apurvvkumaria Aug 7, 2026
0b2c987
fix(openshell): match supervisor workdir argv
apurvvkumaria Aug 7, 2026
8576e19
fix(e2e): shorten Podman lifecycle names
apurvvkumaria Aug 7, 2026
a15f349
Merge branch 'main' into codex/8497-openshell-v099-upgrade
cv Aug 7, 2026
fe8602f
Merge branch 'main' into codex/8497-openshell-v099-upgrade
senthilr-nv Aug 7, 2026
5878699
test(openshell): use valid sandbox names
senthilr-nv Aug 7, 2026
110ba6d
merge(main): refresh PR #8523
senthilr-nv Aug 7, 2026
bc09a8d
Merge branch 'main' into codex/8497-openshell-v099-upgrade
cv Aug 7, 2026
bf64639
fix(openshell): reconcile v0.0.99 policy activation
apurvvkumaria Aug 7, 2026
6daae34
docs(openshell): clarify npm compatibility safeguards
apurvvkumaria Aug 7, 2026
24a5ab3
merge: resolve conflicts with main
github-actions[bot] Aug 7, 2026
8eee1a4
Merge branch 'main' into codex/8497-openshell-v099-upgrade
jyaunches Aug 7, 2026
44fc0d3
Merge branch 'main' into codex/8497-openshell-v099-upgrade
jyaunches Aug 7, 2026
956e66a
Merge branch 'main' into codex/8497-openshell-v099-upgrade
senthilr-nv Aug 7, 2026
16be705
docs(policy): document reserved npm policy key
senthilr-nv Aug 7, 2026
41a7bd1
fix(openshell): enforce v0.0.99 sandbox names
apurvvkumaria Aug 7, 2026
9c44c11
merge(main): refresh OpenShell v0.0.99 upgrade
apurvvkumaria Aug 7, 2026
32ef2da
test(openshell): align sandbox fixture names
apurvvkumaria Aug 7, 2026
c917c05
docs(openshell): correct current glibc floor
apurvvkumaria Aug 7, 2026
93646ec
merge(main): refresh OpenShell v0.0.99 upgrade
apurvvkumaria Aug 7, 2026
509a5bc
merge(main): refresh OpenShell v0.0.99 upgrade
apurvvkumaria Aug 7, 2026
e91128b
test(e2e): align release evidence matrix identities
apurvvkumaria Aug 7, 2026
18ac71c
merge(main): refresh OpenShell v0.0.99 upgrade
apurvvkumaria Aug 7, 2026
08b7f7e
merge(main): refresh OpenShell v0.0.99 upgrade
apurvvkumaria Aug 7, 2026
6d5e956
merge(main): refresh OpenShell v0.0.99 upgrade
apurvvkumaria Aug 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
26 changes: 13 additions & 13 deletions .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -994,7 +994,7 @@ jobs:
E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts/live/openshell-gateway-auth-contract
NEMOCLAW_RUN_LIVE_E2E: "1"
NEMOCLAW_NON_INTERACTIVE: "1"
NEMOCLAW_OPENSHELL_PIN_VERSION: "0.0.85"
NEMOCLAW_OPENSHELL_PIN_VERSION: "0.0.99"
DOCKER_GRPC_PROBE_IMAGE: "node:22-trixie-slim@sha256:e6d9a389d34ff9678438af985c9913fbd1eb6ed36e80fea56644f4b4f6dd70ba"
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
Expand Down Expand Up @@ -1079,7 +1079,7 @@ jobs:
NEMOCLAW_OPENSHELL_CHANNEL: stable
NEMOCLAW_OPENSHELL_EXACT_MAIN_PROOF: "1"
NEMOCLAW_RUN_LIVE_E2E: "1"
OPENSHELL_DOCKER_SUPERVISOR_IMAGE: ghcr.io/nvidia/openshell/supervisor@sha256:f4226253a3525c3832adac5b38b419a0f27d1e915effe565b5885e20f93cd5e9
OPENSHELL_DOCKER_SUPERVISOR_IMAGE: ghcr.io/nvidia/openshell/supervisor@sha256:ea3632b6e9528e2309103af5b6949606fcdc83ca1f69e8db81482a25bea84bb6
steps:
- id: trusted_hermes_swap
name: Provision trusted Hermes E2E swap
Expand Down Expand Up @@ -1332,12 +1332,12 @@ jobs:
jq -n '{
schemaVersion: 1,
sourceRepository: "NVIDIA/OpenShell",
releaseTag: "v0.0.85",
sourceSha: "3dee5570a46076a57a3b056f35f35ebc0861ac85",
releaseTag: "v0.0.99",
sourceSha: "8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032",
artifacts: {
cli: {binarySha256: "222d9d53a142691d7a7de2c692f38e52d24066f9f633d53746c5fef775861bc8"},
gateway: {binarySha256: "33bb479d936c3c1b17dd475df05747be9de74564fb67d69a4c33cdd01181d02f"},
standaloneSandbox: {binarySha256: "863ef21ab7ef623f5e7a8728c4e5532b46bfbae3ace3b800665a1c6353a1f7d2"}
cli: {binarySha256: "5c0dabb90152a3cfae9005731771da99f00a22403080c81952c7be8ba4b5728f"},
gateway: {binarySha256: "05bd6c982dd72b73364b91ab694487c026bc56d0cd869f4289b44cc392a5c2ba"},
standaloneSandbox: {binarySha256: "a4b0c38ed90a6dd4b4f312ad3727824a25ec478d88d4e65d22a82377b18e6214"}
}
}' > "$E2E_ARTIFACT_DIR/mcp-bridge-deepagents/openshell-exact-main-provenance.json"
fi
Expand Down Expand Up @@ -1401,7 +1401,7 @@ jobs:
NEMOCLAW_OPENSHELL_CHANNEL: stable
NEMOCLAW_OPENSHELL_EXACT_MAIN_PROOF: "1"
NEMOCLAW_RUN_LIVE_E2E: "1"
OPENSHELL_DOCKER_SUPERVISOR_IMAGE: ghcr.io/nvidia/openshell/supervisor@sha256:f4226253a3525c3832adac5b38b419a0f27d1e915effe565b5885e20f93cd5e9
OPENSHELL_DOCKER_SUPERVISOR_IMAGE: ghcr.io/nvidia/openshell/supervisor@sha256:ea3632b6e9528e2309103af5b6949606fcdc83ca1f69e8db81482a25bea84bb6
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
Expand Down Expand Up @@ -1453,12 +1453,12 @@ jobs:
jq -n '{
schemaVersion: 1,
sourceRepository: "NVIDIA/OpenShell",
releaseTag: "v0.0.85",
sourceSha: "3dee5570a46076a57a3b056f35f35ebc0861ac85",
releaseTag: "v0.0.99",
sourceSha: "8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032",
artifacts: {
cli: {binarySha256: "222d9d53a142691d7a7de2c692f38e52d24066f9f633d53746c5fef775861bc8"},
gateway: {binarySha256: "33bb479d936c3c1b17dd475df05747be9de74564fb67d69a4c33cdd01181d02f"},
standaloneSandbox: {binarySha256: "863ef21ab7ef623f5e7a8728c4e5532b46bfbae3ace3b800665a1c6353a1f7d2"}
cli: {binarySha256: "5c0dabb90152a3cfae9005731771da99f00a22403080c81952c7be8ba4b5728f"},
gateway: {binarySha256: "05bd6c982dd72b73364b91ab694487c026bc56d0cd869f4289b44cc392a5c2ba"},
standaloneSandbox: {binarySha256: "a4b0c38ed90a6dd4b4f312ad3727824a25ec478d88d4e65d22a82377b18e6214"}
}
}' > "$E2E_ARTIFACT_DIR/openshell-credential-generation-window/openshell-exact-main-provenance.json"

Expand Down
6 changes: 3 additions & 3 deletions agents/hermes/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ COPY agents/hermes/finalize-tirith-marker.py /usr/local/lib/nemoclaw/finalize-ti
COPY agents/hermes/build-mcp-digest.py /usr/local/lib/nemoclaw/build-hermes-mcp-digest.py
COPY agents/hermes/mcp-config-transaction.py /usr/local/lib/nemoclaw/hermes-mcp-config-transaction.py
COPY agents/hermes/cron-restore-control.py /usr/local/lib/nemoclaw/hermes-cron-restore-control.py
COPY src/lib/actions/sandbox/openshell-child-visible-credentials.v0.0.85.json /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.85.json
COPY src/lib/actions/sandbox/openshell-child-visible-credentials.v0.0.99.json /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.99.json
COPY scripts/state-dir-guard.py /usr/local/lib/nemoclaw/state-dir-guard.py
COPY agents/hermes/state-lock-plan.json /usr/local/share/nemoclaw/state-lock-plan.json
COPY nemoclaw-blueprint/scripts/*.js /usr/local/lib/nemoclaw/preloads/
Expand Down Expand Up @@ -362,12 +362,12 @@ RUN chmod -R a+rX /opt/nemoclaw-blueprint/
# minimum supported Hermes sandbox base tag guarantees those artifacts and
# test/sandbox-rlimit-hooks.test.ts covers that base.
RUN chmod 755 /usr/local/bin/nemoclaw-start /usr/local/bin/nemoclaw-managed-startup-hold /usr/local/bin/nemoclaw-managed-bootstrap /usr/local/lib/nemoclaw/sandbox-init.sh /usr/local/lib/nemoclaw/validate-hermes-env-secret-boundary.py /usr/local/lib/nemoclaw/patch-hermes-session-list-preview.py /usr/local/lib/nemoclaw/patch-hermes-discord-recovery-permissions.py /usr/local/lib/nemoclaw/patch-hermes-profile-policy-defaults.py /usr/local/lib/nemoclaw/seed-hermes-dashboard-config.py /usr/local/lib/nemoclaw/hermes-runtime-config-guard.py /usr/local/lib/nemoclaw/finalize-tirith-marker.py /usr/local/lib/nemoclaw/hermes-mcp-config-transaction.py \
&& chown root:root /usr/local/bin/nemoclaw-gateway-control /usr/local/lib/nemoclaw/gateway-supervisor.sh /usr/local/lib/nemoclaw/state-dir-guard.py /usr/local/share/nemoclaw/state-lock-plan.json /usr/local/lib/nemoclaw/managed-gateway-control.py /usr/local/lib/nemoclaw/build-hermes-mcp-digest.py /usr/local/lib/nemoclaw/hermes-cron-restore-control.py /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.85.json \
&& chown root:root /usr/local/bin/nemoclaw-gateway-control /usr/local/lib/nemoclaw/gateway-supervisor.sh /usr/local/lib/nemoclaw/state-dir-guard.py /usr/local/share/nemoclaw/state-lock-plan.json /usr/local/lib/nemoclaw/managed-gateway-control.py /usr/local/lib/nemoclaw/build-hermes-mcp-digest.py /usr/local/lib/nemoclaw/hermes-cron-restore-control.py /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.99.json \
&& chmod 700 /usr/local/bin/nemoclaw-gateway-control /usr/local/lib/nemoclaw/hermes-cron-restore-control.py \
&& chmod 500 /usr/local/lib/nemoclaw/state-dir-guard.py /usr/local/lib/nemoclaw/managed-gateway-control.py \
&& chmod 444 /usr/local/lib/nemoclaw/entrypoint-env-wrapper.sh /usr/local/share/nemoclaw/state-lock-plan.json /usr/local/lib/nemoclaw/gateway-supervisor.sh /usr/local/lib/nemoclaw/build-hermes-mcp-digest.py /usr/local/lib/nemoclaw/managed_policy.py \
&& chmod 444 /usr/local/lib/nemoclaw/patch-hermes-langfuse-credentials.mts \
&& chmod 444 /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.85.json \
&& chmod 444 /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.99.json \
&& if [ -d /usr/local/lib/nemoclaw/preloads ]; then \
chown -R 0:0 /usr/local/lib/nemoclaw/preloads \
&& find /usr/local/lib/nemoclaw/preloads -type f -exec chmod 444 {} + \
Expand Down
10 changes: 5 additions & 5 deletions agents/hermes/mcp-config-transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
r"^Bearer openshell:resolve:env:([A-Za-z_][A-Za-z0-9_]{0,127})$"
)
OPENSHELL_REVISIONED_CREDENTIAL_NAME_RE = re.compile(r"^v[0-9]+_[A-Za-z0-9_]+$")
BOUNDARY_MANIFEST_NAME = "openshell-child-visible-credentials.v0.0.85.json"
BOUNDARY_MANIFEST_NAME = "openshell-child-visible-credentials.v0.0.99.json"
ANSI_ESCAPE_RE = re.compile(
r"\x1b(?:\[[0-?]*[ -/]*[@-~]|\][^\x07]*(?:\x07|\x1b\\)|[@-_])"
)
Expand Down Expand Up @@ -118,7 +118,7 @@ def _load_credential_boundary_manifest() -> dict[str, object]:
# corrupt, or wrong-version OpenShell boundary manifest.
# sourceBoundary: NemoClaw owns one reviewed manifest installed beside this
# helper in images; the second path is the deterministic source-checkout layout.
# whyNotSourceFix: OpenShell v0.0.85 has no machine-readable child-env contract.
# whyNotSourceFix: OpenShell v0.0.99 has no machine-readable child-env contract.
# It also deliberately hides the supervisor identity mount from workload
# children and the Hermes image contains no OpenShell CLI. Executing
# ``openshell --version`` here would therefore either fail every real
Expand Down Expand Up @@ -146,7 +146,7 @@ def _load_credential_boundary_manifest() -> dict[str, object]:
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
if (
not isinstance(manifest, dict)
or manifest.get("openshellVersion") != "0.0.85"
or manifest.get("openshellVersion") != "0.0.99"
):
raise RuntimeError("Hermes MCP credential boundary manifest is invalid")
return manifest
Expand Down Expand Up @@ -330,7 +330,7 @@ def _validate_payload(action: str, payload: dict[str, object]) -> None:
}
if action == "add" and hostname in host_aliases:
raise ValueError(
"Authenticated MCP OpenShell host aliases are unavailable with OpenShell v0.0.85"
"Authenticated MCP OpenShell host aliases are unavailable with OpenShell v0.0.99"
)
if not (action == "remove" and hostname in host_aliases) and (
hostname in {"localhost", "local", "internal", "metadata"}
Expand Down Expand Up @@ -1099,7 +1099,7 @@ def _assert_non_root_lifecycle_identity() -> None:
# topology.
# sourceBoundary: OpenShell owns workload topology; NemoClaw owns the
# immutable root-lifecycle marker and validates it before mutation.
# whyNotSourceFix: OpenShell 0.0.85 supports both topologies but exposes no
# whyNotSourceFix: OpenShell 0.0.99 supports both topologies but exposes no
# attested same-UID capability that this packaged helper can query.
# regressionTest: hermes-mcp-config-transaction.test.ts rejects both probe
# and add when the root-lifecycle marker identifies the legacy topology.
Expand Down
5 changes: 5 additions & 0 deletions ci/source-shape-test-budget.json
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,11 @@
"test": "keeps the setup docs aligned with the stable default",
"category": "compatibility"
},
{
"file": "test/openshell-0.0.99-migration-review.test.ts",
"test": "associates every reviewed release identity with the 0.0.99 manifest (#8497)",
"category": "security"
},
{
"file": "test/onboard-performance-config-schema.test.ts",
"test": "keeps baseline budgets derived from the checked-in samples",
Expand Down
34 changes: 18 additions & 16 deletions docs/deployment/set-up-mcp-bridge.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ The integration has three parts:

This integration depends on the OpenShell MCP/JSON-RPC L7 policy support from [NVIDIA/OpenShell#1865](https://github.com/NVIDIA/OpenShell/pull/1865).

Current NemoClaw builds default to the pinned stable OpenShell `0.0.85` release, which exposes native `protocol: mcp` policy handling and provider-backed credential replacement.
Current NemoClaw builds default to the pinned stable OpenShell `0.0.99` release, which exposes native `protocol: mcp` policy handling and provider-backed credential replacement.
The optional OpenShell development channel is compatibility evidence only and is not a shipping target.

NemoClaw accepts Streamable HTTP MCP endpoints only.
Expand Down Expand Up @@ -69,34 +69,36 @@ NemoClaw accepts canonical HTTPS MCP URLs and writes the credential placeholder

### DNS Pinning Contract

The MCP integration pins its OpenShell DNS enforcement contract to [`NVIDIA/OpenShell@3dee5570a46076a57a3b056f35f35ebc0861ac85`](https://github.com/NVIDIA/OpenShell/tree/3dee5570a46076a57a3b056f35f35ebc0861ac85).
The MCP integration pins its OpenShell DNS enforcement contract to [`NVIDIA/OpenShell@8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032`](https://github.com/NVIDIA/OpenShell/tree/8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032).

OpenShell uses one socket-address list throughout resolution, validation, and connection:
With `proxy_connect_by_hostname` disabled, OpenShell uses one socket-address list throughout resolution, validation, and connection:

- [`crates/openshell-supervisor-network/src/proxy.rs:2648-2674`](https://github.com/NVIDIA/OpenShell/blob/3dee5570a46076a57a3b056f35f35ebc0861ac85/crates/openshell-supervisor-network/src/proxy.rs#L2648-L2674) produces the list.
- [`crates/openshell-supervisor-network/src/proxy.rs:2699-2739`](https://github.com/NVIDIA/OpenShell/blob/3dee5570a46076a57a3b056f35f35ebc0861ac85/crates/openshell-supervisor-network/src/proxy.rs#L2699-L2739) validates every address.
- [`crates/openshell-supervisor-network/src/proxy.rs:2794-2803`](https://github.com/NVIDIA/OpenShell/blob/3dee5570a46076a57a3b056f35f35ebc0861ac85/crates/openshell-supervisor-network/src/proxy.rs#L2794-L2803) returns the validated list unchanged.
- [`crates/openshell-supervisor-network/src/proxy.rs:3030-3055`](https://github.com/NVIDIA/OpenShell/blob/8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032/crates/openshell-supervisor-network/src/proxy.rs#L3030-L3055) produces the list.
- [`crates/openshell-supervisor-network/src/proxy.rs:3060-3115`](https://github.com/NVIDIA/OpenShell/blob/8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032/crates/openshell-supervisor-network/src/proxy.rs#L3060-L3115) validates every address.
- [`crates/openshell-supervisor-network/src/proxy.rs:3130-3211`](https://github.com/NVIDIA/OpenShell/blob/8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032/crates/openshell-supervisor-network/src/proxy.rs#L3130-L3211) connects through the validated list.

The CONNECT path passes that list directly to [`TcpStream::connect` at `crates/openshell-supervisor-network/src/proxy.rs:1079-1081`](https://github.com/NVIDIA/OpenShell/blob/3dee5570a46076a57a3b056f35f35ebc0861ac85/crates/openshell-supervisor-network/src/proxy.rs#L1079-L1081).
The explicit HTTP-forward path carries the same list from [`crates/openshell-supervisor-network/src/proxy.rs:4093-4100`](https://github.com/NVIDIA/OpenShell/blob/3dee5570a46076a57a3b056f35f35ebc0861ac85/crates/openshell-supervisor-network/src/proxy.rs#L4093-L4100) to [`crates/openshell-supervisor-network/src/proxy.rs:4340-4342`](https://github.com/NVIDIA/OpenShell/blob/3dee5570a46076a57a3b056f35f35ebc0861ac85/crates/openshell-supervisor-network/src/proxy.rs#L4340-L4342).
There is no second hostname resolution between validation and connection in either path.
The CONNECT path passes that validated connector to the direct or operator-configured upstream dial path.
By default, direct connections and corporate-proxy CONNECT requests use the validated address list at [`crates/openshell-supervisor-network/src/proxy.rs:3179-3211`](https://github.com/NVIDIA/OpenShell/blob/8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032/crates/openshell-supervisor-network/src/proxy.rs#L3179-L3211).
The explicit HTTP-forward path carries the same connector from [`crates/openshell-supervisor-network/src/proxy.rs:4650-4656`](https://github.com/NVIDIA/OpenShell/blob/8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032/crates/openshell-supervisor-network/src/proxy.rs#L4650-L4656) into the actual connection at [`crates/openshell-supervisor-network/src/proxy.rs:4706-4711`](https://github.com/NVIDIA/OpenShell/blob/8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032/crates/openshell-supervisor-network/src/proxy.rs#L4706-L4711).

### Stable OpenShell 0.0.85 Limitations
The exception is OpenShell's operator-controlled `proxy_connect_by_hostname` option.
When enabled, OpenShell sends the requested hostname to the corporate proxy instead of the validated address, which reopens proxy-side DNS resolution; the upstream source records that residual risk at [`crates/openshell-supervisor-network/src/proxy.rs:3168-3200`](https://github.com/NVIDIA/OpenShell/blob/8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032/crates/openshell-supervisor-network/src/proxy.rs#L3168-L3200).
NemoClaw does not enable or prohibit that host-level OpenShell option, so operators who require the pinned-address guarantee must leave it disabled and ensure their gateway configuration does not enable it.

OpenShell v0.0.85 attributes network policy with `/proc/<pid>/exe` and process ancestors, so script-based adapters require Node or Python interpreter grants rather than immutable package-entrypoint identities.
### Stable OpenShell 0.0.99 Limitations

OpenShell v0.0.99 attributes network policy with `/proc/<pid>/exe` and process ancestors, so script-based adapters require Node or Python interpreter grants rather than immutable package-entrypoint identities.
NemoClaw compensates with an exact HTTPS destination, path, MCP method profile, DNS pins, and a unique least-privilege credential for each server.

Remove the interpreter grants when OpenShell exposes stable script or package entrypoint attribution.

OpenShell v0.0.85 attaches static provider credentials at sandbox scope rather than reserving a credential key exclusively for one endpoint.
It also does not expose an immutable provider binding on an attachment, provide a `tls: require` policy mode, bind the HTTP `Host` header to the policy destination, or include query parameters in MCP path matching.
OpenShell v0.0.99 attaches static provider credentials at sandbox scope rather than reserving a credential key exclusively for one endpoint.
It also does not expose an immutable provider binding on an attachment.

NemoClaw rejects credential-key reuse between managed MCP servers, creates a dedicated provider for each definition, reports the residual risk in `status`, and requires a unique least-privilege token and environment key.
Do not grant a broader inspected-HTTP route to the same adapter runtime because that route could resolve the sandbox-scoped placeholder.

The generated configuration uses the canonical HTTPS URL, but malicious code running as an allowed interpreter can deliberately change the scheme, `Host` header, or query string within the supported OpenShell policy contract.

OpenShell v0.0.85 updates, attaches, detaches, and deletes providers by mutable name instead of an atomic immutable identity.
OpenShell v0.0.99 updates, attaches, detaches, and deletes providers by mutable name instead of an atomic immutable identity.
NemoClaw compensates with randomized provider names, the per-sandbox lifecycle lock, and immediate ownership checks against the recorded provider ID, type, and credential-key metadata before mutations.

NemoClaw fails closed and preserves retryable state when those checks do not match, but the checks do not provide compare-and-swap behavior against another OpenShell client.
Expand Down
Loading
Loading