Skip to main content
Use a manifest to keep new agents within your company’s approved choices. A manifest is a contract: it allows providers, models and other settings. The agent package holds the prompts and tools that implement the use case. Save the rules, copy them into an agent, check the result. On this page:

Quickstart

These complete commands create a saved contract and a new agent package. Both creation steps are interactive; finish and save each before continuing.
Terminal — project folder
Choose the company’s approved settings in the manifest editor. Omitted rules add no restriction; a new manifest starts unrestricted. The agent setup then offers choices within the saved contract. For a coding assistant, use the draft quickstart. It creates an unfinished package without prompts and includes a brief you can copy into your assistant.

1. Save the company rules

acme-corp is the local storage name. The editor separately lets you set the company name and revision. The revision starts at 1 and changes only when you edit it; it is not an Unmute or SDK version. A provider is the service the agent connects to. SLNG can serve models from different makers. Keep provider slng for those models, even when their IDs name Cartesia or Deepgram. Each role supports several providers and model IDs. Choosing Allow all models omits that provider’s allow field. Providers missing from a restricted role remain forbidden. Permission does not add target support or verify that an ID exists at the service. See Models for the field meanings. Use arrows and Enter in menus, and Tab or Shift+Tab between form fields and controls. F1 opens help; F2 switches sections. A form’s Apply keeps the entry in the draft. Only Review and save writes it to disk. See editor controls for the full workflow.

2. Create an agent from them

Use the same saved name when creating the package. These are alternatives; choose one for a new directory. The draft selects no models, targets or channels. Install the Unmute skill, then give the assistant the use case and ask it to complete the existing package under hotel-agent/manifest. The CLI copies the contract; the assistant writes the agent. The skill reads company rules before choosing bindings or tools. It uses exact approved IDs when listed, preserves the contract, and explains conflicts instead of weakening rules. Use the complete assistant brief when handing it a draft.

3. Check the package

After guided setup or the coding assistant completes the package, run:
Terminal — project folder
Validation checks the package’s own contract. Compilation also enforces it. A draft fails these checks until its required settings are filled in. Fix the agent’s choices when they violate a rule; do not remove the rule to make the check pass. A successful compile is not a runtime test. Use the browser loop for LiveKit or Pipecat. SLNG runs on its hosted platform and has no unmute dev; follow the deployment workflow.

What an agent carries

Initialization copies the selected file to hotel-agent/manifest, preserving its exact bytes. It also writes this link in agent.yaml. If attaching a contract by hand, merge this single field into the existing package; it is not a complete agent.yaml:
agent.yaml
Commit both files. Validation and compilation work on another computer or in CI without the saved library. Changing the library or its default never updates an existing package automatically. A root manifest requires its link. A link requires that file. Only the literal link manifest: manifest is supported; no parent paths or remote URLs. Packages with neither file nor link continue to work without a company contract.

Example manifest

This is a complete contract file, not an agent package. Use it as a starting point for company review; replace the example approvals with your own.
manifest

Every key

Only manifest and version are required. Add the rule blocks you need. Omitting a rule adds no restriction. An explicit empty allowlist permits nothing. Lists cannot contain null, blank strings or duplicate entries, and unknown keys are refused.

Identity

string
required
The name of the organization this manifest describes, such as acme-corp. Any non-blank text is accepted. This is separate from the local name chosen with unmute manifest create, which identifies the saved file.
integer
required
The revision of this manifest: any integer greater than or equal to 1. Increase it when you publish changed rules. It does not select the agent schema, an Unmute release, or a LiveKit or Pipecat SDK version.

Models

A provider is the service the agent connects to. A model maker creates the model that service offers. For models served through SLNG, keep the provider as slng, even when their IDs name Deepgram, Cartesia or Soniox. Each role can allow several providers, and each provider can allow several models. Add provider opens the service picker, then offers Allow all models or Add model ID. Adding a model opens the input directly. Use Add model ID again for more models, or Add provider for another service. Completed entries stay in your draft as you move between screens; no extra Apply step is needed. The guided editor does not offer Allow nothing for models. Existing empty model rules remain visible and must be repaired before saving. Add models, choose Allow all models for a provider, or choose No restriction for the role. The YAML format and --editor still support explicitly empty lists.
object
Restricts model choices by role. Its only keys are listen, speak and think. Each role contains a list of provider entries. Agents still define their own model profiles; the manifest approves exact provider/model pairs. Turn models are outside these rules.
object[]
Allowed speech-to-text (STT) providers and models. Omit it for no STT restriction, or write listen: [] to allow no STT models. When present, providers missing from this list are forbidden for this role. A provider may appear only once.
string
required
The exact provider value used by the agent’s listen profile, such as slng or deepgram. See STT providers for supported integrations on each target. Provider names are strings, not a fixed manifest enum.
string[]
Omit this field to allow all current and future models from this provider. Other providers remain forbidden unless listed for the role. Exact model IDs approved for this provider, such as deepgram/nova:3 with slng. Model IDs are provider-defined strings. No wildcards or prefix matching; case must match. An empty list approves none of this provider’s STT models. There is no default model.
object[]
Allowed text-to-speech (TTS) providers and models. Omit it for no TTS restriction, or write speak: [] to allow no TTS models. Providers not listed are forbidden for this role. A provider may appear only once.
string
required
The exact provider value used by the agent’s speak profile, such as slng or elevenlabs. See TTS providers for target support. Provider names are strings, not a fixed manifest enum.
string[]
Omit this field to allow all current and future models from this provider. Other providers remain forbidden unless listed for the role. Exact model IDs approved for this provider, such as deepgram/aura:2 with slng. IDs are provider-defined and case-sensitive; wildcards are not supported. An empty list approves no models. This does not restrict voice IDs or supply a default voice.
object[]
Allowed language-model (LLM) providers and models. Omit it for no LLM restriction, or write think: [] to allow no LLM models. Providers not listed are forbidden for this role. A provider may appear only once.
string
required
The exact provider value used by the agent’s think profile, such as openai or slng. See LLM providers for target support. Match the configured provider, including when it routes to another service. Provider names are strings, not a fixed manifest enum.
string[]
Omit this field to allow all current and future models from this provider. Other providers remain forbidden unless listed for the role. Exact model IDs approved for this provider, such as gpt-5.6-terra with openai. IDs are provider-defined and case-sensitive. No wildcards or automatic model choice. An empty list approves no models.

Languages

object
Limits configured STT and TTS languages. Its only key is allow. Omitting this block adds no language restriction. It changes no LLM prompt and does not guarantee the language of every spoken word.
string[]
required
Language tags such as en, es or en-US. Values are not a fixed enum: the accepted shape is 2 to 8 letters, followed by zero or more hyphen-separated groups of 1 to 8 letters or digits. The speech integration must also support the configured tag.Matching ignores case, but uses the whole tag: en does not approve en-US. No language is chosen by omission. An empty list forbids all speech languages, including an unset one. For a nonempty list, automatic or hidden language settings that cannot be checked produce a warning.

Regions

object
Limits model-service and deployment regions separately. Its only keys are models and deployments. Neither list sets the other location.
object[]
Region rules for model services, matched by role and provider. Each pair may appear only once. An omitted or empty rule list adds no model region restrictions; a rule’s own empty allow list forbids that pair. Providers and roles with no matching row have no added region rule.
listen | speak | think
required
Exactly one of listen (STT), speak (TTS), or think (LLM). There is no default and no turn option.
string
required
The exact configured model provider this row governs, such as slng or aws. This is a model provider, not the deployment target. It must be nonempty; provider names are not a fixed manifest enum.
string[]
required
Exact native region names for the matched service. There are no shared EU aliases, wildcards or automatic geographic conversions. Matching is case-sensitive. An empty list forbids this provider/role even when its region is unknown. A nonempty list warns when the region cannot be checked.The compiler currently reads these settings:Other providers, unsupported settings and endpoints supplied through environment variables do not establish a verifiable model region. A checked gateway setting is not proof of the upstream processing location.
object[]
Region rules matched by deployment provider. Each provider may appear only once. Omitting this list or a provider’s row adds no region restriction for that provider.
livekit | pipecat | slng
required
Exactly one of livekit, pipecat, or slng. Match the target’s provider, not its instance name. There is no default.
string[]
required
Exact native values permitted in the target’s deployment_region. If the target declares several regions, every region must be allowed. An empty list forbids deployment on this provider, including when no region is declared. With a nonempty list, an omitted region warns.LiveKit and Pipecat use their platform’s region strings; Unmute does not maintain a closed list. SLNG uses the same 13 regions as its model services: us-east, us-west, br, eu-west, eu-north, gb, za, il, jp, sg, id, in, au. The retired any value is refused. See Targets.

Deployment targets

object
Restricts where the package can be compiled or deployed. Its only key is allow. Omitting it adds no target restriction.
string[]
required
Any subset of livekit, pipecat, and slng. These are deployment providers, not target instance names. An empty list allows no target. Every target declared in the package is checked, even when a command selects only one of them.

Tools

object
Restricts tools by kind and identity. The available keys are kinds, names, builtin, and slng. Every applicable rule must pass. Permission does not create or attach a tool, and it does not add target support for that tool.
object
Restricts execution kinds. Its only key is allow. Omit it to leave execution kinds unrestricted by the manifest.
string[]
required
Any subset of these eight values:An empty list allows no tools. The ordinary target capability checks still apply; listing a gated kind here does not enable it.
object
Restricts package tool names. Its only key is allow. Omission adds no package-name restriction.
string[]
required
Exact names from the package’s tools list: for example, check_booking means tools/check_booking.yaml. Names are user-defined strings, with no wildcard matching. An empty list permits no package tools.
object
Restricts builtin IDs in addition to any kind or package-name rules. Its only key is allow. This rule applies only to builtin tools.
string[]
required
Exact builtin IDs. Currently end_call is supported on all three targets; send_sms is supported only on SLNG. The manifest accepts nonempty ID strings, while tool validation checks whether the ID and target are supported. An empty list forbids builtin tools.
object
Restricts the identity of tools hosted on SLNG. Its only key is allow. This rule applies to a slng: tool on any target that uses it.
string[]
required
Exact hosted tool names from slng:, which may differ from the local tool filename. Names are organization-defined strings. There is no wildcard or automatic discovery. The legacy pinned form uses the local package tool name. An empty list forbids SLNG-hosted tools.

Tracing

object
Restricts the tracing provider when tracing is enabled. Its only key is allow. Tracing stays optional; this block does not turn it on or require it.
string[]
required
Any subset of langfuse and coval. An empty list requires tracing to remain disabled. Omitting this block adds no provider restriction. Target support and credential requirements still apply.

Advanced

Choose a different default

The first saved manifest becomes the default. Later creations offer to change it. Plain unmute init uses that default and opens guided setup. Without a saved default, it uses the ordinary creation flow. This complete command changes the default for future agents:
Terminal — select a saved default
Use --manifest acme-corp for one agent without changing the default. Use --from-manifest to open a picker instead; it takes no name. A broken default is an error unless you select a saved manifest directly. Draft creation always requires an explicit agent name and --manifest.

Edit the saved source

Saved contracts live under the operating system’s user config directory at unmute/manifests/<name>/manifest. The CLI prints the path after saving. This complete command reopens the example contract:
Terminal — edit the saved contract
Saving replaces comments and formatting with clean YAML and first keeps an exact backup beside the original. Both paths are printed. Unchanged edits preserve the original bytes and create no backup. Revisions stay manual. Use --editor only when you want external YAML editing or need to repair an invalid saved file. See external editor setup.

Update an existing agent’s contract

When the contract owner approves a new revision, replace the package’s manifest with that approved file, then validate and compile again. Keep its manifest: manifest link. Neither editing the library nor changing the default performs this replacement for you.

Validation and limits

The contract covers the whole declared package, including unused profiles, fallbacks and every target override. Selecting one target for compilation does not hide a violation in another target. Known violations fail before output is written. Automatic or hidden language and region values that cannot be checked produce warnings. Read those warnings; a successful compile does not prove data residency. The compile report records the contract name, revision and verification warnings. Existing target capability checks still apply. Permission in a manifest does not add provider support or make an unsupported setting work. The creation console cannot collect custom model endpoint settings or a SLNG Context Router upstream. It excludes those model choices. If your contract allows only such bindings, use --manifest <name> --draft and complete the package by hand or with a coding assistant. Validation and compilation still enforce the same rules. The contract checks declared settings, not arbitrary local tool code, the provider’s actual processing location or tracing delivery. It is not signed and does not prevent somebody deleting both file and link. Pronunciation dictionaries, compliance libraries, placement, URL restrictions, dependency rules and prefetch limits are not part of this version.

Troubleshooting

Where to go next

Create the agent

Hand a manifest-backed draft to your coding assistant.

Edit company rules

Navigate the editor, save changes and manage backups.

Install the skill

Give the assistant Unmute’s authoring and validation workflow.

Read validation results

Fix package errors before compiling.