Expression: a laugh, a sigh, warmth in the voice
Eleven v4 turbo (every managed Brosbots voice) and Eleven v3 understand short cues in square brackets and perform them instead of reading them:[laughs], [chuckles], [sighs], [exhales], [warmly], [excited],
[curious], [hesitates], [whispers]. The agent is told about them automatically,
during the call, and only when its voice supports them - an older
ElevenLabs model or another provider would read the word “chuckles” aloud.
The rules the agent gets with the list: at most one cue per turn and none
in most turns, only where a person would genuinely react that way (a short
laugh after the caller’s joke, warmer when reassuring), only from the list,
and never inside details the agent repeats back. Cues do not show in the
transcript - you hear them on the recording. Nor do they go anywhere outside
the call: they are taken out of SMS, e-mails, Google Sheets notes and rows,
CRM fields and tool arguments before anything is sent or saved.
Prompts from the wizard now carry a paragraph on natural conversation: most
replies open with a spoken reaction to what the agent just heard (“mhm”,
“uh-huh”, “sure”, “oh, great”), matched to the situation and never the same
one twice in a row; plus varied confirmations, the caller’s name once or
twice, no echoing their words. Add that paragraph to an older
agent’s prompt in the editor - an example is in
CHANGELOG_2026-10-15-ekspresja.md.
Before a tool call (a search, an order lookup, the calendar) the agent says no
reaction and no “one moment” - every agent with tools gets this rule
automatically. The tool starts at once, and the waiting line (“Let me check
that for you.” or your own wait message) is said once, while it runs. If the
model asks for a moment by itself anyway, there is no second “one moment”.
When speech synthesis fails
A single synthesis error (a dropped connection) costs one sentence: on the next one the agent connects to the provider afresh. A second error within 30 s, or an error that will not fix itself (characters used up, key rejected), ends the call instead of leaving the caller in silence: the agent plays a short apology recorded earlier in its own voice and hangs up with theservice_failure disposition.
The apology is recorded once per voice, on the first call that uses it, and
kept on the server - so it still plays when the key has just run out of
characters. This covers ElevenLabs voices (managed and on your own key);
with another provider, or when the voice fails before the apology was
recorded, the agent hangs up without it.
Soniox
Soniox is the one provider you can put on both sides of the call: transcription and voice on a single key (see Transcription).- Model -
tts-rt-v2, the current real-time model. The previoustts-rt-v1was retired on 2026-08-31 and now routes to v2 server-side. - Voice - picked from a list fetched live from your Soniox account
(
Mayaamong them); the field is the usual searchable voice picker. - Language - the language code of the text, e.g.
pl. - Speed -
0.7-1.3, where1.0is the normal rate. Values outside that range are clamped, since the API rejects them. - Natural delivery - a toggle, off by default. With it on, every line is
prefixed with a style tag (e.g.
[conversational]) and v2 performs the line instead of reading it flat: natural hesitations, warmth, emphasis. The tag goes to synthesis only - it never appears in the transcript, the model’s context, or the call summary. - Delivery style - the tag used while natural delivery is on. The list
suggests a few (
conversational,warm,calm,empathetic,excited,whispering), but the field is free text, so you can use any tag from the Soniox docs without waiting for a code change.
