> ## Documentation Index
> Fetch the complete documentation index at: https://unmute.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Unmute compiles to exactly three targets. Pipecat and LiveKit are code targets: compile writes a Python project you run. SLNG is a hosted target: compile writes a deployment body and SLNG runs the agent, so it has no `unmute dev`. Those three are the only values `provider` accepts in `targets.yaml`. Deepgram and ElevenLabs appear in these docs as model vendors, which is not the same thing as a target, and `slng` is both.
> The Go structs in `internal/spec` and `internal/ir` are the schema truth. Check a field against them, or run `unmute validate`, rather than against what you remember.

# The Pipecat project

> What unmute compile writes for a Pipecat target, and how to run it without Unmute.

This page describes the generated Pipecat project and its target settings.

<Card title="Deploy to Pipecat Cloud" icon="rocket" href="/deploy/pipecat-cloud">
  Start here to create a deployment, choose its destination, supply credentials,
  and update its code or secrets.
</Card>

```sh theme={null}
unmute compile my-agent --target pipecat
```

```text theme={null}
my-agent/build/pipecat/
├── bot.py                # the agent
├── tools/                # your local handlers, copied
│   ├── __init__.py
│   └── <name>.py         # one per local tool
├── knowledge.py          # present when the package sets knowledge
├── knowledge/            # present when the package sets knowledge
│   └── <name>/           # one directory per knowledge source, its documents copied in
├── tracing.py            # present when the package sets tracing
├── dev_metrics.py        # per-turn latency for `unmute dev`, inert elsewhere
├── pyproject.toml        # pinned dependencies
├── Dockerfile
├── .dockerignore
├── compose.dev.yaml      # an optional container run; `unmute dev` uses local uv
├── pcc-deploy.toml       # Pipecat Cloud deploy manifest
├── .env.example          # exactly the variables you supply
├── README.md             # the runbook for this build
└── compile-report.json   # what the compiler decided
```

## Target fields

Write these inside `targets.<name>` in `targets.yaml`. The name is your target
instance name, used by `--target` and the `build/<name>/` output folder.

<ParamField path="provider" type="string" required>
  Use `pipecat` for this target. Omission is refused.
</ParamField>

<ParamField path="version" type="string" required>
  An exact `x.y.z` framework version from the
  [supported window](/reference/targets-yaml#framework-versions-are-exact).
  Omission and unsupported versions are refused; there is no automatic upgrade.
</ParamField>

<ParamField path="sdk_language" type="string">
  Accepts `python`. If omitted, the generated project still uses Python.
</ParamField>

<ParamField path="connection" type="string">
  Required for telephony: the stem of a file under `connections/`, using
  `cloud-websocket` or `daily-sip` with a supported carrier.
  See [connection fields](/reference/connections-yaml#all-keys).
  Omit for a browser-only package; a connection without phone use is refused.
</ParamField>

<ParamField path="deployment_region" type="string or list of strings">
  One non-empty platform region name, as a string or a one-item list. More than one region is refused.
  Unmute forwards region names as written and does not check them against the
  platform's region list. If omitted, no region is passed and platform placement
  applies. The generated manifest and secret-set instructions use the same region.
  See [deployment regions](/optimization/regional-infrastructure).
</ParamField>

<ParamField path="models" type="map of model definitions">
  Overrides keyed by existing model names from `agent.yaml`, using the
  [model fields](/reference/agent-yaml#models). Omit to use the package's models.
  An override replaces the entry, except that omitted `pace`, `endpointing_delay`,
  `semantic_endpointing`, and `prompt_suffix` carry forward. An override cannot
  author `pace` or a different `prompt_suffix`.
</ParamField>

<ParamField path="pins" type="map of strings">
  This field is accepted but Pipecat does not read it. Omit it; the framework version and model catalog determine the generated dependencies.
</ParamField>

<ParamField path="warm_instances" type="integer">
  A non-negative count of instances to keep ready. A positive value becomes min\_agents in the deploy manifest. Omitted or zero emits no minimum, so the platform can scale to zero.
</ParamField>

## bot.py

One file holds the agent: the prompts as module constants, the model
constructors, the tool wiring, and the pipeline. It imports Pipecat and your
handlers, and nothing from Unmute.

The generated startup check names missing required environment variables.
See the build's `.env.example` and [credentials reference](/reference/secrets).

Your [architecture](/build/architecture/overview) determines whether the pipeline
uses separate speech services or a model that handles audio directly.

## Run it without Unmute

```sh theme={null}
cd my-agent/build/pipecat
cp .env.example .env                      # then fill in your keys

uv run bot.py -t webrtc                   # web: open the URL it prints
```

`uv` installs the pinned dependencies on the first run.

## Dependencies are pinned

The generated `pyproject.toml` follows the providers, turn detector, and tracing
settings your package uses. The framework version comes from your target's
`version:` field. Change the package and compile again to update dependencies.

## Deploy

Follow [Deploy to Pipecat Cloud](/deploy/pipecat-cloud) for the complete sequence:
package preparation, destination selection, runtime values, first deployment,
updates, and a test interaction. The guide also covers secrets-only changes.

Use the generated `build/pipecat/` directory as the build context. Keep secret
values out of the image. Supply the runtime values listed by its `.env.example`
and runbook through the platform's secret store.

### The deployed agent's name

A package named `my-agent` with target `pipecat` deploys as `my-agent-pipecat`.
This is the package's [`name:`](/reference/agent-yaml#name) joined to its target,
and it is `agent_name` in `pcc-deploy.toml`. The secret set uses the same name.

A rename creates another agent and leaves the old one running. Follow
[Renaming the agent](/deploy/pipecat-cloud#renaming-the-agent) to move traffic
and remove the old deployment.

<Warning>
  Do not edit files in `build/`. Change the source package and compile again.
</Warning>

## Where to go next

<Columns cols={2}>
  <Card title="The LiveKit project" icon="boxes" href="/targets/livekit">
    The same agent, the other runtime.
  </Card>

  <Card title="Going live" icon="rocket" href="/deploy/going-live">
    What to do with the project you were handed.
  </Card>
</Columns>
