Skip to content

berd-call: turn the Spokesperson on or off from the menu bar - #396

Closed
johnmatthewtennant wants to merge 4 commits into
jtennant/berd-call-output-device-changefrom
jtennant/berd-call-spokesperson-toggle
Closed

johnmatthewtennant wants to merge 4 commits into
jtennant/berd-call-output-device-changefrom
jtennant/berd-call-spokesperson-toggle

Conversation

@johnmatthewtennant

@johnmatthewtennant johnmatthewtennant commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The Spokesperson could only be chosen when a call started, with --mode expert-spokesperson. Switching between a Spokesperson call and a direct agent call meant ending the call and starting another.

  • The Berd Call menu bar has a Spokesperson checkmark. Turning it off restarts the running call's session as a direct agent call, and turning it on switches back. The call keeps its control port, stream, mute state and input-during-TTS policy, as with settings --restart.
  • With the Spokesperson on, its voice and speed sit under the checkmark, and the agents' voice, speed and input-during-TTS setting get the next section.
  • berd-call settings --spokesperson true|false does the same from the CLI, through a new spokesperson_mode control request.
  • Agents keep the voice they have now: the new session restores their live speech settings, including an OpenAI voice and model, which startup options can't express. Options only the other mode takes, like --stt-url or --realtime-url, are left out. In a --stream live call the Spokesperson comes back with --allow-direct-agent-speech, so agents keep their own voice beside it. Otherwise their speed is left out, since it would become the Spokesperson's, which can't go above 1.5×.

Related issue

None found.

Testing

  • turning_the_spokesperson_on_restarts_the_call_with_the_agents_current_voice: a direct call started with Samantha, whose live voice is now Aaron at 1.25×, restarts in Expert-Spokesperson mode with Aaron at 1.25× restored, without its --stt-url, and with --allow-direct-agent-speech for a live stream. Without a live stream, a call at 2× restarts without its speed, and the options pass startup validation. Before the fix, that 2× call kept its speed, and the replacement session failed to start.
  • turning_the_spokesperson_off_and_on_keeps_the_options_both_modes_take: off drops the realtime URL and the Spokesperson's voice, and on drops the STT URL.
  • replies_with_their_own_voice_put_the_spokespersons_beside_it: the Spokesperson's voice and speed share the checkmark's section, and the agents' get the next one.
  • menu_reflects_live_call_state: the checkmark is on in an Expert-Spokesperson call and offers to turn it off, and is off in a conventional call and offers to turn it on.
  • In a live call started from the Buzz plugin (berd-call start --stream live), with Siri en-US-F at 2×, ticking Spokesperson moved the call to --mode expert-spokesperson --allow-direct-agent-speech, with en-US-F at 2× for the agents and the Spokesperson at 1×. Unticking it moved the call back to conventional at en-US-F 2×. The call stayed up the whole time, and status showed each state.
  • The menu previously ticked the checkmark only once the new session answered. menu_reflects_live_call_state now covers a switch in progress, which shows the chosen mode at once.

johnmatthewtennant and others added 4 commits October 20, 2026 12:09
A Spokesperson checkmark in the menu bar, and `berd-call settings
--spokesperson true|false`, restart the running call's session in the
other mode. Agents keep the voice they have now, options only the
other mode takes are left out, and a `--stream live` call gets the
Spokesperson back beside the agents' own voice.

Signed-off-by: John Tennant <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
…oggle

Turning the Spokesperson on or off now restores the agents' live
speech settings in the new session, so an OpenAI voice and model chosen
during the call survive, which startup options can't express. When
agents have no voice of their own after the switch, their speed is left
out rather than becoming the Spokesperson's, whose range is narrower; a
conventional call at 2× no longer ends when the Spokesperson turns on.

Signed-off-by: John Tennant <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The menu showed the call's mode only once the restarted session
answered, so the checkmark lagged a switch by the session's startup
time. The menu now shows the chosen mode until the switch finishes, and
keeps the last status while the restarting call doesn't answer.

Signed-off-by: John Tennant <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
With the Spokesperson on, its voice and speed now sit in its menu
section, under the checkmark, and the agents' voice, speed and
input-during-TTS setting get the next section.

Signed-off-by: John Tennant <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
@johnmatthewtennant
johnmatthewtennant marked this pull request as ready for review October 20, 2026 16:45

@morgmart morgmart left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated code review

Engineering found one blocking behavior regression in the new Spokesperson-mode restart path. Supplied GitHub evidence is structurally valid and all ten check runs completed successfully at the reviewed head SHA; no local execution was performed.

Deterministic publication result: 1 blocking and 0 non-blocking inline finding(s) publishable; 0 duplicate(s) suppressed; 0 blocking screenshot-evidence requirement(s) in this review body.

Comment thread src-tauri/crates/berd-call/src/host_session.rs
@johnmatthewtennant

Copy link
Copy Markdown
Contributor Author

🤖 Combined into #397 with its commits kept, so the stack no longer needs restacking and review covers one diff. Open review findings carry over there. (AI-generated comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants