Release Notes - v0.21.0¶
Release Date: 2026-10-28
v0.21.0 lets OmniAgent attend meetings by phone. Give
omniagent meeting join a meeting invitation and it dials in to the Zoom,
Google Meet, or Microsoft Teams meeting through Twilio or Telnyx, announces
itself, prints the transcript as the meeting goes, and writes meeting notes
with a summary, decisions, and action items when the meeting ends. Phone
dial-in works with any meeting that lists a dial-in number and needs no app
registration with the meeting platform.
Highlights¶
- Meetings by Phone -
omniagent meeting join --invite meeting.icsreads the dial-in number, meeting ID, and passcode from the invitation, calls in, enters them on the keypad, and attends. - Meeting Notes - A Markdown file with the summary, decisions, action items, and timestamped transcript, plus the full record as JSON on request.
- Reusable Attendant - The new
meetingpackage attends any OmniMeet session, so code that joins a meeting another way can use the same announcing, transcribing, and summarizing.
What's New¶
Attending a Meeting¶
Save the invitation as text or download the calendar event as an .ics file,
then:
export TWILIO_ACCOUNT_SID=AC...
export TWILIO_AUTH_TOKEN=...
export TWILIO_PHONE_NUMBER=+14155550199
export NGROK_AUTHTOKEN=...
export DEEPGRAM_API_KEY=...
export ELEVENLABS_API_KEY=...
export ANTHROPIC_API_KEY=...
omniagent meeting join --invite meeting.ics --ngrok
Joining zoom meeting https://us02web.zoom.us/j/85012345678 by phone...
[00:00:12] Okay, let's get started with the launch review.
[00:00:19] Dana, where are we on the roadmap?
Press Ctrl+C to leave early. When the meeting ends or the agent leaves,
OmniAgent prints the summary and writes the notes to meeting-<time>.md, or to
--out. --json also writes the full record.
The agent announces that it is an AI assistant transcribing the meeting when it
joins; --name and --on-behalf-of set what it says. Speech-to-text defaults
to Deepgram, the announcement to ElevenLabs, and the summary to whichever LLM
has an API key set. Use --provider telnyx with TELNYX_API_KEY,
TELNYX_CONNECTION_ID, and TELNYX_PHONE_NUMBER to call through Telnyx. See
the Attending Meetings by Phone guide and the
CLI reference.
Using the Library¶
The command is a thin layer over reusable packages:
meeting.Attendantattends an OmniMeetattendee.Session: it announces the agent once the meeting admits it, streams the meeting audio to a streaming speech-to-text provider, collects the final transcript, leaves when its context ends, and summarizes.meeting.LLMSummarizerturns a transcript into a summary, decisions, and action items with any omnillm-core chat client.meeting.Record.Markdownrenders the meeting notes.voice.NewAudioGatewaybuilds a Twilio or Telnyx gateway in audio mode, which can send keypad digits on an outbound call.
target, err := invite.ParseICS(icsFile)
if err != nil {
return err
}
sess, err := dialin.NewJoiner(gw, dialin.WithCountry("US")).Join(ctx, target)
if err != nil {
return err
}
record, err := meeting.New(meeting.Config{
Name: "OmniAgent",
Transcriber: deepgram, // an omnivoice-core stt.StreamingProvider
Speaker: elevenlabs,
Summarizer: meeting.LLMSummarizer{Client: llm, Model: "claude-sonnet-5"},
}).Attend(ctx, sess)
OmniMeet's dialin/dialintest package simulates a meeting's phone menu, so
code built on the attendant can be tested without a call.
Limitations¶
- No speaker names. Phone dial-in delivers one mixed audio stream.
- Admission is estimated. The phone line does not report when the meeting admits the caller, so the agent announces itself once the keypad sequence has had time to finish. A waiting room is not detected.
- Dial-in must be available. Some meeting plans and regions have no phone dial-in; OmniAgent reports when an invitation lists none.
- Phone menu prompts on Telnyx. Telnyx streams audio from when the call is answered, so the meeting's phone menu prompts can appear at the start of the transcript.
Upgrading¶
Nothing changes for existing configurations or commands.
Dependencies¶
omnimeet-corev0.2.0,omnivoice-corev0.18.1,omniskillv0.12.1, andgolang.org/x/netv0.62.0.omni-twiliov0.12.0 andomni-telnyxv0.7.0 are now direct dependencies, for audio-mode calls with keypad digits and hangup.- The
log15/v3replace directive is gone:log15/v3v3.2.1 provides what ngrok needs. Thego-rod/fetchupreplace stays, becausego-rod/rodv0.116.2 does not build with newer fetchup releases.
Documentation¶
- New Attending Meetings by Phone guide, linked from the README.
- CLI reference:
meeting join. - Architecture overview: the meetings-by-phone flow and OmniMeet.
- AAuth guide: the interop test kit, running the Petstore profile with the sandbox, and showing OmniAgent's messages beside the protocol walkthrough.
Full Changelog¶
See CHANGELOG.md for the complete list of changes.