In Pipecat, an agent is a worker that runs a pipeline. A standalone voice bot is a single agent. Pipecat is a multi-agent system, so once you have one agent you can add more that coordinate over a shared bus — but let’s start with one. This page shows the whole shape; the sections that follow break down each piece (transports, speech-to-text, the LLM, text-to-speech, and more).Documentation Index
Fetch the complete documentation index at: https://docs.pipecat.ai/llms.txt
Use this file to discover all available pages before exploring further.
Agent types
Pipecat provides built-in worker types, each building on the previous:| Type | Purpose |
|---|---|
BaseWorker | Foundation for all agents. Connects to the bus, manages lifecycle, coordinates jobs. |
PipelineWorker | Extends BaseWorker to run a Pipecat pipeline. A standalone agent is a single PipelineWorker. |
LLMWorker | Extends PipelineWorker with an LLM pipeline and automatic @tool registration. |
LLMContextWorker | Extends LLMWorker with a built-in LLMContext and aggregator pair (its own or a shared context). |
UIWorker | Extends LLMContextWorker to read and drive a client GUI over the RTVI UI channel. |
If you’ve built a Pipecat bot before, you’ve already used these.
PipelineTask is a deprecated alias for PipelineWorker, and
PipelineRunner for WorkerRunner, so existing PipelineRunner().run(task)
code keeps working unchanged. New code should use PipelineWorker and
WorkerRunner directly.LLMWorker gives an agent its own LLM and tools. It’s covered in LLM Worker
and Tools; this page focuses on
building and running a single agent with a PipelineWorker.The WorkerRunner
TheWorkerRunner is the entry point. It:
- Creates and manages the message bus
- Starts agents and manages their lifecycle
- Tracks agent readiness through a registry
- Coordinates graceful shutdown
AsyncQueueBus automatically — an in-process bus backed by asyncio queues. For distributed setups, you can pass a network bus such as RedisBus or PgmqBus instead.
Agents get their bus from the runner. You never pass a bus= argument to a worker constructor; you register agents with runner.add_workers(...), which attaches them to the runner’s bus and registry. Inside a running agent you can read self.bus.
Building the agent
A single agent is onePipelineWorker wrapping a complete pipeline — the same transport -> STT -> LLM -> TTS -> transport flow you’d build for a standalone bot. The LLM runs inline in the pipeline.
Running the agent
runner.add_workers(...) attaches each agent to the runner’s bus and registry and starts it. runner.run() then blocks until one of these happens:
- The session ends normally (the agent calls
end()) - A signal is received (
SIGINT/SIGTERM, whenhandle_sigint=True) - You call
runner.cancel() - An unhandled error occurs
Configuring execution
PipelineParams controls how the agent runs — audio sample rates, metrics, and more:
Pipeline Parameters
The full list of execution parameters
Adding more agents
This is a single agent. Because Pipecat is a multi-agent system, you can run several agents that each handle part of a conversation and coordinate over the shared bus. Later in this guide you’ll see how: giving an agent its own LLM and tools, transferring control between agents with handoff, and dispatching work as jobs.What’s next
Now you’ve seen the shape of an agent. Next, let’s connect users to it, starting with session initialization.Session Initialization
Connect users and set up a session