- Write speech, not text - the voice reads your formatting
- Never write a specimen value - the worst failure here
- Say the format, do not show it - put it in the type
- Name only the values this prompt needs - every placeholder is a grant
- Set the spoken language in every role - each prompt that can speak
- Avoid repeated waiting lines - one
announce:per wait - Tell the model to vary - openers callers notice
- Keep the rules load bearing - prompt rule, or code guard
Write speech, not text
The voice reads your formatting. Asterisks, bullet points, headings and emoji all get pronounced or produce strange pauses. So the model’s output has to be plain spoken sentences, and the way to get that is to say so:instructions.md
Never write a specimen value
This is the rule with the worst failure, and it looks harmless. A prompt that explains how to format a phone number and shows an example number to make the grouping clear has put a number in front of the model. A model cannot tell an example value from a real one. Before any tool has run, that example is the only number the model holds, and it may read it out to the caller as theirs. A caller who hears a confident readback says yes to it.confirm:. The compiler keeps an unconfirmed
value out of every prompt except the step that asks the caller to agree to it,
and a number typed in as an example is not a value the compiler can see. The
protection is real and a hardcoded example defeats it.
The same applies to any identifier a caller might mistake for their own: account
numbers, booking references, addresses, dates of birth.
Say the format, do not show it
A typed value has one correct spelling and the model needs to know it. Put the format in the type’s description, where it travels with the value into every schema the model sees:agent.yaml
Time is “a time of day on the 24-hour clock, like 09:30 or 17:45”
whether or not you write a description of your own.
Without it, a model sends the spelling its own prompt requires out loud. A
task told to say times as “11:30 AM” to the caller will send "11:30 AM" to a
field that wants 11:30. The finish call is refused, the model corrects
itself on the next request, and the caller hears a pause for no reason.
Say the format once, in the type. A prompt that repeats it can drift from the
validator, and then the two tell the model different things.
Name only the values this prompt needs
Saved values reach a prompt only through placeholders you write. Keep those references close to the instruction that uses them:tasks/booking.md
instructions.md
Set the spoken language in every role
Set the listening and speaking model language, then put the desired language in every agent and task prompt that can speak:language: en setting does not by itself tell the thinking
model which language to write. A phone number’s country code should not decide
the conversation language. A receiving task or agent has its own instructions,
so it needs the language rule too.
Avoid repeated waiting lines
Tools, tasks, and handoffs can have an optionalannounce: line. Omit it when
there is no useful wait to explain. If you use one, tell the model to let that
line cover the wait and avoid another “let me check” before or after it.
Check adjacent steps as well. A tool announcement followed by a task
announcement can sound like repetition even when each is short.
Tell the model to vary, and it will
Repetition is the thing callers notice first and the easiest to fix. A prompt that only says what to do produces the same opener every turn.Keep the rules load bearing
A prompt grows every time something goes wrong on a call, and an agent whose prompt has accumulated forty rules starts obeying the wrong ones. One package’s prompts reached seven hundred lines and the agent’s behaviour got worse, not better, because the two rules that mattered were buried in thirty that recorded past incidents. When you fix something with a prompt rule, check whether it can be a code guard instead. A duplicate entry, a missing field, a value in the wrong format: those are guards. They run every time, and they cost no tokens on any turn. Keep the rule in the prompt when it is genuinely a judgment call, and delete the archaeology.Where the mechanics live
Designing declared state
What to declare, and why an empty value has to read as words.
Choosing a voice
Vendors, models and the settings that change how a voice sounds.