Skip to main content
Joining a Teams call needs a media bridge that speaks Teams’ real-time audio/video. You don’t run that - it’s StandIn, a hosted service at standin.komaa.com. You subscribe (free package), connect your Teams bot, and StandIn’s managed bridge talks to your plugin. The plugin is the cross-platform brain: it hosts a WebSocket StandIn connects to, runs the dialogue + perception, and emits avatar driver cues. StandIn bridges + renders; the plugin drives. The plugin is the WebSocket server (default port :9442 on OpenClaw, :8443 on Hermes); the hosted StandIn bridge is the client that connects to it. You register your plugin’s WebSocket URL and shared secret in your StandIn dashboard - expose it so the hosted bridge can reach it (a public URL, or a tunnel such as Tailscale).

Call flow

A single call: the HMAC handshake, the recording-status gate, then the per-turn dialogue loop.

Who does what

Subscribe to StandIn at standin.komaa.com (free package) and connect your agent. There is no media server, VM, or worker for you to host.

Wire contract

The plugin and StandIn speak a fixed contract over the HMAC WebSocket - the same one both the OpenClaw and Hermes plugins implement:
The plugin’s sharedSecret must byte-match the value registered for your bot in StandIn, or the HMAC handshake fails and no call connects.

Microsoft Graph permissions

You bring your own Teams bot (BYO): register an Azure AD app + Azure Bot resource in your tenant, admin-consent the required application permissions, and point its calling webhook at StandIn (the URL is shown in your StandIn dashboard). These apply to both the OpenClaw and Hermes plugins. See the canonical Graph permissions table on the Create the Azure bot page.