Understand Gateway and Secret Controls

View as Markdown

NemoClaw applies gateway access controls when the selected agent runtime exposes an in-sandbox gateway or dashboard. CLI secret redaction and runtime-specific memory guidance apply across guide variants.

OpenShell Gateway Authentication

On Docker-driver deployments, NemoClaw gives host CLI calls and sandbox callbacks separate authenticated paths to the OpenShell gateway.

AspectDetail
DefaultNemoClaw enables local TLS, mTLS user authentication, and sandbox JWT authentication. Host-side OpenShell CLI calls use local mTLS. Sandbox callbacks use the guest mTLS bundle plus a sandbox-scoped JWT. The generated config sets allow_unauthenticated_users = false, and gateway launch removes an inherited OPENSHELL_DISABLE_GATEWAY_AUTH=true.
Supervisor TLS nameOpenShell 0.0.116 removes a user-supplied OPENSHELL_GATEWAY_TLS_SERVER_NAME from Docker, Podman, and VM supervisor environments after it merges sandbox settings. The supervisor therefore verifies the gateway name chosen by the trusted driver rather than one chosen inside the sandbox specification.
Token lifetimeLocal sandbox JWTs use OpenShell’s ttl_secs = 0 contract for a non-expiring token on a local single-user gateway. Sandbox identity checks and the local mTLS boundary still apply to each callback.
What you can changeThese authentication controls are not user-facing settings. Use NemoClaw to configure and start the Docker-driver gateway.
Risk if relaxedDisabling gateway authentication or widening the gateway listener can expose privileged gateway methods to another local or network client.
RecommendationKeep the OpenShell gateway on 127.0.0.1. Use the dashboard forward when a supported agent dashboard needs remote access.

Gateway Compatibility Container

On Linux hosts whose glibc is older than the OpenShell gateway binary requires, NemoClaw can run openshell-gateway in a Docker compatibility container so the Docker-driver gateway still starts. This path requires the explicit opt-in NEMOCLAW_OPENSHELL_GATEWAY_CONTAINER_PATCH=1.

AspectDetail
DefaultNemoClaw does not auto-enable the compatibility container on ABI mismatch. If NEMOCLAW_OPENSHELL_GATEWAY_CONTAINER_PATCH=1 is set, the container keeps the main gateway listener on 127.0.0.1, uses host networking so OpenShell computes the same Docker bridge callback addresses as a host-side gateway, mounts the Docker socket read-only, drops Linux capabilities, sets no-new-privileges, and publishes no extra Docker ports.
What you can changeOpt in with NEMOCLAW_OPENSHELL_GATEWAY_CONTAINER_PATCH=1, keep the path disabled with NEMOCLAW_OPENSHELL_GATEWAY_CONTAINER_PATCH=0, or run on a host/OpenShell build combination where the gateway binary launches directly.
Risk if relaxedThe Docker socket remains a privileged host API even when bind-mounted read-only. Treat this mode as equivalent to trusting the host user that can drive Docker, and do not enable it on untrusted shared hosts.
RecommendationPrefer a host with glibc 2.39 or newer, which OpenShell 0.0.116 supports directly, and use the compatibility container only as an explicit local bridge on an older trusted host.

OpenShell owns the native Linux glibc support floor. NemoClaw owns the explicit opt-in, host-networking configuration, read-only socket mount, and gateway authentication controls for this fallback. Remove the fallback when every supported Linux host meets OpenShell’s native floor and the gateway authentication and upgrade tests pass for the release candidate without the flag.

The OpenClaw gateway authenticates devices that connect to the Control UI dashboard. NemoClaw hardens these defaults at image build time.

Device Authentication

Device authentication requires each connecting device to go through a pairing flow before it can interact with the gateway.

AspectDetail
DefaultOpenClaw requires the normal device-pairing flow for local and remote dashboards.
What you can changeOpenClaw 2026.9.1 retired the device-auth bypass. NEMOCLAW_DISABLE_DEVICE_AUTH and its provenance input remain accepted only while managed Dockerfile callers transition; they no longer emit an OpenClaw config key.
Risk if relaxedBypassing device identity would allow a client to connect without proving its paired identity. NemoClaw does not emit the retired bypass.
RecommendationPrefer loopback access or SSH port forwarding and complete the normal pairing flow for every browser or CLI device.

OpenClaw’s native managed lifecycle runs the gateway and agent commands as the sandbox identity. Its authentication database and SQLite sidecars use owner-only modes, which protect them from other OS identities but do not create a privilege boundary between processes running as that same sandbox identity. The OpenShell sandbox remains the isolation boundary from the host. NemoClaw’s restored-clone approval path passes only the matching local device’s pending request, paired record, and credential to its bounded approval child; unrelated device credentials are not included.

Gateway Bind Address

NemoClaw binds the OpenShell gateway to loopback by default.

AspectDetail
DefaultNEMOCLAW_GATEWAY_BIND_ADDRESS=127.0.0.1.
What you can changeKeep Docker-driver gateways on loopback. Set NEMOCLAW_DASHBOARD_BIND=0.0.0.0 during onboarding and on later connect calls for remote dashboard/API access. Recreate a local-only sandbox before changing it to a remote bind.
Risk if relaxedOther hosts on the network may be able to reach the OpenShell gateway. NemoClaw rejects wildcard Docker-driver gateway binds while gateway JWT auth is active.
RecommendationKeep the gateway loopback default and expose only the dashboard forward when remote access is needed.

Dashboard Transport

OpenClaw 2026.9.1 retired gateway.controlUi.allowInsecureAuth, so NemoClaw no longer emits or suppresses findings for that flag. Keep non-loopback dashboards behind HTTPS; the default loopback URL remains http://127.0.0.1:18789.

NemoClaw no longer emits audit suppressions for the retired authentication flags.

For audit reporting, NemoClaw treats an onboard-time NEMOCLAW_DASHBOARD_BIND=0.0.0.0 setting or WSL’s default all-interface dashboard forward as remote dashboard exposure. Outside WSL, a non-loopback CHAT_UI_URL changes the browser URL and its security settings but does not widen the host forward. For an explicit NEMOCLAW_DASHBOARD_BIND=0.0.0.0 bind, use the same setting on later connect calls.

If the sandbox was created without that explicit setting, NemoClaw refuses the remote forward until you recreate it with NEMOCLAW_DASHBOARD_BIND=0.0.0.0 nemoclaw onboard --recreate-sandbox; this keeps the generated audit state aligned with the host exposure state.

On WSL, the ready summary still uses a loopback URL. For an explicit remote bind with a loopback CHAT_UI_URL, NemoClaw enables OpenClaw’s Host-header origin fallback because the browser’s remote origin is not known at image-build time.

That setting expands access and must remain explicit; use HTTPS or an SSH local forward when possible.

In that state, NemoClaw does not add audit suppressions, so the Host-header fallback finding remains active.

Review the active findings, including the Host-header fallback finding described above:

openclaw security audit --json | jq '.findings'

Remove the underlying risky condition when dashboard compatibility no longer requires it.

Auto-Pair Client Allowlist

The auto-pair watcher automatically approves device pairing requests from recognized clients, so you do not need to manually approve the Control UI.

AspectDetail
DefaultStartup auto-pairing and connect-time approval share one policy. A lease-qualified launch checks current pairing state and runs the complete approval path when the stored qualification no longer matches or a relevant allowlisted request is pending. NemoClaw approves devices only when clientId is cli, openclaw-cli, or openclaw-control-ui, and only for operator.pairing, operator.read, and operator.write scopes. An allowlisted clientMode alone is never sufficient; all other clients or scopes are rejected and logged.
What you can changeThis is not a user-facing knob. The allowlist is defined by NemoClaw’s OpenClaw device-approval helper.
Risk if relaxedApproving all device types without validation lets rogue or unexpected clients pair with the gateway unchallenged.
RecommendationNo action needed. NemoClaw handles this automatically at startup, during connect, and through the complete launch fallback for late scope upgrades. If you see [auto-pair] rejected unknown client=... in the logs, investigate the source of the unexpected connection.

Approve Administrative Scopes Manually

NemoClaw automatically approves only the operator.pairing, operator.read, and operator.write scopes. It never automatically approves operator.admin. Operations that require that scope, such as creating a cron job, need your explicit approval.

From the host, open the prepared connect shell:

nemoclaw <name> connect

In that shell, run the administrative command once to create the pending request, and note the requestId in the failure. Then inspect the pending requests:

openclaw devices list --json

Find that requestId, and verify that its client, device, and requested scopes match the operation you just attempted. Approve that request by its requestId:

openclaw devices approve <requestId>

Retry the original administrative command after the approval succeeds.

Approve only the requestId emitted by your command and only the client, device, and scopes you expect. Do not approve an unexpected client or an unrelated operator.admin request.

CLI Secret Redaction

The CLI automatically redacts secret patterns (API keys, bearer tokens, provider credentials) from command output and error messages before logging them.

AspectDetail
DefaultEnabled. The runner redacts secrets from stdout, stderr, and thrown error messages.
What you can changeThis is not a user-facing knob. The CLI enforces it on all command output paths.
Risk if relaxedWithout redaction, secrets could appear in terminal scrollback, log files, or debug output shared in bug reports.
RecommendationNo action needed. If you share NemoClaw debug output, verify that no secrets appear in the collected diagnostics.

Memory Secret Scanner

The NemoClaw plugin blocks the agent from writing likely secrets (API keys, tokens, private keys) into persistent memory files. The scanner intercepts Write, Edit, and similar tool calls targeting memory and workspace paths before they reach disk.

AspectDetail
DefaultEnabled. The plugin registers a before_tool_call hook that scans for 14 high-confidence secret patterns.
What it coversProtects OpenClaw state, NemoClaw state, default and named workspaces, and canonical workspace files. It scans 14 high-confidence credential patterns.
What you can changeThis is not a user-facing knob. The plugin enforces it automatically.
Risk if relaxedWithout scanning, the agent could persist API keys or tokens in memory files that survive across sessions and backups.
RecommendationNo action needed. If a write is blocked, the agent receives an actionable error listing the detected patterns.