Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
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
10 changes: 6 additions & 4 deletions agents/hermes/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,12 @@ ENV NEMOCLAW_MODEL=${NEMOCLAW_MODEL} \
NEMOCLAW_HERMES_TOOL_GATEWAY_BROKER=${NEMOCLAW_HERMES_TOOL_GATEWAY_BROKER} \
NEMOCLAW_HERMES_TOOL_GATEWAY_PRESETS_B64=${NEMOCLAW_HERMES_TOOL_GATEWAY_PRESETS_B64}

# Apply messaging agent-install hooks as root so Hermes Python packages can update
# /opt/hermes/.venv before the runtime drops to the sandbox user.
WORKDIR /opt/hermes
# hadolint ignore=DL3059
RUN node --experimental-strip-types /src/lib/messaging/applier/build/messaging-build-applier.mts --agent hermes --phase agent-install

WORKDIR /sandbox
USER sandbox

Expand All @@ -154,10 +160,6 @@ RUN mkdir -p /sandbox/.nemoclaw/blueprints/0.1.0 \
# code injection via build-arg interpolation (same concern as OpenClaw C-2).
RUN node --experimental-strip-types /opt/nemoclaw-hermes-config/generate-config.ts

# Apply messaging agent-install hooks before Hermes plugin installation.
# hadolint ignore=DL3059
RUN node --experimental-strip-types /src/lib/messaging/applier/build/messaging-build-applier.mts --agent hermes --phase agent-install

# Install NemoClaw plugin into Hermes
# hadolint ignore=DL3059
RUN mkdir -p /sandbox/.hermes/plugins/nemoclaw \
Expand Down
2 changes: 2 additions & 0 deletions agents/hermes/Dockerfile.base
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ RUN printf '%s\n' \
# and pty (optional browser TUI bridge). These extras are resolved from the
# selected Hermes release's uv.lock via `uv sync --frozen`, so dependency
# changes remain tied to HERMES_VERSION/HERMES_TARBALL_SHA256 review.
# Microsoft Teams adapter dependencies are installed by the manifest-driven
# final image when selected.
# New Hermes integrations should be installed by the agent workflow when they
# are enabled rather than shipped in the base image by default.
# Root Node dependencies provide Hermes browser tooling such as agent-browser.
Expand Down
2 changes: 2 additions & 0 deletions agents/hermes/manifest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,15 @@ web_auth_env: API_SERVER_KEY
# https://hermes-agent.nousresearch.com/docs/user-guide/messaging/weixin.
# WhatsApp pairs in the sandbox via `hermes whatsapp`; the selected channel
# bakes WHATSAPP_ENABLED/WHATSAPP_MODE into .env and preserves session state.
# Microsoft Teams uses the Bot Framework webhook adapter at /api/messages.
messaging_platforms:
supported:
- telegram
- discord
- slack
- wechat
- whatsapp
- teams
# Future: signal, matrix, mattermost, email, etc.
# Each needs a network policy entry before enabling.

Expand Down
83 changes: 83 additions & 0 deletions agents/hermes/policy-additions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,89 @@ network_policies:
- { path: /usr/bin/python3* }
- { path: /opt/hermes/.venv/bin/python }

teams:
name: teams
endpoints:
- host: login.microsoftonline.com
port: 443
protocol: rest
enforcement: enforce
request_body_credential_rewrite: true
rules:
- allow: { method: GET, path: "/**" }
- allow: { method: POST, path: "/**" }
- host: login.botframework.com
port: 443
protocol: rest
enforcement: enforce
request_body_credential_rewrite: true
rules:
- allow: { method: GET, path: "/**" }
- allow: { method: POST, path: "/**" }
- host: api.botframework.com
port: 443
protocol: rest
enforcement: enforce
request_body_credential_rewrite: true
rules:
- allow: { method: GET, path: "/**" }
- allow: { method: POST, path: "/**" }
- host: smba.trafficmanager.net
port: 443
protocol: rest
enforcement: enforce
request_body_credential_rewrite: true
rules:
- allow: { method: GET, path: "/**" }
- allow: { method: POST, path: "/**" }
- allow: { method: PUT, path: "/**" }
- allow: { method: DELETE, path: "/**" }
- host: graph.microsoft.com
port: 443
protocol: rest
enforcement: enforce
request_body_credential_rewrite: true
rules:
- allow: { method: GET, path: "/**" }
- allow: { method: POST, path: "/**" }
- allow: { method: PATCH, path: "/**" }
- allow: { method: PUT, path: "/**" }
- allow: { method: DELETE, path: "/**" }
- host: teams.microsoft.com
port: 443
protocol: rest
enforcement: enforce
rules:
- allow: { method: GET, path: "/**" }
- host: teams.cdn.office.net
port: 443
protocol: rest
enforcement: enforce
rules:
- allow: { method: GET, path: "/**" }
- host: statics.teams.cdn.office.net
port: 443
protocol: rest
enforcement: enforce
rules:
- allow: { method: GET, path: "/**" }
- host: "*.sharepoint.com"
port: 443
protocol: rest
enforcement: enforce
rules:
- allow: { method: GET, path: "/**" }
- host: 1drv.ms
port: 443
protocol: rest
enforcement: enforce
rules:
- allow: { method: GET, path: "/**" }
binaries:
- { path: /usr/local/bin/hermes }
- { path: /usr/bin/python3* }
- { path: /opt/hermes/.venv/bin/python }

# WeChat (personal) via Tencent's iLink Bot API. The Hermes adapter uses
# HTTP long-polling (no WebSocket). WEIXIN_TOKEN is L7-resolved at egress
# from WECHAT_BOT_TOKEN (same credential slot OpenClaw's bridge uses) via
Expand Down
1 change: 1 addition & 0 deletions agents/openclaw/manifest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ messaging_platforms:
- slack
- wechat
- whatsapp
- teams

# ── Inference ───────────────────────────────────────────────────
inference:
Expand Down
8 changes: 7 additions & 1 deletion docs/_components/StarterPromptButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ If non-interactive mode cannot cover a later prompt, stop before running the int

Non-interactive onboarding can skip the interactive messaging-channel picker. After the sandbox is created, ask whether I want to set up messaging as a separate one-question selection.

- First ask: "Do you want to set up a messaging channel now?" with choices: No, Telegram, Discord, Slack, WhatsApp, WeChat (experimental).
- First ask: "Do you want to set up a messaging channel now?" with choices: No, Telegram, Discord, Slack, Microsoft Teams (experimental), WhatsApp, WeChat (experimental).
- Configure one channel at a time. If I want another channel, ask again after the current channel finishes.
- Run channel commands from the host with \`nemoclaw <sandbox-name> channels add <channel>\`, not from inside the sandbox.
- Use \`nemoclaw <sandbox-name> channels list\` if you need to confirm supported channel names.
Expand All @@ -125,6 +125,7 @@ Channel credential requirements:
| Telegram | \`TELEGRAM_BOT_TOKEN\`; optional \`TELEGRAM_ALLOWED_IDS\`, \`TELEGRAM_REQUIRE_MENTION\`, \`TELEGRAM_GROUP_POLICY\` (OpenClaw only) |
| Discord | \`DISCORD_BOT_TOKEN\`; optional \`DISCORD_SERVER_ID\`, \`DISCORD_USER_ID\`, \`DISCORD_REQUIRE_MENTION\` |
| Slack | \`SLACK_BOT_TOKEN\`, \`SLACK_APP_TOKEN\`; optional \`SLACK_ALLOWED_USERS\`, \`SLACK_ALLOWED_CHANNELS\` |
| Microsoft Teams | \`MSTEAMS_APP_ID\`, \`MSTEAMS_APP_PASSWORD\`, \`MSTEAMS_TENANT_ID\`; optional \`TEAMS_ALLOWED_USERS\`, \`MSTEAMS_PORT\`; OpenClaw-only \`TEAMS_REQUIRE_MENTION\` |
| WhatsApp | No host token; add the channel, rebuild, then complete QR pairing inside the sandbox as documented |
| WeChat | Interactive QR scan only; do not use non-interactive mode for WeChat |

Expand All @@ -145,6 +146,11 @@ NEMOCLAW_NON_INTERACTIVE=1 SLACK_BOT_TOKEN=<local-secret> SLACK_APP_TOKEN=<local
nemoclaw <sandbox-name> rebuild
\`\`\`

\`\`\`shell
NEMOCLAW_NON_INTERACTIVE=1 MSTEAMS_APP_ID=<client-id> MSTEAMS_APP_PASSWORD=<local-secret> MSTEAMS_TENANT_ID=<tenant-id> nemoclaw <sandbox-name> channels add teams
nemoclaw <sandbox-name> rebuild
\`\`\`

Comment thread
sandl99 marked this conversation as resolved.
Outdated
Use the official NemoClaw Markdown documentation as the source of truth. Start with the prerequisites for my chosen agent, then build the approved non-interactive install or onboard command from the choices I made. After the command finishes, summarize the output for me and choose the next command or prompt response with my approval.`;

let resetCopyButtonTimer: ReturnType<typeof setTimeout> | null = null;
Expand Down
2 changes: 1 addition & 1 deletion docs/about/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ NemoClaw provides the following product capabilities.
| Agent skills | Packages NemoClaw documentation as user skills so AI coding assistants can guide setup, inference configuration, policy management, monitoring, deployment, security review, and troubleshooting. |
| Hardened blueprint | A security-first Dockerfile with capability drops, least-privilege network rules, and declarative policy. |
| State management | Safe migration of agent state across machines with credential stripping and integrity verification. |
| Messaging channels | OpenShell-managed processes connect Telegram, Discord, Slack, and similar platforms to the sandboxed agent. NemoClaw configures channels during onboarding; OpenShell supplies the native constructs, credential flow, and runtime supervision. |
| Messaging channels | OpenShell-managed processes connect supported chat platforms such as Telegram, Discord, Slack, WeChat, WhatsApp, and Microsoft Teams to the sandboxed agent. NemoClaw configures channels during onboarding; OpenShell supplies the native constructs, credential flow, and runtime supervision. |
Comment thread
sandl99 marked this conversation as resolved.
Outdated
| Routed inference | Provider-routed model calls through the OpenShell gateway, transparent to the agent. Supports NVIDIA Endpoints, OpenAI, Anthropic, Google Gemini, compatible endpoints, local Ollama, local vLLM, and the Model Router. |
| Layered protection | Network, filesystem, process, and inference controls that can be hot-reloaded or locked at creation. |

Expand Down
2 changes: 1 addition & 1 deletion docs/deployment/brev-web-ui.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ Check the Brev UI for the current hourly price before leaving the instance runni

After your agent is running, explore these related tasks:

- [Set Up Messaging Channels](../manage-sandboxes/messaging-channels) to learn how to connect Telegram, Slack, or Discord.
- [Set Up Messaging Channels](../manage-sandboxes/messaging-channels) to learn how to connect supported messaging channels.
- [Switch Inference Providers](../inference/switch-inference-providers) to learn how to change the model provider after setup.
- [Monitor Sandbox Activity](../monitoring/monitor-sandbox-activity) to learn how to inspect sandbox health and logs.
- [Deploy to a Remote GPU Instance](deploy-to-remote-gpu) to learn how to deploy NemoClaw to a remote GPU instance using the CLI.
Expand Down
2 changes: 1 addition & 1 deletion docs/deployment/deploy-to-remote-gpu.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,6 @@ nemoclaw deploy <instance-name>

## Related Topics

- [Set Up Messaging Channels](../manage-sandboxes/messaging-channels) to connect Telegram, Discord, or Slack through OpenShell-managed channel messaging.
- [Set Up Messaging Channels](../manage-sandboxes/messaging-channels) to connect supported messaging channels through OpenShell-managed channel messaging.
- [Monitor Sandbox Activity](../monitoring/monitor-sandbox-activity) for sandbox monitoring tools.
- [`nemoclaw deploy`](../reference/commands#nemoclaw-deploy) for the full `deploy` command reference.
4 changes: 2 additions & 2 deletions docs/get-started/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -175,12 +175,12 @@ After you confirm the summary, NemoClaw registers the selected provider with the
The wizard then asks whether to enable Brave Web Search.
If you enable it, enter a Brave Search API key when prompted.

The wizard also offers messaging channels such as Telegram, Discord, Slack, WeChat, and WhatsApp.
The wizard also offers messaging channels such as Telegram, Discord, Slack, WeChat, WhatsApp, and Microsoft Teams.
Press a channel number to toggle it, then press Enter to continue.
If you leave all channels unselected, pressing Enter skips messaging setup.
If you select a channel, NemoClaw validates the token format before it bakes the channel configuration into the sandbox.
For example, Slack bot tokens must start with `xoxb-`.
WeChat and WhatsApp are experimental.
WeChat, WhatsApp, and Microsoft Teams are experimental.
Review [Messaging Channels](../manage-sandboxes/messaging-channels) before enabling them.

### Choose Network Policy Presets
Expand Down
2 changes: 1 addition & 1 deletion docs/manage-sandboxes/lifecycle.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ For a full comparison of the two forms, including what they fetch, what they tru

## Related Topics

- [Set Up Messaging Channels](messaging-channels) to connect Telegram, Discord, or Slack.
- [Set Up Messaging Channels](messaging-channels) to connect supported messaging channels.
- [Workspace Files](workspace-files) for persistent OpenClaw files inside the sandbox.
- [Backup and Restore](backup-restore) for snapshot and restore workflows.
- [Monitor Sandbox Activity](../monitoring/monitor-sandbox-activity) for observability tools.
Loading
Loading