NiadraAgent (or the NiadraMemory mixin on your own Agent class); in Node, NiadraAgent and NiadraMemory from @niadra/sdk/livekit.
Install
@niadra/sdk 0.3.0. That version is ready on the repository’s main branch and reaches npm when it is published; until then the npm package is 0.1.1, without the integration subpaths.
The five primitives
conversation_for(niadra, participant, room=...) opens the conversation with the SIP number as subject and the call id (or the room name) as conversation_id; in Node, sipSubject() and sipConversationId() do the same.
Minimal example
examples/livekit_agent.py and examples/livekit.ts in the SDK repositories. Run it with NIADRA_API_KEY and your LiveKit credentials; to try it without Niadra’s cloud, start niadra-mock and set NIADRA_BASE_URL=http://127.0.0.1:8765.
Agent memory
Withagent_memory=True (or {"write": True, "max_tokens": 300, "tags": [...]}), the agent’s own notes go right before the customer’s context, in the same system message, and search_agent_memory (and remember, with write) join the tools. See Agent memory.
Limits
- Nothing here fails a turn: a context that does not arrive within 150 ms is left out, and a failure to record is logged without content.
- The STIR/SHAKEN attestation is not among LiveKit’s
sip.*attributes; without the header mapping, the read is at V0 and carries only what the policy releases at that level. - In Python, the
livekitandopenai-agentsextras pin incompatible versions of a shared dependency; install one per environment. - Tested against
livekit-agents1.8.3 and@livekit/agents1.9.0, with the LLM, STT and TTS replaced by fakes and Niadra on the emulator, in each SDK’s CI.
Next steps
Voice agents
context before hello, network attestation and handoff.
Pipecat
the same design, as one frame processor.

