Skip to main content

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

Both are checked before a local process or Docker is touched.

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 direct uv 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.