agent.yaml contract. A file written for unmute 0.8 or older
has a version: line, and unmute refuses it first:
agent.yaml, as outcomes:. Handoffs, transfers and flows sit inside the
agent that uses them.
Migrate with your coding assistant
unmute-migrate skill
holds the loop and every row below. It runs unmute validate after each
change until the package is clean.
Migrate by hand
- Read the
version:line, then delete it. - If it said
version: 1, do From version 1 first. - Do From unmute 0.8.
- Run
unmute validate .after each change. A retired key’s error names its new spelling, with the file and the line. - Run
unmute compile .for every target intargets.yaml.
agents: becomes a list, then handoffs, transfers and flows move inside the
agents.
From unmute 0.8
Structure
Renames
A step’s tools
The step keys about one tool move onto that tool’s entry in the step’stools: list.
agent.yaml
Tool files
What the caller hears and what the call remembers moved fromtools/*.yaml
to the tool’s entry in the top-level tools: list of agent.yaml.
From version 1
Do these first, then everything under From unmute 0.8. Some rows are from packages older than unmute 0.7. Skip a row the package does not have.
A local tool’s types now come from its Python function. Each parameter has a
type, a required input has no default, an
enum: becomes a Literal[...],
and the return type is a Pydantic model:
tools/salon.py
description:, interruption: and effect:, and its
handler is tools/salon.py:find_customer.
skip_when_confirmed:, non_blocking:, models:, secrets: and
knowledge: are unchanged. A webhook tool keeps input: and output: as
JSON Schema. Every key is
described in Agent configuration.