All fields are required
LiveKit gives you an agent framework. SignalWire gives you an agent framework, phone numbers, SIP trunking, call recording, and 20 years of FreeSWITCH. Same pip install.
LiveKit handles the agent. Twilio handles the phone call. Between them sits a SIP-to-WebRTC bridge that adds 1 to 3 seconds of latency and breaks call transfers.
Twilio shows a call ringing. LiveKit shows it ended. A community forum post documented production calls dropping at one-second durations because of this divergence.
At 22,000 monthly calls, Twilio SIP trunking costs $297/month and LiveKit audio costs $563/month. That is $860/month for connectivity alone, before any AI processing.
SIP REFER returns 603 errors through the bridge. Voice-triggered transfers fail without logging an error. The fix for cold transfers took nine months.
from signalwire_agents import AgentBase
from signalwire_agents.core.function_result import SwaigFunctionResult
class SupportAgent(AgentBase):
def __init__(self):
super().__init__(name="Support Agent", route="/support")
self.prompt_add_section("Instructions",
body="You are a customer support agent. "
"Greet the caller and resolve their issue.")
self.add_language("English", "en-US", "rime.spore:mistv2")
@AgentBase.tool(name="check_order")
def check_order(self, order_id: str):
"""Check the status of a customer order.
Args:
order_id: The order ID to look up
"""
return SwaigFunctionResult(f"Order {order_id}: shipped, ETA April 2nd")
agent = SupportAgent()
agent.run()
| Capability | LiveKit | LiveKit + Twilio | SignalWire |
|---|---|---|---|
| AI agent definition | Yes | Yes | Yes |
| STT/TTS/LLM pipeline | Client-side plugins | Client-side plugins | Platform-level |
| Phone numbers | No | Via Twilio | Native, global |
| SIP trunking | Bridge only | Via Twilio | Native (FreeSWITCH) |
| Outbound calling | No | Via Twilio | Native |
| Cold transfers | Fragile (SIP 603) | Fragile through bridge | Native |
| Warm transfers | Not supported | Complex through bridge | Native |
| Call recording | Separate setup | Twilio recording | Built in |
| State management | Manual (closed as Not Planned) | Manual | Built in |
| Number porting | N/A | Via Twilio | Yes |
| IMS/carrier-grade SIP | Breaks on re-INVITE | Twilio dependent | Native (RFC 4028, RFC 3312) |
| Vendors to manage | 1 (no telephony) | 2+ | 1 |
| Deployment model | LiveKit worker process | LiveKit worker + Twilio config | Standard HTTP server |
SignalWire was founded by the creators of FreeSWITCH, the open-source SIP platform that has processed trillions of carrier minutes across nearly 20 years. The same team that built the telephony stack the industry runs on now builds the AI agent platform.
Run `pip install signalwire-agents` to get agent framework, telephony, and AI orchestration in one package.
Same AI logic, different SDK surface. AgentBase replaces VoicePipelineAgent with built-in state management and decorator-based tools.
Bring existing phone numbers to SignalWire. Global coverage, inbound and outbound, all transfer types included.
With native telephony in the platform, the separate CPaaS provider and its bridge latency are no longer needed.
The SDK surface is different, but the concepts map directly. VoicePipelineAgent becomes AgentBase. Manual JSON Schema becomes the @agent.tool decorator. The AI logic you already wrote transfers to the new framework.
LiveKit runs STT and TTS as client-side plugins in your worker process. SignalWire runs them at the platform level, inside the media stack. This eliminates round-trips and keeps interruption detection inside the audio pipeline.
No. SignalWire includes phone numbers, SIP trunking, PSTN connectivity, and all transfer types natively. There is no second provider to configure or pay.
Your agent runs as a standard HTTP server. No special networking, no UDP port ranges, no STUN/TURN configuration. The same code runs locally, in Docker, on Kubernetes, or as a serverless function.
Trusted by 2,000+ companies
Stop managing two vendors for what should be one platform.