Python SDK
standin-sdk, imported as standin. Plugins for ElevenLabs, Deepgram, Cartesia, LiveKit and Hermes, and an echo to test with.TypeScript SDK
@komaa/standin-sdk. Plugins for ElevenLabs, Deepgram, Cartesia, OpenAI Realtime, LiveKit and OpenClaw, and an echo to test with.Start with your framework
ElevenLabs, Deepgram, Cartesia and OpenAI need nothing beyond the SDK itself: they are reached
over an ordinary WebSocket, so installing StandIn is installing them.
Not sure yet? Run the quickstart. It answers a real Microsoft Teams call with an echo, which
proves your secret, your tunnel and your StandIn identity before any agent is involved.
How it fits together
Two halves, and you run only one of them. StandIn handles the Microsoft Teams connection. It dials your worker over one authenticated WebSocket per call. Your worker is the brain. The SDK authenticates that connection and owns the wire protocol, audio timing, sequence numbers, capacity, draining and shutdown. Your handler or framework plugin connects the call to the agent and its voice provider.The seam
A handler implements only the callbacks it needs. A missing one is a no-op, nothing inherits from anything, and the session it is handed is how it reaches the call. Here is a whole working plugin.on_caller_audio / onCallerAudio, and everything else stays out of the
file.
Architecture has the full seam, the two lanes and the wire facts.
What your agent can do on the call
The echo above is the floor, not the ceiling. Every lane below ships in both languages and has a page of its own. The cards go to the Python pages; the TypeScript SDK carries the same set, one for one.Speak and be interrupted
Realtime speech-to-speech, or
VoiceLane running your STT, agent and TTS in order with the
turn-taking, the pacing and the barge-in already written.See what the caller is showing
The camera and the screen share arrive as frames. The agent looks on demand, looks back at a
slide already gone while the call is recorded, and shows a chart or a page back on the tile,
full screen or as a picture-in-picture inset. Six looks a minute by default, so a model cannot
look in a loop.
Wear a face
Send the emotion and the viseme timeline that drives lip-sync. StandIn draws the tile; your
worker sends the hints and never has to know how.
Behave in a meeting
Silent until a wake phrase names it, then twelve seconds of follow-up so the next question need
not. Verbal interrupts, and the speaker’s name where StandIn sends unmixed audio. A 1:1 call
answers everything.
Do real work mid-call
One set of call tools declared in every provider’s own JSON, plus consulting and background work
for the jobs too slow to hold a call open.
Follow up afterwards
Key points, decisions and action items, plus a Word-openable document that appends the
transcript attributed line by line to whoever said it. And a call back to whoever asked for one,
once the answer exists.
- Two dialogue modes, both in the SDK. One realtime speech-to-speech provider doing its own turn-taking, or speech to text, then your agent, then speech, with the turn-taking, the pacing and the barge-in already written. Dialogue modes.
- Chat is a lane of its own. A pasted screenshot, a dragged-in file and a voice note land as one turn your agent can answer, voice notes transcribed by the engine you supply, and a reply can carry a picture back. Chat.
- The expensive and the sensitive are off until you switch them on. Outbound calling refuses everyone until you list who the agent may ring, then caps it at six an hour. A local file is refused until you name a root it may come from. No history of the caller’s screen is kept unless the call is being recorded. And who may call the agent is a check you write, because the handshake proves the call came from StandIn and nothing more. Security.
Two lanes
The chat lane is dialed out from the worker, so Microsoft Teams chat needs no listener, no open port and
no tunnel, and your agent never holds a Bot Framework credential.
Both lanes authenticate with your connection secret in
STANDIN_SECRET, and one key covers both.
The exception is a deployment that issued a separate chat key: put it in STANDIN_CHAT_SECRET
and the chat lane prefers it. Set one key when you were given one, two when you were given two.
Connection modes says which you have.
Next
Quickstart
Answer a real Microsoft Teams call with an echo, in about ten minutes.
Microsoft Teams setup
The Microsoft side: bot identity, app package, admin consent.
Expose your agent
The one path StandIn dials, and how to prove it is reachable.
StandIn is independent software. It is not affiliated with, endorsed by, or sponsored by Microsoft.
Microsoft and Microsoft Teams are trademarks of the Microsoft group of companies.