Skip to main content
OpenRTC is livekit-agents with the operational parts filled in. Keep writing standard livekit.agents.Agent subclasses. Register them on one AgentPool instead of one worker per agent, and host them all in a single process: shared prewarm loads once, every call still gets its own AgentSession, and you never inherit an OpenRTC base class. The payoff is the stuff livekit-agents leaves to you: 50+ sessions per worker, hot reload, live introspection, per-tenant isolation, and zero-downtime deploys.

Coming from livekit-agents?

See the before/after: what you delete, what you keep, and what you gain. Start here if you already run livekit-agents.

Quickstart

Install OpenRTC and run two agents through one worker in a few minutes.

What changes (and what doesn’t)

What you get on top

One worker, many agents

Register any number of standard Agent subclasses on one pool. No base class, no rewrite: your tools and node hooks stay exactly as written.

Coroutine density

Sessions run as asyncio tasks in one loop, 50+ concurrent, sharing one Silero VAD and turn detector. Process isolation is one flag away.

Smart routing

Every call resolves to one agent by job metadata, room metadata, or room-name prefix. Precedence is explicit and a typo never falls through silently.

Hot reload

Edit an agent file and live calls swap to the new code on their next turn, with zero dropped audio. A bad save rolls back on its own.

Live introspection

openrtc top gives an htop-style view of per-session memory, CPU, and event-loop blocks inside the shared worker.

Multi-tenancy

Give every client its own provider keys, session caps, and blast-radius circuit breaker, all in one pool. One noisy tenant never touches the others.

Zero-downtime deploys

Blue-green drain: the new version takes new calls while the old drains its in-flight calls to hangup, then exits. No live call is ever dropped.

How it works

The universal entrypoint, coroutine density, and shared prewarm under the hood, when you want the details.
OpenRTC owns the runtime lane: density, routing, hot reload, introspection, per-tenant isolation, and deploys. For cost, pipeline latency, and quality metrics, it emits agent_name and metadata["tenant"] on every session for voicegateway to consume, and does not duplicate that lane.