targets.yaml says where the agent runs. Nothing about the agent’s behavior
belongs here.
targets.yaml
All keys
map
required
Target definitions selected by
--target. Accepts one or more target instance names.
Required; omission is refused.string
required
Target provider. Accepts
livekit, pipecat, slng. Required; omission is refused.string
Framework version pinned in an emitted project. Accepts exact
x.y.z in the supported
window for LiveKit and Pipecat. Required for LiveKit and Pipecat; omit on SLNG, which
emits no framework project.map of strings
LiveKit package overrides; other providers do not consume them. Accepts known LiveKit
package names to semantic versions. If omitted, use the catalog’s package pins.
string
SDK used by an emitted project. Accepts
python when written. If omitted, code targets
emit Python. Omit on SLNG, which refuses this key.string
This target’s phone route; illegal when the package has no phone use. Accepts connection
file stem. If omitted, there is no phone route; required for LiveKit or Pipecat
telephony.
string or list of strings
Deployment regions; more than one is LiveKit only. LiveKit accepts
us-east, eu-central, or ap-south,
with no duplicates. Pipecat forwards one non-empty platform region name.
Both use platform placement when omitted. SLNG requires exactly one of its
13 world parts; omission and any are refused. See the target pages for each contract.integer
Instances the platform holds ready, so a call is not waiting on a cold container.
Accepts zero or more; Pipecat only. If omitted, no minimum is emitted; Pipecat can scale
to zero.
map
Per-target model overrides. Accepts existing model entry names to model definitions. If
omitted, use the package’s model entries without overrides.
--target takes and
what names the output directory, build/<name>/. Two targets may use the same
provider with different settings, for example pipecat_twilio and
pipecat_telnyx.
That is the whole list. A target says where the agent runs and, for a phone
agent, which one connection carries the call. unmute compile compiles a
project only for livekit and pipecat today; a slng target compiles to a
deployment body instead, which Deploy to SLNG covers.
vapi and deepgram used to be target names too. Both are retired, and
unmute validate refuses either one:
Framework versions are exact
For LiveKit and Pipecat, write all three numbers, such as1.10.0. Unmute installs
exactly what the target declares. It never widens the pin or silently upgrades it
for a feature.
This Unmute release supports exactly livekit-agents 1.8.1 and
exactly pipecat-ai 1.10.0. Any other version is refused.
Deployment regions
deployment_region accepts one region or a list. Pipecat accepts exactly one;
deploying there again means another target and agent name. LiveKit emits one
lk agent create --region command per declared region. A LiveKit region is
chosen when the agent is created and cannot be changed in place.
LiveKit accepts us-east, eu-central, or ap-south and refuses other names.
Pipecat forwards its platform’s region name as written. A
model endpoint’s region is separate and stays in that model’s params or
endpoint_env. See regional infrastructure
for complete worker, STT, and TTS examples plus LiveKit media guidance.
An empty list entry or duplicate region is an error. See the
region vocabulary comparison
before choosing model gateways and worker regions.
Instances held ready
pcc-deploy.toml as [scaling] min_agents, which is why it
belongs here rather than on the deploy command. pipecat cloud deploy --min-agents 1 does the same thing for one deploy, and the manifest is rewritten
by every unmute compile, so a [scaling] block added to it by hand does not
survive.
Pipecat only. LiveKit refuses it: livekit.toml holds the project subdomain
and the agent id and nothing else, and on LiveKit Cloud a warm production replica
is a property of the billing plan rather than something the compiler can write.
See Pipecat over Twilio
for a deployed example.
Package pins
pins is a LiveKit-only escape hatch for packages already known to the LiveKit
driver. Unknown package names and versions below the catalogue floor are errors.
On a pipecat target the map validates with no error, and nothing reads it.
SLNG refuses a non-empty pins map. Leave it out on both targets.
models overrides
agent.yaml, and taking the same fields as an
entry there. Use it when a target cannot run an entry as defined, or runs its
own better.
An override replaces the entry: a field it does not set is gone, not
inherited from the base entry. Four fields are the exception. pace,
endpointing_delay, semantic_endpointing, and prompt_suffix carry forward
from the base entry whenever the override leaves them empty, because every
target running this package wants the same turn timing and the same prompt
directive. An override may replace endpointing_delay or semantic_endpointing.
It cannot author pace or a different prompt_suffix.
The phone route is not here
A target names one connection and declares nothing else about how a call reaches it:targets.yaml
connections/<name>.yaml.
Three fields used to sit on the target. Writing any of them here is refused, and
the refusal names the new home:
in the connection file this target should name instead of a file name.
Where to go next
connections/<name>.yaml
The route: transport, carrier, and the names it needs.
Targets
What each generated project looks like.