Skip to content

Hermes sandbox pre-enables inactive messaging policies #3981

@sandl99

Description

@sandl99

Problem

A Hermes sandbox configured for Discord can show Telegram, Slack, and WeChat policy entries in the live OpenShell policy. That is not the expected least-privilege behavior: selecting one Hermes messaging channel should only enable that channel egress.

There is also a related Discord failure mode where applying the generic discord preset to a Hermes sandbox can leave the live policy with Node-oriented binary allowlists instead of Hermes/Python allowlists. Hermes Discord runs through Python, so Discord gateway traffic from /usr/bin/python3* or /opt/hermes/.venv/bin/python can be denied.

Example denial:

/usr/bin/python3.13 -> gateway-us-east1-d.discord.gg:443 DENIED
reason: endpoint gateway-us-east1-d.discord.gg:443 not in policy
aiohttp.client_exceptions.ClientHttpProxyError: 403

Root Cause

agents/hermes/policy-additions.yaml is used as the Hermes create-time policy, but it currently contains multiple messaging provider entries. Those entries are intended as Hermes-specific templates, but sandbox creation applies the file wholesale, so inactive providers become live policy.

Separately, built-in preset application loads nemoclaw-blueprint/policies/presets/<preset>.yaml without considering the sandbox agent. For Hermes, this can apply generic OpenClaw/Node messaging policy instead of Hermes-specific policy.

Expected Behavior

  • OpenClaw/default sandboxes use the default OpenClaw base policy plus selected/default presets.
  • Hermes sandboxes use the Hermes base policy for Hermes filesystem, binaries, inference, PyPI, and Nous endpoints.
  • Hermes messaging policies are only applied for selected channels.
  • policy-add discord on a Hermes sandbox applies Hermes-specific Discord policy, including Python binary allowlists.
  • A Discord-only Hermes sandbox must not retain Telegram, Slack, or WeChat egress.

Acceptance Criteria

  • Creating or rebuilding a Hermes sandbox with only Discord enabled results in live policy containing Discord messaging egress but not Telegram, Slack, or WeChat messaging egress.
  • Applying discord to a Hermes sandbox uses Hermes-specific Discord rules and Python binary allowlists.
  • Applying discord to a default/OpenClaw sandbox still uses the generic Discord preset.
  • Existing policy preset registry behavior remains unchanged.

Metadata

Metadata

Assignees

Labels

VRDCIssues and PRs submitted by NVIDIA VRDC test team.area: sandboxOpenShell sandbox lifecycle, runtime, config, or recoveryintegration: hermesHermes integration behavior

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions