← All posts

Optional Speech: Gemini Live Voice for the Web

An opt-in speech layer using Gemini Live. The model gains a keating_voice tool for short utterances while reasoning stays in the normal text loop.

Keating now has an optional speech layer. The teacher still thinks, verifies, plans, and steers through the normal model/tool loop, but it can hand short learner-facing moments to a dedicated voice tool when speech is useful.

How It Works

  • Opt-in by design: Speech stays disabled until you turn it on. In the web app, use the speaker button in the chat header.
  • Voice tool: When enabled, the model gets keating_voice for short questions, redirects, recaps, and encouragement.
  • Gemini Live path: The browser route uses gemini-3.1-flash-live-preview with the Google API key stored in Settings.
  • Normal model remains in charge: Reasoning, verification, and correction still happen through the regular teaching tools instead of being hidden inside the voice layer.

Shell Support

The CLI config now includes a disabled-by-default speech block. When enabled, the Pi extension registers keating_voice and emits transcript-safe voice tags:

[voice voice=conversational tags=question,verify pace=normal affect=curious] What would you expect to happen next?

The first shell version is provider-neutral and tag-based. The web version is the first audio-backed path.