One mode: the browser
unmute dev ./agent compiles the package, starts the selected target’s runtime,
and opens a page you talk through. Pipecat runs under uv; LiveKit runs under
Docker Compose. That is the whole command.
There is no phone mode. A phone call reaches an agent that is deployed, so
telephony is tested after you deploy: unmute compile ./agent, deploy the
emitted project, then call the number. The emitted README.md has the setup
steps for the route you chose.
Flags in detail
string
The target instance name, exactly one. Not needed when the package declares a
single target. With several targets, a terminal gets a picker and a non
terminal gets an error listing the choices. Unlike
validate and compile,
this flag is not repeatable.string
default:"8765"
The port of the local page you talk through. Left unset, a busy default gives
way to a free port, and the printed URL names it.
string
default:"7860"
The host port the agent uses. Pipecat passes it to the local
uv process.
Compose paths receive it as UNMUTE_DEV_PORT. Left unset, a busy default
gives way to a free port.Do not open the browser. The URL is still printed.
Follow the container and agent logs on standard error. Without it, they go
only to
build/<target>/dev.log.name=value
Seed an input variable for this session. Repeatable. Only variables declared
with
source: call_start can be seeded; values are parsed against the
declared type, and an undeclared name is refused. This is the local stand in
for the dispatch payload production sends.name=value
Seed a fact the call itself carries, such as the caller’s number. Repeatable.
Only the eight facts a call carries are accepted (
from_number, to_number,
call_id, direction, carrier, connection, session_id, stream_id); a
name that is not one is refused. This is the local stand in for a caller ID.It seeds the fact, which a prefetch: entry then reads, so the run
exercises the pre-fetch, the confirmation marking and the read back. On a real
call the carrier’s own value wins: a seed only fills in what the route gave
nothing for.--source and --var are different flags for different jobs. Do not reach for
--var to seed a caller’s number: that writes the variable directly, skips the
pre-fetch, marks nothing as awaiting confirmation, and lets a local run act on a
number it never read back. The run would pass a path a real call fails.Flags that were removed
--telephony, --carrier, --public-url, --to and --no-webhook ran a
phone call on this machine. They are gone, and passing one now gets cobra’s
unknown flag error.
There is no local replacement for them. Telephony is verified on a deployed
agent: unmute compile ./agent, deploy the emitted project, follow the
Telephony setup section of its README, then call your number.
Errors it checks first
Environment
The run’s environment is your shell, then.env and .env.local in the current
directory, then .env and .env.local in the package directory. Later files
win. When the current directory is the package directory, each file is read
once.
Cleanup
Ctrl-c stops the Compose stack or the directuv process. Named data volumes
are kept.
Where to go next
unmute resources
List what your SLNG organisation offers before you write a name.
Telephony
How a phone call reaches a deployed agent.