11.1.11 runs every kind of Agent Studio agent, including a
custom harness that puts your own code in charge of what the agent says,
and realtime voice agents on Rime Prism, Deepgram Voice Agent and Ultravox. It adds
AssemblyAI as a text-to-speech vendor and ships
Paxa Labs text-to-speech and speech-to-text. The agent verb can open a call with
exact words instead of an LLM-generated greeting, and its turn_end event now covers the
greeting turn and says when each side began speaking. Barge-in fades the agent’s audio out
instead of cutting it off with a click. The release also sends webhooks over HTTP/1.1 again,
backs off from webhook URLs that keep answering 404, and reports why a streaming TTS vendor
refused the text.
New Features & Improvements
- Custom harness agents — the agent verb can be driven by a service you run
instead of an LLM (
llm.vendor: harness). jambonz opens one WebSocket per call to your harness, sends the caller’s words one turn at a time and speaks the replies it streams back, keeping its own speech recognition, turn-taking, barge-in and voice. The harness can run the agent’s tools, transfer the call, hang up and record its own turn data, and receives the caller’s keypresses asdtmfevents. Build one in Agent Studio; see the quickstart and protocol reference. - More realtime voice and connected agents — the llm verb adds
Rime Prism (
rime) as a speech-to-speech vendor, and Deepgram Voice Agent, ElevenLabs Agents, Ultravox, OpenAI Realtime and GPT-Live take their keys from the account’s own speech-to-speech credentials (portal: LLM Services, Speech-to-speech tab) when the verb carries no key. These agents now report turns asuser_transcript,llm_response,user_interruptionandturn_endevents when the verb asks for them, and run warm transfers: one at a time, with the parked caller muted to the model and the model’s answer heard if the transfer fails. The dialogflow verb can name the account’s Dialogflow CES credential by label instead of carrying a service account. See Realtime voice API and Connected agent. - AssemblyAI text-to-speech —
assemblyai, already a speech-to-text vendor, is now available for text-to-speech too, with streaming TTS, word-level alignment and regional endpoints set by the credential. See AssemblyAI. - Paxa Labs — text-to-speech and realtime speech-to-text for Thai, English and Mandarin
Chinese from one
paxacredential, as described in the October 28 entry. See Paxa Labs. - Agent greeting as text — the agent verb’s
greetingmay now be a string: the agent speaks those exact words as its first turn, with no LLM call. The caller can interrupt it, and the history records it as the agent’s opening, as with a generated greeting.trueandfalsework as before. - Agent
turn_endtiming —turn_endis now sent for the greeting turn too (greeting: true, emptytranscript), so a listener sees every turn the agent spoke. Eachturn_endalso carriescaller_started_atandagent_started_at(epoch ms), so a turn that ends late (for example one held open by a transfer) can be placed where it happened. - Smoother barge-in — when the caller interrupts, the agent’s audio fades out over 60 ms
instead of stopping between two frames, which callers heard as a click. This applies to
streaming TTS, speech-to-speech, Dialogflow CES streaming, audio playout from a
listen stream, and stopping
playorsay. - Deepgram Multilingual — a Deepgram speech credential now lists the Multilingual
(
multi) language for the nova-2 and nova-3 models in the portal and API. Deepgram’s model list never includes it, although both models accept it.
Bug Fixes
- Webhooks over HTTP/1.1 — since the HTTP client upgrade in an earlier release, HTTPS
webhooks (for example anything behind Cloudflare) were sent over HTTP/2, where a request
could sit on a dead connection until it failed with
Headers Timeout Error. Webhook requests use HTTP/1.1 again. WebSocket applications and vendor traffic are unaffected. - Webhook URLs that keep answering 404 — after a URL answers 404 three times in a row, requests to it fail at once with the same 404 for the next 60 seconds instead of being sent; any other answer resets the count. Skipped requests are logged once per account per minute and do not raise alerts. Timeouts and 5xx responses are handled as before.
- Streaming TTS refusals — when a streaming TTS vendor refused the text mid-stream (for
example Rime with “Invalid speaker”), the agent went silent and nothing said why. The
vendor’s reason is now logged, raised as a
TTS_FAILUREalert, and sent to the agent’s eventHook astts_error. - Barge-in during long replies — a barge-in during a long Dialogflow CES or speech-to-speech reply could wait until the queued audio had played out, and a barge-in during streaming TTS could let the rest of a cancelled reply play. Both now stop at once.
- ElevenLabs agents — an ElevenLabs agent that speaks at a different rate from the one
it listens at (for example
pcm_16000in,pcm_24000out) played slow and low-pitched. Its audio now plays at the agent’s own output rate. - OpenAI Realtime tool results — a tool result sent back as a plain
{result}or{error}object, rather than aconversation.item.create, was dropped, leaving the caller in silence. It is now sent to the model as the function call’s output. - Refused websocket applications — when the verbs a websocket app returned for
session:newfailed validation, the call was declined and the socket closed with no reason. jambonz now sends ajambonz:errormessage with the validation error before closing. - Out-of-dialog REFER — drachtio 10.1.12 passes an out-of-dialog REFER (RFC 7647) to the application instead of discarding it, and no longer leaks a dialog entry for each subscription that ends with a terminating NOTIFY.
- Security — the HTTP client library (undici) is updated to 8.12.3 for its recent security releases.
Component Versions
Availability
jambonz.cloud - October 30, 2026