> ## 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.

# unmute validate

> Check a package against its targets before you compile or run it.

```text theme={null}
$ unmute validate --help
Validate a v1 agent package against its targets.

With no package-dir, the package is the current directory, so you can cd into an agent and run this with no arguments.

Usage:
  unmute validate [package-dir] [flags]

Flags:
  -h, --help             help for validate
      --target strings   target instance name (repeatable)
```

## Usage

```sh theme={null}
unmute validate my-agent
```

One line per target: the target instance name, then its provider in
parentheses. With no `--target`, every declared target is checked. A package
that declares two prints two:

```text theme={null}
✓ livekit (livekit)
✓ pipecat (pipecat)

Warnings:
  livekit: environment variables referenced but not declared in secrets: SIP_TRUNK_HOSTNAME (connections/twilio_sip.yaml environment sip_address)
```

## Choosing targets

`--target` is repeatable, and the results come back in the order you asked for
them:

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

```text theme={null}
✓ pipecat (pipecat)
✓ livekit (livekit)
```

## Warnings and prerequisites

Warnings are printed after the results, on standard error, and the command
still exits 0. Each one names a package problem with a fix in it, for example
an environment variable your package references but never declares in
`secrets:`, or a capability a target does not enforce that your package
assumes it does.

Some routes also print a setup prerequisite block, which is work you must do
outside Unmute before a real call:

```text theme={null}
Setup prerequisites:
  pipecat: daily_dialout: Ask Daily to enable dial-out on the domain the agent's rooms belong to ...
    https://docs.pipecat.ai/pipecat-cloud/guides/telephony/daily-dial-out (verified 2026-08-12)
```

## Errors

An error names the file and the line:

```text wrap theme={null}
unmute: validate my-agent: build: agent.yaml:70: conversation.greeting.text references {{OPENAI_API_KEY}}, but secrets never flow through templates; a secret reaches a tool through its own *_env field
```

The exit code is 1 if any selected target fails.

## What it checks

The same first three compiler stages `compile` runs: load, build, and validate
against the target capability table. A package that validates cannot surprise
you at compile time.

## Where to go next

<Card title="unmute compile" icon="package" href="/reference/cli/compile">
  Write the compiled projects.
</Card>
