Prerequisites
- A working OpenClaw or Hermes Agent install (the host).
- A StandIn account (standin.komaa.com) - the hosted media bridge that joins the Teams call and connects to your plugin. No worker to run. A paid plan is not required to start: the free identity gives you one BYO-bot identity with 5 minutes of call time per day included.
- Your own Microsoft Teams bot (an Azure AD app) connected to StandIn - see the Teams setup to create and upload it.
This quickstart is the standard setup: you connect your own Microsoft Teams bot and callers dial it. To try
StandIn with no Azure bot (a shared bot joins a public meeting you generate), use the
Sandbox (community tier) instead. The sandbox is metered: 5 minutes of bot time per day per room,
up to 5 new rooms per day, one bot per meeting, and a 7-day room link, with the call ending at the daily limit.
- A realtime voice provider key (for realtime mode) - e.g. OpenAI or Azure OpenAI. Streaming mode uses your host’s configured STT/TTS instead.
Install (one line)
The installer detects your OpenClaw or Hermes install, adds the matching plugin, and prompts for the settings (mode, shared secret, provider API key + model, inbound call policy). On a re-run every prompt defaults to your current configuration, so pressing Enter keeps each value. Linux / macOS / WSL--runtime, --mode, --secret, --provider,
--api-key, --model, --port) or set the matching STANDIN_* environment variables.
For secrets (
--secret, --api-key), prefer the STANDIN_SECRET / STANDIN_API_KEY environment variables over
CLI flags, so the values do not land in your shell history. The installer never transmits your secrets: they are only
written to your local plugin config.Connect your agent by pairing (recommended)
Pairing is the zero-config way to connect a subscribed identity: the installer exposes your voice endpoint, sends StandIn the exactwss://host:<voicePort> URL, and delivers the generated shared secret back
to the installer automatically. There are no ports to configure and nothing to copy by hand, which avoids
the most common first-call issue (a domain saved without its voice port, so StandIn dials the wrong port and
the bot silently never joins).
1
Run the installer and choose Pair
Run the one-line installer on the machine your agent runs on. When it asks
“Pair this agent with StandIn now?”, choose Pair. It prints an 8-character code.
2
Enter the code at standin.komaa.com/pair
Sign in at standin.komaa.com/pair and enter the code. StandIn shows you
the exact voice endpoint and port your agent proposed - confirm it and approve. If you run the official
msteams channel plugin, the installer already collected your Azure bot App ID, client secret, and
tenant from its config and sent them with the pairing, so the credential fields arrive pre-filled (the
secret is consumed server-side and never shown in the browser). Otherwise the installer prompts you for
them, or you type them here.
3
Done
The installer picks up the shared secret on its next poll and finishes. Your identity provisions and
StandIn dials your agent - you never type a voice URL, a port, or a secret.
At the approve step you choose what the pairing becomes: a paid identity (consumes a plan slot), a
free identity (your own Azure bot, 5 minutes/day included, one per account), or the sandbox
(no Azure bot at all - a shared StandIn bot joins a meeting StandIn generates; see the
Sandbox (community tier)).
Free identity vs Sandbox: which am I?
Two free ways to run StandIn - pick by whether you have an Azure bot:- You run the official
msteamschannel plugin (so you already have an Azure Bot App ID + secret; this is the normal OpenClaw/Hermes Teams journey): use a Free identity. It is the same BYO-bot setup as paid - your own bot, your own tenant, inbound calls to your own Teams identity - with 5 minutes of call time per day included, one free identity per account, held alongside any paid identities. - You have no Azure bot (you never installed the msteams channel plugin and just want to hear your agent talk): use the sandbox (community tier). A shared StandIn bot joins a public meeting StandIn generates - zero Azure setup.
First chat message ignored? The two runtimes gate DMs differently. OpenClaw drops DMs from
unapproved senders silently by default (
dmPolicy: pairing) - approve yourself once with
openclaw pairing approve msteams <CODE>. Hermes replies to an unknown sender with a
pairing code instead of silence - approve it with hermes pairing approve teams <CODE>; only
when TEAMS_ALLOWED_USERS is set are unlisted senders dropped silently. See
Troubleshooting.Verify (optional)
Prefer not to pipe a script straight into your shell? Download it, review it, then run it:- macOS / Linux
- Windows (PowerShell)
Download:Review it:Run it:
standin.komaa.com. The installer never transmits your secrets; they
are only written to your local plugin config.
Manual install
Prefer to wire it up by hand? Pick your runtime:- OpenClaw (npm)
- Hermes (pip)
1
Install
Also on ClawHub:
openclaw plugins install clawhub:@komaa/openclaw-msteams-bridge (OpenClaw falls back to
npm automatically if the ClawHub fetch fails). See the
plugin README.2
Configure
Add a Full reference → OpenClaw configuration.
msteams-voice entry to your OpenClaw config - sharedSecret must match the value you set in StandIn:3
Run + call
Start the gateway (
openclaw gateway run), then in your StandIn dashboard register your
Agent voice URL (wss://<your-public-host>:8443/voice/msteams/stream via the funnel; local bind ws://<host>:9442/...) and the matching secret. Place a Teams call to your bot.