Decisions
LiveKit AgentsAddedLiveKit Agents v1.8.9 lets your voice agent decide when a caller wants a human
model = inference.DecisionModel("openai/gpt-6-luna-decisions")
response = await model.evaluate(
input=chat_ctx,
decisions={"handoff": llm.Probability("The caller requests a human.")},
)Access requires a project feature flag
LiveKit Agents v1.8.9 can ask a model a named question about the call, like whether the caller wants a human. It runs on your LiveKit credentials, batches the decisions, and your project needs a feature flag first.
Silent tool progress
LiveKit AgentsAddedBackground tools can report progress without making the agent talk
await ctx.update("checking the fare rules", silent=True)A final background-tool result can now trigger follow-up tool calls
A background tool can now log its progress silently, so the agent stays quiet while it checks the fare rules. When that tool finishes, its result can trigger another tool call.
LLM request attributes
LiveKit AgentsAddedYour llm_node can tag its own LLM request span
gen_ai.set_llm_request_attributes(
{"langfuse.observation.prompt.name": "support-agent"}
)No custom OpenTelemetry processor · scoped to that node’s calls
If you trace with Langfuse, your custom LLM node can now put a prompt name straight on its request span. That used to take a custom OpenTelemetry processor.
New providers
LiveKit AgentsAddedThunderPhone, AssemblyAI and Fish Audio join LiveKit Agents
ThunderPhone arrives as a realtime speech-to-speech plugin. AssemblyAI adds streaming TTS with word timestamps, and Fish Audio's Drama 3 voice takes free-form direction on how to sound.
Security
LiveKit AgentsSecurityTool errors stop leaking raw arguments into your logs
Tool errors now pass their raw arguments through PII filtering before they reach your logs. Simli stops logging its session token, and RoomIO stops another participant from starting a turn over chat.
Anthropic tool choice
LiveKit AgentsChangedForced tool calls turn into auto on Claude Opus 5.5 and Sonnet 5.5
Tool use is not guaranteed on these models
If you force a tool call on Claude Opus 5.5, Sonnet 5.5, Fable 5.1 or Mythos 5.1, the Anthropic plugin now sends auto. The model can then answer without calling the tool.
Changed defaults
LiveKit AgentsChangedGoogle now defaults to Gemini 3.8 Flash
Custom nodes that buffer STT must turn manual_flush off
The Google plugin now picks Gemini 3.8 Flash when you don't name a model. Speech-to-text also flushes at each turn boundary, so a custom node that buffers audio needs a setting changed.
Breaking changes
LiveKit AgentsBreakingRime, Gradium and Inworld setups can break on upgrade
Details: the LiveKit Agents v1.8.9 release notes on GitHub
Which TTS plugin does your agent run on?
Rime, Gradium and Inworld users should check before upgrading. Rime needs a named model, Gradium rejects a voice and a voice ID together, and Inworld ignores its pool settings. The release notes cover each one. Which TTS plugin does your agent run on?







