Skip to content

Release Notes - v0.22.0

Release Date: 2026-10-29

v0.22.0 lets the meeting agent answer questions. After it announces itself, the agent stays silent until someone in the meeting says its name, then answers in a sentence or two from the recent transcript and adds the question and answer to the meeting notes. The agent's voice now defaults to Deepgram, the same provider that transcribes the meeting, so one key covers both.

Highlights

  • Answers When Addressed - "OmniAgent, what did we decide about the launch?" gets a spoken answer in the meeting, recorded under Questions Answered in the notes.
  • One Key for Speech - Deepgram is the default for both speech to text and the agent's voice. ElevenLabs and OpenAI work with the same options.
  • Correct Playback Speed - The agent's speech is requested in the phone call's own format, and its sample rate is read reliably, so the announcement no longer plays at the wrong speed.

What's New

Asking the Agent a Question

The announcement now ends by inviting questions. Address the agent by name:

[00:14:02] OmniAgent, what did we decide about the launch?
[00:14:05] OmniAgent: We moved the launch to Thursday, and Dana is updating the roadmap.

Saying the name alone also works: after "Hey OmniAgent?", the next sentence is taken as the question. The agent answers one question at a time, only after the meeting has admitted it, and ignores what it hears while its own voice may still be playing, so it cannot answer its own echo.

Speech to text may spell an unusual name differently. Spacing and case do not matter ("Omni Agent" matches "OmniAgent"); add other spellings with --answer-to:

omniagent meeting join --invite meeting.ics --ngrok --answer-to Omni

Anyone in the meeting can address the agent, so it answers with no tools: it cannot send messages, look things up, or change anything. Answers use the same LLM as the summary (--llm, --model).

Flag Description
--no-answer Do not answer when addressed by name
--answer-to Other names the agent answers to, besides --name (repeatable)

Choosing a Voice

--tts selects the agent's voice provider. With no format set, the agent asks for the call's own audio, 8 kHz mu-law, which all three providers produce:

--tts Key --voice example
deepgram (default) DEEPGRAM_API_KEY aura-2-thalia-en
elevenlabs ELEVENLABS_API_KEY an ElevenLabs voice ID
openai OPENAI_API_KEY alloy

Using the Library

  • meeting.Config.Responder takes a meeting.Responder. Without one, the agent stays silent after its announcement.
  • meeting.LLMResponder answers from the transcript with any omnillm-core chat client and sends no tools.
  • meeting.Config.Names adds other names the agent answers to.
  • meeting.Record.Exchanges holds the questions answered, and the notes render them under Questions Answered. The agent's answers also appear in the transcript with its name as the speaker.
record, err := meeting.New(meeting.Config{
    Name:        "OmniAgent",
    Transcriber: deepgram,    // an omnivoice-core stt.StreamingProvider
    Speaker:     deepgramTTS, // any omnivoice-core tts.Provider
    Responder:   meeting.LLMResponder{Client: llm, Model: "claude-sonnet-5"},
    Summarizer:  meeting.LLMSummarizer{Client: llm, Model: "claude-sonnet-5"},
}).Attend(ctx, sess)

With no SynthesisConfig.OutputFormat, the attendant requests the meeting's own audio format, so any provider works without per-provider settings.

Fixes

  • Announcement speed. The sample rate in a format name such as ulaw_8000 now takes precedence over the rate a synthesis result reports, and the requested rate is used when a result reports none. A provider reporting 44.1 kHz for 8 kHz audio made the announcement play at the wrong speed.

Limitations

  • Answers start after the speaker finishes. The agent answers once the question's sentence is transcribed, so expect a pause of a few seconds.
  • One question at a time. A question asked while the agent is answering is not answered.

The limitations listed in v0.21.0 still apply.

Upgrading

  • The agent now answers when addressed. Pass --no-answer to keep the v0.21.0 behavior, where it is silent after its announcement.
  • The default voice is Deepgram. ELEVENLABS_API_KEY is no longer needed by default; pass --tts elevenlabs to keep using ElevenLabs.

Dependencies

  • omnivoice v0.14.0, which brings omni-openai v0.8.0 (mu-law and A-law speech for phone calls), elevenlabs-go v0.14.0 (reports the sample rate of the returned speech), and telnyx-go/v4 v4.106.0.

Documentation

Full Changelog

See CHANGELOG.md for the complete list of changes.