unmute_core.livekit puts the library’s tools, tasks, model call and telemetry on LiveKit Agents. Its main class, UnmuteAgent, is a LiveKit Agent, so you start it on your own AgentSession. You keep your room, your speech and your model.
Install the library and the plugins the quickstart uses:
Quickstart
agent.py
- The
AgentSpecsays what the agent is, the same way on LiveKit and Pipecat. See AgentSpec. UnmuteAgentadds the call’s state, hooks and telemetry. It takes LiveKit’s ownAgentoptions too.- The library builds no part of the pipeline. You choose the speech to text, the text to speech and the model. Here speech runs on SLNG: Soniox hears the caller and Fish Audio speaks. See SLNG.
Use your own model call
With nomodel in the spec, the agent runs on the session’s LLM. To use another provider, give the spec a ModelCall and leave llm out of the session. This is the SLNG Context Router:
- Each request carries your own router config, so the model runs on your own OpenAI key.
- The session retries the model call as it retries its own LLM. The agent closes it when the session closes.
- To keep a LiveKit plugin instead, pass
AgentSpec(model=LiveKitModel(plugin)).
Open and end the call
open_callturns the caller’s audio off, runs thebefore_callhooks and the prefetch, then greets. A failed check says the failure line and hangs up instead.- The caller’s audio comes back when the agent starts to speak, or when the greeting ends with
interruptible=False. - The session’s close ends the call. The job’s shutdown waits for the held saves, the models and the telemetry to close. The end reads
caller_hung_up,agent_endedormax_duration.
sip_call_info. See Phone calls. The events and the failure line are in The call’s life.
Add LiveKit tools and MCP
native_tools gives the main agent LiveKit tools as they are. A LiveKit MCP toolset is one:
- The main agent gets every tool you pass.
- A step gets only the toolsets its task lists, by id:
TaskSpec(native_tools=("crm",), ...).
Before you ship
- Build one
AgentSpec, oneUnmuteAgent, oneTelemetryand oneModelCallper call. A model call shared across calls is closed under the others. - A subclass that overrides
on_enterortts_nodecallssuper(), or the spans stop. - Give the spec
toolsortasks, not both. The task plan holds every tool.
Where to go next
LiveKit adapter reference
Every argument, how a call runs inside, and every rule.
Turn taking
Turn pace, interruption and idle nudges on LiveKit.
Handoffs
Move the call between agents, each with its own model and voice.
The call's life
Call start values, events, the failure line and the end.
Add one piece to your agent
Use one piece on a plain Agent.